| #!/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 "not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \ |
| "yes\n" "" "" |
| testing "-missing source [fail]" "cp missing two 2>/dev/null || echo yes" \ |
| "yes\n" "" "" |
| testing "file->file" "cp random two && cmp random two && echo yes" \ |
| "yes\n" "" "" |
| rm two |
| |
| mkdir two |
| testing "file->dir" "cp random two && cmp random two/random && echo yes" \ |
| "yes\n" "" "" |
| rm two/random |
| testing "file->dir/file" \ |
| "cp random two/random && cmp random two/random && echo yes" \ |
| "yes\n" "" "" |
| testing "-r dir->missing" \ |
| "cp -r two three && cmp random three/random && echo yes" \ |
| "yes\n" "" "" |
| touch walrus |
| testing "-r dir->file [fail]" \ |
| "cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" "" |
| touch two/three |
| testing "-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 "file->inaccessable [fail]" \ |
| "cp random two 2>/dev/null || echo yes" "yes\n" "" "" |
| rm -f two |
| |
| touch two |
| chmod 000 two |
| testing "-f file->inaccessable" \ |
| "cp -f random two && cmp random two && echo yes" "yes\n" "" "" |
| mkdir sub |
| chmod 000 sub |
| testing "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 "-rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \ |
| # "yes\n" "" "" |
| #rm -rf dir file |
| |
| touch one two |
| testing "file1 file2 missing [fail]" \ |
| "cp one two missing 2>/dev/null || echo yes" "yes\n" "" "" |
| mkdir dir |
| testing "dir file missing [fail]" \ |
| "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" |
| testing "-rf dir file missing [fail]" \ |
| "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" |
| testing "file1 file2 file [fail]" \ |
| "cp random one two 2>/dev/null || echo yes" "yes\n" "" "" |
| testing "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 "-r /abspath dest" \ |
| "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \ |
| "yes\n" "" "" |
| testing "-r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \ |
| "yes\n" "" "" |
| mkdir dir2 |
| testing "-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 |