aboutsummaryrefslogtreecommitdiffstats
path: root/patch-test/test
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-23 13:27:51 +0100
committerMattias Andrée <maandree@member.fsf.org>2016-03-23 13:29:26 +0100
commitcaa881729a9d394fec28b952fc111c6008613e55 (patch)
tree56e143e393f230d37ad08a0a13123e20d3f0cfe6 /patch-test/test
downloadbase-util-tests-caa881729a9d394fec28b952fc111c6008613e55.tar.gz
base-util-tests-caa881729a9d394fec28b952fc111c6008613e55.tar.bz2
base-util-tests-caa881729a9d394fec28b952fc111c6008613e55.tar.xz
initial import
Signed-off-by: Mattias Andrée <maandree@member.fsf.org>
Diffstat (limited to 'patch-test/test')
-rwxr-xr-xpatch-test/test1672
1 files changed, 1672 insertions, 0 deletions
diff --git a/patch-test/test b/patch-test/test
new file mode 100755
index 0000000..edc5b78
--- /dev/null
+++ b/patch-test/test
@@ -0,0 +1,1672 @@
+#!/bin/bash
+
+
+
+if test -z "$PATCH"; then
+ PATCH=../../patch
+fi
+if test -z "$FORCE_PATCH"; then
+ FORCE_PATCH="$PATCH -f"
+fi
+p="$PREFIX $PATCH"
+fp="$PREFIX $FORCE_PATCH"
+
+
+
+cd -- "$(dirname "$0")"
+
+if test $# = 0; then
+(
+ env LABEL=1: ./__test
+ env LABEL=2: SUFFIX=-l ./__test
+ env LABEL=3: SUFFIX=-l ./__test lflag
+ env LABEL=4: OLDFILE=new NEWFILE=old SKIPE=x SUFFIX=-R ./__test
+ env LABEL=5: OLDFILE=new NEWFILE=old SKIPE=x SUFFIX=-Rl ./__test
+ env LABEL=6: OLDFILE=new NEWFILE=old SKIPE=x SUFFIX=-Rl ./__test lflag
+ env LABEL=7: CGARBAGE=2 UGARBAGE=2 EGARBAGE=2 SUFFIX=-n ./__test 2> /dev/null
+ env LABEL=8: CGARBAGE=2 NGARBAGE=2 EGARBAGE=2 SUFFIX=-u ./__test 2> /dev/null
+ env LABEL=9: UGARBAGE=2 NGARBAGE=2 EGARBAGE=2 SUFFIX=-c ./__test 2> /dev/null
+ env LABEL=9: CGARBAGE=2 UGARBAGE=2 NGARBAGE=2 SUFFIX=-e ./__test 2> /dev/null
+ env LABEL=10: IFLAG=x ./__test
+ env LABEL=11: SUFFIX=-N ./__test
+ env LABEL=12: SUFFIX=-r/dev/null ./__test
+ env LABEL=13: SUFFIX=-r/dev/null ./__test fuzzy applied ed ed_i
+ env LABEL=14: SUFFIX=-Nr/dev/null ./__test fuzzy applied
+ env LABEL=-Dx: SUFFIX=-Dx NPE=x NEWFILE=def ./__test
+) | tee result1
+fi
+
+report ()
+{
+ if test $1 = 0; then
+ printf "\033[1;32mTest %s OK\033[m\n" "$2"
+ else
+ printf "\033[1;31mTest %s FAILED\033[m\n" "$2"
+ fi
+}
+
+report_np ()
+{
+ if test $1 = 0; then
+ printf "\033[1;32mTest %s OK (NON-POSIX)\033[m\n" "$2"
+ else
+ printf "\033[1;31mTest %s FAILED (NON-POSIX)\033[m\n" "$2"
+ fi
+}
+
+
+
+reversed_q ()
+{
+ cd 20
+ printf "\033[1;34mPlease answer 'y' to the question.\033[m\n" >&2
+ diff <($p -o- new < patch) old > /dev/null
+ report $? "reversed_q"
+ cd ..
+}
+
+garbage ()
+{
+ cd 20
+ < patch sed 's/^/ /' | $p -o- old > /dev/null 2> tmp
+ test $? = 2 && grep 'contains only garbage' < tmp > /dev/null
+ report $? "garbage"
+ rm tmp
+ cd ..
+}
+
+dryrun_1 ()
+{
+ cd 20
+ $p -o/dev/null old < patch
+ report $? "dryrun_1"
+ cd ..
+}
+
+dryrun_2 ()
+{
+ cd 20
+ $fp -o/dev/null old < patch
+ report $? "dryrun_2"
+ cd ..
+}
+
+dryrun_3 ()
+{
+ cd 20
+ $fp -o/dev/null new < patch 2> /dev/null
+ test $? = 1
+ report $? "dryrun_3"
+ cd ..
+}
+
+bflag ()
+{
+ cd 20
+ if test -f tmp.orig; then
+ rm tmp.orig
+ fi
+ if test -f old.orig; then
+ rm old.orig
+ fi
+ echo 'this fill should already exist' > tmp
+ $p -b -otmp old < patch
+ test $? = 0 && test ! -f old.orig && test -f tmp.orig && diff old tmp.orig > /dev/null
+ report $? "bflag"
+ touch old.orig tmp.orig
+ rm old.orig tmp.orig tmp
+ cd ..
+}
+
+bflag_oflagless ()
+{
+ cd 20
+ if test -f old.orig; then
+ rm old.orig
+ fi
+ cp old tmp
+ $p -b old < patch
+ test $? = 0 && test -f old.orig && diff tmp old.orig > /dev/null
+ report $? "bflag_oflagless"
+ if test -f old.orig; then
+ rm old.orig
+ fi
+ mv tmp old
+ cd ..
+}
+
+bflag_dry ()
+{
+ cd 20
+ $p -b -o/dev/null old < patch
+ test $? = 0 && test ! -f old.orig
+ report $? "bflag_dry"
+ if test -f old.orig; then
+ rm old.orig
+ fi
+ cd ..
+}
+
+dash_file ()
+{
+ cd 20
+ diff <($p -o- -ipatch - < old) new > /dev/null
+ report $? "dash_file"
+ cd ..
+}
+
+det_file_1a ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ diff -c old new > patch-c
+ diff <($fp -o- < patch-u) new > /dev/null
+ report $? "det_file_1a -u"
+ diff <($fp -o- < patch-c) new > /dev/null
+ report $? "det_file_1a -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_1b ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ diff -c old new > patch-c
+ mv new new.proper
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report $? "det_file_1b -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report $? "det_file_1b -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_2 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ diff -c old new > patch-c
+ rm old
+ diff <($fp -o/dev/null < patch-u 2> /dev/null) new > /dev/null
+ test $? = 1
+ report $? "det_file_2 -u"
+ diff <($fp -o/dev/null < patch-c 2> /dev/null) new > /dev/null
+ test $? = 1
+ report $? "det_file_2 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_3 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'Index: old.proper' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ mv old old.proper
+ mv new new.proper
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report $? "det_file_3 -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report $? "det_file_3 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_1a_3 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'Index: phony' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ diff <($fp -o- < patch-u) new > /dev/null
+ report $? "det_file_1a_3 -u"
+ diff <($fp -o- < patch-c) new > /dev/null
+ report $? "det_file_1a_3 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_dl ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'diff a a a a a a a a old.proper new.proper' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ mv old old.proper
+ mv new new.proper
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report_np $? "det_file_dl -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report_np $? "det_file_dl -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_dl1 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'diff a a a a a a a a old.proper new' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ mv old old.proper
+ mv new new.proper
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report_np $? "det_file_dl1 -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report_np $? "det_file_dl1 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_dl2 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'diff a a a a a a a a new old.proper' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ mv old old.proper
+ mv new new.proper
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report_np $? "det_file_dl2 -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report_np $? "det_file_dl2 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_1a_dl ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'diff a a a a a a a phony phony' | tee patch-u > patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ diff <($fp -o- < patch-u) new > /dev/null
+ report $? "det_file_1a_dl -u"
+ diff <($fp -o- < patch-c) new > /dev/null
+ report $? "det_file_1a_dl -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_dl_3 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ echo 'diff a a a a a a a a old.proper new.proper' | tee patch-u > patch-c
+ echo 'Index: x' >> patch-u
+ echo 'Index: x' >> patch-c
+ diff -u old new >> patch-u
+ diff -c old new >> patch-c
+ mv old old.proper
+ mv new new.proper
+ echo x > x
+ diff <($fp -o- < patch-u) new.proper > /dev/null
+ report_np $? "det_file_dl_3 -u"
+ diff <($fp -o- < patch-c) new.proper > /dev/null
+ report_np $? "det_file_dl_3 -c"
+ cd ..
+ rm -r tmp
+}
+
+det_file_5 ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff old new > patch
+ printf "\033[1;34mPlease answer 'old' to the question.\033[m\n" >&2
+ diff <($p -o- < patch) new > /dev/null
+ report $? "det_file_5"
+ cd ..
+ rm -r tmp
+}
+
+oflagless ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff old new > patch-u
+ $p old < patch-u
+ diff old new > /dev/null
+ report $? "oflagless -u"
+ cd ..
+ rm -r tmp
+}
+
+dflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ mkdir d
+ mv old new d
+ diff <($p -dd -o- < patch-u) d/new > /dev/null
+ report $? "dflag -u"
+ cd ..
+ rm -r tmp
+}
+
+diflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ mkdir d
+ mv old new d
+ diff <($p -dd -o- -ipatch-u) d/new > /dev/null
+ report $? "diflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pflagless ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/d
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > d/old
+ printf '%s\n' 1 2 3 x 4 5 > d/new
+ diff -u d/old d/new > patch-u
+ mv d/old d/new .
+ diff <($p -o- < patch-u) new > /dev/null
+ report $? "pflagless -u"
+ cd ..
+ rm -r tmp
+}
+
+p0flag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ diff <($p -p0 -o- < patch-u) a/b/c/new > /dev/null
+ report $? "p0flag -u"
+ cd ..
+ rm -r tmp
+}
+
+p1flag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ diff <($p -p1 -o- < patch-u) b/c/new > /dev/null
+ report $? "p1flag -u"
+ cd ..
+ rm -r tmp
+}
+
+p2flag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new c
+ diff <($p -p2 -o- < patch-u) c/new > /dev/null
+ report $? "p2flag -u"
+ cd ..
+ rm -r tmp
+}
+
+p1flag_slash ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ sed -i s:a/b/c:///a//b//c:g patch-u
+ diff <($p -p1 -o- < patch-u) a/b/c/new > /dev/null
+ report $? "p1flag_slash -u"
+ cd ..
+ rm -r tmp
+}
+
+pdflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/d/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new d/b/c
+ diff <($p -p1 -dd -o- < patch-u) d/b/c/new > /dev/null
+ report $? "pdflag -u"
+ cd ..
+ rm -r tmp
+}
+
+multipatch ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old-1
+ printf '%s\n' 1 2 3 x 4 5 > new-1
+ printf '%s\n' a b c d e > old-2
+ printf '%s\n' a b c @ d e > new-2
+
+ diff -u old-1 new-1 > patch-uc
+ diff -c old-2 new-2 >> patch-uc
+
+ echo 'Index: old-1' > patch-e
+ diff -e old-1 new-1 >> patch-e
+ echo 'Index: old-2' >> patch-e
+ diff -e old-2 new-2 >> patch-e
+
+ echo 'Index: old-1' > patch
+ diff old-1 new-1 >> patch
+ echo 'Index: old-2' >> patch
+ diff old-2 new-2 >> patch
+
+ cp old-1 1 && cp old-2 2
+ $p < patch-uc && diff old-1 new-1 > /dev/null && diff old-2 new-2 > /dev/null
+ report $? "multipatch -uc"
+ cp 1 old-1 && cp 2 old-2
+ $p < patch-e && diff old-1 new-1 > /dev/null && diff old-2 new-2 > /dev/null
+ report $? "multipatch -e"
+ cp 1 old-1 && cp 2 old-2
+ $p < patch && diff old-1 new-1 > /dev/null && diff old-2 new-2 > /dev/null
+ report $? "multipatch"
+ cd ..
+ rm -r tmp
+}
+
+multipatch_oflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old-1
+ printf '%s\n' 1 2 3 x 4 5 > new-1
+ printf '%s\n' a b c d e > old-2
+ printf '%s\n' a b c @ d e > new-2
+ diff -u old-1 new-1 > patch
+ diff -c old-2 new-2 >> patch
+ diff <($p -o- < patch) <(cat new-1 new-2) > /dev/null
+ report $? "multipatch_oflag -uc"
+ cd ..
+ rm -r tmp
+}
+
+reppatch ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a
+ printf '%s\n' 1 2 3 x 4 5 > b
+ printf '%s\n' 1 2 3 x 4 5 y > c
+
+ diff -u a b > patch-uc
+ diff -c b c >> patch-uc
+
+ diff -e a b > patch-e
+ echo '%%%%%%%%%%%%%' >> patch-e
+ diff -e b c >> patch-e
+
+ diff a b > patch
+ echo '%%%%%%%%%%%%%' >> patch
+ diff b c >> patch
+
+ cp a a.saved
+ $p a < patch-uc && diff a c > /dev/null
+ report $? "reppatch -uc"
+ cp a.saved a
+ $p a < patch-e && diff a c > /dev/null
+ report $? "reppatch -e"
+ cp a.saved a
+ $p a < patch && diff a c > /dev/null
+ report $? "reppatch"
+ cd ..
+ rm -r tmp
+}
+
+reppatch_oflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a
+ printf '%s\n' 1 2 3 x 4 5 > b
+ printf '%s\n' 1 2 3 x 4 5 y > c
+ diff -u a b > patch
+ diff -c b c >> patch
+ diff <($p -o- a < patch) <(cat b c) > /dev/null
+ report $? "reppatch_oflag -uc"
+ cd ..
+ rm -r tmp
+}
+
+reppatch_bflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a
+ cp a a.saved
+ printf '%s\n' 1 2 3 x 4 5 > b
+ printf '%s\n' 1 2 3 x 4 5 y > c
+ diff -u a b > patch
+ diff -c b c >> patch
+ $p -b a < patch
+ diff a c > /dev/null && test -f a.orig && diff a.orig a.saved > /dev/null
+ report $? "reppatch_bflag -uc"
+ cd ..
+ rm -r tmp
+}
+
+multipatch_bflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old-1
+ printf '%s\n' 1 2 3 x 4 5 > new-1
+ printf '%s\n' a b c d e > old-2
+ printf '%s\n' a b c @ d e > new-2
+ cp old-1 old-1.saved
+ cp old-2 old-2.saved
+ diff -u old-1 new-1 > patch
+ diff -c old-2 new-2 >> patch
+ $p -b < patch
+ diff old-1 new-1 > /dev/null && diff old-2 new-2 > /dev/null && \
+ test -f old-1.orig && diff old-1.orig old-1.saved > /dev/null && \
+ test -f old-2.orig && diff old-2.orig old-2.saved > /dev/null
+ report $? "multipatch_bflag -uc"
+ cd ..
+ rm -r tmp
+}
+
+rflag_uflagless ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ echo 'this shall be overridden' > rej
+ diff -c old new > patch-c
+ ($fp -o/dev/null -rrej file < patch-c 2> /dev/null ; test $? = 1) &&
+ diff <($p -o - old < rej) new > /dev/null
+ report $? "rflag_uflagless -c"
+ cd ..
+ rm -r tmp
+}
+
+ruflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ echo 'this shall be overridden' > rej
+ diff -u old new > patch-u
+ ($fp -U -o/dev/null -rrej file < patch-u 2> /dev/null ; test $? = 1) &&
+ diff <($p -o - old < rej) new > /dev/null
+ report_np $? "ruflag -u"
+ cd ..
+ rm -r tmp
+}
+
+rflagless ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ echo 'this shall be overridden' > file.rej
+ diff -c old new > patch-c
+ ($fp file < patch-c 2> /dev/null ; test $? = 1) &&
+ diff <($p -o - old < file.rej) new > /dev/null
+ report $? "rflagless -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_r ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o/dev/null -r- file < patch-c 2> /dev/null > rej ; test $? = 1) &&
+ diff <($p -o - old < rej) new > /dev/null
+ report $? "dash_r -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_r_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o/dev/null -r- -ipatch-c - < file 2> /dev/null > rej ; test $? = 1) &&
+ diff <($p -o - old < rej) new > /dev/null
+ report $? "dash_r_file -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_io ()
+{
+ cd 20
+ diff <($p -o- -i- old < patch) new > /dev/null
+ report $? "dash_io -c"
+ cd ..
+}
+
+dash_ri ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o/dev/null -r- -i- file < patch-c 2> /dev/null > rej ; test $? = 1) &&
+ diff <($p -o - old < rej) new > /dev/null
+ report $? "dash_ri -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_o_file ()
+{
+ cd 20
+ diff <($p -o- -ipatch - < old) new > /dev/null
+ report $? "dash_o_file -c"
+ cd ..
+}
+
+dash_rio ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o- -r- -i- file < patch-c > output 2> /dev/null ; test $? = 1) &&
+ diff <(tail -n "$(wc -l < file)" < output) file > /dev/null &&
+ diff <($p -o - old < output) new > /dev/null
+ report $? "dash_rio -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_ro_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o- -r- -ipatch-c - < file > output 2> /dev/null ; test $? = 1) &&
+ diff <(tail -n "$(wc -l < file)" < output) file > /dev/null &&
+ diff <($p -o - old < output) new > /dev/null
+ report $? "dash_ro_file -c"
+ cd ..
+ rm -r tmp
+}
+
+rej_dash_io ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o- -i- file < patch-c > output 2> /dev/null ; test $? = 1) &&
+ diff output file > /dev/null &&
+ diff <($p -o - old < -.rej) new > /dev/null
+ report $? "rej_dash_io -c"
+ cd ..
+ rm -r tmp
+}
+
+rej_dash_o_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -o- -ipatch-c - < file > output 2> /dev/null ; test $? = 1) &&
+ diff output file > /dev/null &&
+ diff <($p -o - old < -.rej) new > /dev/null
+ report $? "rej_dash_o_file -c"
+ cd ..
+ rm -r tmp
+}
+
+dash_o_append ()
+{
+ cp -r 20 tmp
+ cd tmp
+ echo 'this shall be preserved' > output
+ $fp -o- old < patch >> output
+ sed -i 1d output
+ diff output new > /dev/null
+ report $? "dash_o_append"
+ cd ..
+ rm -r tmp
+}
+
+dash_o_truncate ()
+{
+ cp -r 20 tmp
+ cd tmp
+ echo 'this shall be overridden' > output
+ $fp -o- old < patch > output
+ diff output new > /dev/null
+ report $? "dash_o_truncate"
+ cd ..
+ rm -r tmp
+}
+
+stdout_o_append ()
+{
+ cp -r 20 tmp
+ cd tmp
+ echo 'this shall be preserved' > output
+ $fp -o/dev/fd/1 old < patch >> output
+ sed -i 1d output
+ diff output new > /dev/null
+ report $? "stdout_o_truncate"
+ cd ..
+ rm -r tmp
+}
+
+bflag_dash_rio ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -b -o- -r- -i- file < patch-c > output 2> /dev/null ; test $? = 1) &&
+ diff <(tail -n "$(wc -l < file)" < output) file > /dev/null &&
+ diff <($p -o - old < output) new > /dev/null &&
+ test ! -f file.orig && test ! -f ./-.orig > /dev/null
+ report $? "bflag_dash_rio -c"
+ cd ..
+ rm -r tmp
+}
+
+bflag_dash_ro_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 r > old
+ printf '%s\n' A 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > new
+ printf '%s\n' 1 2 a 3 4 5 6 7 8 9 10 11 xx 13 14 15 16 17 18 19 20 > file
+ diff -c old new > patch-c
+ ($fp -b -o- -r- -ipatch-c - < file > output 2> /dev/null ; test $? = 1) &&
+ diff <(tail -n "$(wc -l < file)" < output) file > /dev/null &&
+ diff <($p -o - old < output) new > /dev/null &&
+ test ! -f ./-.orig > /dev/null
+ report $? "bflag_ro_file -c"
+ cd ..
+ rm -r tmp
+}
+
+symlink ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv old old.proper
+ ln -s old.proper old
+ $p old < patch &&
+ diff old.proper new > /dev/null &&
+ diff old new > /dev/null
+ test $? = 0 && test -L old
+ report $? "symlink"
+ cd ..
+ rm -r tmp
+}
+
+mode ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ chmod 777 old
+ $p old < patch &&
+ diff old new > /dev/null &&
+ test $(stat old | grep Access | grep -Po '\([0-8]*/' | sed -e 's/^.//' -e 's/.$//') = 0777
+ report $? "mode"
+ cd ..
+ rm -r tmp
+}
+
+reppatch_ndef ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r reppatch_def tmp
+ cd tmp
+ cp old tmp
+ $p tmp < patch-u && diff tmp new > /dev/null
+ report $? "reppatch_ndef -u"
+ cp old tmp
+ $p tmp < patch-u0 && diff tmp new > /dev/null
+ report $? "reppatch_ndef -U0"
+ cp old tmp
+ $p tmp < patch-u1 && diff tmp new > /dev/null
+ report $? "reppatch_ndef -U1"
+ cp old tmp
+ $p tmp < patch-c && diff tmp new > /dev/null
+ report $? "reppatch_ndef -c"
+ cp old tmp
+ $p tmp < patch-c0 && diff tmp new > /dev/null
+ report $? "reppatch_ndef -C0"
+ cp old tmp
+ $p tmp < patch-c1 && diff tmp new > /dev/null
+ report $? "reppatch_ndef -C1"
+ cp old tmp
+ $p tmp < patch-e && diff tmp new > /dev/null
+ report $? "reppatch_ndef -e"
+ cp old tmp
+ $p tmp < patch && diff tmp new > /dev/null
+ report $? "reppatch_ndef"
+ cd ..
+ rm -r tmp
+}
+
+reppatch_def ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r reppatch_def tmp
+ cd tmp
+ cp old tmp
+ $p -Dx tmp < patch-u
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -u OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -u ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -u FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -u FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-u0
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -U0 OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -U0 ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -U0 FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -U0 FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-u1
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -U1 OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -U1 ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -U1 FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -U1 FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-c
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -c OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -c ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -c FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -c FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-c0
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -C0 OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -C0 ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -C0 FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -C0 FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-c1
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -C1 OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -C1 ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -C1 FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -C1 FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch-e
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def -e OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def -e ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def -e FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def -e FAILED\033[m\n"
+ fi
+ cp old tmp
+ $p -Dx tmp < patch
+ if test $? = 0; then
+ if diff tmp def > /dev/null; then
+ printf "\033[1;32mTest reppatch_def OK\033[m\n"
+ elif diff tmp def.alt1 > /dev/null || diff tmp def.alt2 > /dev/null; then
+ printf "\033[1;33mTest reppatch_def ACCEPTABLE\033[m\n"
+ else
+ printf "\033[1;31mTest reppatch_def FAILED\033[m\n"
+ fi
+ else
+ printf "\033[1;31mTest reppatch_def FAILED\033[m\n"
+ fi
+ cd ..
+ rm -r tmp
+}
+
+def_excl ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 > old
+ printf '%s\n' 1 x 2 > new
+ diff -u old new > patch-u
+ printf '%s\n' 1 '#ifndef x' x '#endif' 2 > new
+ $p -D\!x old < patch-u && diff old new > /dev/null
+ report_np $? "def_excl -u"
+ cd ..
+ rm -r tmp
+}
+
+def_zero ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 > old
+ printf '%s\n' 1 x 2 > new
+ diff -u old new > patch-u
+ printf '%s\n' 1 '#if 0' x '#endif' 2 > new
+ $p -D0 old < patch-u && diff old new > /dev/null
+ report_np $? "def_zero -u"
+ cd ..
+ rm -r tmp
+}
+
+def_one ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 > old
+ printf '%s\n' 1 x 2 > new
+ diff -u old new > patch-u
+ printf '%s\n' 1 '#if 1' x '#endif' 2 > new
+ $p -D1 old < patch-u && diff old new > /dev/null
+ report_np $? "def_one -u"
+ cd ..
+ rm -r tmp
+}
+
+def_excl_one ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 > old
+ printf '%s\n' 1 x 2 > new
+ diff -u old new > patch-u
+ printf '%s\n' 1 '#if 0' x '#endif' 2 > new
+ $p -D\!1 old < patch-u && diff old new > /dev/null
+ report_np $? "def_excl_one -u"
+ cd ..
+ rm -r tmp
+}
+
+rej_multipatch ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old-1
+ printf '%s\n' 1 2 3 x 4 5 > new-1
+ printf '%s\n' a b c d e > old-2
+ printf '%s\n' a b c @ d e > new-2
+ diff -c old-1 new-1 > patch-c
+ diff -c old-2 new-2 >> patch-c
+ mv old-1 old1.saved
+ mv old-2 old2.saved
+ cat > rej-1 <<EOF
+***************
+*** 1,5
+--- 1,6
+ 1
+ 2
+ 3
++ x
+ 4
+ 5
+EOF
+ cat > rej-2 <<EOF
+***************
+*** 1,5
+--- 1,6
+ a
+ b
+ c
++ @
+ d
+ e
+EOF
+ $fp < patch-c 2> /dev/null
+ test $? = 1 && test -f new-1.rej && test -f new-2.rej &&
+ diff <(sed -e 's/ \*\*\*\*$//' -e 's/ ----$//' < new-1.rej | sed 1,2d) rej-1 >/dev/null &&
+ diff <(sed -e 's/ \*\*\*\*$//' -e 's/ ----$//' < new-2.rej | sed 1,2d) rej-2 >/dev/null
+ report $? "multipatch -c"
+ cd ..
+ rm -r tmp
+}
+
+doflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ mkdir d
+ mv old new d
+ $p -dd -otmp < patch-u && diff tmp d/new > /dev/null
+ report $? "doflag -u"
+ cd ..
+ rm -r tmp
+}
+
+dioflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir tmp
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ mkdir d
+ mv old new d
+ $p -dd -otmp -ipatch-u && diff tmp d/new > /dev/null
+ report $? "dioflag -u"
+ cd ..
+ rm -r tmp
+}
+
+piflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ diff <($p -p1 -o- -ipatch-u) b/c/new > /dev/null
+ report $? "piflag -u"
+ cd ..
+ rm -r tmp
+}
+
+poflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ $p -p1 -otmp < patch-u && diff tmp b/c/new > /dev/null
+ report $? "poflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pioflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ $p -p1 -otmp -ipatch-u && diff tmp b/c/new > /dev/null
+ report $? "pioflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pdiflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/d/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new d/b/c
+ diff <($p -p1 -dd -o- -ipatch-u) d/b/c/new > /dev/null
+ report $? "pdiflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pdioflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/d/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new d/b/c
+ $p -p1 -dd -otmp -ipatch-u && diff tmp d/b/c/new > /dev/null
+ report $? "pdioflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pdoflag ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/d/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new d/b/c
+ $p -p1 -dd -otmp < patch-u && diff tmp d/b/c/new > /dev/null
+ report $? "pdoflag -u"
+ cd ..
+ rm -r tmp
+}
+
+pdflag_absolute ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/xx
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u -- "$(realpath old)" "$(realpath new)" > patch-u
+ diff <($fp -dxx -p0 -o- < patch-u) new > /dev/null
+ report $? "pdflag_absolute -u"
+ cd ..
+ rm -r tmp
+}
+
+explicit_absolute ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/xx
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u -- "$(realpath old)" "$(realpath new)" > patch-u
+ diff <($fp -d/ -p1 -o- < patch-u) new > /dev/null
+ report $? "explicit_absolute -u"
+ cd ..
+ rm -r tmp
+}
+
+pflag_excess ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new .
+ $fp -p1000 -o- < patch-u > /dev/null
+ test $? = 2
+ report $? "pflag_excess -u"
+ cd ..
+ rm -r tmp
+}
+
+pflag_excess_one ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/old a/b/c/new > patch-u
+ mv a/old a/b/c/new .
+ $p -R -p3 -o- new < patch-u > tmp
+ test $? = 0 && diff tmp old > /dev/null
+ report $? "pflag_excess_one -u"
+ cd ..
+ rm -r tmp
+}
+
+pflag_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ diff <($p -p3 -o- b/c/old < patch-u) b/c/new > /dev/null
+ report $? "pflag_file -u"
+ cd ..
+ rm -r tmp
+}
+
+dflag_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/xx
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > old
+ printf '%s\n' 1 2 3 x 4 5 > new
+ diff -u old new > patch-u
+ diff <($p -dxx -o- old < patch-u) new > /dev/null
+ report $? "dflag_file -u"
+ cd ..
+ rm -r tmp
+}
+
+pdflag_file ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ mkdir -p tmp/a/b/c tmp/b/c tmp/xx
+ cd tmp
+ printf '%s\n' 1 2 3 4 5 > a/b/c/old
+ printf '%s\n' 1 2 3 x 4 5 > a/b/c/new
+ diff -u a/b/c/old a/b/c/new > patch-u
+ mv a/b/c/old a/b/c/new b/c
+ diff <($p -dxx -p3 -o- b/c/old < patch-u) b/c/new > /dev/null
+ report $? "pdflag_file -u"
+ cd ..
+ rm -r tmp
+}
+
+nonascii_name ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv new new.saved
+ cp old old.saved
+ mv old åäö
+ sed -i 's/old/åäö/' patch-u
+ sed -i 's/old/åäö/' patch-c
+ $p < patch-u > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "nonascii_name -u"
+ cp old.saved åäö
+ $p < patch-c > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "nonascii_name -c"
+ cd ..
+ rm -r tmp
+}
+
+nonascii_name_indexline ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv patch tmp
+ echo 'Index: åäö' > patch
+ cat tmp >> patch
+ mv old åäö
+ mv new new.saved
+ $p < patch > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "nonascii_name_indexline"
+ cd ..
+ rm -r tmp
+}
+
+quoted_name ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ cp old old.saved
+ mv old åäö
+ diff -u åäö new > patch-u
+ diff -c åäö new > patch-c
+ mv new new.saved
+ $p < patch-u > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "quoted_name -u"
+ cp old.saved åäö
+ $p < patch-c > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "quoted_name -c"
+ cd ..
+ rm -r tmp
+}
+
+quoted_name_indexline ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv patch tmp
+ echo 'Index: "\303\245\303\244\303\266"' > patch
+ cat tmp >> patch
+ mv old åäö
+ mv new new.saved
+ $p < patch > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "quoted_name_indexline"
+ cd ..
+ rm -r tmp
+}
+
+quoted_name_diffline ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv patch tmp
+ echo 'diff '\'' x x '\'' "\303\245\303\244\303\266" new' > patch
+ cat tmp >> patch
+ mv old åäö
+ mv new new.saved
+ $p < patch > /dev/null && diff åäö new.saved > /dev/null
+ report_np $? "quoted_name_diffline"
+ cd ..
+ rm -r tmp
+}
+
+quote_format ()
+{
+ if test -d tmp; then
+ rm -r tmp
+ fi
+ cp -r 20 tmp
+ cd tmp
+ mv patch tmp
+ cname='a\a\b\f\n\r\t\vbcd\x80\x80\123'
+ name="$(printf "${cname}")"
+ echo 'Index: "'"${cname}"'"' > patch
+ cat tmp >> patch
+ mv old "${name}"
+ mv new new.saved
+ $p < patch > /dev/null && diff "${name}" new.saved > /dev/null
+ report_np $? "quote_format"
+ cd ..
+ rm -r tmp
+}
+
+if test $# = 0; then
+ set reversed_q garbage dryrun_1 dryrun_2 dryrun_3 bflag dash_file det_file_1a det_file_1b \
+ det_file_2 det_file_3 det_file_1a_3 det_file_dl det_file_dl1 det_file_dl2 det_file_1a_dl \
+ det_file_dl_3 det_file_5 oflagless dflag diflag pflagless p0flag p1flag p2flag p1flag_slash \
+ pdflag multipatch multipatch_oflag reppatch reppatch_oflag reppatch_bflag multipatch_bflag \
+ rflag_uflagless ruflag rflagless dash_r dash_r_file dash_io dash_ri dash_o_file dash_rio \
+ dash_ro_file rej_dash_io rej_dash_o_file dash_o_append dash_o_truncate stdout_o_append \
+ bflag_dash_rio bflag_dash_ro_file bflag_dry bflag_oflagless symlink mode reppatch_ndef \
+ reppatch_def def_excl def_zero def_one def_excl_one rej_multipatch doflag dioflag piflag \
+ poflag pioflag pdiflag pdoflag pdioflag pdflag_absolute explicit_absolute pflag_excess \
+ pflag_excess_one pflag_file dflag_file pdflag_file nonascii_name nonascii_name_indexline \
+ quoted_name quoted_name_indexline quoted_name_diffline quote_format
+fi
+(
+for f in $@; do
+ $f
+done
+) | tee result2
+
+touch result1 result2
+cat result1 result2 > result
+! grep FAILED < result >/dev/null
+ret=$?
+rm result1 result2 result
+exit $ret