using Xunit; using XWorld.PublishTool; namespace XWorld.PublishTool.Tests { public class GameSpecJsonTests { [Fact] public void Parse_LowercaseKeys_FillsAllFields() { // Editor 侧 JsonUtility 输出小写字段名;解析须大小写不敏感、含 fields string json = @"{ ""gameId"": ""rps"", ""version"": 3, ""minFrameworkVersion"": 1, ""playerCount"": 2, ""tickRateHz"": 10, ""serverAssembly"": ""RPS.Server.dll"", ""serverEntryType"": ""RPS.Server.RpsServerRoom"", ""coreDll"": ""RPS.Core.dll"", ""clientDll"": ""RPS.Client.dll"", ""clientEntryType"": ""RPS.Client.RpsGameClient"", ""codeAb"": ""code.unity3d"", ""assets"": [""res.unity3d""] }"; var s = GameSpecJson.Parse(json); Assert.Equal("rps", s.GameId); Assert.Equal(3, s.Version); Assert.Equal(1, s.MinFrameworkVersion); Assert.Equal(2, s.PlayerCount); Assert.Equal(10, s.TickRateHz); Assert.Equal("RPS.Server.dll", s.ServerAssembly); Assert.Equal("RPS.Server.RpsServerRoom", s.ServerEntryType); Assert.Equal("RPS.Core.dll", s.CoreDll); Assert.Equal("RPS.Client.dll", s.ClientDll); Assert.Equal("RPS.Client.RpsGameClient", s.ClientEntryType); Assert.Equal("code.unity3d", s.CodeAb); Assert.Single(s.Assets); Assert.Equal("res.unity3d", s.Assets[0]); } [Fact] public void Parse_MissingAssets_YieldsEmptyList_NotNull() { var s = GameSpecJson.Parse(@"{""gameId"":""x"",""version"":1,""codeAb"":""code.unity3d""}"); Assert.NotNull(s.Assets); Assert.Empty(s.Assets); } } }