#!/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" "command(s)" "expected result" "file input" "stdin"
testing "patch with old_file == new_file" \
- 'patch; echo $?; cat input' \
+ 'patch 2>&1; echo $?; cat input' \
"\
patching file input
0
" \
testing "patch with nonexistent old_file" \
- 'patch; echo $?; cat input' \
+ 'patch 2>&1; echo $?; cat input' \
"\
patching file input
0
" \
testing "patch -R with nonexistent old_file" \
- 'patch -R; echo $?; cat input' \
+ 'patch -R 2>&1; echo $?; cat input' \
"\
patching file input
0
testing "patch detects already applied hunk" \
'patch 2>&1; echo $?; cat input' \
"\
+Possibly reversed hunk 1 at 4
+Hunk 1 FAILED 1/1.
+ abc
++def
+ 123
patching file input
-patch: hunk #1 FAILED at 1
-patch: 1 out of 1 hunk FAILED
1
abc
def
123
" \
-# Currently fails (erroneously appends second "456" line):
-false && testing "patch detects already applied hunk" \
+testing "patch detects already applied hunk at the EOF" \
'patch 2>&1; echo $?; cat input' \
"\
+Possibly reversed hunk 1 at 4
+Hunk 1 FAILED 1/1.
+ abc
+ 123
++456
patching file input
-patch: hunk #1 FAILED at 2
-patch: 1 out of 1 hunk FAILED
1
abc
123
+456
" \
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch -N ignores already applied hunk" \
+ 'patch -N 2>&1; echo $?; cat input' \
+"\
+patching file input
+0
+abc
+def
+123
+" \
+"\
+abc
+def
+123
+" \
+"\
+--- input
++++ input
+@@ -1,2 +1,3 @@
+ abc
++def
+ 123
+" \
+
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch FILE PATCH" \
+ 'cat >a.patch; patch input a.patch 2>&1; echo $?; cat input; rm a.patch' \
+"\
+patching file input
+0
+abc
+def
+123
+" \
+"\
+abc
+123
+" \
+"\
+--- foo.old
++++ foo
+@@ -1,2 +1,3 @@
+ abc
++def
+ 123
+" \
+
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch at the beginning" \
+ 'patch 2>&1; cat input' \
+"\
+patching file input
+111changed
+444
+555
+666
+777
+888
+999
+" \
+"\
+111
+222
+333
+444
+555
+666
+777
+888
+999
+" \
+"\
+--- input
++++ input
+@@ -1,6 +1,4 @@
+-111
+-222
+-333
++111changed
+ 444
+ 555
+ 666
+" \
+
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch creates new file" \
+ 'patch 2>&1; echo $?; cat testfile; rm testfile' \
+"\
+creating testfile
+0
+qwerty
+" "" "\
+--- /dev/null
++++ testfile
+@@ -0,0 +1 @@
++qwerty
+"
+
+# testing "test name" "command(s)" "expected result" "file input" "stdin"
+testing "patch understands ...dir///dir..." \
+ 'patch -p1 2>&1; echo $?' \
+"\
+patching file dir2///file
+patch: can't open 'dir2///file': No such file or directory
+1
+" "" "\
+--- bogus_dir///dir2///file
++++ bogus_dir///dir2///file
+@@ -1,2 +1,3 @@
+ qwe
++asd
+ zxc
+"
+
+rm input.orig 2>/dev/null
+
exit $FAILCOUNT