using System.Text.Json; using XFEEDToolBox.Core.Galaxy; using XFEEDToolBox.Core.Models; using XFEExtension.NetCore.XUnit.Attributes; namespace XFEEDToolBox.Test; [TestFixture] public sealed class GalaxyMarkerVisibilityTests { [Test] public void IndependentIconVisibilityDoesNotChangeTargetQueryOrStarStyle() { var system=new GalacticSystem("Unit test marker target",new(0,0,0),StarClass:"G"){Data=new(){Markers=["engineer","mission"]}}; var query=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Markers,Values=new HashSet{"engineer"}}; var hidden=query with{VisibleMarkerCategories=new HashSet()}; Check.That(query.Matches(system)&&hidden.Matches(system));Check.Equal(query.QueryKey,hidden.QueryKey);Check.Equal(query.GetColour(system),hidden.GetColour(system)); Check.That(query.IsMarkerVisible("engineer")&&!hidden.IsMarkerVisible("engineer")); var onlyMission=query with{VisibleMarkerCategories=new HashSet{"mission"}}; Check.That(onlyMission.IsMarkerVisible("mission")&&!onlyMission.IsMarkerVisible("engineer")); } [Test] public void OriginalMarkerFlagsRestoreSeparatelyFromColourAndQuerySelections() { var current=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Economy,Values=new HashSet{"hightech"}}; var imported=GalaxyOriginalSettings.Parse("",current).Filter; Check.That(!imported.IsMarkerVisible("friend")&&imported.IsMarkerVisible("wing")&&!imported.IsMarkerVisible("engineer")&&imported.IsMarkerVisible("mission")); Check.Equal(current.Category,imported.Category);Check.That(imported.Values!.SetEquals(current.Values!)); var restored=JsonSerializer.Deserialize(JsonSerializer.Serialize(new{imported.VisibleMarkerCategories},ToolboxSettings.JsonOptions),ToolboxSettings.JsonOptions)!; Check.That(restored.VisibleMarkerCategories!.SetEquals(imported.VisibleMarkerCategories!)); } [Test] public void MasterMarkerSwitchOverridesIndividualDisplayFlags() { var filter=GalaxyMapFilter.Default with{ShowMarkers=false,VisibleMarkerCategories=new HashSet{"mission"}}; Check.That(!filter.IsMarkerVisible("mission")); Check.Throws(()=>GalaxyMarkerDisplayOptions.Import(new Dictionary{{"FriendMarkers","2"}},null)); } }