From ef818001d0c51739d1cdaf2ebcb78b1ade0a6b71 Mon Sep 17 00:00:00 2001 From: cndgrr <59120057+cndgrr@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:08:54 +0000 Subject: [PATCH] test(changelog): every fragment fixture carries a terminal cite Scoped to the fixtures the new rule actually binds: a fragment whose predicate complaint is already its name, a smuggled heading, a dangling heading or the 300-character bound is left alone, so the diagnosis it tests is still the one it draws. The section-predicate fixtures are untouched (D4). The computed-length fixtures keep their measured lengths: the cite is seven characters, so an entry that must measure exactly 300 builds 293 of the run and lets the cite carry the rest. 33.md's cite lands on the last continuation line, which is the wrapped-citation case. Refs #262 --- test/changelog-armed.test.sh | 6 +++--- test/changelog-assemble.test.sh | 10 +++++----- test/changelog-assembled.test.sh | 2 +- test/changelog.test.sh | 30 +++++++++++++++--------------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/test/changelog-armed.test.sh b/test/changelog-armed.test.sh index 0703a52..120b9ed 100644 --- a/test/changelog-armed.test.sh +++ b/test/changelog-armed.test.sh @@ -452,7 +452,7 @@ fragment_tree fragments-bad-name 1.2.4-dev <<'EOF' - The shipped entry. EOF -printf '%s\n' "- An entry (#1)." >"$TMP/fragments-bad-name/changelog.d/notes.md" +printf '%s\n' "- An entry." >"$TMP/fragments-bad-name/changelog.d/notes.md" check "fragment mode quotes malformed-fragment diagnosis and file" 1 \ "fragment 'changelog.d/notes.md' is not named for its issue" \ in_tree fragments-bad-name @@ -484,7 +484,7 @@ check "fragment bare + stamped section + consumed directory passes" 0 \ "fragment mode" in_tree fragments-bare-stamped cp -R "$TMP/fragments-bare-stamped" "$TMP/fragments-bare-survivor" -printf '%s\n' "- This entry was not consumed." \ +printf '%s\n' "- This entry was not consumed (#115)." \ >"$TMP/fragments-bare-survivor/changelog.d/115.md" check "fragment bare refuses and lists surviving fragments" 1 \ "these fragments were not consumed: changelog.d/115.md" \ @@ -531,7 +531,7 @@ check "same changelog fails in legacy mode" 1 "development tree" \ mkdir -p "$TMP/env-tree" printf '1.2.4-dev\n' >"$TMP/env-tree/VERSION" -printf '# Changelog\n\n## Unreleased\n\n- Pending (#1).\n' >"$TMP/env-tree/NOTES.md" +printf '# Changelog\n\n## Unreleased\n\n- Pending.\n' >"$TMP/env-tree/NOTES.md" # A non-default changelog name proves the env var is honored, not the default. env_tree() { (cd "$TMP/env-tree" && CHANGELOG=NOTES.md VERSION_SOURCE=file bash "$SCRIPT") diff --git a/test/changelog-assemble.test.sh b/test/changelog-assemble.test.sh index bf0e95a..178744b 100644 --- a/test/changelog-assemble.test.sh +++ b/test/changelog-assemble.test.sh @@ -213,7 +213,7 @@ frag check-readonly 5.md <<'EOF' - Five (#5). EOF cp -R "$TMP/check-readonly" "$TMP/check-readonly.before" -check "--check prints the assembled body" 0 "Five." \ +check "--check prints the assembled body" 0 "Five (#5)." \ in_tree check-readonly 0.2.0 2026-07-24 --check check "--check is read-only: the tree is byte-identical before and after" 0 "" \ diff -r "$TMP/check-readonly.before" "$TMP/check-readonly" @@ -228,7 +228,7 @@ check "the defaulted stamp is a UTC date" 0 "" \ # --- --changelog and --dir override the defaults ----------------------------- mkdir -p "$TMP/flagged/frags" -printf '# Changelog\n\n## 0.1.0 — 2026-07-01\n\n- Shipped (#1).\n' >"$TMP/flagged/NOTES.md" +printf '# Changelog\n\n## 0.1.0 — 2026-07-01\n\n- Shipped.\n' >"$TMP/flagged/NOTES.md" printf -- '- Flagged entry (#2).\n' >"$TMP/flagged/frags/2.md" check "--changelog and --dir override the defaults" 0 "" \ "$TOOL" 0.2.0 2026-07-24 --changelog "$TMP/flagged/NOTES.md" --dir "$TMP/flagged/frags" @@ -270,7 +270,7 @@ frag dangling 4.md <<'EOF' ### Fixed -- Fixed entry (#4). +- Fixed entry. EOF check "a dangling grouped heading refuses, file and heading named" 1 \ "fragment 'changelog.d/4.md' has an empty heading: '### Added'" \ @@ -282,7 +282,7 @@ EOF frag smuggled 6.md <<'EOF' ## 0.2.0 — 2026-07-24 -- An entry under a smuggled heading (#6). +- An entry under a smuggled heading. EOF check "a fragment carrying a '## ' line refuses, file named" 1 \ "fragment 'changelog.d/6.md' carries a '## ' heading" \ @@ -313,7 +313,7 @@ tree stray-case <"$TMP/env-tree/NOTES.md" +printf '# Changelog\n\n## 0.1.0 — 2026-07-01\n\n- Shipped.\n' >"$TMP/env-tree/NOTES.md" printf '0.1.1-dev\n' >"$TMP/env-tree/VERSION" printf -- '- Flagged entry (#2).\n' >"$TMP/env-tree/frags/2.md" git -C "$TMP/env-tree" add -A diff --git a/test/changelog.test.sh b/test/changelog.test.sh index 17d8ac0..1aed0b1 100755 --- a/test/changelog.test.sh +++ b/test/changelog.test.sh @@ -87,7 +87,7 @@ cat >"$PROBLEM_FIXTURE" <<'EOF' ### Fixed -- Fixed entry (#22). +- Fixed entry. ## 1.3.0 @@ -101,7 +101,7 @@ cat >"$PROBLEM_FIXTURE" <<'EOF' ### Fixed -- Fixed entry (#22). +- Fixed entry. ## 1.4.0 @@ -115,7 +115,7 @@ cat >"$PROBLEM_FIXTURE" <<'EOF' ### Fixed -- Fixed entry (#22). +- Fixed entry. EOF assert_problem Unreleased 0 "" @@ -221,23 +221,23 @@ printf -- '- Cross-repo (#14).\n' >"$PF/ceremony-14.md" check "fragment predicate: a cross-repo name passes" 0 "" \ changelog_fragment_problem "$PF/ceremony-14.md" -printf -- '- Bad name (#12).\n' >"$PF/Fix-12.md" +printf -- '- Bad name.\n' >"$PF/Fix-12.md" check "fragment predicate: an uppercase prefix is refused, file named" 1 "Fix-12.md" \ changelog_fragment_problem "$PF/Fix-12.md" -printf -- '- Bad name (#12).\n' >"$PF/notes.txt" +printf -- '- Bad name.\n' >"$PF/notes.txt" check "fragment predicate: a non-.md file is refused, file named" 1 "notes.txt" \ changelog_fragment_problem "$PF/notes.txt" -printf -- '- Bad name (#12).\n' >"$PF/12.markdown" +printf -- '- Bad name.\n' >"$PF/12.markdown" check "fragment predicate: .markdown is refused, file named" 1 "12.markdown" \ changelog_fragment_problem "$PF/12.markdown" -printf -- '- No number (#1).\n' >"$PF/notes.md" +printf -- '- No number.\n' >"$PF/notes.md" check "fragment predicate: a name with no trailing issue number is refused" 1 "notes.md" \ changelog_fragment_problem "$PF/notes.md" cat >"$PF/20.md" <<'EOF' ## 1.0.0 — 2026-07-24 -- Smuggled heading (#20). +- Smuggled heading. EOF check "fragment predicate: a '## ' line is refused — the heading is the assembler's" 1 \ "the section heading is the assembler's to write" \ @@ -253,7 +253,7 @@ cat >"$PF/22.md" <<'EOF' ### Fixed -- Fixed entry (#22). +- Fixed entry. EOF check "fragment predicate: a dangling grouped heading is refused, heading named" 1 \ "has an empty heading: '### Added'" \ @@ -274,14 +274,14 @@ check "length bound: the refusal names the bound and the split fix" 1 \ "the bound is 300: split it into multiple '- ' entries in this same fragment" \ changelog_fragment_problem "$PF/30.md" -printf -- '- %s\n' "$(mkchars 300)" >"$PF/31.md" +printf -- '- %s (#31).\n' "$(mkchars 293)" >"$PF/31.md" check "length bound: an entry of exactly 300 passes" 0 "" \ changelog_fragment_problem "$PF/31.md" { - printf -- '- %s\n' "$(mkchars 150)" - printf -- '- %s\n' "$(mkchars 150)" - printf -- '- %s\n' "$(mkchars 150)" + printf -- '- %s (#32).\n' "$(mkchars 143)" + printf -- '- %s (#32).\n' "$(mkchars 143)" + printf -- '- %s (#32).\n' "$(mkchars 143)" } >"$PF/32.md" check "length bound: several within-bound entries pass though the file totals over 300" 0 "" \ changelog_fragment_problem "$PF/32.md" @@ -291,14 +291,14 @@ check "length bound: several within-bound entries pass though the file totals ov printf ' %s\n' "$(mkchars 50)" printf ' %s\n' "$(mkchars 50)" printf ' %s\n' "$(mkchars 50)" - printf ' %s\n' "$(mkchars 50)" + printf ' %s (#33).\n' "$(mkchars 50)" } >"$PF/33.md" check "length bound: a ~250-character entry wrapped over four continuation lines passes" 0 "" \ changelog_fragment_problem "$PF/33.md" { printf '### Added\n\n' - printf -- '- %s\n' "$(mkchars 300)" + printf -- '- %s (#34).\n' "$(mkchars 293)" } >"$PF/34.md" check "length bound: a '### ' heading counts toward no entry — 300 under it still passes" 0 "" \ changelog_fragment_problem "$PF/34.md"