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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Galaxy;
using XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyOriginalAppearanceTests
{
    private static GalacticSystem Star(string type="G")=>new("Measured",new(0,0,0),StarClass:type);
    [Test] public void EconomyUsesTheAuthoredDefinitionColourForTheSelectedPrimaryOrSecondaryEconomy()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Economy};
        var system=Star() with{Data=new(){Economy="Extraction",SecondaryEconomy="High Tech"}};
        Check.Equal(new System.Numerics.Vector4(1,0,0,1),filter.GetOriginalRgba(system)!.Value);
        var secondary=filter with{Values=new HashSet<string>{"hightech"}};
        Check.That(secondary.Matches(system));
        Check.Equal(new System.Numerics.Vector4(0,1,1,1),secondary.GetOriginalRgba(system)!.Value);
        Check.Equal(new StarColour(0,255,255),secondary.GetColour(system));
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,"Agri",out var agriculture));
        Check.Equal(new GalaxyRawColour(.5f,1,0),agriculture);
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,"Terraforming",out var terraforming));
        Check.Equal(.6f,terraforming.G);
    }
    [Test] public void EconomyEnumsWithoutAnAuthoredRowDoNotBorrowOrCycleAnOriginalColour()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Economy};
        foreach(var economy in new[]{"Repair","Rescue","Carrier","Corporate","Research","Future economy"})
        {
            Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Economy,economy,out _));
            Check.That(filter.GetOriginalRgba(Star() with{Data=new(){Economy=economy}}) is null);
        }
    }
    [Test] public void SourceFloatsPreserveHdrValuesWhileTheSdrConversionClampsOnlyAtDisplay()
    {
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.State,"SystemState_ThargoidStronghold",out var stronghold));
        Check.Equal(100f,stronghold.R);Check.Equal(new StarColour(255,0,0),stronghold.DisplayColour());
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.State,"Frontline",out var frontline));Check.Equal(2f,frontline.G);
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Government,"Carrier",out var carrier));Check.Equal(new StarColour(255,0,81),carrier.DisplayColour());
        Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Government,"Megaconstruction",out _));
    }
    [Test] public void MapGroupsUseTheOriginalGroupedPaletteRatherThanThePhysicalSpectralPalette()
    {
        var map=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.StarClass};
        Check.Equal(new StarColour(0,0,255),map.GetColour(Star("O")));
        Check.Equal(new StarColour(93,103,239),map.GetColour(Star("DAB")));
        Check.Equal(map.GetColour(Star("W")),map.GetColour(Star("WO")));
        Check.Equal(map.GetColour(Star("C")),map.GetColour(Star("CHd")));
        Check.Equal(new StarColour(100,100,100),map.GetColour(Star("N")));
        Check.Equal(map.GetColour(Star("N")),map.GetColour(Star("SupermassiveBlackHole")));
        Check.Equal(map.GetColour(Star("A")),map.GetColour(Star("A_BlueWhiteSuperGiant")));
        Check.That(map.GetColour(Star("O"))!=(map with{Mode=GalaxyMapMode.Realistic}).GetColour(Star("O")));
    }
    [Test] public void OriginalPopulationEndpointsAreLinearInAbsolutePeopleAndSizeIsIndependent()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Population,SizeCategory=GalaxyFilterCategory.Population,PopulationMinimum=100,PopulationMaximum=1100};
        var star=Star() with{Data=new(){Population=100}};
        Check.Equal(new StarColour(18,43,66),filter.GetColour(star));Check.Equal(.3f,filter.RelativeSize(star));
        Check.Equal(new StarColour(135,237,66),filter.GetColour(star with{Data=new(){Population=1100}}));Check.Equal(2f,filter.RelativeSize(star with{Data=new(){Population=1100}}));
        Check.Equal(.5,filter.PopulationFraction(600));Check.That(Math.Abs(filter.RelativeSize(star with{Data=new(){Population=600}})-1.15f)<.00001f);
        Check.That(!filter.Matches(star with{Data=new(){Population=99}}));Check.Equal(0f,filter.RelativeSize(star with{Data=new(){Population=99}}));
        Check.Equal(.7f,(filter with{SizeCategory=GalaxyFilterCategory.None}).RelativeSize(star));
        Check.Equal(1f,(filter with{Mode=GalaxyMapMode.Realistic}).RelativeSize(star));
        Check.Equal(0d,(filter with{PopulationMinimum=100,PopulationMaximum=100}).PopulationFraction(100));
    }
    [Test] public void ColonyColoursRequireActualOwnershipAndDoNotTreatGroupNumbersAsPaletteIndices()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation};
        GalacticSystem Colony(int code,bool? owned)=>Star() with{Data=new(){OwnedColony=owned,NativeFilterFacts=new("F1",123,42,ColonisationStatus:code)
            {ColonisationOwnership=owned is{} known?new(100,known?100UL:101UL,2):null}}};
        Check.Equal(new StarColour(255,242,38),filter.GetColour(Colony(1,true)));
        Check.Equal(new StarColour(255,26,230),filter.GetColour(Colony(1,false)));
        Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(1,null)));
        Check.Equal(new StarColour(255,26,26),filter.GetColour(Colony(5,null)));
        Check.Equal(.35f,filter.GetOpacity(Colony(5,null)));Check.Equal(1f,filter.GetOpacity(Colony(7,null)));
        Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(7,null)));
        Check.Equal(filter.GetColour(Colony(1,true)),filter.GetColour(Colony(3,true)));
        var ownOnly=filter with{Values=new HashSet<string>{"localplayerclaimed"},IncludeUnknown=true};
        Check.That(ownOnly.Matches(Colony(1,true))&&!ownOnly.Matches(Colony(1,false))&&!ownOnly.IsUnknown(Colony(1,false)));
        Check.That(!ownOnly.Evaluate(Colony(1,false)).Matches&&!ownOnly.Evaluate(Colony(1,false)).Unknown);
        // Eligible raw status alone is not proof that the original special green branch ran.
        Check.Equal(new StarColour(204,204,204),filter.GetColour(Colony(0,null)));
        foreach(var owner in new[]{true,false})
        {
            var source=Colony(1,owner).Data;var json=System.Text.Json.JsonSerializer.Serialize(source);var restored=System.Text.Json.JsonSerializer.Deserialize<GalaxySystemData>(json)!;
            Check.That(restored.OwnedColony is null&&restored.NativeFilterFacts is null);
        }
        Check.That(System.Text.Json.JsonSerializer.Deserialize<GalaxySystemData>("""{"AccountFid":"F1","OwnedColony":true}""")!.OwnedColony is null);
    }
    [Test] public void MarkerLookupPreservesTheTargetStarsSourceColourInsteadOfTintingEveryEngineerPink()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Markers,Values=new HashSet<string>{"engineer"}};
        var actual=Star() with{OriginalAppearance=new(0xff112233,0xff445566,null,0,0,1,1,false)};
        Check.Equal(new StarColour(102,85,68),filter.GetColour(actual));
        Check.Equal(filter.GetColour(actual),(filter with{Values=new HashSet<string>{"bookmark"}}).GetColour(actual));
        Check.Equal(StellarAppearance.Palette[StellarAppearance.ColourIndex("G")],filter.GetColour(Star()));
    }
    [Test] public void OriginalServicePaletteFollowsTheActualSelectionRatherThanTheFirstUnrelatedStationService()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Services,Values=new HashSet<string>{"materialtradermanufactured"}};
        var system=Star() with{Data=new(){Services=["Repair","MaterialTraderManufactured"]}};
        Check.That(filter.Matches(system));Check.Equal(new StarColour(0,64,255),filter.GetColour(system));
        Check.Equal(new StarColour(255,0,255),(filter with{Values=new HashSet<string>{"materialtraderxeno"}}).ColourForValue("materialtraderxeno"));
        Check.That(GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Services,"modulepacks",out var administration));Check.Equal(1f,administration.A);Check.Equal(new StarColour(201,235,69),administration.DisplayColour());
        Check.That(!GalaxyOriginalAppearance.TryColour(GalaxyFilterCategory.Services,"Repair",out _));
    }
}