#!/bin/sh
# Copyright 2008 by Denys Vlasenko
-# Licensed under GPL v2, see file LICENSE for details.
+# Licensed under GPLv2, see file LICENSE in this source tree.
-. testing.sh
+. ./testing.sh
-# testing "test name" "options" "expected result" "file input" "stdin"
+# testing "test name" "commands" "expected result" "file input" "stdin"
# diff outputs date/time in the header, which should not be analysed
# NB: sed has tab character in s command!
# we also test that stdin is in fact NOT read
testing "diff of stdin, twice" \
- "diff - -; echo $?; wc -c" \
+ 'diff - -; echo $?; wc -c' \
"0\n5\n" \
"" \
"stdin"
-# testing "test name" "options" "expected result" "file input" "stdin"
+testing "diff of empty file against stdin" \
+ "diff -u - input | $TRIM_TAB" \
+"\
+--- -
++++ input
+@@ -1 +0,0 @@
+-a
+" \
+ "" \
+ "a\n"
+
+testing "diff of empty file against nonempty one" \
+ "diff -u - input | $TRIM_TAB" \
+"\
+--- -
++++ input
+@@ -0,0 +1 @@
++a
+" \
+ "a\n" \
+ ""
+
+testing "diff -b treats EOF as whitespace" \
+ 'diff -ub - input; echo $?' \
+ "0\n" \
+ "abc" \
+ "abc "
+
+testing "diff -b treats all spaces as equal" \
+ 'diff -ub - input; echo $?' \
+ "0\n" \
+ "a \t c\n" \
+ "a\t \tc\n"
+
+testing "diff -B ignores changes whose lines are all blank" \
+ 'diff -uB - input; echo $?' \
+ "0\n" \
+ "a\n" \
+ "\na\n\n"
+
+testing "diff -B does not ignore changes whose lines are not all blank" \
+ "diff -uB - input | $TRIM_TAB" \
+"\
+--- -
++++ input
+@@ -1,3 +1 @@
+-
+-b
+-
++a
+" \
+ "a\n" \
+ "\nb\n\n"
+
+testing "diff -B ignores blank single line change" \
+ 'diff -qB - input; echo $?' \
+ "0\n" \
+ "\n1\n" \
+ "1\n"
+
+testing "diff -B does not ignore non-blank single line change" \
+ 'diff -qB - input; echo $?' \
+ "Files - and input differ\n1\n" \
+ "0\n" \
+ "1\n"
+testing "diff always takes context from old file" \
+ "diff -ub - input | $TRIM_TAB" \
+"\
+--- -
++++ input
+@@ -1 +1,3 @@
++abc
+ a c
++def
+" \
+ "abc\na c\ndef\n" \
+ "a c\n"
+
+# testing "test name" "commands" "expected result" "file input" "stdin"
+
+# clean up
rm -rf diff1 diff2
+
mkdir diff1 diff2 diff2/subdir
echo qwe >diff1/-
echo asd >diff2/subdir/-
+optional FEATURE_DIFF_DIR
testing "diff diff1 diff2/subdir" \
"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
+asd
" \
"" ""
+SKIP=
# using directory structure from prev test...
+optional FEATURE_DIFF_DIR
testing "diff dir dir2/file/-" \
"diff -ur diff1 diff2/subdir/- | $TRIM_TAB" \
"\
+asd
" \
"" ""
+SKIP=
# using directory structure from prev test...
mkdir diff1/test
mkfifo diff2/subdir/test
+optional FEATURE_DIFF_DIR
testing "diff of dir and fifo" \
"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
Only in diff2/subdir: test
" \
"" ""
+SKIP=
# using directory structure from prev test...
rmdir diff1/test
echo >diff1/test
+optional FEATURE_DIFF_DIR
testing "diff of file and fifo" \
"diff -ur diff1 diff2/subdir | $TRIM_TAB" \
"\
File diff2/subdir/test is not a regular file or directory and was skipped
" \
"" ""
+SKIP=
# using directory structure from prev test...
mkfifo diff1/test2
+optional FEATURE_DIFF_DIR
testing "diff -rN does not read non-regular files" \
"diff -urN diff1 diff2/subdir | $TRIM_TAB" \
"\
File diff1/test2 is not a regular file or directory and was skipped
" \
"" ""
+SKIP=
+
+# clean up
+rm -rf diff1 diff2
+
+# NOT using directory structure from prev test...
+mkdir diff1 diff2
+echo qwe >diff1/-
+echo rty >diff2/-
+optional FEATURE_DIFF_DIR
+testing "diff diff1 diff2/" \
+ "diff -ur diff1 diff2/ | $TRIM_TAB; diff -ur .///diff1 diff2//// | $TRIM_TAB" \
+"\
+--- diff1/-
++++ diff2/-
+@@ -1 +1 @@
+-qwe
++rty
+--- .///diff1/-
++++ diff2////-
+@@ -1 +1 @@
+-qwe
++rty
+" \
+ "" ""
+SKIP=
# clean up
rm -rf diff1 diff2