Skip to content

Commit 79a7c46

Browse files
committed
test(MetadataFile): Arguments
1 parent b3b4350 commit 79a7c46

File tree

3 files changed

+188
-4
lines changed

3 files changed

+188
-4
lines changed

PCL2.Neo.Tests/Minecraft/Models/MetadataFileTest.cs

Lines changed: 181 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace PCL2.Neo.Tests.Minecraft.Models;
66
public class MetadataFileTest
77
{
88
[Test]
9-
public void Test()
9+
public void MainParsingTest()
1010
{
1111
foreach (var metadataFilePath in Directory.EnumerateFiles("./MCMetadataFiles"))
1212
{
@@ -76,4 +76,184 @@ public void Test()
7676
Assert.That(meta.Type, Is.Not.EqualTo(MetadataFile.ReleaseTypeEnum.Unknown));
7777
}
7878
}
79+
80+
[Test]
81+
public void ArgumentsParsingTest()
82+
{
83+
object[] testGameArgs =
84+
[
85+
"--username",
86+
"${auth_player_name}",
87+
"--version",
88+
"${version_name}",
89+
"--gameDir",
90+
"${game_directory}",
91+
"--assetsDir",
92+
"${assets_root}",
93+
"--assetIndex",
94+
"${assets_index_name}",
95+
"--uuid",
96+
"${auth_uuid}",
97+
"--accessToken",
98+
"${auth_access_token}",
99+
"--clientId",
100+
"${clientid}",
101+
"--xuid",
102+
"${auth_xuid}",
103+
"--userType",
104+
"${user_type}",
105+
"--versionType",
106+
"${version_type}",
107+
new MetadataFile.ConditionalArg
108+
{
109+
Rules = [
110+
new MetadataFile.Rule
111+
{
112+
Action = MetadataFile.Rule.ActionEnum.Allow,
113+
Features = new Dictionary<string, bool>
114+
{
115+
["is_demo_user"] = true
116+
}
117+
}
118+
],
119+
Value = ["--demo"]
120+
},
121+
new MetadataFile.ConditionalArg
122+
{
123+
Rules = [
124+
new MetadataFile.Rule
125+
{
126+
Action = MetadataFile.Rule.ActionEnum.Allow,
127+
Features = new Dictionary<string, bool>
128+
{
129+
["has_custom_resolution"] = true
130+
}
131+
}
132+
],
133+
Value =
134+
[
135+
"--width",
136+
"${resolution_width}",
137+
"--height",
138+
"${resolution_height}"
139+
]
140+
},
141+
new MetadataFile.ConditionalArg
142+
{
143+
Rules = [
144+
new MetadataFile.Rule
145+
{
146+
Action = MetadataFile.Rule.ActionEnum.Allow,
147+
Features = new Dictionary<string, bool>
148+
{
149+
["has_quick_plays_support"] = true
150+
}
151+
}
152+
],
153+
Value =
154+
[
155+
"--quickPlayPath",
156+
"${quickPlayPath}"
157+
]
158+
},
159+
new MetadataFile.ConditionalArg
160+
{
161+
Rules = [
162+
new MetadataFile.Rule
163+
{
164+
Action = MetadataFile.Rule.ActionEnum.Allow,
165+
Features = new Dictionary<string, bool>
166+
{
167+
["is_quick_play_singleplayer"] = true
168+
}
169+
}
170+
],
171+
Value =
172+
[
173+
"--quickPlaySingleplayer",
174+
"${quickPlaySingleplayer}"
175+
]
176+
},
177+
new MetadataFile.ConditionalArg
178+
{
179+
Rules = [
180+
new MetadataFile.Rule
181+
{
182+
Action = MetadataFile.Rule.ActionEnum.Allow,
183+
Features = new Dictionary<string, bool>
184+
{
185+
["is_quick_play_multiplayer"] = true
186+
}
187+
}
188+
],
189+
Value =
190+
[
191+
"--quickPlayMultiplayer",
192+
"${quickPlayMultiplayer}"
193+
]
194+
},
195+
new MetadataFile.ConditionalArg
196+
{
197+
Rules = [
198+
new MetadataFile.Rule
199+
{
200+
Action = MetadataFile.Rule.ActionEnum.Allow,
201+
Features = new Dictionary<string, bool>
202+
{
203+
["is_quick_play_realms"] = true
204+
}
205+
}
206+
],
207+
Value =
208+
[
209+
"--quickPlayRealms",
210+
"${quickPlayRealms}"
211+
]
212+
}
213+
];
214+
215+
var jsonObj = JsonNode.Parse(File.ReadAllText("./MCMetadataFiles/1.21.5.json"))!.AsObject();
216+
var meta = new MetadataFile(jsonObj, false);
217+
meta.Parse();
218+
Assert.That(meta.Arguments.Game.Count, Is.EqualTo(testGameArgs.Length));
219+
for (int i = 0; i < meta.Arguments.Game.Count; i++)
220+
{
221+
if (testGameArgs[i] is string)
222+
{
223+
Assert.That(meta.Arguments.Game[i].Value.Count, Is.EqualTo(1));
224+
Assert.That(meta.Arguments.Game[i].Value[0], Is.EqualTo(testGameArgs[i]));
225+
}
226+
else
227+
{
228+
var arg = meta.Arguments.Game[i];
229+
var testArg = (MetadataFile.ConditionalArg)testGameArgs[i];
230+
231+
Assert.That(arg.Value.SequenceEqual(testArg.Value), Is.True);
232+
Assert.That(
233+
(arg.Rules is null && testArg.Rules is null) ||
234+
(arg.Rules is not null && testArg.Rules is not null));
235+
if (arg.Rules is not null && testArg.Rules is not null)
236+
{
237+
Assert.That(arg.Rules.Count, Is.EqualTo(testArg.Rules.Count));
238+
foreach ((MetadataFile.Rule rule, MetadataFile.Rule testRule) in arg.Rules.Zip(testArg.Rules))
239+
{
240+
Assert.That(rule.Action, Is.EqualTo(testRule.Action));
241+
Assert.That((rule.Features is null && testRule.Features is null) ||
242+
(rule.Features is not null && testRule.Features is not null));
243+
if (rule.Features is not null && testRule.Features is not null)
244+
Assert.That(rule.Features.SequenceEqual(testRule.Features));
245+
Assert.That((rule.Os is null && testRule.Os is null) ||
246+
(rule.Os is not null && testRule.Os is not null));
247+
if (rule.Os is not null && testRule.Os is not null)
248+
{
249+
Assert.That(rule.Os.Arch, Is.EqualTo(testRule.Os.Arch));
250+
Assert.That(rule.Os.Name, Is.EqualTo(testRule.Os.Name));
251+
Assert.That(rule.Os.Version, Is.EqualTo(testRule.Os.Version));
252+
}
253+
}
254+
}
255+
}
256+
}
257+
258+
}
79259
}

