1dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley#!/bin/bash
2dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
3dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley[ -f testing.sh ] && . testing.sh
4dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
5dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley# Create test file
60a2d88a127c1e8accd2dbea08155bbd72c9d87f6Rob Landleydd if=/dev/urandom of=random bs=64 count=1 2> /dev/null
7dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
8dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley#testing "name" "command" "result" "infile" "stdin"
9dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
10dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \
11dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
12dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -missing source [fail]" "cp missing two 2>/dev/null || echo yes" \
13dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
14dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file->file" "cp random two && cmp random two && echo yes" \
15dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
16dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm two
17dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
18dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleymkdir two
19dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file->dir" "cp random two && cmp random two/random && echo yes" \
20dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
21dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm two/random
22dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file->dir/file" \
23dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp random two/random && cmp random two/random && echo yes" \
24dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
25dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -r dir->missing" \
26dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp -r two three && cmp random three/random && echo yes" \
277aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley	"yes\n" "" ""
28dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytouch walrus
29dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -r dir->file [fail]" \
30dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" ""
31dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytouch two/three
32dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -r dir hits file." \
33dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp -r three two 2>/dev/null || echo yes" "yes\n" "" ""
34dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm -rf two three walrus
35dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
36dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytouch two
37dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleychmod 000 two
38dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file->inaccessable [fail]" \
39dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp random two 2>/dev/null || echo yes" "yes\n" "" ""
40dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm -f two
41dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
42dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytouch two
43dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleychmod 000 two
44dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -f file->inaccessable" \
45dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp -f random two && cmp random two && echo yes" "yes\n" "" ""
46dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleymkdir sub
47dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleychmod 000 sub
48dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file->inaccessable_dir [fail]" \
49dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp random sub 2>/dev/null || echo yes" "yes\n" "" ""
50dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm two
51dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrmdir sub
52dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
53fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley# This test fails because our -rf deletes existing target files without
54fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley# regard to what we'd be copying over it. Posix says to only do that if
55fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley# we'd be copying a file over the file, but does not say _why_.
56fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley
57fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley#mkdir dir
58fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley#touch file
59fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley#testing "cp -rf dir file [fail]" "cp -rf dir file 2>/dev/null || echo yes" \
60fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley#	"yes\n" "" ""
61fbe5dda4d488fdd9961ef1fd21beee59467d8e29Rob Landley#rm -rf dir file
62dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
63dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytouch one two
64dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file1 file2 missing [fail]" \
65dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp one two missing 2>/dev/null || echo yes" "yes\n" "" ""
66dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleymkdir dir
67dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp dir file missing [fail]" \
68dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
69dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp -rf dir file missing [fail]" \
70dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
71dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file1 file2 file [fail]" \
72dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp random one two 2>/dev/null || echo yes" "yes\n" "" ""
73dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleytesting "cp file1 file2 dir" \
74dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \
75dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley	"yes\n" "" ""
76dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm one two random
77dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landleyrm -rf dir
78dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley
795ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleymkdir -p one/two/three/four
805ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleytouch one/two/three/five
815ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleytouch one/{six,seven,eight}
825ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleytesting "cp -r /abspath dest" \
835ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley	"cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \
845ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley	"yes\n" "" ""
8550c8c023358645195585f1503bfb97e2fb92c940Rob Landleytesting "cp -r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \
8650c8c023358645195585f1503bfb97e2fb92c940Rob Landley	"yes\n" "" ""
875ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleymkdir dir2
885ba6663ad463973a39fd65397f9ebda52657eb7cRob Landleytesting "cp -r dir1/* dir2" \
895ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley	"cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" ""
9050c8c023358645195585f1503bfb97e2fb92c940Rob Landleyrm -rf one dir dir2
916e6871c3b253d26ab31e328dd5f9b6996b75688cRob Landley
925ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# cp -r ../source destdir
935ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# cp -r one/two/three missing
945ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# cp -r one/two/three two
955ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# mkdir one; touch one/two; ln -s two one/three
96dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley# cp file1 file2 dir
97dd282026714cb3bf4a1b98f0ecd360c980bc65b0Rob Landley# cp file1 missing file2 -> dir
985ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley
995ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# Make sure it's truncating existing file
1005ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley# copy with -d at top level, with -d in directory, without -d at top level,
1015ba6663ad463973a39fd65397f9ebda52657eb7cRob Landley#      without -d in directory
102