using System.Text.Json; using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Models; using XFEEDToolBox.Core.Navigation; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public class GameRouteMapFilterTests { [Test] public void RawSettingsKeepIndependentNamesWherePublicAliasesWouldMergeThem() { var f=GalaxyOriginalSettings.Parse("",new()).Filter.WithCategory(GalaxyFilterCategory.Security); Check.That(f.OriginalRouteOptionKeys[f.Category].SetEquals(["anarchy","lawless","lowsecurity"])); Check.That(GameRouteMapFilter.TryFromFilter(f,true,out var original,out _)); Check.That(original!.SelectedKeys.SequenceEqual(["anarchy"]));Check.That(!original.AffectsRoutePlotting); Check.That(!GameRouteMapFilter.TryFromFilter(f,false,out _,out var reason)&&reason!.Contains("合并")); } [Test] public void CurrentSelectionsMapToExactNamesWithoutUsingTheirSortedOrderAsDisplayIndices() { var f=GalaxyOriginalSettings.Parse("",new()).Filter.WithCategory(GalaxyFilterCategory.Economy); Check.That(GameRouteMapFilter.TryFromFilter(f with{Values=new HashSet{"agriculture"}},false,out var selected,out _)); Check.Equal(4,selected!.CategoryId);Check.That(selected.SelectedKeys.SequenceEqual(["agri"])); Check.That(GameRouteMapFilter.TryFromFilter(f with{Values=new HashSet()},false,out var empty,out _));Check.Equal(0,empty!.SelectedKeys.Count); Check.That(GameRouteMapFilter.TryFromFilter(f with{Values=null},false,out var all,out _));Check.Equal(3,all!.SelectedKeys.Count); Check.That(!GameRouteMapFilter.TryFromFilter(f with{Values=new HashSet{"repair"}},false,out _,out _)); } [Test] public void CategoryAndSourceBoundariesRejectUnconfirmedListsRatherThanAssumingEnumOrder() { var expected=new[]{(GalaxyFilterCategory.Allegiance,2),(GalaxyFilterCategory.Government,3),(GalaxyFilterCategory.Economy,4),(GalaxyFilterCategory.State,6),(GalaxyFilterCategory.Security,7),(GalaxyFilterCategory.Visited,8),(GalaxyFilterCategory.Civilization,10)}; foreach(var (category,id) in expected) {Check.Equal(id,GameRouteMapFilter.CategoryIdFor(category)!.Value);Check.That(!GameRouteMapFilter.TryFromFilter(new(){Category=category},false,out _,out _));} foreach(var category in new[]{GalaxyFilterCategory.Commodity,GalaxyFilterCategory.StarClass,GalaxyFilterCategory.FleetCarrier,GalaxyFilterCategory.ThargoidWar}) Check.That(GameRouteMapFilter.CategoryIdFor(category) is null); Check.Throws(()=>new GameRouteMapFilter{CategoryId=3,ExpectedKeys=["none"],SelectedKeys=["unknown"]}.Validate()); Check.Throws(()=>new GameRouteMapFilter{CategoryId=3,ExpectedKeys=["none","none"]}.Validate()); Check.Throws(()=>new GameRouteMapFilter{CategoryId=5,ExpectedKeys=["o"]}.Validate()); } [Test] public void ExplicitEmptyFalseAndOriginalNameListsSurviveOptionsPersistence() { var original=new GameRoutePlotOptions{MapFilter=new(){CategoryId=8,ExpectedKeys=["notvisited","visited"],SelectedKeys=[],AffectsRoutePlotting=false}}; original.Validate();Check.That(original.HasOverrides); var restored=JsonSerializer.Deserialize(JsonSerializer.Serialize(original,ToolboxSettings.JsonOptions),ToolboxSettings.JsonOptions)!; restored.Validate();Check.Equal(8,restored.MapFilter!.CategoryId);Check.Equal(0,restored.MapFilter.SelectedKeys.Count);Check.That(!restored.MapFilter.AffectsRoutePlotting); Check.That(restored.MapFilter.ExpectedKeys.SequenceEqual(original.MapFilter!.ExpectedKeys)); var changed=restored with{VirtualCargoMass=0,StarClassFilter=GameRouteStarClassFilter.Scoopable};Check.That(ReferenceEquals(restored.MapFilter,changed.MapFilter)); } }