51 lines
1.9 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|