66using ImperatorToCK3 . UnitTests . TestHelpers ;
77using System ;
88using System . Collections . Generic ;
9+ using System . IO ;
910using Xunit ;
1011
1112namespace ImperatorToCK3 . UnitTests . CK3 . Cultures ;
1213
14+ [ Collection ( "Sequential" ) ]
1315public class CultureCollectionTests {
1416 private static readonly ModFilesystem ck3ModFS = new ( "TestFiles/CK3/game" , Array . Empty < Mod > ( ) ) ;
1517 private static readonly PillarCollection pillars ;
@@ -78,4 +80,55 @@ public void ConverterLanguageCanBeMergedIntoExistingLanguage() {
7880 Assert . Equal ( "language_illyrian" , cultures [ "albanian" ] . Language . Id ) ;
7981 Assert . Equal ( "language_illyrian" , cultures [ "dalmatian" ] . Language . Id ) ;
8082 }
83+
84+ [ Fact ]
85+ public void WarnAboutCircularParentsLogsCorrectWarningsForAPairOfCultures ( ) {
86+ var cultures = new TestCK3CultureCollection ( ) ;
87+
88+ // Create a circular dependency by making "french" a child of "roman"
89+ // and "roman" a child of "french".
90+ cultures . GenerateTestCulture ( "roman" , "heritage_latin" ) ;
91+ cultures . GenerateTestCulture ( "french" , "heritage_latin" ) ;
92+ cultures [ "french" ] . ParentCultureIds . Add ( "roman" ) ;
93+ cultures [ "roman" ] . ParentCultureIds . Add ( "french" ) ;
94+
95+ var output = new StringWriter ( ) ;
96+ Console . SetOut ( output ) ;
97+ cultures . WarnAboutCircularParents ( ) ;
98+ var outputString = output . ToString ( ) ;
99+
100+ Assert . Contains ( "[ERROR] Culture french is set as its own direct or indirect parent!" , outputString ) ;
101+ Assert . Contains ( "[ERROR] Culture roman is set as its own direct or indirect parent!" , outputString ) ;
102+ }
103+
104+ [ Fact ]
105+ public void WarnAboutCircularParentsLogsCorrectWarningForCultureBeingItsOwnParent ( ) {
106+ var cultures = new TestCK3CultureCollection ( ) ;
107+ // Create a culture that is its own parent.
108+ cultures . GenerateTestCulture ( "roman" , "heritage_latin" ) ;
109+ cultures [ "roman" ] . ParentCultureIds . Add ( "roman" ) ;
110+
111+ var output = new StringWriter ( ) ;
112+ Console . SetOut ( output ) ;
113+ cultures . WarnAboutCircularParents ( ) ;
114+ var outputString = output . ToString ( ) ;
115+
116+ Assert . Contains ( "[ERROR] Culture roman is set as its own direct or indirect parent!" , outputString ) ;
117+ }
118+
119+ [ Fact ]
120+ public void WarnAboutCircularParentsDoesNotLogAnythingForValidCultures ( ) {
121+ var cultures = new TestCK3CultureCollection ( ) ;
122+ // Just French being a child of Roman, no circular dependency.
123+ cultures . GenerateTestCulture ( "roman" , "heritage_latin" ) ;
124+ cultures . GenerateTestCulture ( "french" , "heritage_latin" ) ;
125+ cultures [ "french" ] . ParentCultureIds . Add ( "roman" ) ;
126+
127+ var output = new StringWriter ( ) ;
128+ Console . SetOut ( output ) ;
129+ cultures . WarnAboutCircularParents ( ) ;
130+ var outputString = output . ToString ( ) ;
131+
132+ Assert . DoesNotContain ( "[ERROR]" , outputString ) ;
133+ }
81134}
0 commit comments