#!/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
|
|
touch walrus
|
chmod 644 walrus
|
ln -s walrus woot
|
|
testing "symlink dest permissions" "cp woot carpenter && stat -c %A carpenter" \
|
"-rw-r--r--\n" "" ""
|
|
# 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
|