PCL2.Neo.sln.DotSettings.user

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
22
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAnimatable_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F22d92db124764b1ab49745245c66f01b1e1a00_003F6e_003F0bd233be_003FAnimatable_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3+
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fd0e65377bc494d67be26c56e681419f076e00_003F41_003Fe4e0b6d3_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
34
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAvaloniaObject_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffe877ad5dc9742caa5e7dfcad5831d581e2200_003Ffa_003Feb3cccd2_003FAvaloniaObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
45
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAvaloniaObject_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fa119bbffad50bc743b255772611ceba491d63fce14a64e86c71a607766c5b0_003FAvaloniaObject_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
56
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABackEaseOut_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F22d92db124764b1ab49745245c66f01b1e1a00_003F96_003F0974ff42_003FBackEaseOut_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
@@ -35,9 +36,12 @@
3536
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffe877ad5dc9742caa5e7dfcad5831d581e2200_003F82_003F21113a39_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3637
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATransitionBase_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffe877ad5dc9742caa5e7dfcad5831d581e2200_003F01_003Fa44768fa_003FTransitionBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
3738
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATransition_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Ffe877ad5dc9742caa5e7dfcad5831d581e2200_003F62_003F990aa4ca_003FTransition_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
38-
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=a83ef9d1_002D875c_002D4b6e_002D99e2_002Dae1106565ee7/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
39-
&lt;Solution /&gt;
39+
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=95a7c32b_002D520d_002D4ed1_002Db22f_002Df3b6e550fab3/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="ArgumentsParsingTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
40+
&lt;TestAncestor&gt;
41+
&lt;TestId&gt;NUnit3x::438856D4-C249-4E5F-8AC1-07B5EF401DC0::net9.0::PCL2.Neo.Tests.Minecraft.Models.MetadataFileTest.ArgumentsParsingTest&lt;/TestId&gt;
42+
&lt;/TestAncestor&gt;
4043
&lt;/SessionState&gt;</s:String>
4144

4245

46+
4347
</wpf:ResourceDictionary>

PCL2.Neo/Minecraft/Models/MetadataFile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public enum ActionEnum
5353

5454
public class ConditionalArg
5555
{
56-
[JsonPropertyName("rules")] public List<Rule>? Rules { get; set; } = [];
56+
[JsonPropertyName("rules")] public List<Rule>? Rules { get; set; }
5757
[JsonPropertyName("value")] public List<string> Value { get; set; }
5858
}
5959

0 commit comments

Comments
 (0)