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

XFESystem

【Rust】XFE系统,基于Rust和汇编

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

if (args.Length != 2 || args[0] != "--Verify")
{
    global::System.Console.Error.WriteLine("Usage: XFESystem.BrowserDemo --Verify Report.json");
    return 2;
}

var browser = new BrowserService();
var page = browser.Navigate("about:Start");
var javascript = browser.PreviewJavaScript("const numbers = [1,2,3]; console.log('JS', numbers.map(x => x * 2).reduce((a,b) => a + b, 0)); 6 * 7");
var markdown = browser.PreviewMarkdown("# XFESystem\n\n**Markdown preview**\n\n```js\nconsole.log(42);\n```");
using var quotaRuntime=new JavaScriptRuntime(new BrowserLimits { MaximumStatements = 100 });
using var atomicsRuntime=new JavaScriptRuntime();
var quota = quotaRuntime.Evaluate("while(true) {}");
var atomics = atomicsRuntime.Evaluate("Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0)");
var assertions = new Dictionary<string, bool>
{
    ["ActualInlineScriptAndDomMutation"] = page.Text.Contains("JavaScript ready: 12", StringComparison.Ordinal),
    ["ActualJavaScriptInterpreter"] = javascript == "JS 12\n42",
    ["FreshPreviewHasNoPageDom"] = browser.PreviewJavaScript("typeof document") == "undefined",
    ["WebsiteMarkdownRenderer"] = markdown.Contains("Markdown preview", StringComparison.Ordinal) && markdown.Contains("console.log(42);", StringComparison.Ordinal),
    ["StatementLimitStopsInfiniteLoop"] = !quota.Success && quota.Error.Contains("statement", StringComparison.OrdinalIgnoreCase),
    ["AtomicsCannotSuspend"] = !atomics.Success && atomics.Error.Contains("Atomics.wait cannot be used", StringComparison.Ordinal),
    ["NoClrAccess"] = browser.PreviewJavaScript("typeof System") == "undefined",
    ["NativeNetworkDoesNotFallBackToHost"] = browser.Navigate("https://example.test/").Title == "Navigation failed"
};
var report = new BrowserVerificationReport
{
    Schema = "XFESystem.Browser.HostVerification.V1",
    HostOnly = true,
    GuestExecution = false,
    NetworkVerified = false,
    Runtime = RuntimeInformation.FrameworkDescription,
    OperatingSystem = RuntimeInformation.OSDescription,
    Capabilities = browser.Capabilities,
    Passed = assertions.Values.All(value => value),
    Assertions = assertions,
    HtmlPageText = page.Text,
    JavaScriptText = javascript,
    MarkdownText = markdown
};
var path = Path.GetFullPath(args[1]);
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
File.WriteAllText(path, JsonSerializer.Serialize(report,
    BrowserReportJsonContext.Default.BrowserVerificationReport), new UTF8Encoding(false));
global::System.Console.WriteLine($"Host browser verification: {path}");
return report.Passed ? 0 : 1;