1 #!/bin/bash 2 3 [ -f testing.sh ] && . testing.sh 4 5 # Create test file 6 dd if=/dev/urandom of=random bs=64 count=1 2> /dev/null 7 8 #testing "name" "command" "result" "infile" "stdin" 9 10 testing "cp not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \ 11 "yes\n" "" "" 12 testing "cp -missing source [fail]" "cp missing two 2>/dev/null || echo yes" \ 13 "yes\n" "" "" 14 testing "cp file->file" "cp random two && cmp random two && echo yes" \ 15 "yes\n" "" "" 16 rm two 17 18 mkdir two 19 testing "cp file->dir" "cp random two && cmp random two/random && echo yes" \ 20 "yes\n" "" "" 21 rm two/random 22 testing "cp file->dir/file" \ 23 "cp random two/random && cmp random two/random && echo yes" \ 24 "yes\n" "" "" 25 testing "cp -r dir->missing" \ 26 "cp -r two three && cmp random three/random && echo yes" \ 27 "yes\n" "" "" 28 touch walrus 29 testing "cp -r dir->file [fail]" \ 30 "cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" "" 31 touch two/three 32 testing "cp -r dir hits file." \ 33 "cp -r three two 2>/dev/null || echo yes" "yes\n" "" "" 34 rm -rf two three walrus 35 36 touch two 37 chmod 000 two 38 testing "cp file->inaccessable [fail]" \ 39 "cp random two 2>/dev/null || echo yes" "yes\n" "" "" 40 rm -f two 41 42 touch two 43 chmod 000 two 44 testing "cp -f file->inaccessable" \ 45 "cp -f random two && cmp random two && echo yes" "yes\n" "" "" 46 mkdir sub 47 chmod 000 sub 48 testing "cp file->inaccessable_dir [fail]" \ 49 "cp random sub 2>/dev/null || echo yes" "yes\n" "" "" 50 rm two 51 rmdir sub 52 53 # This test fails because our -rf deletes existing target files without 54 # regard to what we'd be copying over it. Posix says to only do that if 55 # we'd be copying a file over the file, but does not say _why_. 56 57 #mkdir dir 58 #touch file 59 #testing "cp -rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \ 60 # "yes\n" "" "" 61 #rm -rf dir file 62 63 touch one two 64 testing "cp file1 file2 missing [fail]" \ 65 "cp one two missing 2>/dev/null || echo yes" "yes\n" "" "" 66 mkdir dir 67 testing "cp dir file missing [fail]" \ 68 "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" 69 testing "cp -rf dir file missing [fail]" \ 70 "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" "" 71 testing "cp file1 file2 file [fail]" \ 72 "cp random one two 2>/dev/null || echo yes" "yes\n" "" "" 73 testing "cp file1 file2 dir" \ 74 "cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \ 75 "yes\n" "" "" 76 rm one two random 77 rm -rf dir 78 79 mkdir -p one/two/three/four 80 touch one/two/three/five 81 touch one/{six,seven,eight} 82 testing "cp -r /abspath dest" \ 83 "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \ 84 "yes\n" "" "" 85 testing "cp -r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \ 86 "yes\n" "" "" 87 mkdir dir2 88 testing "cp -r dir1/* dir2" \ 89 "cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" "" 90 rm -rf one dir dir2 91 92 # cp -r ../source destdir 93 # cp -r one/two/three missing 94 # cp -r one/two/three two 95 # mkdir one; touch one/two; ln -s two one/three 96 # cp file1 file2 dir 97 # cp file1 missing file2 -> dir 98 99 # Make sure it's truncating existing file 100 # copy with -d at top level, with -d in directory, without -d at top level, 101 # without -d in directory 102