diff --git a/ImperatorToCK3.UnitTests/CK3/Titles/RulerTermTests.cs b/ImperatorToCK3.UnitTests/CK3/Titles/RulerTermTests.cs index 9ce568395..cb4108a83 100644 --- a/ImperatorToCK3.UnitTests/CK3/Titles/RulerTermTests.cs +++ b/ImperatorToCK3.UnitTests/CK3/Titles/RulerTermTests.cs @@ -17,6 +17,7 @@ using Xunit; using System; using System.Collections.Generic; +using System.IO; namespace ImperatorToCK3.UnitTests.CK3.Titles; @@ -49,8 +50,10 @@ public void ImperatorRulerTermIsCorrectlyConverted() { "government = dictatorship" ); var impRulerTerm = ImperatorToCK3.Imperator.Countries.RulerTerm.Parse(reader); - var govReader = new BufferedReader("link = {ir=dictatorship ck3=feudal_government }"); - var govMapper = new GovernmentMapper(govReader, ck3GovernmentIds: new List {"feudal_government"}); + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = {ir=dictatorship ck3=feudal_government }"); + var govMapper = new GovernmentMapper(ck3GovernmentIds: new List {"feudal_government"}); + File.Delete("configurables/government_map.txt"); // cleanup var landedTitles = new Title.LandedTitles(); var ck3Religions = new ReligionCollection(landedTitles); var ck3RegionMapper = new CK3RegionMapper(); @@ -94,8 +97,10 @@ public void PreImperatorTermIsCorrectlyConverted() { var landedTitles = new Title.LandedTitles(); var ck3Religions = new ReligionCollection(landedTitles); ck3Religions.LoadReligions(ck3ModFs, new ColorFactory()); - var govReader = new BufferedReader("link = {ir=dictatorship ck3=feudal_government }"); - var govMapper = new GovernmentMapper(govReader, ck3GovernmentIds: new List {"feudal_government"}); + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = {ir=dictatorship ck3=feudal_government }"); + var govMapper = new GovernmentMapper(ck3GovernmentIds: new List {"feudal_government"}); + File.Delete("configurables/government_map.txt"); // cleanup var ck3RegionMapper = new CK3RegionMapper(); var religionMapper = new ReligionMapper( new BufferedReader("link={ir=hellenic ck3=hellenic}"), diff --git a/ImperatorToCK3.UnitTests/Mappers/Government/GovernmentMapperTests.cs b/ImperatorToCK3.UnitTests/Mappers/Government/GovernmentMapperTests.cs index 1ccedd748..e4bd5824c 100644 --- a/ImperatorToCK3.UnitTests/Mappers/Government/GovernmentMapperTests.cs +++ b/ImperatorToCK3.UnitTests/Mappers/Government/GovernmentMapperTests.cs @@ -1,30 +1,41 @@ -using commonItems; -using ImperatorToCK3.CK3.Titles; +using ImperatorToCK3.CK3.Titles; using ImperatorToCK3.Mappers.Government; using System.Collections.Generic; +using System.IO; using Xunit; namespace ImperatorToCK3.UnitTests.Mappers.Government; +[Collection("Sequential")] +[CollectionDefinition("Sequential", DisableParallelization = true)] public class GovernmentMapperTests { [Fact] public void NonMatchGivesNull() { - var reader = new BufferedReader("link = { ck3 = ck3Government ir = irGovernment }"); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: new List { "ck3Government" }); + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = { ck3 = ck3Government ir = irGovernment }"); + var mapper = new GovernmentMapper(ck3GovernmentIds: new List { "ck3Government" }); + File.Delete("configurables/government_map.txt"); // cleanup + var ck3Gov = mapper.GetCK3GovernmentForImperatorGovernment("nonMatchingGovernment", rank: null, irCultureId: null, []); Assert.Null(ck3Gov); } [Fact] public void CK3GovernmentCanBeFound() { - var reader = new BufferedReader("link = { ck3 = ck3Government ir = irGovernment }"); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: new List { "ck3Government" }); + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = { ck3 = ck3Government ir = irGovernment }"); + var mapper = new GovernmentMapper(ck3GovernmentIds: new List { "ck3Government" }); + File.Delete("configurables/government_map.txt"); // cleanup + var ck3Gov = mapper.GetCK3GovernmentForImperatorGovernment("irGovernment", rank: null, irCultureId: null, []); Assert.Equal("ck3Government", ck3Gov); } [Fact] public void MultipleImperatorGovernmentsCanBeInARule() { - var reader = new BufferedReader("link = { ck3 = ck3Government ir = irGovernment ir = irGovernment2 }"); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: new List { "ck3Government" }); + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = { ck3 = ck3Government ir = irGovernment ir = irGovernment2 }"); + var mapper = new GovernmentMapper(ck3GovernmentIds: new List { "ck3Government" }); + File.Delete("configurables/government_map.txt"); // cleanup + var ck3Gov1 = mapper.GetCK3GovernmentForImperatorGovernment("irGovernment", rank: null, irCultureId: null, []); var ck3Gov2 = mapper.GetCK3GovernmentForImperatorGovernment("irGovernment2", rank: null, irCultureId: null, []); Assert.Equal("ck3Government", ck3Gov1); @@ -32,23 +43,29 @@ public void MultipleImperatorGovernmentsCanBeInARule() { } [Fact] public void CorrectRuleMatches() { - var reader = new BufferedReader( + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = { ck3 = ck3Government ir = irGovernment }\n" + "link = { ck3 = ck3Government2 ir = irGovernment2 }" ); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: new List { "ck3Government", "ck3Government2" }); + var mapper = new GovernmentMapper(ck3GovernmentIds: new List { "ck3Government", "ck3Government2" }); + File.Delete("configurables/government_map.txt"); // cleanup + var ck3Gov = mapper.GetCK3GovernmentForImperatorGovernment("irGovernment2", rank: null, irCultureId: null, []); Assert.Equal("ck3Government2", ck3Gov); } [Fact] public void CultureCanBeUsedToMatch() { - var reader = new BufferedReader( + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", "link = { ck3 = govA ir = irGovernment irCulture = roman }\n" + "link = { ck3 = govB ir = irGovernment irCulture = greek }\n" + "link = { ck3 = govC ir = irGovernment }" ); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: new List { "govA", "govB", "govC" }); + var mapper = new GovernmentMapper(ck3GovernmentIds: new List { "govA", "govB", "govC" }); + File.Delete("configurables/government_map.txt"); // cleanup + Assert.Equal("govA", mapper.GetCK3GovernmentForImperatorGovernment("irGovernment", rank: null, "roman", [])); Assert.Equal("govB", mapper.GetCK3GovernmentForImperatorGovernment("irGovernment", rank: null, "greek", [])); Assert.Equal("govC", mapper.GetCK3GovernmentForImperatorGovernment("irGovernment", rank: null, "thracian", [])); @@ -57,13 +74,15 @@ public void CultureCanBeUsedToMatch() { [Fact] public void CK3TitleRankCanBeUsedToMatch() { - var reader = new BufferedReader( + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", """ link = { ck3 = administrative_government ir = imperium ck3_title_rank = ke } # only for kingdoms and empires link = { ck3 = feudal_government ir = imperium } """ ); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: [ "administrative_government", "feudal_government" ]); + var mapper = new GovernmentMapper(ck3GovernmentIds: [ "administrative_government", "feudal_government" ]); + File.Delete("configurables/government_map.txt"); // cleanup foreach (var rank in new List { TitleRank.empire, TitleRank.kingdom }) { Assert.Equal("administrative_government", @@ -79,7 +98,8 @@ public void CK3TitleRankCanBeUsedToMatch() { [Fact] public void CK3DlcCanBeUsedToMatch() { - var reader = new BufferedReader( + Directory.CreateDirectory("configurables"); + File.WriteAllText("configurables/government_map.txt", """ link = { ck3 = administrative_government has_ck3_dlc = roads_to_power @@ -91,7 +111,8 @@ public void CK3DlcCanBeUsedToMatch() { ir = imperial_cult # When the user doesn't have the Roads to Power DLC. } """); - var mapper = new GovernmentMapper(reader, ck3GovernmentIds: [ "administrative_government", "feudal_government" ]); + var mapper = new GovernmentMapper(ck3GovernmentIds: [ "administrative_government", "feudal_government" ]); + File.Delete("configurables/government_map.txt"); // cleanup Assert.Equal("administrative_government", mapper.GetCK3GovernmentForImperatorGovernment("imperium", rank: null, irCultureId: null, enabledCK3Dlcs: ["roads_to_power"])); Assert.Equal("feudal_government", mapper.GetCK3GovernmentForImperatorGovernment("imperium", rank: null, irCultureId: null, enabledCK3Dlcs: [])); diff --git a/ImperatorToCK3/Mappers/Government/GovernmentMapper.cs b/ImperatorToCK3/Mappers/Government/GovernmentMapper.cs index a1fea521f..6af10b921 100644 --- a/ImperatorToCK3/Mappers/Government/GovernmentMapper.cs +++ b/ImperatorToCK3/Mappers/Government/GovernmentMapper.cs @@ -2,12 +2,11 @@ using ImperatorToCK3.CK3.Titles; using System; using System.Collections.Generic; -using System.IO; using System.Linq; namespace ImperatorToCK3.Mappers.Government; -public sealed class GovernmentMapper { +internal sealed class GovernmentMapper { private readonly List mappings = []; public GovernmentMapper(ICollection ck3GovernmentIds) { @@ -15,21 +14,13 @@ public GovernmentMapper(ICollection ck3GovernmentIds) { var parser = new Parser(); RegisterKeys(parser); - var mappingsPath = Path.Combine("configurables", "government_map.txt"); - parser.ParseFile(mappingsPath); + parser.ParseFile("configurables/government_map.txt"); Logger.Info($"Loaded {mappings.Count} government links."); Logger.Debug("Removing invalid government links..."); RemoveInvalidLinks(ck3GovernmentIds); } - public GovernmentMapper(BufferedReader reader, ICollection ck3GovernmentIds) { // used for testing only, TODO: remove - var parser = new Parser(); - RegisterKeys(parser); - parser.ParseStream(reader); - - RemoveInvalidLinks(ck3GovernmentIds); - } private void RegisterKeys(Parser parser) { parser.RegisterKeyword("link", reader => { var mapping = new GovernmentMapping(reader);