]> Kevux Git Server - rit/commitdiff
chainlint.pl: add test_expect_success call to test snippets
authorJeff King <peff@peff.net>
Wed, 10 Jul 2024 08:34:48 +0000 (04:34 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 10 Jul 2024 17:14:21 +0000 (10:14 -0700)
The chainlint tests are a series of individual files, each holding a
test body. The "make check-chainlint" target assembles them into a
single file, adding a "test_expect_success" function call around each.
Let's instead include that function call in the files themselves. This
is a little more boilerplate, but has several advantages:

  1. You can now run chainlint manually on snippets with just "perl
     chainlint.perl chainlint/foo.test". This can make developing and
     debugging a little easier.

  2. Many of the tests implicitly relied on the syntax of the lines
     added by the Makefile (in particular the use of single-quotes).
     This assumption is much easier to see when the single-quotes are
     alongside the test body.

  3. We had no way to test how the chainlint program handled
     various test_expect_success lines themselves. Now we'll be able to
     check variations.

The change to the .test files was done mechanically, using the same
test names they would have been assigned by the Makefile (this is
important to match the expected output). The Makefile has the minimal
change to drop the extra lines; there are more cleanups possible but a
future patch in this series will rewrite this substantially anyway.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
73 files changed:
t/Makefile
t/chainlint/arithmetic-expansion.test
t/chainlint/bash-array.test
t/chainlint/blank-line-before-esac.test
t/chainlint/blank-line.test
t/chainlint/block-comment.test
t/chainlint/block.test
t/chainlint/broken-chain.test
t/chainlint/case-comment.test
t/chainlint/case.test
t/chainlint/chain-break-background.test
t/chainlint/chain-break-continue.test
t/chainlint/chain-break-false.test
t/chainlint/chain-break-return-exit.test
t/chainlint/chain-break-status.test
t/chainlint/chained-block.test
t/chainlint/chained-subshell.test
t/chainlint/close-nested-and-parent-together.test
t/chainlint/close-subshell.test
t/chainlint/command-substitution-subsubshell.test
t/chainlint/command-substitution.test
t/chainlint/comment.test
t/chainlint/complex-if-in-cuddled-loop.test
t/chainlint/cuddled-if-then-else.test
t/chainlint/cuddled-loop.test
t/chainlint/cuddled.test
t/chainlint/double-here-doc.test
t/chainlint/dqstring-line-splice.test
t/chainlint/dqstring-no-interpolate.test
t/chainlint/empty-here-doc.test
t/chainlint/exclamation.test
t/chainlint/exit-loop.test
t/chainlint/exit-subshell.test
t/chainlint/for-loop-abbreviated.test
t/chainlint/for-loop.test
t/chainlint/function.test
t/chainlint/here-doc-close-subshell.test
t/chainlint/here-doc-indent-operator.test
t/chainlint/here-doc-multi-line-command-subst.test
t/chainlint/here-doc-multi-line-string.test
t/chainlint/here-doc.test
t/chainlint/if-condition-split.test
t/chainlint/if-in-loop.test
t/chainlint/if-then-else.test
t/chainlint/incomplete-line.test
t/chainlint/inline-comment.test
t/chainlint/loop-detect-failure.test
t/chainlint/loop-detect-status.test
t/chainlint/loop-in-if.test
t/chainlint/loop-upstream-pipe.test
t/chainlint/multi-line-nested-command-substitution.test
t/chainlint/multi-line-string.test
t/chainlint/negated-one-liner.test
t/chainlint/nested-cuddled-subshell.test
t/chainlint/nested-here-doc.test
t/chainlint/nested-loop-detect-failure.test
t/chainlint/nested-subshell-comment.test
t/chainlint/nested-subshell.test
t/chainlint/not-heredoc.test
t/chainlint/one-liner-for-loop.test
t/chainlint/one-liner.test
t/chainlint/p4-filespec.test
t/chainlint/pipe.test
t/chainlint/return-loop.test
t/chainlint/semicolon.test
t/chainlint/sqstring-in-sqstring.test
t/chainlint/subshell-here-doc.test
t/chainlint/subshell-one-liner.test
t/chainlint/t7900-subtree.test
t/chainlint/token-pasting.test
t/chainlint/unclosed-here-doc-indent.test
t/chainlint/unclosed-here-doc.test
t/chainlint/while-loop.test

index b2eb9f7..e7a4769 100644 (file)
@@ -109,9 +109,7 @@ clean-chainlint:
 check-chainlint:
        @mkdir -p '$(CHAINLINTTMP_SQ)' && \
        for i in $(CHAINLINTTESTS); do \
-               echo "test_expect_success '$$i' '" && \
-               sed -e '/^# LINT: /d' chainlint/$$i.test && \
-               echo "'"; \
+               sed -e '/^# LINT: /d' chainlint/$$i.test; \
        done >'$(CHAINLINTTMP_SQ)'/tests && \
        { \
                echo "# chainlint: $(CHAINLINTTMP_SQ)/tests" && \
index 1620696..7b4c5c9 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'arithmetic-expansion' '
 (
        foo &&
 # LINT: closing ")" of $((...)) not misinterpreted as subshell-closing ")"
@@ -9,3 +10,4 @@
        bar=$((42 + 1))
        baz
 )
+'
index 92bbb77..4ca977d 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'bash-array' '
 (
        foo &&
 # LINT: ")" in Bash array assignment not misinterpreted as subshell-closing ")"
@@ -10,3 +11,4 @@
        bar=${#bar[@]} &&
        baz
 )
+'
index cecccad..51f02ea 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'blank-line-before-esac' '
 # LINT: blank line before "esac"
 test_done () {
        case "$test_failure" in
@@ -17,3 +18,4 @@ test_done () {
 
        esac
 }
+'
index 0fdf15b..6f29a49 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'blank-line' '
 (
 
        nothing &&
@@ -8,3 +9,4 @@
 
 
 )
+'
index df2beea..934ef41 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'block-comment' '
 (
        {
                # show a
@@ -6,3 +7,4 @@
                echo b
        }
 )
+'
index 4ab69a4..a1b6b4d 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'block' '
 (
 # LINT: missing "&&" after first "echo"
        foo &&
@@ -25,3 +26,4 @@
        echo "done"
 } &&
 finis
+'
index 2a44aa7..1966499 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'broken-chain' '
 (
        foo &&
 # LINT: missing "&&" from "bar"
@@ -6,3 +7,4 @@
 # LINT: final statement before closing ")" legitimately lacks "&&"
        wop
 )
+'
index 641c157..3f31ae9 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'case-comment' '
 (
        case "$x" in
        # found foo
@@ -9,3 +10,4 @@
                ;;
        esac
 )
+'
index 4cb086b..bea21fe 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'case' '
 (
 # LINT: "...)" arms in "case" not misinterpreted as subshell-closing ")"
        case "$x" in
@@ -21,3 +22,4 @@
        case "$y" in 2) false;; esac
        foobar
 )
+'
index e10f656..c68e1b0 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chain-break-background' '
 JGIT_DAEMON_PID= &&
 git init --bare empty.git &&
 >empty.git/git-daemon-export-ok &&
@@ -8,3 +9,4 @@ mkfifo jgit_daemon_output &&
        JGIT_DAEMON_PID=$!
 } &&
 test_expect_code 2 git ls-remote --exit-code git://localhost:$JGIT_DAEMON_PORT/empty.git
+'
index f0af71d..de8119b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chain-break-continue' '
 git ls-tree --name-only -r refs/notes/many_notes |
 while read path
 do
@@ -11,3 +12,4 @@ do
                return 1
        fi
 done
+'
index a5aaff8..f78ad91 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chain-break-false' '
 # LINT: broken &&-chain okay if explicit "false" signals failure
 if condition not satisified
 then
@@ -8,3 +9,4 @@ else
        echo it went okay
        congratulate user
 fi
+'
index 46542ed..b6f519b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chain-break-return-exit' '
 case "$(git ls-files)" in
 one) echo pass one ;;
 # LINT: broken &&-chain okay if explicit "return 1" signals failuire
@@ -21,3 +22,4 @@ for i in 1 2 3 4 ; do
        git checkout main -b $i || return $?
        test_commit $i $i $i tag$i || return $?
 done
+'
index a6602a7..d9fee19 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chain-break-status' '
 # LINT: broken &&-chain okay if next command handles "$?" explicitly
 OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) &&
 test_match_signal 13 "$OUT" &&
