Skip to content

Commit 8e3b5aa

Browse files
committed
improve ksp format parsing
1 parent 30a86a9 commit 8e3b5aa

File tree

4 files changed

+155
-158
lines changed

4 files changed

+155
-158
lines changed
Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.IO;
2-
using System.Linq;
3-
using System.Reflection;
1+
using System.Linq;
42
using NUnit.Framework;
53
using KSPPartRemover.Feature;
64
using KSPPartRemover.KspFormat.Objects;
@@ -9,58 +7,6 @@ namespace KSPPartRemover.Tests.Feature
97
{
108
public class ObjectLoaderTest
119
{
12-
[Test]
13-
public void CanLoadCraftFromCraftFileString()
14-
{
15-
// given
16-
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Mün Mk I.in.craft")).ReadToEnd();
17-
18-
// when
19-
var craft = ObjectLoader.LoadFromText(textIn);
20-
21-
// then
22-
Assert.That((craft as KspCraftObject).Name, Is.EqualTo("Mün Mk I"));
23-
}
24-
25-
[Test]
26-
public void CanLoadCraftsFromSaveFileString()
27-
{
28-
// given
29-
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Refuel at Minmus.in.sfs")).ReadToEnd();
30-
31-
// when
32-
var kspObjTree = ObjectLoader.LoadFromText(textIn);
33-
34-
// then
35-
Assert.That(kspObjTree.Children<KspCraftObject>(recursive: true).Select(craft => craft.Name), Is.EqualTo(new[] {
36-
"Ast. HSJ-227",
37-
"Ast. LHV-865",
38-
"Ast. IQY-452",
39-
"Aeris 4B \"Maybe the Sky\"",
40-
"Ast. JCK-736",
41-
"Ast. JIH-531",
42-
"Ast. AYF-000",
43-
"Bowser 1",
44-
"Bowser 1 Debris",
45-
"Ast. JMV-788",
46-
"Bowser 1 Debris"
47-
}));
48-
}
49-
50-
[Test]
51-
public void ReturnsEmptyObjectTreeForEmptyFile()
52-
{
53-
// given
54-
var textIn = "";
55-
56-
// when
57-
var kspObjTree = ObjectLoader.LoadFromText(textIn);
58-
59-
// then
60-
Assert.That(kspObjTree.Type, Is.Empty);
61-
Assert.That(kspObjTree.Children, Is.Empty);
62-
}
63-
6410
[Test]
6511
public void CanLoadAndSaveFromFiles()
6612
{
@@ -76,18 +22,5 @@ public void CanLoadAndSaveFromFiles()
7622
// then
7723
Assert.That(kspObjTree.Children<KspCraftObject>(recursive: true).Select(craft => craft.Name), Is.EqualTo(new[] { "craft1", "craft2", "craft3" }));
7824
}
79-
80-
[Test]
81-
public void CanLoadPartFromPartFileString()
82-
{
83-
// given
84-
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Size3LargeTankPart.cfg")).ReadToEnd();
85-
86-
// when
87-
var part = ObjectLoader.LoadFromText(textIn);
88-
89-
// then
90-
Assert.That((part as KspPartObject).Name, Is.EqualTo("Size3LargeTank"));
91-
}
9225
}
9326
}
Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
using System.IO;
22
using System.Text;
33
using System.Reflection;
4+
using System.Linq;
45
using NUnit.Framework;
56
using KSPPartRemover.KspFormat;
7+
using KSPPartRemover.KspFormat.Objects;
68

