#!/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