diff options
Diffstat (limited to 'tests/cp.test')
-rwxr-xr-x | tests/cp.test | 101 |
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 |