79
namespace KSPPartRemover.Tests.KspFormat
810
{
911
public class KspFormatTest
1012
{
1113
[Test]
12-
public void CanReadAndWriteKspObjectsFromCraftFileString()
14+
public void CanReadAndWriteEmptyObject()
1315
{
1416
// given
15-
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Super-Heavy Lander.in.craft")).ReadToEnd();
17+
var textIn = "";
1618

1719
// when
1820
var tokenIn = KspTokenReader.ReadToken(textIn);
1921
var kspObject = KspObjectReader.ReadObject(tokenIn);
22+
23+
// then
24+
Assert.That(kspObject.Type, Is.Empty);
25+
Assert.That(kspObject.Children, Is.Empty);
26+
27+
// and when
2028
var tokenOut = KspObjectWriter.WriteObject(kspObject);
2129
var textOut = KspTokenWriter.WriteToken(tokenOut, new StringBuilder()).ToString();
2230

@@ -25,14 +33,29 @@ public void CanReadAndWriteKspObjectsFromCraftFileString()
2533
}
2634

2735
[Test]
28-
public void CanReadAndWriteKspObjectsFromSaveFileString()
36+
public void CanReadAndWriteKspObjectsFromCraftFileString()
2937
{
3038
// given
31-
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Dynawing.sfs")).ReadToEnd();
39+
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Mün Mk I.in.craft")).ReadToEnd();
3240

3341
// when
3442
var tokenIn = KspTokenReader.ReadToken(textIn);
35-
var kspObject = KspObjectReader.ReadObject(tokenIn);
43+
var kspObject = KspObjectReader.ReadObject(tokenIn) as KspCraftObject;
44+
45+
// then
46+
Assert.That(kspObject.Name, Is.EqualTo("Mün Mk I"));
47+
Assert.That(kspObject.Properties<KspStringProperty>("version").First().Text, Is.EqualTo("0.23.5"));
48+
Assert.That(kspObject.Properties<KspStringProperty>("type").First().Text, Is.EqualTo("VAB"));
49+
Assert.That(kspObject.Children<KspObject>().First().Properties<KspStringProperty>("pos").First().Text, Is.EqualTo("-0.2561799,3.782969,0.2440315"));
50+
Assert.That(kspObject.Children<KspObject>().Skip(1).First().Properties<KspStringProperty>("pos").First().Text, Is.EqualTo("-0.2561799,5.661159,0.2440315"));
51+
Assert.That(kspObject.Children<KspObject>().Skip(2).First().Properties<KspStringProperty>("pos").First().Text, Is.EqualTo("-0.2561799,7.539349,0.2440315"));
52+
53+
// and given
54+
textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Super-Heavy Lander.in.craft")).ReadToEnd();
55+
56+
// when
57+
tokenIn = KspTokenReader.ReadToken(textIn);
58+
kspObject = KspObjectReader.ReadObject(tokenIn) as KspCraftObject;
3659
var tokenOut = KspObjectWriter.WriteObject(kspObject);
3760
var textOut = KspTokenWriter.WriteToken(tokenOut, new StringBuilder()).ToString();
3861

@@ -41,19 +64,76 @@ public void CanReadAndWriteKspObjectsFromSaveFileString()
4164
}
4265

4366
[Test]
44-
public void ReturnsEmptyObjectForEmptyFile()
67+
public void CanReadAndWriteKspObjectsFromSaveFileString()
4568
{
4669
// given
47-
var textIn = "";
70+
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Refuel at Minmus.in.sfs")).ReadToEnd();
4871

4972
// when
5073
var tokenIn = KspTokenReader.ReadToken(textIn);
5174
var kspObject = KspObjectReader.ReadObject(tokenIn);
75+
76+
// then
77+
Assert.That(kspObject.Children<KspCraftObject>(recursive: true).Select(craft => craft.Name), Is.EqualTo(new[] {
78+
"Ast. HSJ-227",
79+
"Ast. LHV-865",
80+
"Ast. IQY-452",
81+
"Aeris 4B \"Maybe the Sky\"",
82+
"Ast. JCK-736",
83+
"Ast. JIH-531",
84+
"Ast. AYF-000",
85+
"Bowser 1",
86+
"Bowser 1 Debris",
87+
"Ast. JMV-788",
88+
"Bowser 1 Debris"
89+
}));
90+
91+
// and given
92+
textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Dynawing.sfs")).ReadToEnd();
93+
94+
// when
95+
tokenIn = KspTokenReader.ReadToken(textIn);
96+
kspObject = KspObjectReader.ReadObject(tokenIn);
5297
var tokenOut = KspObjectWriter.WriteObject(kspObject);
5398
var textOut = KspTokenWriter.WriteToken(tokenOut, new StringBuilder()).ToString();
5499

55100
// then
56101
Assert.That(textOut, Is.EqualTo(textIn));
57102
}
103+
104+
[Test]
105+
public void CanReadAndWriteKspObjectsFromPartFileString()
106+
{
107+
// given
108+
var textIn = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("KSPPartRemover.Tests.Resources.Size3LargeTankPart.cfg")).ReadToEnd();
109+
110+
// when
111+
var tokenIn = KspTokenReader.ReadToken(textIn);
112+
var kspObject = KspObjectReader.ReadObject(tokenIn) as KspPartObject;
113+
114+
// then
115+
Assert.That(kspObject.Name, Is.EqualTo("Size3LargeTank"));
116+
Assert.That(kspObject.Properties<KspStringProperty>("rescaleFactor").First().Text, Is.EqualTo("1"));
117+
Assert.That(kspObject.Properties<KspStringProperty>("bulkheadProfiles").First().Text, Is.EqualTo("size3, srf"));
118+
Assert.That(kspObject.Children<KspObject>().First().Properties<KspStringProperty>("model").First().Text, Is.EqualTo("Squad/Parts/FuelTank/Size3Tanks/Size3LargeTank"));
119+
Assert.That(kspObject.Children<KspObject>().Skip(1).First().Properties<KspStringProperty>("name").First().Text, Is.EqualTo("LiquidFuel"));
120+
Assert.That(kspObject.Children<KspObject>().Skip(2).First().Properties<KspStringProperty>("name").First().Text, Is.EqualTo("Oxidizer"));
121+
122+
// and when
123+
var tokenOut = KspObjectWriter.WriteObject(kspObject);
124+
var textOut = KspTokenWriter.WriteToken(tokenOut, new StringBuilder()).ToString();
125+
126+
// then
127+
// A lot of comments are not written out so it cannot be comared here.
128+
// So just check if reading it returns same properties
129+
tokenIn = KspTokenReader.ReadToken(textOut);
130+
kspObject = KspObjectReader.ReadObject(tokenIn) as KspPartObject;
131+
Assert.That(kspObject.Name, Is.EqualTo("Size3LargeTank"));
132+
Assert.That(kspObject.Properties<KspStringProperty>("rescaleFactor").First().Text, Is.EqualTo("1"));
133+
Assert.That(kspObject.Properties<KspStringProperty>("bulkheadProfiles").First().Text, Is.EqualTo("size3, srf"));
134+
Assert.That(kspObject.Children<KspObject>().First().Properties<KspStringProperty>("model").First().Text, Is.EqualTo("Squad/Parts/FuelTank/Size3Tanks/Size3LargeTank"));
135+
Assert.That(kspObject.Children<KspObject>().Skip(1).First().Properties<KspStringProperty>("name").First().Text, Is.EqualTo("LiquidFuel"));
136+
Assert.That(kspObject.Children<KspObject>().Skip(2).First().Properties<KspStringProperty>("name").First().Text, Is.EqualTo("Oxidizer"));
137+
}
58138
}
59139
}

KSPPartRemover.Tests/Resources/Size3LargeTankPart.cfg

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ PART
4141
breakingTorque = 400
4242
maxTemp = 2000 // = 2900
4343
// this comment is to be ignored
44-
bulkheadProfiles = size3, srf
4544
tags = #autoLOC_500618 //#autoLOC_500618 = fuel fueltank ?lfo propellant rocket
4645

4746
RESOURCE {
@@ -92,4 +91,6 @@ PART
9291
}
9392
}
9493

94+
bulkheadProfiles = size3, srf
95+
9596
}

0 commit comments

Comments
 (0)