chainlint.pl: add test_expect_success call to test snippets
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>maint
parent
790a17fb19
commit
a5e450144d
|
@ -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" && \
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
}
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'blank-line' '
|
||||
(
|
||||
|
||||
nothing &&
|
||||
|
@ -8,3 +9,4 @@
|
|||
|
||||
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'block-comment' '
|
||||
(
|
||||
{
|
||||
# show a
|
||||
|
@ -6,3 +7,4 @@
|
|||
echo b
|
||||
}
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'block' '
|
||||
(
|
||||
# LINT: missing "&&" after first "echo"
|
||||
foo &&
|
||||
|
@ -25,3 +26,4 @@
|
|||
echo "done"
|
||||
} &&
|
||||
finis
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'case-comment' '
|
||||
(
|
||||
case "$x" in
|
||||
# found foo
|
||||
|
@ -9,3 +10,4 @@
|
|||
;;
|
||||
esac
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
'
|
||||
|
|
|
@ -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)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
test_expect_success 'close-nested-and-parent-together' '
|
||||
(cd foo &&
|
||||
(bar &&
|
||||
baz))
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'close-subshell' '
|
||||
# LINT: closing ")" with various decorations ("&&", ">", "|", etc.)
|
||||
(
|
||||
foo
|
||||
|
@ -25,3 +26,4 @@ fuzzle &&
|
|||
(
|
||||
yop
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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"
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'comment' '
|
||||
(
|
||||
# LINT: swallow comment lines
|
||||
# comment 1
|
||||
|
@ -9,3 +10,4 @@
|
|||
# comment 3
|
||||
# comment 4
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
"'
|
||||
'
|
||||
|
|
|
@ -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
|
||||
"'
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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!
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'exit-loop' '
|
||||
(
|
||||
for i in a b c
|
||||
do
|
||||
|
@ -25,3 +26,4 @@
|
|||
i=$(($i + 1))
|
||||
done
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
test_expect_success 'exit-subshell' '
|
||||
(
|
||||
# LINT: "|| exit {n}" valid subshell escape without hurting &&-chain
|
||||
foo || exit 1
|
||||
bar &&
|
||||
baz
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
test_expect_success 'here-doc-close-subshell' '
|
||||
(
|
||||
# LINT: line contains here-doc and closes nested subshell
|
||||
cat <<-\INPUT)
|
||||
fizz
|
||||
INPUT
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'if-in-loop' '
|
||||
(
|
||||
for i in a b c
|
||||
do
|
||||
|
@ -13,3 +14,4 @@
|
|||
done
|
||||
bar
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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")
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'loop-in-if' '
|
||||
(
|
||||
if true
|
||||
then
|
||||
|
@ -13,3 +14,4 @@
|
|||
fi
|
||||
bar
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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 &&
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'multi-line-nested-command-substitution' '
|
||||
(
|
||||
foo &&
|
||||
x=$(
|
||||
|
@ -16,3 +17,4 @@ sort &&
|
|||
fip) &&
|
||||
echo fail
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'multi-line-string' '
|
||||
(
|
||||
x="line 1
|
||||
line 2
|
||||
|
@ -13,3 +14,4 @@
|
|||
ghi" &&
|
||||
barfoo
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'nested-subshell-comment' '
|
||||
(
|
||||
foo &&
|
||||
(
|
||||
|
@ -11,3 +12,4 @@
|
|||
)
|
||||
fuzzy
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'nested-subshell' '
|
||||
(
|
||||
cd foo &&
|
||||
(
|
||||
|
@ -11,3 +12,4 @@
|
|||
echo b
|
||||
) >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
|
||||
'
|
||||
|
|
|
@ -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" &&
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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")
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'pipe' '
|
||||
(
|
||||
# LINT: no "&&" needed on line ending with "|"
|
||||
foo |
|
||||
|
@ -10,3 +11,4 @@
|
|||
|
||||
sunder
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 'subshell-one-liner' '
|
||||
(
|
||||
# LINT: nested one-liner subshell
|
||||
(foo && bar) &&
|
||||
|
@ -22,3 +23,4 @@
|
|||
|
||||
foobar
|
||||
)
|
||||
'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test_expect_success 't7900-subtree' '
|
||||
(
|
||||
chks="sub1
|
||||
sub2
|
||||
|
@ -20,3 +21,4 @@ TXT
|
|||
check_equal "$subfiles" "$chkms
|
||||
$chks"
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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'\''
|
||||
)
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
'
|
||||
|
|
|
@ -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
|
||||
)
|
||||
'
|
||||
|
|
Loading…
Reference in New Issue