feat: support CNBETAWin4.5.53
This commit is contained in:
1 parent
b87874f2fe
commit
e344e699de
10 files changed
+273
-40
No files matched your search
@@ -0,0 +1,78 @@
|
||||
using CapySR.Common;
|
||||
using Xunit;
|
||||
|
||||
namespace CapySR.Tests;
|
||||
|
||||
// A beta dispatch stops answering once its window closes, so a client that updated past
|
||||
// everything in config/versions.json has to be served from the closest build on hand.
|
||||
public class GameVersionTests
|
||||
{
|
||||
private static readonly string[] Cached =
|
||||
[
|
||||
"OSBETAWin4.4.51",
|
||||
"CNBETAWin4.4.53",
|
||||
"CNBETAWin4.5.51",
|
||||
"CNBETAWin4.5.52",
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void VersionsParseIntoAChannelAndNumbers()
|
||||
{
|
||||
Assert.True(GameVersion.TryParse("CNBETAWin4.5.53", out var version));
|
||||
Assert.Equal("CNBETAWin", version.Channel);
|
||||
Assert.Equal([4, 5, 53], version.Parts);
|
||||
|
||||
Assert.False(GameVersion.TryParse("nonsense", out _));
|
||||
Assert.False(GameVersion.TryParse("CNBETAWin4.5.x", out _));
|
||||
Assert.False(GameVersion.TryParse("", out _));
|
||||
Assert.False(GameVersion.TryParse(null, out _));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("CNBETAWin4.5.52", "CNBETAWin4.5.53", -1)]
|
||||
[InlineData("CNBETAWin4.5.53", "CNBETAWin4.5.52", 1)]
|
||||
[InlineData("CNBETAWin4.5.53", "CNBETAWin4.5.53", 0)]
|
||||
[InlineData("CNBETAWin4.9.0", "CNBETAWin4.10.0", -1)]
|
||||
// a missing trailing part counts as zero, so 4.5 and 4.5.0 are the same build
|
||||
[InlineData("CNBETAWin4.5", "CNBETAWin4.5.0", 0)]
|
||||
public void VersionsCompareNumerically(string left, string right, int expected)
|
||||
{
|
||||
Assert.True(GameVersion.TryParse(left, out var a));
|
||||
Assert.True(GameVersion.TryParse(right, out var b));
|
||||
Assert.Equal(expected, Math.Sign(a.CompareTo(b)));
|
||||
}
|
||||
|
||||
// the case that matters: the client updated past anything the dispatch will still serve
|
||||
[Fact]
|
||||
public void ANewerClientBorrowsTheClosestOlderBuild()
|
||||
{
|
||||
Assert.True(GameVersion.TryFindNearest(Cached, "CNBETAWin4.5.53", out var nearest));
|
||||
Assert.Equal("CNBETAWin4.5.52", nearest);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ChannelsNeverBorrowFromEachOther()
|
||||
{
|
||||
Assert.True(GameVersion.TryFindNearest(Cached, "OSBETAWin4.9.99", out var os));
|
||||
Assert.Equal("OSBETAWin4.4.51", os);
|
||||
|
||||
Assert.False(GameVersion.TryFindNearest(Cached, "CNPRODWin4.5.53", out _));
|
||||
Assert.False(GameVersion.TryFindNearest(Cached, "nonsense", out _));
|
||||
Assert.False(GameVersion.TryFindNearest([], "CNBETAWin4.5.53", out _));
|
||||
}
|
||||
|
||||
// nothing older to fall back on, so the newest known build beats having no urls at all
|
||||
[Fact]
|
||||
public void AnOlderClientStillGetsUrls()
|
||||
{
|
||||
Assert.True(GameVersion.TryFindNearest(Cached, "CNBETAWin3.0.0", out var nearest));
|
||||
Assert.Equal("CNBETAWin4.5.52", nearest);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AnExactMatchIsPreferredOverEverythingElse()
|
||||
{
|
||||
Assert.True(GameVersion.TryFindNearest(Cached, "CNBETAWin4.5.51", out var nearest));
|
||||
Assert.Equal("CNBETAWin4.5.51", nearest);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user