From c7c14445e6549ce79a6bdddd97c57edff588c147 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 2 Sep 2026 17:22:18 +0800 Subject: [PATCH] =?UTF-8?q?test(check-contents-format):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=9B=AE=E9=8C=84=E9=A0=81=E5=8D=80=E5=A1=8A=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E7=9A=84=E9=9B=A2=E7=B7=9A=E9=A9=97=E8=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增一支只讀寫暫存檔的驗證腳本,全程走 format 子命令,涵蓋五種舊頁狀態: 純表格、已是條列且鍵命中、已是條列且鍵未命中、表格與區塊混合、用範本建 新頁。另外驗身分欄取標題的四種情形與引言的五種情形。 轉檔與 upsert 的錯法都是靜默的:標題取錯只會多長一個區塊,引言沒換掉只是 說明過期,兩種都不會報錯,要等到線上頁面壞掉才看得出來。手動打 API 驗又 會在正式頁上留下試出來的垃圾紀錄。 驗證只比對輸入與輸出檔,不碰網路,任何機器上都跑得完。除了正常流程還特別 釘住三件事:表格取不出鍵那一列要擋下來不猜標題、轉檔後拿結果重跑同一筆 必須一字不變、區塊檔沒帶標題也照樣補上。任一項不符就印出期望值與實際值 之後立刻停住,不續跑其餘項目。 功能範圍:目錄頁版面改版的迴歸防護。 --- tools/check-contents-format.sh | 518 +++++++++++++++++++++++++++++++++ 1 file changed, 518 insertions(+) create mode 100755 tools/check-contents-format.sh diff --git a/tools/check-contents-format.sh b/tools/check-contents-format.sh new file mode 100755 index 0000000..f495ff4 --- /dev/null +++ b/tools/check-contents-format.sh @@ -0,0 +1,518 @@ +#!/usr/bin/env sh +# check-contents-format.sh — 驗證目錄頁的區塊轉檔與 upsert 規則。 +# 全部走 wiki-contents.sh 的 format 子命令,只讀寫暫存檔,不打任何 API。 +# 涵蓋五種舊頁狀態:純表格、已是條列且鍵命中、已是條列且鍵未命中、表格與區塊混合、 +# 用範本建新頁。另外驗三件事:表格取不出鍵那一列要擋下來不猜標題、轉檔後重跑同一筆 +# 結果一字不變、區塊檔沒帶標題也照樣補上。 +# 轉檔取 H2 標題另外驗四種身分欄:連結文字不是頁名、連結文字剛好等於頁名、純文字沒有 +# 連結、網址帶百分號編碼。四種都要取到真正的頁名,呼叫端那一筆才會是 updated。 +# 引言另外驗五種情形:轉檔且有範本要換成範本那一份、轉檔但沒範本保留舊的、已是條列 +# 加了範本也不准動引言、--fresh 建新頁照舊、拿轉檔結果重跑引言不再變動。 +# 全部通過印 OK 並 exit 0;任一項不符印出 want 與 got 並 exit 1。 +# 結束碼: 0=全部通過,stdout 印 OK +# 1=有一項不符,stderr 印出 {項目}: want=… got=… 之後立刻停住,不續跑其餘項目。 +# 只有 0 與 1 兩種;這支不吃參數,也沒有用法錯誤那條路。 +set -eu + +dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +contents="$dir/wiki-contents.sh" + +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT + +fail() { + printf '%s\n' "$1" >&2 + exit 1 +} + +expect_eq() { # got want label + [ "$1" = "$2" ] || fail "$(printf '%s: want=\n%s\ngot=\n%s' "$3" "$2" "$1")" +} + +# run