blob: 43272565914df4d31a7b75d05b168d306464579b [file] [log] [blame]
Rob Landleydd282022008-02-16 20:00:11 -06001#!/bin/bash
2
3[ -f testing.sh ] && . testing.sh
4
5# Create test file
Rob Landley0a2d88a2008-05-04 16:00:52 -05006dd if=/dev/urandom of=random bs=64 count=1 2> /dev/null
Rob Landleydd282022008-02-16 20:00:11 -06007
8#testing "name" "command" "result" "infile" "stdin"
9
10testing "cp not enough arguments [fail]" "cp one 2>/dev/null || echo yes" \
11 "yes\n" "" ""
12testing "cp -missing source [fail]" "cp missing two 2>/dev/null || echo yes" \
13 "yes\n" "" ""
14testing "cp file->file" "cp random two && cmp random two && echo yes" \
15 "yes\n" "" ""
16rm two
17
18mkdir two
19testing "cp file->dir" "cp random two && cmp random two/random && echo yes" \
20 "yes\n" "" ""
21rm two/random
22testing "cp file->dir/file" \
23 "cp random two/random && cmp random two/random && echo yes" \
24 "yes\n" "" ""
25testing "cp -r dir->missing" \
26 "cp -r two three && cmp random three/random && echo yes" \
Rob Landley7aa651a2012-11-13 17:14:08 -060027 "yes\n" "" ""
Rob Landleydd282022008-02-16 20:00:11 -060028touch walrus
29testing "cp -r dir->file [fail]" \
30 "cp -r two walrus 2>/dev/null || echo yes" "yes\n" "" ""
31touch two/three
32testing "cp -r dir hits file." \
33 "cp -r three two 2>/dev/null || echo yes" "yes\n" "" ""
34rm -rf two three walrus
35
36touch two
37chmod 000 two
38testing "cp file->inaccessable [fail]" \
39 "cp random two 2>/dev/null || echo yes" "yes\n" "" ""
40rm -f two
41
42touch two
43chmod 000 two
44testing "cp -f file->inaccessable" \
45 "cp -f random two && cmp random two && echo yes" "yes\n" "" ""
46mkdir sub
47chmod 000 sub
48testing "cp file->inaccessable_dir [fail]" \
49 "cp random sub 2>/dev/null || echo yes" "yes\n" "" ""
50rm two
51rmdir sub
52
Rob Landleyfbe5dda2014-07-14 05:38:27 -050053# 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
Rob Landleydd282022008-02-16 20:00:11 -060062
63touch one two
64testing "cp file1 file2 missing [fail]" \
65 "cp one two missing 2>/dev/null || echo yes" "yes\n" "" ""
66mkdir dir
67testing "cp dir file missing [fail]" \
68 "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
69testing "cp -rf dir file missing [fail]" \
70 "cp dir two missing 2>/dev/null || echo yes" "yes\n" "" ""
71testing "cp file1 file2 file [fail]" \
72 "cp random one two 2>/dev/null || echo yes" "yes\n" "" ""
73testing "cp file1 file2 dir" \
74 "cp random one dir && cmp random dir/random && cmp one dir/one && echo yes" \
75 "yes\n" "" ""
76rm one two random
77rm -rf dir
78
Rob Landley5ba66632008-03-25 17:09:40 -050079mkdir -p one/two/three/four
80touch one/two/three/five
81touch one/{six,seven,eight}
82testing "cp -r /abspath dest" \
83 "cp -r \"$(readlink -f one)\" dir && diff -r one dir && echo yes" \
84 "yes\n" "" ""
Rob Landley50c8c022008-03-26 00:54:56 -050085testing "cp -r dir again" "cp -r one/. dir && diff -r one dir && echo yes" \
86 "yes\n" "" ""
Rob Landley5ba66632008-03-25 17:09:40 -050087mkdir dir2
88testing "cp -r dir1/* dir2" \
89 "cp -r one/* dir2 && diff -r one dir2 && echo yes" "yes\n" "" ""
Rob Landley50c8c022008-03-26 00:54:56 -050090rm -rf one dir dir2
Rob Landley6e6871c2008-02-20 01:47:56 -060091
Rob Landley5ba66632008-03-25 17:09:40 -050092# 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
Rob Landleydd282022008-02-16 20:00:11 -060096# cp file1 file2 dir
97# cp file1 missing file2 -> dir
Rob Landley5ba66632008-03-25 17:09:40 -050098
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