11using System ;
22using System . Collections . Generic ;
33using System . IO ;
4- using System . IO . Abstractions . TestingHelpers ;
54using System . Linq ;
5+ using System . Runtime . InteropServices ;
66using EawModinfo . File ;
7+ using Testably . Abstractions . Testing ;
78using Xunit ;
89
910namespace EawModinfo . Tests ;
@@ -32,6 +33,10 @@ public ModinfoFileFinderTests()
3233 CreateScenario7_WithInvalidMainModinfo ( ) ;
3334 CreateScenario8_WithMainModinfoAndInvalidVariant ( ) ;
3435 CreateScenario9_WithInvalidMainModinfoAndValidVariant ( ) ;
36+ if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
37+ {
38+ CreateScenario10_MultipleMainModinfoFiles_Linux ( ) ;
39+ }
3540 }
3641
3742 [ Theory ]
@@ -53,6 +58,20 @@ public void FindModinfoFiles_TestAll(int scenario, bool hasMain, int numberVaria
5358 Assert . Equal ( numberVariants , result . Variants . Count ) ;
5459 }
5560
61+ [ Fact ]
62+ public void FindModinfoFiles_CreateScenario10_MultipleMainModinfoFiles_Linux ( )
63+ {
64+ if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
65+ return ;
66+
67+ var scenarioPath = _fileSystem . DirectoryInfo . New ( _scenarioPaths [ 10 ] ) ;
68+ var result = ModinfoFileFinder . FindModinfoFiles ( scenarioPath ) ;
69+
70+ Assert . True ( result . HasMainModinfoFile ) ;
71+ Assert . Equal ( "modinfo.json" , result . MainModinfo . File . Name ) ;
72+ Assert . Empty ( result . Variants ) ;
73+ }
74+
5675 [ Theory ]
5776 [ InlineData ( 4 ) ]
5877 [ InlineData ( 6 ) ]
@@ -86,8 +105,8 @@ private void CreateScenario1_MainModinfoOnly()
86105}" ;
87106 const string fileName = "modinfo.json" ;
88107 var filePath = _fileSystem . Path . Combine ( path , fileName ) ;
89-
90- _fileSystem . AddFile ( filePath , new MockFileData ( fileData ) ) ;
108+ _fileSystem . Directory . CreateDirectory ( path ) ;
109+ _fileSystem . File . WriteAllText ( filePath , fileData ) ;
91110 return path ;
92111 } ) ;
93112 }
@@ -102,8 +121,8 @@ private void CreateScenario2_MainModinfoOnly_WithCaseInsensitiveName()
102121}" ;
103122 const string fileName = "MoDInfO.json" ;
104123 var filePath = _fileSystem . Path . Combine ( path , fileName ) ;
105-
106- _fileSystem . AddFile ( filePath , new MockFileData ( fileData ) ) ;
124+ _fileSystem . Directory . CreateDirectory ( path ) ;
125+ _fileSystem . File . WriteAllText ( filePath , fileData ) ;
107126 return path ;
108127 } ) ;
109128 }
@@ -114,8 +133,10 @@ private void CreateScenario3_WithNoValidModinfoFiles()
114133 {
115134 const string path = "scenario3" ;
116135
136+ _fileSystem . Directory . CreateDirectory ( path ) ;
137+
117138 foreach ( var name in TestUtilities . GetInvalidModinfoFileNames ( ) )
118- _fileSystem . AddFile ( _fileSystem . Path . Combine ( path , name ) , new MockFileData ( string . Empty ) ) ;
139+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , name ) , string . Empty ) ;
119140 return path ;
120141 } ) ;
121142 }
@@ -138,9 +159,9 @@ private void CreateScenario4_WithMainModinfoAndVariant()
138159 const string variantFileData = @"{
139160 ""name"": ""Addon""
140161}" ;
141-
142- _fileSystem . AddFile ( mainFilePath , new MockFileData ( mainFileData ) ) ;
143- _fileSystem . AddFile ( variantFilePath , new MockFileData ( variantFileData ) ) ;
162+ _fileSystem . Directory . CreateDirectory ( path ) ;
163+ _fileSystem . File . WriteAllText ( mainFilePath , mainFileData ) ;
164+ _fileSystem . File . WriteAllText ( variantFilePath , variantFileData ) ;
144165
145166 return path ;
146167 } ) ;
@@ -163,9 +184,9 @@ private void CreateScenario5_WithOnlyVariants()
163184 const string data2 = @"{
164185 ""name"": ""Addon-2""
165186}" ;
166-
167- _fileSystem . AddFile ( filePath1 , new MockFileData ( data1 ) ) ;
168- _fileSystem . AddFile ( filePath2 , new MockFileData ( data2 ) ) ;
187+ _fileSystem . Directory . CreateDirectory ( path ) ;
188+ _fileSystem . File . WriteAllText ( filePath1 , data1 ) ;
189+ _fileSystem . File . WriteAllText ( filePath2 , data2 ) ;
169190 return path ;
170191 } ) ;
171192 }
@@ -188,12 +209,12 @@ private void CreateScenario6_CreateWithMainModinfoAndVariantAndOtherFiles()
188209 const string variantFileData = @"{
189210 ""name"": ""Addon""
190211}" ;
191-
192- _fileSystem . AddFile ( mainFilePath , new MockFileData ( mainFileData ) ) ;
193- _fileSystem . AddFile ( variantFilePath , new MockFileData ( variantFileData ) ) ;
212+ _fileSystem . Directory . CreateDirectory ( path ) ;
213+ _fileSystem . File . WriteAllText ( mainFilePath , mainFileData ) ;
214+ _fileSystem . File . WriteAllText ( variantFilePath , variantFileData ) ;
194215
195216 foreach ( var name in TestUtilities . GetInvalidModinfoFileNames ( ) )
196- _fileSystem . AddFile ( _fileSystem . Path . Combine ( path , name ) , new MockFileData ( string . Empty ) ) ;
217+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , name ) , string . Empty ) ;
197218
198219 return path ;
199220 } ) ;
@@ -209,7 +230,8 @@ private void CreateScenario7_WithInvalidMainModinfo()
209230
210231 const string mainFileData = "\0 " ;
211232
212- _fileSystem . AddFile ( mainFilePath , new MockFileData ( mainFileData ) ) ;
233+ _fileSystem . Directory . CreateDirectory ( path ) ;
234+ _fileSystem . File . WriteAllText ( mainFilePath , mainFileData ) ;
213235
214236 return path ;
215237 } ) ;
@@ -232,8 +254,9 @@ private void CreateScenario8_WithMainModinfoAndInvalidVariant()
232254
233255 const string variantFileData = "\0 " ;
234256
235- _fileSystem . AddFile ( mainFilePath , new MockFileData ( mainFileData ) ) ;
236- _fileSystem . AddFile ( variantFilePath , new MockFileData ( variantFileData ) ) ;
257+ _fileSystem . Directory . CreateDirectory ( path ) ;
258+ _fileSystem . File . WriteAllText ( mainFilePath , mainFileData ) ;
259+ _fileSystem . File . WriteAllText ( variantFilePath , variantFileData ) ;
237260
238261 return path ;
239262 } ) ;
@@ -255,9 +278,28 @@ private void CreateScenario9_WithInvalidMainModinfoAndValidVariant()
255278 ""name"": ""Addon""
256279}" ;
257280
258- _fileSystem . AddFile ( mainFilePath , new MockFileData ( mainFileData ) ) ;
259- _fileSystem . AddFile ( variantFilePath , new MockFileData ( variantFileData ) ) ;
281+ _fileSystem . Directory . CreateDirectory ( path ) ;
282+ _fileSystem . File . WriteAllText ( mainFilePath , mainFileData ) ;
283+ _fileSystem . File . WriteAllText ( variantFilePath , variantFileData ) ;
284+
285+ return path ;
286+ } ) ;
287+ }
288+
289+ private void CreateScenario10_MultipleMainModinfoFiles_Linux ( )
290+ {
291+ CreateScenario ( 10 , ( ) =>
292+ {
293+ const string path = "scenario10" ;
294+ const string fileData = @"{
295+ ""name"": ""testmod""
296+ }" ;
260297
298+ _fileSystem . Directory . CreateDirectory ( path ) ;
299+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , "MoDInfO.json" ) , fileData ) ;
300+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , "modinfo.json" ) , fileData ) ;
301+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , "modinfo.JSON" ) , fileData ) ;
302+ _fileSystem . File . WriteAllText ( _fileSystem . Path . Combine ( path , "MODINFO.json" ) , fileData ) ;
261303 return path ;
262304 } ) ;
263305 }
0 commit comments