11using System . IO ;
22using System . Text ;
33using System . Reflection ;
4+ using System . Linq ;
45using NUnit . Framework ;
56using KSPPartRemover . KspFormat ;
7+ using KSPPartRemover . KspFormat . Objects ;
68
79namespace 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}
0 commit comments