ac05de1788
It's currently unclear to me how this could have worked previously; \n here is not a literal newline but actual '\' 'n', and was getting passed to the underlying regex engine as such. regex(3) does not translate this to a newline, and this became an error because we don't really allow escaping of arbitrary ordinary characters anymore. Run the pattern strings through printf to make sure we're dealing with real newlines before passing them through to atf_check, which ultimately feeds them directly to regcomp(3). This fix is different than that will be needed for sed, in that this is the proper way to inject newlines into search strings as long as regex(3) won't combine \ + n as folks might expect. Reported by: Jenkins via lwhsu MFC after: 1 week
237 lines
6.6 KiB
Bash
Executable File
237 lines
6.6 KiB
Bash
Executable File
# $FreeBSD$
|
|
|
|
atf_test_case simple
|
|
atf_test_case unified
|
|
atf_test_case header
|
|
atf_test_case header_ns
|
|
atf_test_case ifdef
|
|
atf_test_case group_format
|
|
atf_test_case side_by_side
|
|
atf_test_case brief_format
|
|
atf_test_case b230049
|
|
atf_test_case Bflag
|
|
atf_test_case Nflag
|
|
atf_test_case tabsize
|
|
atf_test_case conflicting_format
|
|
atf_test_case label
|
|
|
|
simple_body()
|
|
{
|
|
atf_check -o file:$(atf_get_srcdir)/simple.out -s eq:1 \
|
|
diff "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_e.out -s eq:1 \
|
|
diff -e "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_u.out -s eq:1 \
|
|
diff -u -L input1 -L input2 "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_n.out -s eq:1 \
|
|
diff -n "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
|
|
|
|
atf_check -o inline:"Files $(atf_get_srcdir)/input1.in and $(atf_get_srcdir)/input2.in differ\n" -s eq:1 \
|
|
diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input2.in"
|
|
|
|
atf_check \
|
|
diff -q "$(atf_get_srcdir)/input1.in" "$(atf_get_srcdir)/input1.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_i.out -s eq:1 \
|
|
diff -i "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_w.out -s eq:1 \
|
|
diff -w "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_b.out -s eq:1 \
|
|
diff -b "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
|
|
atf_check -o file:$(atf_get_srcdir)/simple_p.out -s eq:1 \
|
|
diff --label input_c1.in --label input_c2.in -p "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
}
|
|
|
|
unified_body()
|
|
{
|
|
atf_check -o file:$(atf_get_srcdir)/unified_p.out -s eq:1 \
|
|
diff -up -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
atf_check -o file:$(atf_get_srcdir)/unified_9999.out -s eq:1 \
|
|
diff -u9999 -L input_c1.in -L input_c2.in "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
}
|
|
|
|
b230049_body()
|
|
{
|
|
printf 'a\nb\r\nc\n' > b230049_a.in
|
|
printf 'a\r\nb\r\nc\r\n' > b230049_b.in
|
|
atf_check -o empty -s eq:0 \
|
|
diff -up --strip-trailing-cr -L b230049_a.in -L b230049_b.in \
|
|
b230049_a.in b230049_b.in
|
|
}
|
|
|
|
header_body()
|
|
{
|
|
export TZ=UTC
|
|
: > empty
|
|
echo hello > hello
|
|
touch -d 2015-04-03T01:02:03 empty
|
|
touch -d 2016-12-22T11:22:33 hello
|
|
atf_check -o "file:$(atf_get_srcdir)/header.out" -s eq:1 \
|
|
diff -u empty hello
|
|
}
|
|
|
|
header_ns_body()
|
|
{
|
|
export TZ=UTC
|
|
: > empty
|
|
echo hello > hello
|
|
touch -d 2015-04-03T01:02:03.123456789 empty
|
|
touch -d 2016-12-22T11:22:33.987654321 hello
|
|
atf_check -o "file:$(atf_get_srcdir)/header_ns.out" -s eq:1 \
|
|
diff -u empty hello
|
|
}
|
|
|
|
ifdef_body()
|
|
{
|
|
atf_check -o file:$(atf_get_srcdir)/ifdef.out -s eq:1 \
|
|
diff -D PLOP "$(atf_get_srcdir)/input_c1.in" \
|
|
"$(atf_get_srcdir)/input_c2.in"
|
|
}
|
|
|
|
group_format_body()
|
|
{
|
|
atf_check -o file:$(atf_get_srcdir)/group-format.out -s eq:1 \
|
|
diff --changed-group-format='<<<<<<< (local)
|
|
%<=======
|
|
%>>>>>>>> (stock)
|
|
' "$(atf_get_srcdir)/input_c1.in" "$(atf_get_srcdir)/input_c2.in"
|
|
}
|
|
|
|
side_by_side_body()
|
|
{
|
|
atf_check -o save:A printf "A\nB\nC\n"
|
|
atf_check -o save:B printf "D\nB\nE\n"
|
|
|
|
exp_output=$(printf "A[[:space:]]+|[[:space:]]+D\nB[[:space:]]+B\nC[[:space:]]+|[[:space:]]+E")
|
|
exp_output_suppressed=$(printf "A[[:space:]]+|[[:space:]]+D\nC[[:space:]]+|[[:space:]]+E")
|
|
|
|
atf_check -o match:"$exp_output" -s exit:1 \
|
|
diff --side-by-side A B
|
|
atf_check -o match:"$exp_output" -s exit:1 \
|
|
diff -y A B
|
|
atf_check -o match:"$exp_output_suppressed" -s exit:1 \
|
|
diff -y --suppress-common-lines A B
|
|
atf_check -o match:"$exp_output_suppressed" -s exit:1 \
|
|
diff -W 65 -y --suppress-common-lines A B
|
|
}
|
|
|
|
brief_format_body()
|
|
{
|
|
atf_check mkdir A B
|
|
|
|
atf_check -x "echo 1 > A/test-file"
|
|
atf_check -x "echo 2 > B/test-file"
|
|
|
|
atf_check cp -Rf A C
|
|
atf_check cp -Rf A D
|
|
|
|
atf_check -x "echo 3 > D/another-test-file"
|
|
|
|
atf_check \
|
|
-s exit:1 \
|
|
-o inline:"Files A/test-file and B/test-file differ\n" \
|
|
diff -rq A B
|
|
|
|
atf_check diff -rq A C
|
|
|
|
atf_check \
|
|
-s exit:1 \
|
|
-o inline:"Only in D: another-test-file\n" \
|
|
diff -rq A D
|
|
|
|
atf_check \
|
|
-s exit:1 \
|
|
-o inline:"Files A/another-test-file and D/another-test-file differ\n" \
|
|
diff -Nrq A D
|
|
}
|
|
|
|
Bflag_body()
|
|
{
|
|
atf_check -x 'printf "A\nB\n" > A'
|
|
atf_check -x 'printf "A\n\nB\n" > B'
|
|
atf_check -x 'printf "A\n \nB\n" > C'
|
|
atf_check -x 'printf "A\nC\nB\n" > D'
|
|
atf_check -x 'printf "A\nB\nC\nD\nE\nF\nG\nH" > E'
|
|
atf_check -x 'printf "A\n\nB\nC\nD\nE\nF\nX\nH" > F'
|
|
|
|
atf_check -s exit:0 -o inline:"" diff -B A B
|
|
atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_C.out" diff -B A C
|
|
atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_D.out" diff -B A D
|
|
atf_check -s exit:1 -o file:"$(atf_get_srcdir)/Bflag_F.out" diff -B E F
|
|
}
|
|
|
|
Nflag_body()
|
|
{
|
|
atf_check -x 'printf "foo" > A'
|
|
|
|
atf_check -s exit:1 -o ignore -e ignore diff -N A NOFILE
|
|
atf_check -s exit:1 -o ignore -e ignore diff -N NOFILE A
|
|
atf_check -s exit:2 -o ignore -e ignore diff -N NOFILE1 NOFILE2
|
|
}
|
|
|
|
tabsize_body()
|
|
{
|
|
printf "\tA\n" > A
|
|
printf "\tB\n" > B
|
|
|
|
atf_check -s exit:1 \
|
|
-o inline:"1c1\n< A\n---\n> B\n" \
|
|
diff -t --tabsize 1 A B
|
|
}
|
|
|
|
conflicting_format_body()
|
|
{
|
|
printf "\tA\n" > A
|
|
printf "\tB\n" > B
|
|
|
|
atf_check -s exit:2 -e ignore diff -c -u A B
|
|
atf_check -s exit:2 -e ignore diff -e -f A B
|
|
atf_check -s exit:2 -e ignore diff -y -q A B
|
|
atf_check -s exit:2 -e ignore diff -q -u A B
|
|
atf_check -s exit:2 -e ignore diff -q -c A B
|
|
atf_check -s exit:2 -e ignore diff --normal -c A B
|
|
atf_check -s exit:2 -e ignore diff -c --normal A B
|
|
|
|
atf_check -s exit:1 -o ignore -e ignore diff -u -u A B
|
|
atf_check -s exit:1 -o ignore -e ignore diff -e -e A B
|
|
atf_check -s exit:1 -o ignore -e ignore diff -y -y A B
|
|
atf_check -s exit:1 -o ignore -e ignore diff -q -q A B
|
|
atf_check -s exit:1 -o ignore -e ignore diff -c -c A B
|
|
atf_check -s exit:1 -o ignore -e ignore diff --normal --normal A B
|
|
}
|
|
|
|
label_body()
|
|
{
|
|
printf "\tA\n" > A
|
|
|
|
atf_check -o inline:"Files hello and world are identical\n" \
|
|
-s exit:0 diff --label hello --label world -s A A
|
|
|
|
atf_check -o inline:"Binary files hello and world differ\n" \
|
|
-s exit:1 diff --label hello --label world `which diff` `which ls`
|
|
}
|
|
|
|
atf_init_test_cases()
|
|
{
|
|
atf_add_test_case simple
|
|
atf_add_test_case unified
|
|
atf_add_test_case header
|
|
atf_add_test_case header_ns
|
|
atf_add_test_case ifdef
|
|
atf_add_test_case group_format
|
|
atf_add_test_case side_by_side
|
|
atf_add_test_case brief_format
|
|
atf_add_test_case b230049
|
|
atf_add_test_case Bflag
|
|
atf_add_test_case Nflag
|
|
atf_add_test_case tabsize
|
|
atf_add_test_case conflicting_format
|
|
atf_add_test_case label
|
|
}
|