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 XFEEDToolBox.Core.Navigation;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GameRouteMapFilterTests
{
    [Test] public void RawSettingsKeepIndependentNamesWherePublicAliasesWouldMergeThem()
    {
        var f=GalaxyOriginalSettings.Parse("<Root><VisibilityFlags><security><Anarchy Value='1'/><Lawless Value='0'/><LowSecurity Value='0'/><affectsRoutePlotting Value='0'/></security></VisibilityFlags></Root>",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("<Root><VisibilityFlags><economy><Agri Value='0'/><HighTech Value='1'/><None Value='0'/><affectsRoutePlotting Value='1'/></economy></VisibilityFlags></Root>",new()).Filter.WithCategory(GalaxyFilterCategory.Economy);
        Check.That(GameRouteMapFilter.TryFromFilter(f with{Values=new HashSet<string>{"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<string>()},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<string>{"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<ArgumentException>(()=>new GameRouteMapFilter{CategoryId=3,ExpectedKeys=["none"],SelectedKeys=["unknown"]}.Validate());
        Check.Throws<ArgumentException>(()=>new GameRouteMapFilter{CategoryId=3,ExpectedKeys=["none","none"]}.Validate());
        Check.Throws<ArgumentException>(()=>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<GameRoutePlotOptions>(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));
    }
}