using System.Text.Json; using XFEEDToolBox.Core.Navigation; using XFEEDToolBox.Views; namespace XFEEDToolBox; public partial class App { // Explicit route-only integration test of the actual page command. Never // invokes StartNavigationCommand, flight inputs or any Journal/file writes. private static async Task RunGameRouteAcceptanceAsync(string[] args,string reportPath) { if(File.Exists(reportPath))throw new IOException("Use a new game route acceptance report path."); var target=GetArgument(args,"--accept-destination")??throw new ArgumentException("An explicit game-route destination is required."); var started=DateTimeOffset.UtcNow;var initial=Runtime.Player;var rounds=new List();string? failure=null;var passed=false; try { ViewModel.DemoMode=false;ViewModel.NavigationDestination=target;AppShellPage.Current!.Navigate(typeof(NavigationPage)); var count=args.Contains("--accept-replan")?2:1; for(var i=0;i=2&&route[^1].Name.Equals(target,StringComparison.OrdinalIgnoreCase) &&ViewModel.LastConfirmedGameRoute?.NativeRouteFingerprint==GameRouteFingerprint.Compute(route) &&fsd.GetProperty("targetValid").GetBoolean()&&fsd.GetProperty("targetAddress").GetString()==ViewModel.NavigationLegs.First(r=>r.Record.Next).Record.SystemAddress.ToString(System.Globalization.CultureInfo.InvariantCulture) &¤t.Navigation.CurrentSystemAddress==initial.Navigation.CurrentSystemAddress&¤t.Navigation.LastJumpAt==initial.Navigation.LastJumpAt &&!fsd.GetProperty("ownedCharging").GetBoolean()&&!native.GetProperty("controlApplied").GetBoolean(); rounds.Add(new{round=i+1,valid,ViewModel.NavigationStatus,ViewModel.NavigationRouteSummary,waypoints=route.Count,route=current.Navigation.Route, routeChanged=!ReferenceEquals(previous,route),nativeFullRouteFingerprint=ViewModel.LastConfirmedGameRoute?.NativeRouteFingerprint,gameProcessId=driver.ProcessId,nativeFsd=fsd,controlApplied=native.GetProperty("controlApplied"), current.Navigation.CurrentSystemAddress,current.Navigation.LastJumpAt}); if(!valid)throw new InvalidOperationException("Game route page command acceptance failed: "+ViewModel.NavigationStatus); await Task.Delay(1250); } passed=true; } catch(Exception error){failure=error.ToString();} await File.WriteAllTextAsync(reportPath,JsonSerializer.Serialize(new{started,completed=DateTimeOffset.UtcNow,target,passed,failure,rounds, actualSystem=Runtime.Player.Navigation.CurrentSystemAddress,initialSystem=initial.Navigation.CurrentSystemAddress, planPageCommandUsed=true,realGameRouteUsed=true,screenUse=false,osInputSent=false,flightCommandsInvoked=false,journalWrites=0,navRouteWrites=0},new JsonSerializerOptions{WriteIndented=true})); MainWindow.Close(); } }