using System.Runtime.InteropServices; using System.Text.Json; namespace XFEEDToolBox.Plugin; internal static unsafe partial class Navigation { static uint GalaxyBasicSystemFactsWireSelfTest() { static JsonElement Parse(string text){using var document=JsonDocument.Parse(text);return document.RootElement.Clone();} lock(galaxyFactsMutex) { var saved=galaxyFactsWork;var generation=galaxyFactsGeneration; try { galaxyFactsWork=new();galaxyFactsGeneration=0;uint passed=0; JsonElement Wire(string op,string body)=>Parse(GalaxyFilterFactsRequest(op,Parse(body)).ToJsonString()); void Cancel()=>Wire("galaxy.facts.cancel","{\"generation\":"+galaxyFactsWork.generation+"}"); Wire("galaxy.facts","{\"systemAddresses\":[\"9007199254740995\"]}"); galaxyFactsWork.items.Add((9007199254740995UL,default));galaxyFactsWork.basicSystems[9007199254740995UL]=new(1,4,4,6,17,1,79); if(!galaxyFactsWork.includeBasicSystem&&Wire("galaxy.facts.result","{\"generation\":1}").GetProperty("items")[0].GetProperty("basicSystem").ValueKind==JsonValueKind.Null)passed|=1; Cancel();Wire("galaxy.facts","{\"systemAddresses\":[\"9007199254740995\"],\"includeBasicSystem\":true}"); galaxyFactsWork.items.Add((9007199254740995UL,default)); if(galaxyFactsWork.includeBasicSystem&&Wire("galaxy.facts.result","{\"generation\":2}").GetProperty("items")[0].GetProperty("basicSystem").ValueKind==JsonValueKind.Null)passed|=2; galaxyFactsWork.basicSystems[9007199254740995UL]=new(9007199254740999UL,4,4,6,17,9007199254740997UL,79){allegianceKey="Federation"}; var basic=Wire("galaxy.facts.result","{\"generation\":2}").GetProperty("items")[0].GetProperty("basicSystem"); if(basic.GetProperty("population").GetString()=="9007199254740999"&&basic.GetProperty("allegianceId").GetString()=="9007199254740997"&& basic.GetProperty("governmentId").GetUInt32()==4&&basic.GetProperty("primaryEconomyId").GetUInt32()==4&& basic.GetProperty("secondaryEconomyId").GetUInt32()==6&&basic.GetProperty("factionStateId").GetUInt32()==17&&basic.GetProperty("securityValue").GetByte()==79&& basic.GetProperty("allegianceKey").GetString()=="Federation")passed|=4; var observed=!basic.GetProperty("defaulted").GetBoolean(); galaxyFactsWork.basicSystems[9007199254740995UL]=new(0,1,1,1,0,ulong.MaxValue,0){defaulted=true,allegianceKey="None"}; basic=Wire("galaxy.facts.result","{\"generation\":2}").GetProperty("items")[0].GetProperty("basicSystem"); var originalDefault=basic.GetProperty("defaulted").GetBoolean()&&basic.GetProperty("population").GetString()=="0"&&basic.GetProperty("allegianceKey").GetString()=="None"; galaxyFactsWork.basicSystems[9007199254740995UL]=new(0,uint.MaxValue,29,28,40,ulong.MaxValue,255); basic=Wire("galaxy.facts.result","{\"generation\":2}").GetProperty("items")[0].GetProperty("basicSystem"); if(basic.GetProperty("population").GetString()=="0"&&basic.GetProperty("allegianceId").GetString()=="18446744073709551615"&& basic.GetProperty("governmentId").GetUInt32()==uint.MaxValue&&basic.GetProperty("primaryEconomyId").GetUInt32()==29&&basic.GetProperty("securityValue").GetUInt32()==255&& basic.GetProperty("allegianceKey").ValueKind==JsonValueKind.Null&&observed&&originalDefault&&!basic.GetProperty("defaulted").GetBoolean())passed|=8; var rejected=0;foreach(var value in new[]{"1","\"true\"","{}","[]"}) try{Wire("galaxy.facts","{\"systemAddresses\":[\"300\"],\"includeBasicSystem\":"+value+"}");}catch(InvalidDataException){rejected++;} if(rejected==4&&galaxyFactsGeneration==2)passed|=16; Cancel();var previous=galaxyFactsWork; Wire("galaxy.facts","{\"systemAddresses\":[\"300\"],\"includeBasicSystem\":false}"); if(previous.cancelled&&previous.done&&!galaxyFactsWork.includeBasicSystem&&galaxyFactsWork.basicSystems.Count==0)passed|=32; Cancel();Wire("galaxy.facts","{\"systemAddresses\":[\"300\"],\"includeBasicSystem\":true}"); galaxyFactsWork.items=Enumerable.Range(1,200).Select(i=>((ulong)i,default(GalaxyFilterFacts))).ToList(); foreach(var (address,_) in galaxyFactsWork.items)galaxyFactsWork.basicSystems[address]=new(ulong.MaxValue,uint.MaxValue,uint.MaxValue,uint.MaxValue,uint.MaxValue,ulong.MaxValue,255); var page=Wire("galaxy.facts.result","{\"generation\":4,\"limit\":9999}").GetProperty("items"); if(page.GetArrayLength() is >0 and <=96&&page.EnumerateArray().Sum(row=>System.Text.Encoding.UTF8.GetByteCount(row.GetRawText()))<=48000)passed|=64; var frame=new Snapshot{valid=true,entity=42,referenceWorld=100};var work=new GalaxyFilterFactsWork{expires=100,includeBasicSystem=true}; var bound=BindGalaxyFilterFactsWork(work,frame,1);frame.referenceWorld=101; if(bound&&!BindGalaxyFilterFactsWork(work,frame,2)&&work.done&&work.error.Contains("changed"))passed|=128; return passed; } finally{galaxyFactsWork=saved;galaxyFactsGeneration=generation;} } } #if PLUGIN_NAVIGATION [UnmanagedCallersOnly(EntryPoint="XFENavigationGalaxyBasicSystemFactsWireSelfTest")] internal static uint ExportGalaxyBasicSystemFactsWireSelfTest()=>RunTest(GalaxyBasicSystemFactsWireSelfTest); #endif }