XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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));
    }
}