Files
2026-07-10 10:24:29 +08:00

51 lines
1.9 KiB
C#

using System.IO;
using Xunit;
using XWorld.Server.Host;
namespace XWorld.Server.Host.Tests
{
public class GameManifestTests
{
private const string Valid = @"{
""gameId"": ""rps"",
""version"": 2,
""serverAssembly"": ""RPS.Server.dll"",
""serverEntryType"": ""RPS.Server.RpsServerRoom"",
""minFrameworkVersion"": 1,
""playerCount"": 2,
""tickRateHz"": 10
}";
[Fact]
public void Parse_Valid_ReadsAllFields()
{
var m = GameManifest.Parse(Valid);
Assert.Equal("rps", m.GameId);
Assert.Equal(2, m.Version);
Assert.Equal("RPS.Server.dll", m.ServerAssembly);
Assert.Equal("RPS.Server.RpsServerRoom", m.ServerEntryType);
Assert.Equal(1, m.MinFrameworkVersion);
Assert.Equal(2, m.PlayerCount);
Assert.Equal(10, m.TickRateHz);
}
[Fact]
public void Parse_CaseInsensitive_FieldNames()
{
var m = GameManifest.Parse(@"{""GameId"":""x"",""Version"":1,""ServerAssembly"":""X.dll"",""ServerEntryType"":""X.Y""}");
Assert.Equal("x", m.GameId);
Assert.Equal(1, m.Version);
}
[Theory]
[InlineData(@"{""version"":1,""serverEntryType"":""a"",""serverAssembly"":""a.dll""}")] // 缺 gameId
[InlineData(@"{""gameId"":""x"",""version"":1,""serverAssembly"":""a.dll""}")] // 缺 entryType
[InlineData(@"{""gameId"":""x"",""version"":0,""serverEntryType"":""a"",""serverAssembly"":""a.dll""}")] // version 非正
[InlineData(@"{""gameId"":""x"",""version"":1,""serverEntryType"":""a""}")] // 缺 serverAssembly
public void Parse_Invalid_Throws(string json)
{
Assert.Throws<InvalidDataException>(() => GameManifest.Parse(json));
}
}
}