241 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | 
