Files
msime-windows/server/tests/src/test_inline_protocol.cpp
T
linym c07aa8e878 fix(server,ui-html): 降低设置窗口激活卡顿 (#155)
激活时不再重推整份配置;HTML 按 UTF-8 二进制读取;契约脚本移到标记之后;最大化按钮矩形用 rAF 合并。
2026-09-08 22:47:26 +08:00

46 lines
2.0 KiB
C++

#include "tests/includes/test_framework.h"
#include "webview2/inline_protocol.h"
static const std::wstring imports = L"<script src=\"https://msime-contracts/schema.js\"></script>"
L"<script src=\"https://msime-contracts/runtime.js\"></script>";
TEST_CASE(protocol_inline_preserves_order_and_removes_resource_loads)
{
std::wstring html = L"<head>" + imports + L"</head><body>toolbar</body>";
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"<body>toolbar</body>") != 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"<body>legacy toolbar</body>";
REQUIRE(!InlineWebViewProtocolScripts(html, L"schema", L"runtime"));
REQUIRE_EQ(html, L"<body>legacy toolbar</body>");
}
TEST_CASE(protocol_inline_replaces_scripts_after_markup)
{
std::wstring html = L"<head></head><body>toolbar</body>" + imports;
REQUIRE(InlineWebViewProtocolScripts(html, L"const schema = {};", L"const runtime = schema;"));
REQUIRE(html.find(L"src=") == std::wstring::npos);
REQUIRE(html.find(L"<body>toolbar</body>") < 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"</ScRiPt>") == std::wstring::npos);
REQUIRE(html.find(L"<\\/ScRiPt>") != std::wstring::npos);
}