#!/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 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 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