#include "tests/includes/test_framework.h" #include "webview2/inline_protocol.h" static const std::wstring imports = L"" L""; TEST_CASE(protocol_inline_preserves_order_and_removes_resource_loads) { std::wstring html = L"" + imports + L"toolbar"; REQUIRE(InlineWebViewProtocolScripts(html, L"const schema = {};", L"const runtime = schema;")); REQUIRE(html.find(L"src=") == std::wstring::npos); REQUIRE(html.find(L"const schema") < html.find(L"const runtime")); REQUIRE(html.find(L"toolbar") != std::wstring::npos); const auto inlined = html; REQUIRE(!InlineWebViewProtocolScripts(html, L"schema", L"runtime")); REQUIRE_EQ(html, inlined); } TEST_CASE(protocol_inline_keeps_fallback_if_assets_are_missing) { std::wstring html = imports; REQUIRE(!InlineWebViewProtocolScripts(html, L"schema", L"")); REQUIRE_EQ(html, imports); REQUIRE(!InlineWebViewProtocolScripts(html, L"", L"runtime")); REQUIRE_EQ(html, imports); html = L"legacy toolbar"; REQUIRE(!InlineWebViewProtocolScripts(html, L"schema", L"runtime")); REQUIRE_EQ(html, L"legacy toolbar"); } TEST_CASE(protocol_inline_replaces_scripts_after_markup) { std::wstring html = L"toolbar" + imports; REQUIRE(InlineWebViewProtocolScripts(html, L"const schema = {};", L"const runtime = schema;")); REQUIRE(html.find(L"src=") == std::wstring::npos); REQUIRE(html.find(L"toolbar") < html.find(L"const schema")); } TEST_CASE(protocol_inline_escapes_embedded_html_end_tags) { std::wstring html = imports; REQUIRE(InlineWebViewProtocolScripts(html, L"const schema = '\u003c/ScRiPt>';", L"const runtime = {};")); REQUIRE(html.find(L"") == std::wstring::npos); REQUIRE(html.find(L"<\\/ScRiPt>") != std::wstring::npos); }