feat: support CNBETAWin4.5.53

This commit is contained in:
capyb2222 committed 2026-09-07 22:19:20 -07:00
1 parent b87874f2fe
commit e344e699de
10 files changed
+273 -40

No files matched your search

+78
View File
@@ -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);
}
}