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 GalaxyColonisationHighlightTests
{
    static GalaxyNativeColonisationHighlight? Read(string json){using var doc=JsonDocument.Parse(json);return GalaxyNativeColonisationHighlight.FromWire(doc.RootElement);}
    static string Wire(int status=0,float distance=4,float radius=4)=>JsonSerializer.Serialize(new{source=GalaxyNativeColonisationHighlight.Source,
        centreSystemAddress="9007199254740995",eligibilityStatus=status,distanceSquared=distance,radiusSquared=radius,rawRgb=new[]{.3f,1f,.2f}});
    static GalacticSystem System(GalaxyNativeColonisationHighlight? highlight,int status=0)=>new("colonisation-source-fixture",new Coordinates(0,0,0))
    {Data=new(){NativeFilterFacts=new("fixture",123,42,ColonisationStatus:status){ColonisationHighlight=highlight,ColonisationHighlightRequested=true}}};
    [Test]
    public void OriginalRadiusUsesInclusiveSquaredBoundaryAndIndependentEligibility()
    {
        var edge=Read(Wire())!;Check.Equal(9007199254740995L,edge.CentreSystemAddress);Check.That(edge.Highlighted);
        Check.That(!Read(Wire(distance:4.01f))!.Highlighted&&!Read(Wire(status:5))!.Highlighted);
        Check.That(Read(Wire(distance:0,radius:0))!.Highlighted&&Read("null") is null);
    }
    [Test]
    public void MissingWrongSourceInexactAddressPendingStatusAndMalformedColourAreRejected()
    {
        void Reject(string json){var rejected=false;try{Read(json);}catch(InvalidDataException){rejected=true;}Check.That(rejected);}
        Reject("{}");Reject(Wire(status:12));Reject(Wire(radius:-1));Reject(Wire(distance:-1));
        Reject(Wire().Replace(GalaxyNativeColonisationHighlight.Source,"journal-colonisation"));
        Reject(Wire().Replace("\"9007199254740995\"","9007199254740995"));
        Reject(Wire().Replace("[0.3,1,0.2]","[0.3,1]"));Reject(Wire().Replace("[0.3,1,0.2]","[0.3,-1,0.2]"));
    }
    [Test]
    public void OnlyColonisationViewWithBoundRadiusAndMatchingStatusUsesOriginalGreen()
    {
        var filter=GalaxyMapFilter.Default with{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation};
        var system=System(Read(Wire()));var rgba=filter.GetOriginalRgba(system)!.Value;
        Check.Equal(.3f,rgba.X);Check.Equal(1f,rgba.Y);Check.Equal(.2f,rgba.Z);Check.Equal(1f,rgba.W);
        Check.Equal(new GalaxyRawColour(.3f,1f,.2f).DisplayColour(),filter.GetColour(system));
        Check.That((filter with{Mode=GalaxyMapMode.Map}).GetOriginalRgba(system) is null);
        Check.That(filter.GetOriginalRgba(System(null)) is null&&filter.GetOriginalRgba(System(Read(Wire(distance:5)))) is null);
        var excluded=filter.GetOriginalRgba(System(Read(Wire()),5))!.Value;
        Check.Equal(GalaxyOriginalAppearance.Colonisation[3].R,excluded.X);Check.Equal(.35f,excluded.W);
    }
    [Test]
    public void HighlightDoesNotBypassStrictQueryOrRestoreUnknownAndForeignOwnedStars()
    {
        var filter=GalaxyMapFilter.Default with{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation,Values=new HashSet<string>()};
        var system=System(Read(Wire()));Check.That(!filter.Matches(system)&&!filter.Evaluate(system).Matches);
        var ownOnly=filter with{Values=new HashSet<string>{"localplayerclaimed"},RequireOriginalColonisationOwnershipFacts=true};
        Check.That(!ownOnly.Matches(system)&&!ownOnly.Evaluate(system).Matches);
        var unclaimed=filter with{Values=new HashSet<string>{"unclaimed"}};Check.That(unclaimed.Matches(system)&&unclaimed.Evaluate(system).Matches);
    }
    [Test]
    public void UnrelatedReadsPreserveSameSourceButExplicitUnknownAndChangedSourceClearHighlight()
    {
        var original=System(Read(Wire())).Data;
        var unrelated=original.Merge(new(){NativeFilterFacts=new("fixture",123,42)});
        Check.That(unrelated.NativeFilterFacts!.ColonisationHighlight is not null&&unrelated.NativeFilterFacts.ColonisationStatus==0);
        var missing=original.Merge(new(){NativeFilterFacts=new("fixture",123,42){ColonisationHighlightRequested=true}});
        Check.That(missing.NativeFilterFacts!.ColonisationHighlight is null);
        foreach(var changed in new[]{new GalaxyNativeSystemFacts("other",123,42),new("fixture",124,42),new("fixture",123,43)})
            Check.That(original.Merge(new(){NativeFilterFacts=changed}).NativeFilterFacts!.ColonisationHighlight is null);
    }
    [Test]
    public void NormalColourAndSizeUseModeZeroWhileVerifiedGreenKeepsItsSeparateAlphaOne()
    {
        var filter=GalaxyMapFilter.Default with{Mode=GalaxyMapMode.Colonisation,Category=GalaxyFilterCategory.Colonisation,SizeCategory=GalaxyFilterCategory.Colonisation};
        GalacticSystem Normal(int? status,GalaxyNativeColonisationHighlight? highlight=null)=>System(highlight) with{Data=new(){
            NativeFilterFacts=System(highlight).Data.NativeFilterFacts! with{ColonisationNormalStatus=status,ColonisationNormalStatusRequested=true}}};
        var red=Normal(5);var rgba=filter.GetOriginalRgba(red)!.Value;
        Check.Equal(GalaxyOriginalAppearance.Colonisation[3].R,rgba.X);Check.Equal(.35f,rgba.W);
        Check.Equal(GalaxyOriginalAppearance.DefaultSize*GalaxyOriginalSizeOptions.ColonisationExcludedMultiplier,filter.SelectedOriginalSize(red)!.Value);
        var grey=filter.GetOriginalRgba(Normal(0))!.Value;Check.Equal(GalaxyOriginalAppearance.Colonisation[0].R,grey.X);
        Check.That(filter.GetOriginalRgba(Normal(null)) is null&&filter.SelectedOriginalSize(Normal(null)) is null);
        var green=Normal(5,Read(Wire()));Check.Equal(.3f,filter.GetOriginalRgba(green)!.Value.X);Check.Equal(1f,filter.GetOriginalRgba(green)!.Value.W);
        var original=red.Data;var unrelated=original.Merge(new(){NativeFilterFacts=new("fixture",123,42)});
        Check.Equal(5,unrelated.NativeFilterFacts!.ColonisationNormalStatus!.Value);
        Check.That(original.Merge(new(){NativeFilterFacts=new("other",123,42)}).NativeFilterFacts!.ColonisationNormalStatus is null);
    }
    [Test]
    public void OrdinaryMapQueriesUseNormalClassifierAndCannotBorrowOwnershipOrPublicProof()
    {
        var filter=GalaxyMapFilter.Default with{Mode=GalaxyMapMode.Map,Category=GalaxyFilterCategory.Colonisation,Values=new HashSet<string>{"unclaimed"}};
        GalacticSystem Row(int? normal)=>System(null) with{Data=new(){OwnedColony=true,Colonisation="unclaimed",
            ConfirmedQueries=new HashSet<string>{filter.QueryKey},NativeFilterFacts=System(null).Data.NativeFilterFacts! with{
                ColonisationNormalStatus=normal,ColonisationNormalStatusRequested=true,ColonisationOwnershipRequested=false}}};
        var excluded=Row(5);Check.That(!filter.Matches(excluded)&&!filter.Evaluate(excluded).Matches&&!filter.IsUnknown(excluded));
        Check.That(filter.Matches(Row(0))&&filter.Evaluate(Row(0)).Matches);
        var missing=Row(null);Check.That(!filter.Matches(missing)&&filter.Evaluate(missing).Unknown);
        var ownOnly=filter with{Values=new HashSet<string>{"localplayerclaimed"}};
        Check.That(!ownOnly.Matches(Row(0))&&ownOnly.IsUnknown(Row(0)));
        Check.That((filter with{Mode=GalaxyMapMode.Colonisation}).Matches(excluded));
    }
}