@@ -9,3 +10,4 @@ test_match_signal 13 "$OUT" &&
        test "$ret" = 3
 } &&
 test_cmp expect actual
+'
index 86f81ec..71ef1d0 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chained-block' '
 # LINT: start of block chained to preceding command
 echo nobody home && {
        test the doohicky
@@ -9,3 +10,4 @@ GIT_EXTERNAL_DIFF=echo git diff | {
        read path oldfile oldhex oldmode newfile newhex newmode &&
        test "z$oh" = "z$oldhex"
 }
+'
index 4ff6ddd..1f11f65 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'chained-subshell' '
 # LINT: start of subshell chained to preceding command
 mkdir sub && (
        cd sub &&
@@ -11,3 +12,4 @@ test -f $s1
 test $(cat $s2) = tree2path1 &&
 # LINT: closing subshell ")" correctly detected on same line as "$(...)"
 test $(cat $s3) = tree3path1)
+'
index 72d482f..56b28b1 100644 (file)
@@ -1,3 +1,5 @@
+test_expect_success 'close-nested-and-parent-together' '
 (cd foo &&
        (bar &&
                baz))
+'
index 508ca44..b99f805 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'close-subshell' '
 # LINT: closing ")" with various decorations ("&&", ">", "|", etc.)
 (
        foo
@@ -25,3 +26,4 @@ fuzzle &&
 (
        yop
 )
+'
index 321de29..4ea772d 100644 (file)
@@ -1,3 +1,5 @@
+test_expect_success 'command-substitution-subsubshell' '
 # LINT: subshell nested in subshell nested in command substitution
 OUT=$( ((large_git 1>&3) | :) 3>&1 ) &&
 test_match_signal 13 "$OUT"
+'
index 3bbb002..494d671 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'command-substitution' '
 (
        foo &&
 # LINT: closing ")" of $(...) not misinterpreted as subshell-closing ")"
@@ -9,3 +10,4 @@
        bar=$(gobble blocks)
        baz
 )
+'
index 113c0c4..c488bea 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'comment' '
 (
 # LINT: swallow comment lines
        # comment 1
@@ -9,3 +10,4 @@
        # comment 3
        # comment 4
 )
+'
index 5efeda5..f98ae4c 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'complex-if-in-cuddled-loop' '
 # LINT: "for" loop cuddled with "(" and ")" and nested "if" with complex
 # LINT: multi-line condition; indented with spaces, not tabs
 (for i in a b c; do
@@ -9,3 +10,4 @@
    fi
  done) &&
 test ! -f file
+'
index 7c53f4e..b1b42e1 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'cuddled-if-then-else' '
 # LINT: "if" cuddled with "(" and ")"; indented with spaces, not tabs
 (if test -z ""; then
     echo empty
@@ -5,3 +6,4 @@
     echo bizzy
  fi) &&
 echo foobar
+'
index 3c2a62f..6fccb6a 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'cuddled-loop' '
 # LINT: "while" loop cuddled with "(" and ")", with embedded (allowed)
 # LINT: "|| exit {n}" to exit loop early, and using redirection "<" to feed
 # LINT: loop; indented with spaces, not tabs
@@ -5,3 +6,4 @@
   do foobar bop || exit 1
   done <file ) &&
 outside subshell
+'
index 257b5b5..5a6ef7a 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'cuddled' '
 # LINT: first subshell statement cuddled with opening "("
 (cd foo &&
        bar
@@ -20,3 +21,4 @@
 # LINT: same with missing "&&"
 (cd foo
        bar)
+'
index cd584a4..1b69b7a 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'double-here-doc' '
 run_sub_test_lib_test_err run-inv-range-start \
        "--run invalid range start" \
        --run="a-5" <<-\EOF &&
@@ -10,3 +11,4 @@ check_sub_test_lib_test_err run-inv-range-start \
 EOF_OUT
 > error: --run: invalid non-numeric in range start: ${SQ}a-5${SQ}
 EOF_ERR
+'
index b407144..f6aa637 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'dqstring-line-splice' '
 # LINT: line-splice within DQ-string
 '"
 echo 'fatal: reword option of --fixup is mutually exclusive with'\
@@ -5,3 +6,4 @@ echo 'fatal: reword option of --fixup is mutually exclusive with'\
 test_must_fail git commit --fixup=reword:HEAD~ $1 2>actual &&
 test_cmp expect actual
 "'
+'
index d2f4219..7ae079b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'dqstring-no-interpolate' '
 # LINT: regex dollar-sign eol anchor in double-quoted string not special
 grep "^ ! \[rejected\][ ]*$BRANCH -> $BRANCH (non-fast-forward)$" out &&
 
@@ -13,3 +14,4 @@ grep "^\\.git\$" output.txt &&
        cut -d ' ' -f 2 <output | sort >actual &&
        test_cmp expect actual
 "'
+'
index 24fc165..8b7ab6e 100644 (file)
@@ -1,5 +1,7 @@
+test_expect_success 'empty-here-doc' '
 git ls-tree $tree path >current &&
 # LINT: empty here-doc
 cat >expected <<\EOF &&
 EOF
 test_output
+'
index 323595b..796de21 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'exclamation' '
 # LINT: "! word" is two tokens
 if ! condition; then echo nope; else yep; fi &&
 # LINT: "!word" is single token, not two tokens "!" and "word"
@@ -6,3 +7,4 @@ test_prerequisite !MINGW &&
 mail uucp!address &&
 # LINT: "!word!" is single token, not three tokens "!", "word", and "!"
 echo !whatever!
+'
index 2f03820..7e8b68b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'exit-loop' '
 (
        for i in a b c
        do
@@ -25,3 +26,4 @@
                i=$(($i + 1))
        done
 )
+'
index 4e6ab69..05dff55 100644 (file)
@@ -1,6 +1,8 @@
+test_expect_success 'exit-subshell' '
 (
 # LINT: "|| exit {n}" valid subshell escape without hurting &&-chain
        foo || exit 1
        bar &&
        baz
 )
+'
index 1084ecc..1dd14f2 100644 (file)
@@ -1,6 +1,8 @@
+test_expect_success 'for-loop-abbreviated' '
 # LINT: for-loop lacking optional "in [word...]" before "do"
 for it
 do
        path=$(expr "$it" : '\([^:]*\)') &&
        git update-index --add "$path" || exit
 done
+'
index 6cb3428..6f2489e 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'for-loop' '
 (
 # LINT: "for", "do", "done" do not need "&&"
        for i in a b c
@@ -17,3 +18,4 @@
                cat $i
        done
 )
+'
index 5ee5956..763fcf3 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'function' '
 # LINT: "()" in function definition not mistaken for subshell
 sha1_file() {
        echo "$*" | sed "s#..#.git/objects/&/#"
@@ -11,3 +12,4 @@ remove_object() {
 }
 
 sha1_file arg && remove_object arg
+'
index b857ff5..2458f33 100644 (file)
@@ -1,5 +1,7 @@
+test_expect_success 'here-doc-close-subshell' '
 (
 # LINT: line contains here-doc and closes nested subshell
        cat <<-\INPUT)
        fizz
        INPUT
+'
index c8a6f18..a2656f4 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'here-doc-indent-operator' '
 # LINT: whitespace between operator "<<-" and tag legal
 cat >expect <<- EOF &&
 header: 43475048 1 $(test_oid oid_version) $NUM_CHUNKS 0
@@ -11,3 +12,4 @@ this is not indented
 -EOF
 
 cleanup
+'
index 899bc5d..8710a8c 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'here-doc-multi-line-command-subst' '
 (
 # LINT: line contains here-doc and opens multi-line $(...)
        x=$(bobble <<-\END &&
@@ -7,3 +8,4 @@
                wiffle)
        echo $x
 )
+'
index a53edbc..2f49600 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'here-doc-multi-line-string' '
 (
 # LINT: line contains here-doc and opens multi-line string
        cat <<-\TXT && echo "multi-line
@@ -6,3 +7,4 @@
        TXT
        bap
 )
+'
index 3f5f92c..c91b695 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'here-doc' '
 # LINT: stitch together incomplete \-ending lines
 # LINT: swallow here-doc to avoid false positives in content
 boodle wobba \
@@ -28,3 +29,4 @@ morticia
 wednesday
 pugsly
 EOF
+'
index 240daa9..9a3b3ed 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'if-condition-split' '
 # LINT: "if" condition split across multiple lines at "&&" or "||"
 if bob &&
    marcia ||
@@ -6,3 +7,4 @@ then
        echo "nomads"
        echo "for sure"
 fi
+'
index 90c2397..5be9d1c 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'if-in-loop' '
 (
        for i in a b c
        do
@@ -13,3 +14,4 @@
        done
        bar
 )
+'
index 2055336..6582a7f 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'if-then-else' '
 (
 # LINT: "if", "then", "elif", "else", "fi" do not need "&&"
        if test -n ""
@@ -27,3 +28,4 @@
                echo empty
        fi
 )
+'
index d856658..74a9302 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'incomplete-line' '
 # LINT: stitch together all incomplete \-ending lines
 line 1 \
 line 2 \
@@ -10,3 +11,4 @@ line 4 &&
        line 7 \
        line 8
 )
+'
index 8f26856..4fbbf10 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'inline-comment' '
 (
 # LINT: swallow inline comment (leaving command intact)
        foobar && # comment 1
@@ -10,3 +11,4 @@
 # LINT: "#" in string in cuddled subshell not misinterpreted as comment
 (cd foo &&
        flibble "not a # comment")
+'
index b9791cc..44673aa 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'loop-detect-failure' '
 git init r1 &&
 # LINT: loop handles failure explicitly with "|| return 1"
 for n in 1 2 3 4 5
@@ -15,3 +16,4 @@ do
        git -C r2 add large.$n &&
        git -C r2 commit -m "$n"
 done
+'
index 1c6c23c..8b639be 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'loop-detect-status' '
 # LINT: "$?" handled explicitly within loop body
 (while test $i -le $blobcount
  do
@@ -17,3 +18,4 @@
  cat commit) |
 git fast-import --big-file-threshold=2 &&
 test ! -f exit-status
+'
index dfcc3f9..b0d0d39 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'loop-in-if' '
 (
        if true
        then
@@ -13,3 +14,4 @@
        fi
        bar
 )
+'
index efb77da..8415a4d 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'loop-upstream-pipe' '
 (
        git rev-list --objects --no-object-names base..loose |
        while read oid
@@ -9,3 +10,4 @@
        done |
        sort -k1
 ) >expect &&
+'
index 3000583..e811c63 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'multi-line-nested-command-substitution' '
 (
        foo &&
        x=$(
@@ -16,3 +17,4 @@ sort &&
                fip) &&
        echo fail
 )
+'
index 4a0af21..7b5048d 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'multi-line-string' '
 (
        x="line 1
                line 2
@@ -13,3 +14,4 @@
                ghi" &&
        barfoo
 )
+'
index c9598e9..30f4cc5 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'negated-one-liner' '
 # LINT: top-level one-liner subshell
 ! (foo && bar) &&
 ! (foo && bar) >baz &&
@@ -5,3 +6,4 @@
 # LINT: top-level one-liner subshell missing internal "&&"
 ! (foo; bar) &&
 ! (foo; bar) >baz
+'
index 8fd656c..31e92d3 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'nested-cuddled-subshell' '
 (
 # LINT: opening "(" cuddled with first nested subshell statement
        (cd foo &&
@@ -29,3 +30,4 @@
 
        foobar
 )
+'
index f35404b..9505c47 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'nested-here-doc' '
 # LINT: inner "EOF" not misintrepreted as closing ARBITRARY here-doc
 cat <<ARBITRARY >foop &&
 naddle
@@ -31,3 +32,4 @@ ARBITRARY
 
        foobar
 )
+'
index e6f0c1a..3d4b657 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'nested-loop-detect-failure' '
 # LINT: neither loop handles failure explicitly with "|| return 1"
 for i in 0 1 2 3 4 5 6 7 8 9;
 do
@@ -33,3 +34,4 @@ do
                echo "$i$j" >"path$i$j" || return 1
        done || return 1
 done
+'
index 0215cdb..b430580 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'nested-subshell-comment' '
 (
        foo &&
        (
@@ -11,3 +12,4 @@
        )
        fuzzy
 )
+'
index 440ee99..c31da34 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'nested-subshell' '
 (
        cd foo &&
        (
@@ -11,3 +12,4 @@
                echo b
        ) >file
 )
+'
index 9aa5734..09711e4 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'not-heredoc' '
 # LINT: "<< ours" inside string is not here-doc
 echo "<<<<<<< ours" &&
 echo ourside &&
@@ -14,3 +15,4 @@ echo ">>>>>>> theirs" &&
        echo ">>>>>>> theirs"
        poodle
 ) >merged
+'
index 4bd8c06..00afd7e 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'one-liner-for-loop' '
 git init dir-rename-and-content &&
 (
        cd dir-rename-and-content &&
@@ -8,3 +9,4 @@ git init dir-rename-and-content &&
        git add foo olddir &&
        git commit -m "original" &&
 )
+'
index be9858f..6e42ee1 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'one-liner' '
 # LINT: top-level one-liner subshell
 (foo && bar) &&
 (foo && bar) |
@@ -10,3 +11,4 @@
 
 # LINT: ";" in string not misinterpreted as broken &&-chain
 (foo "bar; baz")
+'
index 4fd2d6e..8ba6b91 100644 (file)
@@ -1,5 +1,7 @@
+test_expect_success 'p4-filespec' '
 (
 # LINT: Perforce revspec in filespec not misinterpreted as in-line comment
        p4 print -1 //depot/fiddle#42 >file &&
        foobar
 )
+'
index dd82534..1af81c2 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'pipe' '
 (
 # LINT: no "&&" needed on line ending with "|"
        foo |
@@ -10,3 +11,4 @@
 
        sunder
 )
+'
index f90b171..ea76c35 100644 (file)
@@ -1,6 +1,8 @@
+test_expect_success 'return-loop' '
 while test $i -lt $((num - 5))
 do
 # LINT: "|| return {n}" valid loop escape outside subshell; no "&&" needed
        git notes add -m "notes for commit$i" HEAD~$i || return 1
        i=$((i + 1))
 done
+'
index 67e1192..fc0ba1b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'semicolon' '
 (
 # LINT: missing internal "&&" and ending "&&"
        cat foo ; echo bar
@@ -23,3 +24,4 @@
 # LINT: semicolon unnecessary but legitimate
                echo;
        done)
+'
index 77a425e..2416972 100644 (file)
@@ -1,5 +1,7 @@
+test_expect_success 'sqstring-in-sqstring' '
 # LINT: SQ-string Perl code fragment within SQ-string
 perl -e '\''
        defined($_ = -s $_) or die for @ARGV;
        exit 1 if $ARGV[0] <= $ARGV[1];
 '\'' test-2-$packname_2.pack test-3-$packname_3.pack
+'
index d40eb65..4a38f47 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'subshell-here-doc' '
 (
 # LINT: stitch together incomplete \-ending lines
 # LINT: swallow here-doc to avoid false positives in content
@@ -33,3 +34,4 @@ EOF
        ARBITRARY3
        meep
 )
+'
index 37fa643..dac536a 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'subshell-one-liner' '
 (
 # LINT: nested one-liner subshell
        (foo && bar) &&
@@ -22,3 +23,4 @@
 
        foobar
 )
+'
index 02f3129..1f4f033 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 't7900-subtree' '
 (
        chks="sub1
 sub2
@@ -20,3 +21,4 @@ TXT
        check_equal "$subfiles" "$chkms
 $chks"
 )
+'
index b4610ce..590914b 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'token-pasting' '
 # LINT: single token; composite of multiple strings
 git config filter.rot13.smudge ./rot13.sh &&
 git config filter.rot13.clean ./rot13.sh &&
@@ -30,3 +31,4 @@ downstream_url_for_sed=$(
 # LINT: exit/enter string context; "&" inside string not command terminator
        sed -e '\''s/\\/\\\\/g'\'' -e '\''s/[[/.*^$]/\\&/g'\''
 )
+'
index 5c841a9..7ac9d0f 100644 (file)
@@ -1,4 +1,6 @@
+test_expect_success 'unclosed-here-doc-indent' '
 command_which_is_run &&
 cat >expect <<-\EOF &&
 we forget to end the here-doc
 command_which_is_gobbled
+'
index 69d3786..68e78f0 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'unclosed-here-doc' '
 command_which_is_run &&
 cat >expect <<\EOF &&
        we try to end the here-doc below,
@@ -5,3 +6,4 @@ cat >expect <<\EOF &&
        since the operator is not "<<-".
        EOF
 command_which_is_gobbled
+'
index d09fb01..33a2019 100644 (file)
@@ -1,3 +1,4 @@
+test_expect_success 'while-loop' '
 (
 # LINT: "while", "do", "done" do not need "&&"
        while true
@@ -17,3 +18,4 @@
                cat bar
        done
 )
+'