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(() => GameManifest.Parse(json)); } } }