| #!/bin/sh |
| # Copyright 2008 by Denys Vlasenko |
| # Licensed under GPLv2, see file LICENSE in this source tree. |
| |
| . ./testing.sh |
| |
| # 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! |
| TRIM_TAB="sed 's/ .*//'" |
| |
| testing "diff of stdin" \ |
| "diff -u - input | $TRIM_TAB" \ |
| "\ |
| --- - |
| +++ input |
| @@ -1 +1,3 @@ |
| +qwe |
| asd |
| +zxc |
| " \ |
| "qwe\nasd\nzxc\n" \ |
| "asd\n" |
| |
| testing "diff of stdin, no newline in the file" \ |
| "diff -u - input | $TRIM_TAB" \ |
| "\ |
| --- - |
| +++ input |
| @@ -1 +1,3 @@ |
| +qwe |
| asd |
| +zxc |
| \\ No newline at end of file |
| " \ |
| "qwe\nasd\nzxc" \ |
| "asd\n" |
| |
| # we also test that stdin is in fact NOT read |
| testing "diff of stdin, twice" \ |
| 'diff - -; echo $?; wc -c' \ |
| "0\n5\n" \ |
| "" \ |
| "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" \ |
| "\ |
| --- diff1/- |
| +++ diff2/subdir/- |
| @@ -1 +1 @@ |
| -qwe |
| +asd |
| " \ |
| "" "" |
| SKIP= |
| |
| # using directory structure from prev test... |
| optional FEATURE_DIFF_DIR |
| testing "diff dir dir2/file/-" \ |
| "diff -ur diff1 diff2/subdir/- | $TRIM_TAB" \ |
| "\ |
| --- diff1/- |
| +++ diff2/subdir/- |
| @@ -1 +1 @@ |
| -qwe |
| +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" \ |
| "\ |
| --- diff1/- |
| +++ diff2/subdir/- |
| @@ -1 +1 @@ |
| -qwe |
| +asd |
| 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" \ |
| "\ |
| --- diff1/- |
| +++ diff2/subdir/- |
| @@ -1 +1 @@ |
| -qwe |
| +asd |
| 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" \ |
| "\ |
| --- diff1/- |
| +++ diff2/subdir/- |
| @@ -1 +1 @@ |
| -qwe |
| +asd |
| File diff2/subdir/test is not a regular file or directory and was skipped |
| 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 |
| |
| exit $FAILCOUNT |