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