aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/diff/tests
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/diff/tests')
-rw-r--r--usr.bin/diff/tests/Bflag_C.out2
-rw-r--r--usr.bin/diff/tests/Bflag_D.out2
-rw-r--r--usr.bin/diff/tests/Bflag_F.out4
-rw-r--r--usr.bin/diff/tests/Makefile50
-rw-r--r--usr.bin/diff/tests/Makefile.depend10
-rwxr-xr-xusr.bin/diff/tests/diff_test.sh410
-rw-r--r--usr.bin/diff/tests/functionname.in29
-rw-r--r--usr.bin/diff/tests/functionname_c.in29
-rw-r--r--usr.bin/diff/tests/functionname_c.out11
-rw-r--r--usr.bin/diff/tests/functionname_objcclassm.in31
-rw-r--r--usr.bin/diff/tests/functionname_objcclassm.out11
-rw-r--r--usr.bin/diff/tests/functionname_objcm.in29
-rw-r--r--usr.bin/diff/tests/functionname_objcm.out11
-rw-r--r--usr.bin/diff/tests/group-format.out27
-rw-r--r--usr.bin/diff/tests/header.out4
-rw-r--r--usr.bin/diff/tests/header_ns.out4
-rw-r--r--usr.bin/diff/tests/ifdef.out26
-rw-r--r--usr.bin/diff/tests/input1.in2
-rw-r--r--usr.bin/diff/tests/input2.in3
-rw-r--r--usr.bin/diff/tests/input_c1.in15
-rw-r--r--usr.bin/diff/tests/input_c2.in16
-rw-r--r--usr.bin/diff/tests/side_by_side_tabbed_a.in4
-rw-r--r--usr.bin/diff/tests/side_by_side_tabbed_b.in4
-rw-r--r--usr.bin/diff/tests/simple.out5
-rw-r--r--usr.bin/diff/tests/simple_b.out6
-rw-r--r--usr.bin/diff/tests/simple_e.out4
-rw-r--r--usr.bin/diff/tests/simple_i.out6
-rw-r--r--usr.bin/diff/tests/simple_n.out4
-rw-r--r--usr.bin/diff/tests/simple_p.out34
-rw-r--r--usr.bin/diff/tests/simple_u.out7
-rw-r--r--usr.bin/diff/tests/simple_w.out6
-rw-r--r--usr.bin/diff/tests/strip_o.out7
-rw-r--r--usr.bin/diff/tests/unified_9999.out21
-rw-r--r--usr.bin/diff/tests/unified_c9999.out36
-rw-r--r--usr.bin/diff/tests/unified_p.out20
35 files changed, 890 insertions, 0 deletions
diff --git a/usr.bin/diff/tests/Bflag_C.out b/usr.bin/diff/tests/Bflag_C.out
new file mode 100644
index 000000000000..c7f130aff396
--- /dev/null
+++ b/usr.bin/diff/tests/Bflag_C.out
@@ -0,0 +1,2 @@
+1a2
+>
diff --git a/usr.bin/diff/tests/Bflag_D.out b/usr.bin/diff/tests/Bflag_D.out
new file mode 100644
index 000000000000..4c1170334935
--- /dev/null
+++ b/usr.bin/diff/tests/Bflag_D.out
@@ -0,0 +1,2 @@
+1a2
+> C
diff --git a/usr.bin/diff/tests/Bflag_F.out b/usr.bin/diff/tests/Bflag_F.out
new file mode 100644
index 000000000000..9dc5e5694048
--- /dev/null
+++ b/usr.bin/diff/tests/Bflag_F.out
@@ -0,0 +1,4 @@
+7c8
+< G
+---
+> X
diff --git a/usr.bin/diff/tests/Makefile b/usr.bin/diff/tests/Makefile
new file mode 100644
index 000000000000..242e76260249
--- /dev/null
+++ b/usr.bin/diff/tests/Makefile
@@ -0,0 +1,50 @@
+PACKAGE= tests
+
+ATF_TESTS_SH= diff_test
+
+${PACKAGE}FILES+= \
+ Bflag_C.out \
+ Bflag_D.out \
+ Bflag_F.out \
+ input1.in \
+ input2.in \
+ input_c1.in \
+ input_c2.in \
+ side_by_side_tabbed_a.in \
+ side_by_side_tabbed_b.in \
+ simple.out \
+ simple_e.out \
+ simple_n.out \
+ simple_u.out \
+ simple_i.out \
+ simple_w.out \
+ simple_b.out \
+ simple_p.out \
+ unified_p.out \
+ unified_c9999.out \
+ unified_9999.out \
+ header.out \
+ header_ns.out \
+ ifdef.out \
+ group-format.out \
+ strip_o.out \
+ functionname.in \
+ functionname_c.in \
+ functionname_c.out \
+ functionname_objcclassm.in \
+ functionname_objcclassm.out \
+ functionname_objcm.in \
+ functionname_objcm.out
+
+NETBSD_ATF_TESTS_SH+= netbsd_diff_test
+
+${PACKAGE}FILES+= \
+ d_mallocv1.in \
+ d_mallocv2.in
+
+ATF_TESTS_SH_SED_netbsd_diff_test+= -e 's/t_diff/`basename $$0`/g'
+ATF_TESTS_SH_SRC_netbsd_diff_test= t_diff.sh
+
+.include <netbsd-tests.test.mk>
+
+.include <bsd.test.mk>
diff --git a/usr.bin/diff/tests/Makefile.depend b/usr.bin/diff/tests/Makefile.depend
new file mode 100644
index 000000000000..11aba52f82cf
--- /dev/null
+++ b/usr.bin/diff/tests/Makefile.depend
@@ -0,0 +1,10 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.bin/diff/tests/diff_test.sh b/usr.bin/diff/tests/diff_test.sh
new file mode 100755
index 000000000000..691b649813a1
--- /dev/null
+++ b/usr.bin/diff/tests/diff_test.sh
@@ -0,0 +1,410 @@
+
+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 side_by_side_tabbed
+atf_test_case brief_format
+atf_test_case b230049
+atf_test_case stripcr_o
+atf_test_case b252515
+atf_test_case b278988
+atf_test_case Bflag
+atf_test_case Nflag
+atf_test_case tabsize
+atf_test_case conflicting_format
+atf_test_case label
+atf_test_case report_identical
+atf_test_case non_regular_file
+atf_test_case binary
+atf_test_case functionname
+atf_test_case noderef
+atf_test_case ignorecase
+atf_test_case dirloop
+
+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
+}
+
+stripcr_o_body()
+{
+ printf 'a\nX\nc\n' > stripcr_o_X.in
+ printf 'a\r\nY\r\nc\r\n' > stripcr_o_Y.in
+ atf_check -o "file:$(atf_get_srcdir)/strip_o.out" -s eq:1 \
+ diff -L1 -L2 -u --strip-trailing-cr stripcr_o_X.in stripcr_o_Y.in
+}
+
+b252515_body()
+{
+ printf 'a b\n' > b252515_a.in
+ printf 'a b\n' > b252515_b.in
+ atf_check -o empty -s eq:0 \
+ diff -qw b252515_a.in b252515_b.in
+}
+
+b278988_body()
+{
+ printf 'a\nb\nn' > b278988.a.in
+ printf 'a\n\nb\nn' > b278988.b.in
+ atf_check -o empty -s eq:0 \
+ diff -Bw b278988.a.in b278988.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
+}
+
+side_by_side_tabbed_body()
+{
+ file_a=$(atf_get_srcdir)/side_by_side_tabbed_a.in
+ file_b=$(atf_get_srcdir)/side_by_side_tabbed_b.in
+
+ atf_check -o save:diffout -s not-exit:0 \
+ diff -y ${file_a} ${file_b}
+ atf_check -o save:diffout_expanded -s not-exit:0 \
+ diff -yt ${file_a} ${file_b}
+
+ atf_check -o not-empty grep -Ee 'file A.+file B' diffout
+ atf_check -o not-empty grep -Ee 'file A.+file B' diffout_expanded
+
+ atf_check -o not-empty grep -Ee 'tabs.+tabs' diffout
+ atf_check -o not-empty grep -Ee 'tabs.+tabs' diffout_expanded
+}
+
+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`
+}
+
+report_identical_head()
+{
+ atf_set "require.user" unprivileged
+}
+report_identical_body()
+{
+ printf "\tA\n" > A
+ printf "\tB\n" > B
+ atf_check -s exit:0 -o match:"are identical" \
+ diff -s A A
+ atf_check -s exit:1 -o not-match:"are identical" \
+ diff -s A B
+ chmod -r B
+ atf_check -s exit:2 -e inline:"diff: B: Permission denied\n" \
+ -o empty diff -s A B
+}
+
+non_regular_file_body()
+{
+ printf "\tA\n" > A
+ mkfifo B
+ printf "\tA\n" > B &
+
+ atf_check diff A B
+ printf "\tB\n" > B &
+ atf_check -s exit:1 \
+ -o inline:"--- A\n+++ B\n@@ -1 +1 @@\n-\tA\n+\tB\n" \
+ diff --label A --label B -u A B
+}
+
+binary_body()
+{
+ # the NUL byte has to be after at least BUFSIZ bytes to trick asciifile()
+ yes 012345678901234567890123456789012345678901234567890 | head -n 174 > A
+ cp A B
+ printf '\n\0\n' >> A
+ printf '\nx\n' >> B
+
+ atf_check -o inline:"Binary files A and B differ\n" -s exit:1 diff A B
+ atf_check -o inline:"176c\nx\n.\n" -s exit:1 diff -ae A B
+}
+
+functionname_body()
+{
+ atf_check -o file:$(atf_get_srcdir)/functionname_c.out -s exit:1 \
+ diff -u -p -L functionname.in -L functionname_c.in \
+ "$(atf_get_srcdir)/functionname.in" "$(atf_get_srcdir)/functionname_c.in"
+
+ atf_check -o file:$(atf_get_srcdir)/functionname_objcm.out -s exit:1 \
+ diff -u -p -L functionname.in -L functionname_objcm.in \
+ "$(atf_get_srcdir)/functionname.in" "$(atf_get_srcdir)/functionname_objcm.in"
+
+ atf_check -o file:$(atf_get_srcdir)/functionname_objcclassm.out -s exit:1 \
+ diff -u -p -L functionname.in -L functionname_objcclassm.in \
+ "$(atf_get_srcdir)/functionname.in" "$(atf_get_srcdir)/functionname_objcclassm.in"
+}
+
+noderef_body()
+{
+ atf_check mkdir A B
+
+ atf_check -x "echo 1 > A/test-file"
+ atf_check -x "echo 1 > test-file"
+ atf_check -x "echo 1 > test-file2"
+
+ atf_check ln -s $(pwd)/test-file B/test-file
+
+ atf_check -o empty -s exit:0 diff -r A B
+ atf_check -o inline:"File A/test-file is a file while file B/test-file is a symbolic link\n" \
+ -s exit:1 diff -r --no-dereference A B
+
+ # both test files are now the same symbolic link
+ atf_check rm A/test-file
+
+ atf_check ln -s $(pwd)/test-file A/test-file
+ atf_check -o empty -s exit:0 diff -r A B
+ atf_check -o empty -s exit:0 diff -r --no-dereference A B
+
+ # make test files different symbolic links, but same contents
+ atf_check unlink A/test-file
+ atf_check ln -s $(pwd)/test-file2 A/test-file
+
+ atf_check -o empty -s exit:0 diff -r A B
+ atf_check -o inline:"Symbolic links A/test-file and B/test-file differ\n" -s exit:1 diff -r --no-dereference A B
+}
+
+ignorecase_body()
+{
+ atf_check mkdir A
+ atf_check mkdir B
+
+ atf_check -x "echo hello > A/foo"
+ atf_check -x "echo hello > B/FOO"
+
+ atf_check -o empty -s exit:0 diff -u -r --ignore-file-name-case A B
+}
+
+dirloop_head()
+{
+ atf_set "timeout" "10"
+}
+dirloop_body()
+{
+ atf_check mkdir -p a/foo/bar
+ atf_check ln -s .. a/foo/bar/up
+ atf_check cp -a a b
+ atf_check \
+ -e match:"a/foo/bar/up: Directory loop detected" \
+ -e match:"b/foo/bar/up: Directory loop detected" \
+ diff -r a b
+}
+
+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 side_by_side_tabbed
+ atf_add_test_case brief_format
+ atf_add_test_case b230049
+ atf_add_test_case stripcr_o
+ atf_add_test_case b252515
+ atf_add_test_case b278988
+ 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
+ atf_add_test_case report_identical
+ atf_add_test_case non_regular_file
+ atf_add_test_case binary
+ atf_add_test_case functionname
+ atf_add_test_case noderef
+ atf_add_test_case ignorecase
+ atf_add_test_case dirloop
+}
diff --git a/usr.bin/diff/tests/functionname.in b/usr.bin/diff/tests/functionname.in
new file mode 100644
index 000000000000..7b4c50c86cd9
--- /dev/null
+++ b/usr.bin/diff/tests/functionname.in
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+ if( version >= 11){
+ long offset;
+ fread(&offset, sizeof(long), 1, file);
+ return offset;
+ } else {
+ int offset;
+ fread(&offset, sizeof(int), 1, file);
+ return offset;
+ }
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+ return TRUE;
+}
diff --git a/usr.bin/diff/tests/functionname_c.in b/usr.bin/diff/tests/functionname_c.in
new file mode 100644
index 000000000000..84f6846783ca
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_c.in
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("hello\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+ if( version >= 11){
+ long offset;
+ fread(&offset, sizeof(long), 1, file);
+ return offset;
+ } else {
+ int offset;
+ fread(&offset, sizeof(int), 1, file);
+ return offset;
+ }
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+ return TRUE;
+}
diff --git a/usr.bin/diff/tests/functionname_c.out b/usr.bin/diff/tests/functionname_c.out
new file mode 100644
index 000000000000..b17ce05d04ca
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_c.out
@@ -0,0 +1,11 @@
+--- functionname.in
++++ functionname_c.in
+@@ -6,7 +6,7 @@ doSomethingThenPrintHello(int test)
+ return;
+ }
+
+- print("goodbye\n");
++ print("hello\n");
+ }
+
+
diff --git a/usr.bin/diff/tests/functionname_objcclassm.in b/usr.bin/diff/tests/functionname_objcclassm.in
new file mode 100644
index 000000000000..37a9a76c6e6a
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_objcclassm.in
@@ -0,0 +1,31 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+ if( version >= 11){
+ long offset;
+ fread(&offset, sizeof(long), 1, file);
+ return offset;
+ } else {
+ int offset;
+ fread(&offset, sizeof(int), 1, file);
+ return offset;
+ }
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+ /* With a solid guide book (such as Phillips 2006) assume we can't eat
+ * the fungus */
+ return FALSE;
+}
diff --git a/usr.bin/diff/tests/functionname_objcclassm.out b/usr.bin/diff/tests/functionname_objcclassm.out
new file mode 100644
index 000000000000..b68b732fb7c3
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_objcclassm.out
@@ -0,0 +1,11 @@
+--- functionname.in
++++ functionname_objcclassm.in
+@@ -25,5 +25,7 @@ + (BOOL) isEdible:(NSString *)mushroom
+
+ + (BOOL) isEdible:(NSString *)mushroom
+ {
+- return TRUE;
++ /* With a solid guide book (such as Phillips 2006) assume we can't eat
++ * the fungus */
++ return FALSE;
+ }
diff --git a/usr.bin/diff/tests/functionname_objcm.in b/usr.bin/diff/tests/functionname_objcm.in
new file mode 100644
index 000000000000..06c3e9b2722d
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_objcm.in
@@ -0,0 +1,29 @@
+static void
+doSomethingThenPrintHello(int test)
+{
+ test = test << 4;
+ if (test % 8 == 6) {
+ return;
+ }
+
+ print("goodbye\n");
+}
+
+
+- (long) readOffset:(FILE*)file
+{
+ if( version >= 11){
+ long offset;
+ fread(&offset, sizeof(long), 1, file);
+ return offset;
+ } else {
+ int offset;
+ fread(&offset-1, sizeof(int), 1, file);
+ return offset;
+ }
+}
+
++ (BOOL) isEdible:(NSString *)mushroom
+{
+ return TRUE;
+}
diff --git a/usr.bin/diff/tests/functionname_objcm.out b/usr.bin/diff/tests/functionname_objcm.out
new file mode 100644
index 000000000000..cb29b0892115
--- /dev/null
+++ b/usr.bin/diff/tests/functionname_objcm.out
@@ -0,0 +1,11 @@
+--- functionname.in
++++ functionname_objcm.in
+@@ -18,7 +18,7 @@ - (long) readOffset:(FILE*)file
+ return offset;
+ } else {
+ int offset;
+- fread(&offset, sizeof(int), 1, file);
++ fread(&offset-1, sizeof(int), 1, file);
+ return offset;
+ }
+ }
diff --git a/usr.bin/diff/tests/group-format.out b/usr.bin/diff/tests/group-format.out
new file mode 100644
index 000000000000..4e1bf85fbba7
--- /dev/null
+++ b/usr.bin/diff/tests/group-format.out
@@ -0,0 +1,27 @@
+/*
+ * A comment
+ *
+<<<<<<< (local)
+ * And another bla
+=======
+ * And another bla
+>>>>>>> (stock)
+ *
+<<<<<<< (local)
+ * And yet another
+=======
+ * and yet another
+>>>>>>> (stock)
+ */
+
+int
+main(void)
+{
+<<<<<<< (local)
+=======
+
+>>>>>>> (stock)
+ printf("something");
+
+ return (0);
+}
diff --git a/usr.bin/diff/tests/header.out b/usr.bin/diff/tests/header.out
new file mode 100644
index 000000000000..2e1665a30e6d
--- /dev/null
+++ b/usr.bin/diff/tests/header.out
@@ -0,0 +1,4 @@
+--- empty 2015-04-03 01:02:03.000000000 +0000
++++ hello 2016-12-22 11:22:33.000000000 +0000
+@@ -0,0 +1 @@
++hello
diff --git a/usr.bin/diff/tests/header_ns.out b/usr.bin/diff/tests/header_ns.out
new file mode 100644
index 000000000000..b1316dfc12b9
--- /dev/null
+++ b/usr.bin/diff/tests/header_ns.out
@@ -0,0 +1,4 @@
+--- empty 2015-04-03 01:02:03.123456789 +0000
++++ hello 2016-12-22 11:22:33.987654321 +0000
+@@ -0,0 +1 @@
++hello
diff --git a/usr.bin/diff/tests/ifdef.out b/usr.bin/diff/tests/ifdef.out
new file mode 100644
index 000000000000..cc72cac08635
--- /dev/null
+++ b/usr.bin/diff/tests/ifdef.out
@@ -0,0 +1,26 @@
+/*
+ * A comment
+ *
+#ifndef PLOP
+ * And another bla
+#else /* PLOP */
+ * And another bla
+#endif /* PLOP */
+ *
+#ifndef PLOP
+ * And yet another
+#else /* PLOP */
+ * and yet another
+#endif /* PLOP */
+ */
+
+int
+main(void)
+{
+#ifdef PLOP
+
+#endif /* PLOP */
+ printf("something");
+
+ return (0);
+}
diff --git a/usr.bin/diff/tests/input1.in b/usr.bin/diff/tests/input1.in
new file mode 100644
index 000000000000..3892e8400f86
--- /dev/null
+++ b/usr.bin/diff/tests/input1.in
@@ -0,0 +1,2 @@
+Simple input file designed
+to be able to test diff
diff --git a/usr.bin/diff/tests/input2.in b/usr.bin/diff/tests/input2.in
new file mode 100644
index 000000000000..c38b487353a7
--- /dev/null
+++ b/usr.bin/diff/tests/input2.in
@@ -0,0 +1,3 @@
+Simple input file designed
+and written
+to be able to test diff utility
diff --git a/usr.bin/diff/tests/input_c1.in b/usr.bin/diff/tests/input_c1.in
new file mode 100644
index 000000000000..d39dfbdc511b
--- /dev/null
+++ b/usr.bin/diff/tests/input_c1.in
@@ -0,0 +1,15 @@
+/*
+ * A comment
+ *
+ * And another bla
+ *
+ * And yet another
+ */
+
+int
+main(void)
+{
+ printf("something");
+
+ return (0);
+}
diff --git a/usr.bin/diff/tests/input_c2.in b/usr.bin/diff/tests/input_c2.in
new file mode 100644
index 000000000000..933ec67dc175
--- /dev/null
+++ b/usr.bin/diff/tests/input_c2.in
@@ -0,0 +1,16 @@
+/*
+ * A comment
+ *
+ * And another bla
+ *
+ * and yet another
+ */
+
+int
+main(void)
+{
+
+ printf("something");
+
+ return (0);
+}
diff --git a/usr.bin/diff/tests/side_by_side_tabbed_a.in b/usr.bin/diff/tests/side_by_side_tabbed_a.in
new file mode 100644
index 000000000000..3198d29f9203
--- /dev/null
+++ b/usr.bin/diff/tests/side_by_side_tabbed_a.in
@@ -0,0 +1,4 @@
+This
+ is my test file A
+ it has tabs
+Thanks
diff --git a/usr.bin/diff/tests/side_by_side_tabbed_b.in b/usr.bin/diff/tests/side_by_side_tabbed_b.in
new file mode 100644
index 000000000000..6698182a8c5d
--- /dev/null
+++ b/usr.bin/diff/tests/side_by_side_tabbed_b.in
@@ -0,0 +1,4 @@
+This
+ is my test file B
+ it has tabs
+Thanks
diff --git a/usr.bin/diff/tests/simple.out b/usr.bin/diff/tests/simple.out
new file mode 100644
index 000000000000..fcbcaa041e8c
--- /dev/null
+++ b/usr.bin/diff/tests/simple.out
@@ -0,0 +1,5 @@
+2c2,3
+< to be able to test diff
+---
+> and written
+> to be able to test diff utility
diff --git a/usr.bin/diff/tests/simple_b.out b/usr.bin/diff/tests/simple_b.out
new file mode 100644
index 000000000000..704be9d621a8
--- /dev/null
+++ b/usr.bin/diff/tests/simple_b.out
@@ -0,0 +1,6 @@
+6c6
+< * And yet another
+---
+> * and yet another
+11a12
+>
diff --git a/usr.bin/diff/tests/simple_e.out b/usr.bin/diff/tests/simple_e.out
new file mode 100644
index 000000000000..0c7e2b5c752b
--- /dev/null
+++ b/usr.bin/diff/tests/simple_e.out
@@ -0,0 +1,4 @@
+2c
+and written
+to be able to test diff utility
+.
diff --git a/usr.bin/diff/tests/simple_i.out b/usr.bin/diff/tests/simple_i.out
new file mode 100644
index 000000000000..9edc1f98d72d
--- /dev/null
+++ b/usr.bin/diff/tests/simple_i.out
@@ -0,0 +1,6 @@
+4c4
+< * And another bla
+---
+> * And another bla
+11a12
+>
diff --git a/usr.bin/diff/tests/simple_n.out b/usr.bin/diff/tests/simple_n.out
new file mode 100644
index 000000000000..33ca7090cf97
--- /dev/null
+++ b/usr.bin/diff/tests/simple_n.out
@@ -0,0 +1,4 @@
+d2 1
+a2 2
+and written
+to be able to test diff utility
diff --git a/usr.bin/diff/tests/simple_p.out b/usr.bin/diff/tests/simple_p.out
new file mode 100644
index 000000000000..f5aebb0d1199
--- /dev/null
+++ b/usr.bin/diff/tests/simple_p.out
@@ -0,0 +1,34 @@
+*** input_c1.in
+--- input_c2.in
+***************
+*** 1,14 ****
+ /*
+ * A comment
+ *
+! * And another bla
+ *
+! * And yet another
+ */
+
+ int
+ main(void)
+ {
+ printf("something");
+
+ return (0);
+--- 1,15 ----
+ /*
+ * A comment
+ *
+! * And another bla
+ *
+! * and yet another
+ */
+
+ int
+ main(void)
+ {
++
+ printf("something");
+
+ return (0);
diff --git a/usr.bin/diff/tests/simple_u.out b/usr.bin/diff/tests/simple_u.out
new file mode 100644
index 000000000000..f341987ebec6
--- /dev/null
+++ b/usr.bin/diff/tests/simple_u.out
@@ -0,0 +1,7 @@
+--- input1
++++ input2
+@@ -1,2 +1,3 @@
+ Simple input file designed
+-to be able to test diff
++and written
++to be able to test diff utility
diff --git a/usr.bin/diff/tests/simple_w.out b/usr.bin/diff/tests/simple_w.out
new file mode 100644
index 000000000000..704be9d621a8
--- /dev/null
+++ b/usr.bin/diff/tests/simple_w.out
@@ -0,0 +1,6 @@
+6c6
+< * And yet another
+---
+> * and yet another
+11a12
+>
diff --git a/usr.bin/diff/tests/strip_o.out b/usr.bin/diff/tests/strip_o.out
new file mode 100644
index 000000000000..47bbfbd4e921
--- /dev/null
+++ b/usr.bin/diff/tests/strip_o.out
@@ -0,0 +1,7 @@
+--- 1
++++ 2
+@@ -1,3 +1,3 @@
+ a
+-X
++Y
+ c
diff --git a/usr.bin/diff/tests/unified_9999.out b/usr.bin/diff/tests/unified_9999.out
new file mode 100644
index 000000000000..0f9303fbdc7c
--- /dev/null
+++ b/usr.bin/diff/tests/unified_9999.out
@@ -0,0 +1,21 @@
+--- input_c1.in
++++ input_c2.in
+@@ -1,15 +1,16 @@
+ /*
+ * A comment
+ *
+- * And another bla
++ * And another bla
+ *
+- * And yet another
++ * and yet another
+ */
+
+ int
+ main(void)
+ {
++
+ printf("something");
+
+ return (0);
+ }
diff --git a/usr.bin/diff/tests/unified_c9999.out b/usr.bin/diff/tests/unified_c9999.out
new file mode 100644
index 000000000000..87f439463e5d
--- /dev/null
+++ b/usr.bin/diff/tests/unified_c9999.out
@@ -0,0 +1,36 @@
+*** input_c1.in
+--- input_c2.in
+***************
+*** 1,15 ****
+ /*
+ * A comment
+ *
+! * And another bla
+ *
+! * And yet another
+ */
+
+ int
+ main(void)
+ {
+ printf("something");
+
+ return (0);
+ }
+--- 1,16 ----
+ /*
+ * A comment
+ *
+! * And another bla
+ *
+! * and yet another
+ */
+
+ int
+ main(void)
+ {
++
+ printf("something");
+
+ return (0);
+ }
diff --git a/usr.bin/diff/tests/unified_p.out b/usr.bin/diff/tests/unified_p.out
new file mode 100644
index 000000000000..938b07890fbc
--- /dev/null
+++ b/usr.bin/diff/tests/unified_p.out
@@ -0,0 +1,20 @@
+--- input_c1.in
++++ input_c2.in
+@@ -1,14 +1,15 @@
+ /*
+ * A comment
+ *
+- * And another bla
++ * And another bla
+ *
+- * And yet another
++ * and yet another
+ */
+
+ int
+ main(void)
+ {
++
+ printf("something");
+
+ return (0);