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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Runtime.InteropServices;
using System.Text.Json;

namespace XFEEDToolBox.Plugin;

internal static unsafe partial class Navigation
{
    static uint GalaxyCommodityFilterWireSelfTest()
    {
        static JsonElement Parse(string json){using var doc=JsonDocument.Parse(json);return doc.RootElement.Clone();}
        lock(galaxyFactsMutex)
        {
            var savedWork=galaxyFactsWork;var savedGeneration=galaxyFactsGeneration;
            try
            {
                uint passed=0;galaxyFactsWork=new();galaxyFactsGeneration=0;
                JsonElement Wire(string op,string fields)=>Parse(GalaxyFilterFactsRequest(op,Parse("{"+fields+"}")).ToJsonString());
                JsonElement Page()=>Wire("galaxy.facts.result","\"generation\":"+galaxyFactsWork.generation);
                void Cancel()=>Wire("galaxy.facts.cancel","\"generation\":"+galaxyFactsWork.generation);
                string[] styleFields=["revision","category","opacity","size","sprite","rgba"];
                Wire("galaxy.facts","\"systemAddresses\":[\"9007199254740993\"],\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":3");
                galaxyFactsWork.items.Add((9007199254740993,default));var row=Page().GetProperty("items")[0];var commodity=row.GetProperty("commodity");
                if(commodity.EnumerateObject().Count()==8&&commodity.GetProperty("commodityUid").GetUInt32()==0&&commodity.GetProperty("priceMode").GetInt32()==3&&
                   styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&row.GetProperty("systemAddress").GetString()=="9007199254740993"&&!galaxyFactsWork.includePowerStatus)passed|=1;
                galaxyFactsWork.commodity[9007199254740993]=new(0,3,0,4,0,0,13,[100,1.5f,.25f,0]);
                commodity=Page().GetProperty("items")[0].GetProperty("commodity");
                if(commodity.GetProperty("revision").GetUInt32()==0&&commodity.GetProperty("category").GetInt32()==4&&commodity.GetProperty("opacity").GetSingle()==0&&
                   commodity.GetProperty("size").GetSingle()==0&&commodity.GetProperty("sprite").GetInt32()==13&&commodity.GetProperty("rgba")[0].GetSingle()==100&&commodity.GetProperty("rgba")[3].GetSingle()==0)passed|=2;
                Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":4294967294,\"commodityPriceMode\":2");
                galaxyFactsWork.items.Add((300,default));galaxyFactsWork.commodity[300]=new(uint.MaxValue-1,2,uint.MaxValue,3,.35f,.5f,11,[1,1,1,1]);
                commodity=Page().GetProperty("items")[0].GetProperty("commodity");
                if(commodity.GetProperty("commodityUid").GetUInt32()==uint.MaxValue-1&&commodity.GetProperty("priceMode").GetInt32()==2&&
                   commodity.GetProperty("revision").GetUInt32()==uint.MaxValue&&commodity.GetProperty("category").GetInt32()==3&&commodity.GetProperty("sprite").GetInt32()==11)passed|=4;
                Cancel();Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":false,\"commodityUid\":null,\"commodityPriceMode\":null");
                galaxyFactsWork.items.Add((300,default));
                if(Page().GetProperty("items")[0].GetProperty("commodity").ValueKind==JsonValueKind.Null&&galaxyFactsWork.commodity.Count==0)passed|=8;
                Cancel();var generation=galaxyFactsGeneration;var rejected=0;
                string[] invalid=["\"includeCommodity\":1","\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":4",
                    "\"includeCommodity\":true,\"commodityUid\":0,\"commodityPriceMode\":-1","\"includeCommodity\":true,\"commodityUid\":4294967295,\"commodityPriceMode\":0",
                    "\"includeCommodity\":true,\"commodityUid\":-1,\"commodityPriceMode\":0","\"includeCommodity\":true,\"commodityUid\":\"1\",\"commodityPriceMode\":0",
                    "\"includeCommodity\":true,\"commodityUid\":0","\"includeCommodity\":true,\"commodityPriceMode\":0","\"commodityUid\":0","\"commodityPriceMode\":0"];
                foreach(var fields in invalid)try{Wire("galaxy.facts","\"systemAddresses\":[\"300\"],"+fields);}catch(InvalidDataException){rejected++;}
                if(rejected==invalid.Length&&galaxyFactsGeneration==generation)passed|=16;
                Wire("galaxy.facts","\"systemAddresses\":[\"300\"],\"includeCommodity\":true,\"commodityUid\":1,\"commodityPriceMode\":0");var retired=galaxyFactsWork;Cancel();
                Wire("galaxy.facts","\"systemAddresses\":[\"301\"],\"includeCommodity\":true,\"commodityUid\":2,\"commodityPriceMode\":1");
                var stale=false;try{Wire("galaxy.facts.result","\"generation\":"+retired.generation);}catch(InvalidOperationException){stale=true;}
                galaxyFactsWork.items.Add((301,default));galaxyFactsWork.commodity[301]=new(1,0,5,0,1,1,12,[1,1,1,1]);
                commodity=Page().GetProperty("items")[0].GetProperty("commodity");
                if(stale&&retired.cancelled&&styleFields.All(k=>commodity.GetProperty(k).ValueKind==JsonValueKind.Null)&&commodity.GetProperty("commodityUid").GetUInt32()==2)passed|=32;
                var work=galaxyFactsWork;work.items.Clear();work.commodity.Clear();work.addresses=Enumerable.Range(1,180).Select(i=>9007199254740992UL+(ulong)i).ToArray();
                work.includePowerStatus=true;work.includePowerOuter=true;work.includePowerTerritory=true;work.includePowerActivity=true;work.powerAllPowers=true;work.powerActivityId=5;work.territoryActivityEnabled=true;work.done=true;
                foreach(var address in work.addresses)
                {
                    work.items.Add((address,default));work.commodity[address]=new(2,1,uint.MaxValue,0,.35f,.5f,12,[100,1.5f,.25f,.35f]);
                    work.powerStatus[address]=new(2,5,1,17,uint.MaxValue,uint.MaxValue,true);
                    work.powerTerritory[address]=new(2,5,17,29.8375f,[.4f,.5f,1.5f],[.13286832f,.21404114f,2.5371552f],.15f);
                    work.powerOuter[address]=new(false,address,[12345.6789,-23456.789,34567.89],1000000);work.powerCounters[address]=2.5f;
                }
                var first=Page();var count=first.GetProperty("items").GetArrayLength();
                if(count is >0 and <96&&System.Text.Encoding.UTF8.GetByteCount(first.GetRawText())<65535&&first.GetProperty("total").GetInt32()==180)passed|=64;
                var addresses=new List<ulong>();var bounded=true;
                while(addresses.Count<180)
                {
                    var page=Wire("galaxy.facts.result","\"generation\":"+work.generation+",\"offset\":"+addresses.Count+",\"limit\":96");var rows=page.GetProperty("items");
                    if(rows.GetArrayLength()==0){bounded=false;break;}bounded&=System.Text.Encoding.UTF8.GetByteCount(page.GetRawText())<65535;
                    foreach(var item in rows.EnumerateArray())
                    {
                        addresses.Add(ulong.Parse(item.GetProperty("systemAddress").GetString()!));var style=item.GetProperty("commodity");
                        bounded&=style.GetProperty("commodityUid").GetUInt32()==2&&style.GetProperty("priceMode").GetInt32()==1&&style.GetProperty("rgba")[0].GetSingle()==100;
                    }
                }
                if(bounded&&addresses.SequenceEqual(work.addresses))passed|=128;
                return passed;
            }
            finally{galaxyFactsWork=savedWork;galaxyFactsGeneration=savedGeneration;}
        }
    }
#if PLUGIN_NAVIGATION
    [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyCommodityFilterWireSelfTest")]
    internal static uint ExportGalaxyCommodityFilterWireSelfTest()=>RunTest(GalaxyCommodityFilterWireSelfTest);
#endif
}