aboutsummaryrefslogtreecommitdiff
path: root/tests/cp.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cp.test')
-rwxr-xr-xtests/cp.test101
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/cp.test b/tests/cp.test
new file mode 100755
index 00000000..43272565
--- /dev/null
+++ b/tests/cp.test
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+[ -f testing.sh ] && . testing.sh
+
+# Create test file
+dd if=/dev/urandom of=random bs=64 count=1 2> /dev/null
+
+#testing "name" "command" "result" "infile" "stdin"
+
+testing "cp not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \
+ "yes\n" "" ""
+testing "cp -missing source [fail]" "cp missing two 2>/dev/null || echo yes" \
+ "yes\n" "" ""
+testing "cp file->file" "cp random two && cmp random two && echo yes" \
+ "yes\n" "" ""
+rm two
+
+mkdir two
+testing "cp file->dir" "cp random two && cmp random two/random && echo yes" \
+ "yes\n" "" ""
+rm two/random
+testing "cp file->dir/file" \
+ "cp random two/random && cmp random two/random && echo yes" \
+ "yes\n" "" ""
+testing "cp -r dir->missing" \
+ "cp -r two three && cmp random three/random && echo yes" \
+ "yes\n" "" ""
+touch walrus
+testing "cp -r dir->file [fail]" \
+ "cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" ""
+touch two/three
+testing "cp -r dir hits file." \
+ "cp -r three two 2>/dev/null || echo yes" "yes\n" "" ""
+rm -rf two three walrus
+
+touch two
+chmod 000 two
+testing "cp file->inaccessable [fail]" \
+ "cp random two 2>/dev/null || echo yes" "yes\n" "" ""
+rm -f two
+
+touch two
+chmod 000 two
+testing "cp -f file->inaccessable" \
+ "cp -f random two && cmp random two && echo yes" "yes\n" "" ""
+mkdir sub
+chmod 000 sub
+testing "cp file->inaccessable_dir [fail]" \
+ "cp random sub 2>/dev/null || echo yes" "yes\n" "" ""
+rm two
+rmdir sub
+
+# This test fails because our -rf deletes existing target files without
+# regard to what we'd be copying over it. Posix says to only do that if
+# we'd be copying a file over the file, but does not say _why_.
+
+#mkdir dir
+#touch file
+#testing "cp -rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \
+# "yes\n" "" ""
+#rm -rf dir file
+
+touch one two
+testing "cp file1 file2 missing [fail]" \
+ "cp one two missing 2>/dev/null || echo yes" "yes\n" "" ""
+mkdir dir
+testing "cp dir file missing [fail]" \
+ "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
+testing "cp -rf dir file missing [fail]" \
+ "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
+testing "cp file1 file2 file [fail]" \
+ "cp random one two 2>/dev/null || echo yes" "yes\n" "" ""
+testing "cp file1 file2 dir" \
+ "cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \
+ "yes\n" "" ""
+rm one two random
+rm -rf dir
+
+mkdir -p one/two/three/four
+touch one/two/three/five
+touch one/{six,seven,eight}
+testing "cp -r /abspath dest" \
+ "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \
+ "yes\n" "" ""
+testing "cp -r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \
+ "yes\n" "" ""
+mkdir dir2
+testing "cp -r dir1/* dir2" \
+ "cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" ""
+rm -rf one dir dir2
+
+# cp -r ../source destdir
+# cp -r one/two/three missing
+# cp -r one/two/three two
+# mkdir one; touch one/two; ln -s two one/three
+# cp file1 file2 dir
+# cp file1 missing file2 -> dir
+
+# Make sure it's truncating existing file
+# copy with -d at top level, with -d in directory, without -d at top level,
+# without -d in directory