コンテンツにスキップ

再生成

fixtures/ も manifest.json も手書きではありません。どちらも wacz-validator 側の generator が作ります —— 使っている builder(buildWacz)が wacz-validator のテスト内部の ものであって public API ではないためです。

Terminal window
# wacz-validator の clone から、CORPUS_DIR にこの repo の絶対パスを渡す。
# vitest は packages/core を CWD に走るので、相対パスは避ける。
cd /path/to/wacz-validator
CORPUS_DIR=/path/to/wacz-validator-corpus pnpm --filter @wacz-validator/core corpus:build
CORPUS_DIR=/path/to/wacz-validator-corpus pnpm --filter @wacz-validator/core corpus:docs

corpus:build は fixtures/ と manifest.json を、corpus:docs は カタログの表を書きます。どちらも CORPUS_DIR 配下に落ちるので、 依存は一方向です —— wacz-validator が corpus を知っており、逆はありません。

generator は zip entry の mtime を固定値で書くので、同じ wacz-validator revision からは バイト単位で同一の標本が出ます。再生成しても Git LFS が膨らみません。

wacz-validator 側の packages/core/test/corpus/spec.ts を編集して再生成します。各エントリは 「どう壊すか」(options)と「どの rule が出るはずか」(expectRules)を宣言し、 generator は記録する前に、その rule が実際に発火したことを assert します。

manifest が嘘をつけないのはこの構造のためです —— expectRules は検査されますが、 書き込まれるのは実際の runValidation の出力です。

4 つのコマンドはすべて vitest run です。意図的にそうしてあります —— 生成しながら その場で検証するので、意図どおりに壊れなかった標本は repo に届きません。