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 XFEExtension.NetCore.XUnit.Attributes;

namespace XFEEDToolBox.Test;

[TestFixture]
public class GalaxyPowerOuterTests
{
    private static GalacticSystem Sample(GalaxyNativePowerOuter? outer)=>new("Actual",new(0,0,0))
    {Data=new(){Power="Unrelated Power",PowerState="Unoccupied",PowerActivities=["reinforcing"],NativeFilterFacts=new("F1",42,100){PowerOuter=outer}}};
    [Test] public void ActivitiesUsesItsOriginalPredicateInsteadOfOwnerMasksOrPositiveActivityProgress()
    {
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,PowerplayView=GalaxyPowerplayView.Activities,Category=GalaxyFilterCategory.Power,
            Values=new HashSet<string>(),PowerStateValues=new HashSet<string>(),UseMinimumActivity=true,MinimumActivity=1};
        Check.That(filter.UsesPowerOuter&&!filter.UsesPowerActivityCounter&&filter.IsQueryActive);
        Check.That(filter.Matches(Sample(new(true,100,new(10,20,30),50))));
        Check.That(!filter.Matches(Sample(new(false,100,new(10,20,30),50))));Check.That(!(filter with{IncludeUnknown=true}).Matches(Sample(new(false,null,null,null))));
        Check.That(!filter.Matches(Sample(null)));Check.That((filter with{IncludeUnknown=true}).Matches(Sample(new(null,null,null,null))));
        Check.Equal(filter.QueryKey,(filter with{Values=null,UseMinimumActivity=false,MinimumActivity=0}).QueryKey);
    }
    [Test] public void ExplicitUnknownSnapshotsClearPreviousOuterFactsAndNoRuntimeOuterEvidencePersists()
    {
        var old=Sample(new(true,100,new(10,20,30),50)).Data;
        var next=old.Merge(new(){NativeFilterFacts=new("F1",42,100){PowerOuter=null}});
        Check.That(next.NativeFilterFacts?.PowerOuter is null);Check.That(old.ForNativeContext("F1",42,101).NativeFilterFacts is null);
        var persisted=JsonSerializer.Serialize(old);Check.That(!persisted.Contains("PowerOuter")&&!persisted.Contains("NativeFilterFacts"));
    }
    [Test] public async Task OriginalActivitiesNeverIssuesAPublicOwnerQueryAndTerritoryCounterRemainsIndependent()
    {
        using var http=new HttpClient(new NoHttp());var query=new GalaxyQueryService(http);
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,Category=GalaxyFilterCategory.Power,PowerplayView=GalaxyPowerplayView.Activities};
        Check.Equal(0,(await query.PlansAsync(filter)).Count);
        var territory=filter with{PowerplayView=GalaxyPowerplayView.Territory,TerritoryActivityFilterEnabled=true,UseMinimumActivity=true,ActivityAllPowers=true,MinimumActivity=0};
        Check.That(!territory.UsesPowerOuter&&territory.UsesPowerActivityCounter&&territory.ActivityNativeQueryReady);Check.That(territory.QueryKey!=filter.QueryKey);
        var known=Sample(null) with{Data=new(){Power="Actual",NativeFilterFacts=new("F1",42,100,PowerActivity:new("",GalaxyPowerActivity.Undermining,0,AllPowers:true)){PowerStatus=new(0,0,null,null,0,0,true)}}};
        Check.That(territory.Matches(known));Check.That(!(territory with{MinimumActivity=.1}).Matches(known));
    }
    [Test] public void ActivitiesUseTheirOwnOriginalHdrColourAndSizeAndExplicitNullClearsThem()
    {
        var style=new GalaxyNativePowerOuterStyle([.4f,.5f,1.5f],[.13286832f,.21404114f,2.5371552f],.7f,.35f);
        var filter=new GalaxyMapFilter{Mode=GalaxyMapMode.Powerplay,PowerplayView=GalaxyPowerplayView.Activities,Category=GalaxyFilterCategory.Power};
        var system=Sample(new(true,100,new(10,20,30),50){Style=style});
        var rgba=filter.GetOriginalRgba(system)!.Value;
        Check.Equal(1.5f,rgba.Z);Check.Equal(.35f,rgba.W);Check.Equal(.7f,filter.RelativeSize(system));Check.Equal(.35f,filter.GetOpacity(system));
        Check.That(filter.Matches(system));
        var unknown=system with{Data=system.Data.Merge(new(){NativeFilterFacts=new("F1",42,100){PowerOuter=new(true,100,new(10,20,30),50){Style=null}}})};
        Check.That(filter.Matches(unknown));Check.That(filter.GetOriginalRgba(unknown) is null);Check.Equal(1f,filter.GetOpacity(unknown));
        var equivalent=new GalaxyNativePowerOuterStyle(new[]{.4f,.5f,1.5f},new[]{.13286832f,.21404114f,2.5371552f},.7f,.35f);
        Check.Equal(style,equivalent);Check.Equal(style.GetHashCode(),equivalent.GetHashCode());
        Check.That(!JsonSerializer.Serialize(system.Data).Contains("RawRgb"));
    }
    private sealed class NoHttp:HttpMessageHandler
    {protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)=>throw new InvalidOperationException("An original Activities query cannot call a public catalogue.");}
}