Skip to content

Commit 0ff6e32

Browse files
committed
docs: 增加模糊测试转换率在线文档
1 parent 890e29f commit 0ff6e32

16 files changed

Lines changed: 1440 additions & 1 deletion

File tree

.github/workflows/static.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# 部署静态内容到 GitHub Pages
2+
name: 部署 Fuzz 覆盖率报告到 Pages
3+
4+
on:
5+
# 当 main 分支有新提交时自动部署
6+
push:
7+
branches: ["main"]
8+
9+
# 允许在 Actions 页面手动触发
10+
workflow_dispatch:
11+
12+
# 授予 GITHUB_TOKEN 部署 Pages 所需权限
13+
permissions:
14+
contents: read
15+
pages: write
16+
id-token: write
17+
18+
# 同一时间只保留一个 Pages 部署任务,不中断正在进行的部署
19+
concurrency:
20+
group: "pages"
21+
cancel-in-progress: false
22+
23+
jobs:
24+
# 单一部署任务
25+
deploy:
26+
environment:
27+
name: github-pages
28+
url: ${{ steps.deployment.outputs.page_url }}
29+
runs-on: ubuntu-latest
30+
steps:
31+
- name: 检出 main 分支代码
32+
uses: actions/checkout@v4
33+
with:
34+
ref: main
35+
36+
- name: 配置 GitHub Pages
37+
uses: actions/configure-pages@v5
38+
39+
- name: 上传 Fuzz 覆盖率页面产物
40+
uses: actions/upload-pages-artifact@v3
41+
with:
42+
# 仅上传静态 HTML 目录,避免把整个仓库上传到 Pages
43+
path: './test/fuzzer/coverage/html'
44+
45+
- name: 部署到 GitHub Pages
46+
id: deployment
47+
uses: actions/deploy-pages@v4

scripts/ci/runCoverage.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ scientific="${RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC:-true}"
8282
caseName="strict_${strictKey}__head_${addAtHead}__sci_${scientific}"
8383

8484
# 覆盖率目录固定为 coverage/fuzz,每次执行前清理,保证只保留最新结果
85-
coverageRoot="coverage/fuzz"
85+
coverageRoot="test/fuzzer/coverage"
8686
rm -rf "${coverageRoot}"
8787
profileRoot="${coverageRoot}/profiles"
8888
mkdir -p "${profileRoot}"
27.7 KB
Binary file not shown.
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
2+
function next_uncovered(selector, reverse, scroll_selector) {
3+
function visit_element(element) {
4+
element.classList.add("seen");
5+
element.classList.add("selected");
6+
7+
if (!scroll_selector) {
8+
scroll_selector = "tr:has(.selected) td.line-number"
9+
}
10+
11+
const scroll_to = document.querySelector(scroll_selector);
12+
if (scroll_to) {
13+
scroll_to.scrollIntoView({behavior: "smooth", block: "center", inline: "end"});
14+
}
15+
}
16+
17+
function select_one() {
18+
if (!reverse) {
19+
const previously_selected = document.querySelector(".selected");
20+
21+
if (previously_selected) {
22+
previously_selected.classList.remove("selected");
23+
}
24+
25+
return document.querySelector(selector + ":not(.seen)");
26+
} else {
27+
const previously_selected = document.querySelector(".selected");
28+
29+
if (previously_selected) {
30+
previously_selected.classList.remove("selected");
31+
previously_selected.classList.remove("seen");
32+
}
33+
34+
const nodes = document.querySelectorAll(selector + ".seen");
35+
if (nodes) {
36+
const last = nodes[nodes.length - 1]; // last
37+
return last;
38+
} else {
39+
return undefined;
40+
}
41+
}
42+
}
43+
44+
function reset_all() {
45+
if (!reverse) {
46+
const all_seen = document.querySelectorAll(selector + ".seen");
47+
48+
if (all_seen) {
49+
all_seen.forEach(e => e.classList.remove("seen"));
50+
}
51+
} else {
52+
const all_seen = document.querySelectorAll(selector + ":not(.seen)");
53+
54+
if (all_seen) {
55+
all_seen.forEach(e => e.classList.add("seen"));
56+
}
57+
}
58+
59+
}
60+
61+
const uncovered = select_one();
62+
63+
if (uncovered) {
64+
visit_element(uncovered);
65+
} else {
66+
reset_all();
67+
68+
const uncovered = select_one();
69+
70+
if (uncovered) {
71+
visit_element(uncovered);
72+
}
73+
}
74+
}
75+
76+
function next_line(reverse) {
77+
next_uncovered("td.uncovered-line", reverse)
78+
}
79+
80+
function next_region(reverse) {
81+
next_uncovered("span.red.region", reverse);
82+
}
83+
84+
function next_branch(reverse) {
85+
next_uncovered("span.red.branch", reverse);
86+
}
87+
88+
document.addEventListener("keypress", function(event) {
89+
const reverse = event.shiftKey;
90+
if (event.code == "KeyL") {
91+
next_line(reverse);
92+
}
93+
if (event.code == "KeyB") {
94+
next_branch(reverse);
95+
}
96+
if (event.code == "KeyR") {
97+
next_region(reverse);
98+
}
99+
});

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJson.c.html

Lines changed: 105 additions & 0 deletions
Large diffs are not rendered by default.

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJson.h.html

Lines changed: 314 additions & 0 deletions
Large diffs are not rendered by default.

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJsonConfig.h.html

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJsonInternal.h.html

Lines changed: 12 additions & 0 deletions
Large diffs are not rendered by default.

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJsonItem.c.html

Lines changed: 116 additions & 0 deletions
Large diffs are not rendered by default.

test/fuzzer/coverage/html/coverage/root/grow/RyanJson/RyanJson/RyanJsonParse.c.html

Lines changed: 232 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)