4.5 KiB
4.5 KiB
テスト妥当性レビュー: lint-common
- 判定: 混在
確認範囲
- 対象 crate:
crates/lint-common - 読んだ主なファイル:
crates/lint-common/src/lib.rscrates/lint-common/src/slug.rscrates/lint-common/src/frontmatter.rscrates/lint-common/README.md
- 軽く確認した利用側:
crates/memorycrates/workflow
現在のテストがよくカバーしていること
Slugの基本的な受理/拒否ケースは押さえている。- 1文字、複数文字、数字、ハイフンを含む正常系。
- 空文字、先頭/末尾ハイフン、大文字、underscore、空白、非 ASCII、連続ハイフンなどの異常系。
- 最大長 64 文字と 65 文字拒否の境界。
Slugの serde deserialize 経路も最低限確認されている。Slug::parseだけでなく、frontmatter/schema 側で効く deserialize validation の基礎確認として妥当。
split_frontmatterは最小限の正常系/異常系を持っている。- 通常の
---\n...\n---\nbody。 - opening delimiter 不在。
- closing delimiter 不在。
- 空 body。
- 通常の
- テストは小さい crate の public behavior に近く、過度に内部実装へ寄ってはいない。
不足 / 疑問のあるテスト
split_frontmatterの opening delimiter 境界が弱い。コメント上は document が---\nで始まる前提だが、現在のテストは「---が独立行であること」を検証していない。- 例:
---foo\n---\nbodyのような入力を拒否すべきかがテストで固定されていない。 - これは frontmatter parser の中核 invariant なので、テスト不足として重要。
- 例:
- closing delimiter の EOF ケースが未確認。
- コメントでは closing
---at EOF を許すように読めるが、---\nfoo: 1\n---のようなケースがテストされていない。
- コメントでは closing
- CRLF の扱いが曖昧なままテストされていない。
- closing delimiter 側は
\rを落としているが、opening delimiter 側は---\r\nを明示的に扱っていない。 - Windows 改行をサポート対象にするなら不足。サポート外なら拒否テストがあるとよい。
- closing delimiter 側は
Slugの仕様表示とテストが少し噛み合っていない可能性がある。lib.rsの error message とslug.rsのコメントにある regex^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$はfoo--barを許す形に見える。- 一方、実装とテストは
foo--barを拒否している。 - 連続ハイフン禁止が正なら、テスト自体は妥当だが、テストが依拠する authoritative spec がコメント/エラー文とずれている。
Slugの public API 周辺の確認がやや薄い。Display,AsRef<str>,FromStr,into_string, serde serialize は未テスト。- 重大ではないが、この crate が共通 primitive を提供する責務なら薄め。
- property/fuzz 的なテストはない。
- 現状の実装サイズでは必須ではないが、slug validator は文字種/長さ/ハイフン位置の組み合わせが多いため、簡単な table-driven 境界テストを増やす価値はある。
追加候補
split_frontmatterの delimiter 厳密性テストを追加する。---foo\n---\nbodyは拒否。------\nbodyは拒否。- opening delimiter はファイル先頭の独立行でなければならない、という仕様を固定する。
- EOF closing delimiter の正常系を追加する。
---\nfoo: 1\n---が成功し、body が空になること。
- CRLF の方針をテストで固定する。
- サポートするなら
---\r\nfoo: 1\r\n---\r\nbody。 - サポートしないなら明示的に error になること。
- サポートするなら
- slug の仕様とテストを同期させる。
- 連続
--禁止が正なら、error message / regex コメントもそれに合わせる。 - そのうえで
a--b,a--,--aなど、連続ハイフンと端点ハイフンの境界を分けた test case を置く。
- 連続
Slugの変換 API の薄い smoke test を追加する。FromStrDisplayAsRef<str>into_string- serde serialize roundtrip
- 可能なら
is_valid_slugとSlug::parseの結果が常に一致する table test を、正常/異常すべてのケースで明示する。- 現在も一部では確認しているが、全 case を共通 helper にすると漏れが減る。
実行したコマンド
cargo test -p lint-common- 結果: pass
- 8 unit tests passed.
- 0 doc tests.