@@ -70,6 +70,23 @@ public LandedTitlesTests() {
7070 cultures = new CultureCollection ( colorFactory , pillars , ck3ModFlags ) ;
7171 }
7272
73+ private static void WithTemporaryHeritageEmpireMap ( Action action , string fileContents = "" ) {
74+ const string heritageMapPath = "configurables/heritage_empires_map.txt" ;
75+ var originalHeritageMap = File . Exists ( heritageMapPath ) ? File . ReadAllText ( heritageMapPath ) : null ;
76+ Directory . CreateDirectory ( "configurables" ) ;
77+ File . WriteAllText ( heritageMapPath , fileContents ) ;
78+
79+ try {
80+ action ( ) ;
81+ } finally {
82+ if ( originalHeritageMap is null ) {
83+ File . Delete ( heritageMapPath ) ;
84+ } else {
85+ File . WriteAllText ( heritageMapPath , originalHeritageMap ) ;
86+ }
87+ }
88+ }
89+
7390 [ Fact ]
7491 public void TitlesDefaultToEmpty ( ) {
7592 var reader = new BufferedReader ( string . Empty ) ;
@@ -664,15 +681,17 @@ public void KingdomUsesNextDominantHeritageWhenMostDominantOneCannotProvideEmpir
664681 titles [ "c_county3" ] . SetHolder ( mongolHolder , date ) ;
665682 titles [ "c_xia_county" ] . SetHolder ( mongolHolder , date ) ;
666683
667- var heritageMapPath = Path . Combine ( "configurables" , " heritage_empires_map.txt") ;
684+ string heritageMapPath = "configurables/ heritage_empires_map.txt" ;
668685 var originalHeritageMap = File . Exists ( heritageMapPath ) ? File . ReadAllText ( heritageMapPath ) : null ;
669686 Directory . CreateDirectory ( "configurables" ) ;
670687 File . WriteAllText ( heritageMapPath ,
671688 "heritage_chinese = none\n " +
672689 "heritage_mongolic = e_mongolia\n " ) ;
673690
674691 try {
675- titles . SetDeJureKingdomsAndAbove ( date , cultureCollection , characters , new MapData ( ck3ModFS ) , new CK3RegionMapper ( ) , new TestCK3LocDB ( ) ) ;
692+ var provinceMapper = new ProvinceMapper ( ) ;
693+ provinceMapper . LoadMappings ( provinceMappingsPath ) ;
694+ titles . SetDeJureKingdomsAndAbove ( date , cultureCollection , characters , new MapData ( ck3ModFS ) , new CK3RegionMapper ( ) , new TestCK3LocDB ( ) , provinceMapper ) ;
676695
677696 Assert . Equal ( "e_mongolia" , titles [ "k_test" ] . DeJureLiege ? . Id ) ;
678697 } finally {
@@ -684,6 +703,98 @@ public void KingdomUsesNextDominantHeritageWhenMostDominantOneCannotProvideEmpir
684703 }
685704 }
686705
706+ [ Fact ]
707+ public void KingdomMostlyOutsideImperatorMapKeepsExistingDeJureSetup ( ) {
708+ var date = new Date ( 867 , 1 , 1 ) ;
709+ var titles = new Title . LandedTitles ( ) ;
710+ titles . LoadTitles ( new BufferedReader (
711+ "h_old = { e_old = { k_protected = { d_protected = { capital = c_protected1 c_protected1 = { b_protected1 = { province = 1 } } c_protected2 = { b_protected2 = { province = 100 } } c_protected3 = { b_protected3 = { province = 101 } } } } } }\n " +
712+ "h_new = { e_new = { k_new = { } } }\n "
713+ ) , colorFactory ) ;
714+
715+ var characters = new CharacterCollection ( ) ;
716+ var holder = new Character ( "1" , "Holder" , new Date ( 800 , 1 , 1 ) , characters ) ;
717+ characters . Add ( holder ) ;
718+
719+ foreach ( var countyId in new [ ] { "c_protected1" , "c_protected2" , "c_protected3" } ) {
720+ titles [ countyId ] . SetHolder ( holder , date ) ;
721+ titles [ countyId ] . SetDeFactoLiege ( titles [ "k_new" ] , date ) ;
722+ }
723+ titles [ "k_new" ] . SetDeFactoLiege ( titles [ "e_new" ] , date ) ;
724+ titles [ "e_new" ] . SetDeFactoLiege ( titles [ "h_new" ] , date ) ;
725+
726+ var provinceMapper = new ProvinceMapper ( ) ;
727+ provinceMapper . LoadMappings ( provinceMappingsPath ) ;
728+
729+ WithTemporaryHeritageEmpireMap ( ( ) =>
730+ titles . SetDeJureKingdomsAndAbove ( date , new TestCK3CultureCollection ( ) , characters , new MapData ( ck3ModFS ) , new CK3RegionMapper ( ) , new TestCK3LocDB ( ) , provinceMapper )
731+ ) ;
732+
733+ Assert . Equal ( "k_protected" , titles [ "d_protected" ] . DeJureLiege ? . Id ) ;
734+ Assert . Equal ( "e_old" , titles [ "k_protected" ] . DeJureLiege ? . Id ) ;
735+ Assert . Equal ( "h_old" , titles [ "k_protected" ] . GetDeJureLiegeOfRank ( TitleRank . hegemony ) ? . Id ) ;
736+ }
737+
738+ [ Fact ]
739+ public void KingdomAtFiftyPercentOutsideImperatorMapStillUsesDynamicDeJureSetup ( ) {
740+ var date = new Date ( 867 , 1 , 1 ) ;
741+ var titles = new Title . LandedTitles ( ) ;
742+ titles . LoadTitles ( new BufferedReader (
743+ "e_old = { k_test = { d_test = { capital = c_test1 c_test1 = { b_test1 = { province = 1 } } c_test2 = { b_test2 = { province = 100 } } } } }\n " +
744+ "e_new = { k_target = { } }\n "
745+ ) , colorFactory ) ;
746+
747+ var characters = new CharacterCollection ( ) ;
748+ var holder = new Character ( "1" , "Holder" , new Date ( 800 , 1 , 1 ) , characters ) ;
749+ characters . Add ( holder ) ;
750+
751+ foreach ( var countyId in new [ ] { "c_test1" , "c_test2" } ) {
752+ titles [ countyId ] . SetHolder ( holder , date ) ;
753+ titles [ countyId ] . SetDeFactoLiege ( titles [ "k_target" ] , date ) ;
754+ }
755+ titles [ "k_target" ] . SetDeFactoLiege ( titles [ "e_new" ] , date ) ;
756+
757+ var provinceMapper = new ProvinceMapper ( ) ;
758+ provinceMapper . LoadMappings ( provinceMappingsPath ) ;
759+
760+ WithTemporaryHeritageEmpireMap ( ( ) =>
761+ titles . SetDeJureKingdomsAndAbove ( date , new TestCK3CultureCollection ( ) , characters , new MapData ( ck3ModFS ) , new CK3RegionMapper ( ) , new TestCK3LocDB ( ) , provinceMapper )
762+ ) ;
763+
764+ Assert . Equal ( "k_target" , titles [ "d_test" ] . DeJureLiege ? . Id ) ;
765+ }
766+
767+ [ Fact ]
768+ public void ProtectedKingdomIsNotExcludedFromDisconnectedEmpireSplitting ( ) {
769+ var date = new Date ( 867 , 1 , 1 ) ;
770+ var titles = new Title . LandedTitles ( ) ;
771+ titles . LoadTitles ( new BufferedReader (
772+ "e_old = { " +
773+ "k_mutable = { d_mutable = { capital = c_mutable c_mutable = { b_mutable = { province = 4 } } } } " +
774+ "k_protected = { d_protected = { capital = c_protected1 c_protected1 = { b_protected1 = { province = 1 } } c_protected2 = { b_protected2 = { province = 100 } } c_protected3 = { b_protected3 = { province = 101 } } } } " +
775+ "}\n "
776+ ) , colorFactory ) ;
777+
778+ var characters = new CharacterCollection ( ) ;
779+ var holder = new Character ( "1" , "Holder" , new Date ( 800 , 1 , 1 ) , characters ) ;
780+ characters . Add ( holder ) ;
781+
782+ foreach ( var countyId in new [ ] { "c_mutable" , "c_protected1" , "c_protected2" , "c_protected3" } ) {
783+ titles [ countyId ] . SetHolder ( holder , date ) ;
784+ titles [ countyId ] . SetDeFactoLiege ( titles [ "e_old" ] , date ) ;
785+ }
786+
787+ var provinceMapper = new ProvinceMapper ( ) ;
788+ provinceMapper . LoadMappings ( provinceMappingsPath ) ;
789+
790+ WithTemporaryHeritageEmpireMap ( ( ) =>
791+ titles . SetDeJureKingdomsAndAbove ( date , new TestCK3CultureCollection ( ) , characters , new MapData ( ck3ModFS ) , new CK3RegionMapper ( ) , new TestCK3LocDB ( ) , provinceMapper )
792+ ) ;
793+
794+ Assert . Equal ( "e_IRTOCK3_from_c_protected1" , titles [ "k_protected" ] . DeJureLiege ? . Id ) ;
795+ Assert . True ( titles . ContainsKey ( "e_IRTOCK3_from_c_protected1" ) ) ;
796+ }
797+
687798 [ Fact ]
688799 public void RemoveBreaksAllLinks ( ) {
689800 var landedTitles = new Title . LandedTitles ( ) ;
0 commit comments