Skip to content

Commit d607bd5

Browse files
committed
upload ide/test/runner.html
1 parent d03ab98 commit d607bd5

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

ide/test/runner.html

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<!DOCTYPE html>
2+
<html lang="zh-CN">
3+
<head><meta charset="UTF-8"><title>HC 引擎浏览器测试</title></head>
4+
<body style="font-family:monospace;background:#14110d;color:#e8ddc8;padding:20px;line-height:1.7">
5+
<h3 style="color:#d9ae6b">HC v0.01 引擎浏览器测试</h3>
6+
<pre id="out">运行中...</pre>
7+
<script src="../js/hic.js"></script>
8+
<script>
9+
let pass = 0, fail = 0; const logs = [];
10+
function ok(cond, label) { if (cond) { pass++; } else { fail++; logs.push("✗ " + label); } }
11+
const HC = window.HC;
12+
13+
// 1. 变量声明
14+
let r = HC.classify("it title t 你好 HiCode");
15+
ok(r.kind === "it" && r.name === "title" && r.vtype === "text" && r.value === "你好 HiCode", "it title t");
16+
r = HC.classify("it logo p");
17+
ok(r.kind === "it" && r.name === "logo" && r.vtype === "img" && r.value === "", "it logo p");
18+
r = HC.classify("it age int 18");
19+
ok(r.kind === "it" && r.name === "age" && r.vtype === "ordinary", "it age int -> ordinary");
20+
r = HC.classify("it msg");
21+
ok(r.kind === "it" && r.name === "msg" && r.vtype === "ordinary", "it msg -> ordinary");
22+
23+
// 2. in 展示
24+
r = HC.classify("title in t");
25+
ok(r.kind === "in" && r.mode === "text", "in t");
26+
r = HC.classify("logo in p");
27+
ok(r.kind === "in" && r.mode === "img", "in p");
28+
29+
// 3. 条件头
30+
ok(HC.classify("if age == 18:").type === "if", "if头");
31+
ok(HC.classify("orif age > 18:").type === "orif", "orif头");
32+
ok(HC.classify("noif:").type === "noif", "noif头");
33+
34+
// 4. 表达式求值
35+
ok(HC.evalExpr("age == 18", { age: { value: 18 } }) === true, "数值比较");
36+
ok(HC.evalExpr("1 == 1 and 2 > 1", {}) === true, "and");
37+
ok(HC.evalExpr("1 > 2 or 3 == 3", {}) === true, "or");
38+
ok(HC.evalExpr("not (1 == 2)", {}) === true, "not");
39+
ok(HC.evalExpr("'hello' in 'xxhello'", {}) === true, "in子串");
40+
41+
// 5. 导向
42+
r = HC.parseNav("home to about");
43+
ok(r && !r.cross && r.toPage === "about", "同项目 x to y");
44+
r = HC.parseNav("to about");
45+
ok(r && !r.cross && r.toPage === "about", "to y(当前页)");
46+
r = HC.parseNav("fr 我的项目 首页 big to 我的项目 关于");
47+
ok(r && r.cross && r.toProj === "我的项目", "fr 项目 页面 big to");
48+
49+
// 6. 端到端
50+
const page = { name: "index", code: [
51+
"it title t 你好,HiCode",
52+
"it intro t 简单上手的编程语言",
53+
"it logo p",
54+
"it count int 3",
55+
"if count == 3:",
56+
" intro in t",
57+
"noif:",
58+
" title in t",
59+
"to about"
60+
].join("\n"), images: { logo: "data:image/png;base64,AAAA" } };
61+
const pr = HC.processPage(page, {});
62+
ok(Object.keys(pr.vars).length === 4, "收集到4变量");
63+
ok(pr.vars.logo.isImg && pr.vars.logo.value === "data:image/png;base64,AAAA", "p绑定图片");
64+
const texts = pr.items.filter(x => x.kind === "display" && x.mode === "text");
65+
ok(texts.length === 1 && texts[0].value === "简单上手的编程语言", "if命中intro");
66+
ok(pr.items.filter(x => x.kind === "nav").length === 1, "1个导向");
67+
68+
// 7. HTML
69+
const proj = { id: "p1", name: "我的项目", pages: {
70+
p_a: page, p_b: { id: "p_b", name: "about", code: "it hello t 关于我们\nhello in t", images: {} } } };
71+
const merged = HC.buildProjectMergedHtml(proj, {});
72+
ok(merged.indexOf('data-page="我的项目::index"') >= 0, "合并含index");
73+
ok(merged.indexOf("简单上手的编程语言") >= 0, "合并含文本");
74+
ok(/<!DOCTYPE html>/i.test(merged), "HTML骨架");
75+
const single = HC.buildSinglePageHtml({ name: "我的项目" }, page);
76+
ok(single.indexOf("简单上手") >= 0 || single.indexOf("你好,HiCode") >= 0, "单页html");
77+
78+
// 8. ZIP
79+
const entries = HC.buildZipEntries([proj]);
80+
ok(entries.length === 2, "zip两页");
81+
const z = HC.zipFiles(entries.map(e => ({ name: e.name, data: e.html })));
82+
ok(z && z[0] === 0x50 && z[1] === 0x4b, "zip魔数PK");
83+
84+
document.getElementById("out").textContent = "通过 " + pass + " 项,失败 " + fail + " 项" + (fail ? "\n" + logs.join("\n") : "\n全部通过 ✅");
85+
</script>
86+
</body>
87+
</html>

0 commit comments

Comments
 (0)