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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

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

namespace XFEEDToolBox.Test;

[TestFixture]
public sealed class GalaxyNavRouteMembershipWireTests
{
    [Test] public void ProfileKeepsItsMembershipIndexDistinctFromSmallSizeModeAndCopiesItToSelection()
    {
        using var source=JsonDocument.Parse("{\"origin\":[0,0,0],\"queryCentre\":[0,0,0],\"surfaceDensity\":1,\"qualityStarCount\":100,\"runtimeRadiusMultiplier\":1,\"sparseExpansion\":1,\"smallMode\":false,\"originalViewMode\":0,\"debugEnabled\":false,\"navRouteViewMode\":1,\"navRouteMembershipMode\":1,\"referenceKind\":\"camera-eye\"}");
        var profile=NativeGalaxyCatalog.ReadCatalogueProfile(source.RootElement);
        Check.Equal(false,profile.SmallMode!.Value);Check.Equal(1,profile.NavRouteViewMode!.Value);Check.Equal(1,profile.NavRouteMembershipMode!.Value);
        var camera=GalaxyCamera.Create(new(0,0,0),1600,900,0,.3,10);
        profile=profile with{QueryCentre=GalaxyOriginalCatalogueLod.ClampCentre(GalaxyOriginalCatalogueLod.QueryCentre(camera,profile.OriginalViewMode),profile.Origin)};
        Check.That(profile.TrySelection(camera,out var selection));
        Check.Equal(1,selection!.NavRouteViewMode!.Value);Check.Equal(1,selection.NavRouteMembershipMode!.Value);
    }

    [Test] public void ProfileRejectsMismatchedOrPartialMembershipContext()
    {
        foreach(var fields in new[]{"\"navRouteViewMode\":1,\"navRouteMembershipMode\":0","\"navRouteViewMode\":1","\"navRouteMembershipMode\":1"})
        {
            using var source=JsonDocument.Parse("{\"origin\":[0,0,0],\"referenceKind\":\"camera-eye\","+fields+"}");
            Check.Throws<InvalidDataException>(()=>NativeGalaxyCatalog.ReadCatalogueProfile(source.RootElement));
        }
    }

    [Test] public async Task AppearanceWirePreservesKnownFalseAndModeOneSeparatelyFromUnavailableMembership()
    {
        var id=Random.Shared.Next(170000000,180000000);using var deadline=new CancellationTokenSource(TimeSpan.FromSeconds(5));
        var server=Task.Run(async()=>
        {
            await using var pipe=new NamedPipeServerStream($"XFEEDToolBox.Navigation.{id}",PipeDirection.InOut,1,PipeTransmissionMode.Byte,PipeOptions.Asynchronous);
            await pipe.WaitForConnectionAsync(deadline.Token);var bytes=new byte[65536];await pipe.ReadAsync(bytes,deadline.Token);
            var result=new{generation=1,done=true,error="",items=new[]{new{name="Recorded",systemAddress="9007199254740995",position=new[]{0d,0d,0d},starClass="G",
                originalAppearance=new{typeRgba=0xffffffffu,realisticRgba=(uint?)null,colourBlend=(float?)null,rawScale=32768u,classification=(ushort)4,size=.5f,smallSize=.2f,smallSizeActive=(bool?)false,
                    navRouteMembership=(bool?)false,navRouteMembershipMode=(int?)1,navRouteViewMode=(int?)1}}}};
            await pipe.WriteAsync(JsonSerializer.SerializeToUtf8Bytes(new{ok=true,result}),deadline.Token);await pipe.WriteAsync(new byte[]{10},deadline.Token);
        });
        var row=await new NativeGalaxyCatalog(id).FindAsync("Recorded",deadline.Token);await server;
        Check.Equal(false,row.OriginalAppearance!.NavRouteMembership!.Value);Check.Equal(1,row.OriginalAppearance.NavRouteMembershipMode!.Value);
        Check.Equal(1,row.OriginalAppearance.NavRouteViewMode!.Value);Check.Equal(false,row.OriginalAppearance.SmallSizeActive!.Value);
    }
}