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<string>{"engineer"}};
var hidden=query with{VisibleMarkerCategories=new HashSet<string>()};
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<string>{"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<string>{"hightech"}};
var imported=GalaxyOriginalSettings.Parse("<Root><FriendMarkers Value=\"0\"/><WingMarkers Value=\"1\"/><EngineerMarkers Value=\"0\"/></Root>",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<GalaxyMapFilter>(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<string>{"mission"}};
Check.That(!filter.IsMarkerVisible("mission"));
Check.Throws<InvalidDataException>(()=>GalaxyMarkerDisplayOptions.Import(new Dictionary<string,string>{{"FriendMarkers","2"}},null));
}
}
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<string>{"engineer"}};
var hidden=query with{VisibleMarkerCategories=new HashSet<string>()};
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<string>{"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<string>{"hightech"}};
var imported=GalaxyOriginalSettings.Parse("<Root><FriendMarkers Value=\"0\"/><WingMarkers Value=\"1\"/><EngineerMarkers Value=\"0\"/></Root>",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<GalaxyMapFilter>(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<string>{"mission"}};
Check.That(!filter.IsMarkerVisible("mission"));
Check.Throws<InvalidDataException>(()=>GalaxyMarkerDisplayOptions.Import(new Dictionary<string,string>{{"FriendMarkers","2"}},null));
}
}