Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
Rob Landley | 9b93dd3 | 2016-03-30 03:20:13 -0500 | [diff] [blame] | 3 | # TODO: needs root to mount tmpfs to test moving across filesystems. |
| 4 | # check handling of chattr +i immutable bit |
| 5 | # "touch two; chmod -w two; mv one two" shouldn't prompt to delete two if |
| 6 | # one doesn't exist. |
| 7 | |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 8 | # Copyright 2013 Robin Mittal <robinmittal.it@gmail.com> |
| 9 | # Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com> |
| 10 | |
| 11 | [ -f testing.sh ] && . testing.sh |
| 12 | |
| 13 | #testing "name" "command" "result" "infile" "stdin" |
| 14 | |
| 15 | touch file |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 16 | testing "file to file" \ |
| 17 | "mv file file1 && [ ! -e file -a -f file1 ] && echo yes" \ |
| 18 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 19 | rm -f file* |
| 20 | |
| 21 | touch file |
| 22 | mkdir dir |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 23 | testing "file to dir" \ |
| 24 | "mv file dir && [ ! -e file -a -f dir/file ] && echo yes" \ |
| 25 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 26 | rm -rf file* dir* |
| 27 | |
| 28 | mkdir dir |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 29 | testing "dir to dir" \ |
| 30 | "mv dir dir1 && [ ! -e dir -a -d dir1 ] && echo yes" \ |
| 31 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 32 | rm -rf dir* |
| 33 | |
| 34 | mkdir dir1 dir2 |
| 35 | touch file1 file2 dir1/file3 |
| 36 | ln -s file1 link1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 37 | testing "multiple files/dirs to a dir" \ |
| 38 | "mv file1 file2 link1 dir1 dir2 && |
| 39 | [ ! -e file1 -a ! -e file2 -a ! -e link1 -a ! -e dir1 ] && |
| 40 | [ -f dir2/file1 -a -f dir2/file2 -a -L dir2/link1 -a -d dir2/dir1 ] && |
| 41 | [ -f dir2/dir1/file3 ] && readlink dir2/link1" \ |
| 42 | "file1\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 43 | rm -rf file* link* dir* |
| 44 | |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 45 | dd if=/dev/zero of=file1 seek=10k count=1 >/dev/null 2>&1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 46 | testing "random file to new file" \ |
| 47 | "mv file1 file2 && [ ! -e file1 -a -f file2 ] && stat -c %s file2" \ |
| 48 | "5243392\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 49 | rm -f file* |
| 50 | |
| 51 | touch file1 |
| 52 | ln -s file1 link1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 53 | testing "symlink to new symlink" \ |
| 54 | "mv link1 link2 && [ ! -e link1 -a -L link2 ] && readlink link2" \ |
| 55 | "file1\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 56 | unlink tLink2 &>/dev/null |
| 57 | rm -f file* link* |
| 58 | |
| 59 | touch file1 |
| 60 | ln file1 link1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 61 | testing "hard link to new hardlink" \ |
| 62 | "mv link1 link2 && [ ! -e link1 -a -f link2 -a file1 -ef link2 ] && echo yes" \ |
| 63 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 64 | unlink link2 &>/dev/null |
| 65 | rm -f file* link* |
| 66 | |
| 67 | touch file1 |
| 68 | chmod a-r file1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 69 | testing "file to unreadable file" \ |
| 70 | "mv file1 file2 && [ ! -e file1 -a -f file2 ] && echo yes" \ |
| 71 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 72 | rm -f file* |
| 73 | |
| 74 | touch file1 |
| 75 | ln file1 link1 |
| 76 | mkdir dir1 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 77 | testing "file hardlink dir" \ |
| 78 | "mv file1 link1 dir1 && |
| 79 | [ ! -e file1 -a ! -e link1 -a -f dir1/file1 -a -f dir1/link1 ] && |
| 80 | [ dir1/file1 -ef dir1/link1 ] && echo yes" \ |
| 81 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 82 | rm -rf file* link* dir* |
| 83 | |
| 84 | mkdir -p dir1/dir2 dir3 |
| 85 | touch dir1/dir2/file1 dir1/dir2/file2 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 86 | testing "dir to new dir" \ |
| 87 | "mv dir1/dir2 dir3/new && |
| 88 | [ ! -e dir1/dir2 -a -d dir3/new -a -f dir3/new/file1 ] && |
| 89 | [ -f dir3/new/file2 ] && echo yes" \ |
| 90 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 91 | rm -rf file* dir* |
| 92 | |
| 93 | mkdir dir1 dir2 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 94 | testing "dir to existing dir" \ |
| 95 | "mv dir1 dir2 && [ ! -e dir1 -a -d dir2/dir1 ] && echo yes" \ |
| 96 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 97 | rm -rf dir* |
| 98 | |
| 99 | touch file1 file2 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 100 | chmod 400 file1 file2 |
| 101 | testing "force over unwritable" \ |
| 102 | "mv -f file1 file2 && [ ! -e file1 -a -e file2 ] && echo yes" \ |
| 103 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 104 | rm -f file* |
| 105 | |
| 106 | touch file1 file2 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 107 | testing "no clobber (dest exists)" \ |
| 108 | "mv -n file1 file2 && [ -e file1 -a -e file2 ] && echo yes"\ |
| 109 | "yes\n" "" "" |
| 110 | rm -f file* |
| 111 | |
| 112 | touch file1 |
| 113 | testing "no clobber (dest doesn't exist)" \ |
| 114 | "mv -n file1 new-dest && [ ! -e file1 -a -e new-dest ] && echo yes"\ |
| 115 | "yes\n" "" "" |
| 116 | rm -f file* |
| 117 | |
| 118 | # If there is stdin, it prompts. If no stdin, it moves anyway and file2 won't |
| 119 | # exist. |
| 120 | touch file1 file2 |
| 121 | chmod 400 file1 file2 |
| 122 | testing "mv over unwritable file: no stdin" \ |
| 123 | "mv file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| 124 | "yes\n" "" "" |
Divya Kothari | a0f56be | 2014-06-26 07:25:20 -0500 | [diff] [blame] | 125 | rm -f file* |
Elliott Hughes | f1f20b9 | 2015-08-30 06:35:30 -0500 | [diff] [blame] | 126 | |
| 127 | touch file1 file2 |
| 128 | chmod 400 file1 file2 |
Andy Chu | 7a0186c | 2016-03-19 00:34:42 -0700 | [diff] [blame] | 129 | testing "mv over unwritable file: answered YES" \ |
| 130 | "mv file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| 131 | "yes\n" "" "y\n" |
| 132 | rm -f file* |
| 133 | |
| 134 | touch file1 file2 |
| 135 | chmod 400 file1 file2 |
| 136 | testing "mv over unwritable file: answered NO" \ |
| 137 | "mv file2 file1 && [ -e file1 -a -e file2 ] && echo yes" \ |
| 138 | "yes\n" "" "n\n" |
| 139 | rm -f file* |
| 140 | |
| 141 | touch file1 file2 |
| 142 | testing "interactive: no stdin" \ |
| 143 | "mv -i file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| 144 | "yes\n" "" "" |
| 145 | rm -f file* |
| 146 | |
| 147 | touch file1 file2 |
| 148 | testing "interactive: answered YES" \ |
| 149 | "mv -i file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| 150 | "yes\n" "" "y\n" |
| 151 | rm -f file* |
| 152 | |
| 153 | touch file1 file2 |
| 154 | testing "interactive: answered NO" \ |
| 155 | "mv -i file2 file1 && [ -e file1 -a -e file2 ] && echo yes" \ |
| 156 | "yes\n" "" "n\n" |
Elliott Hughes | f1f20b9 | 2015-08-30 06:35:30 -0500 | [diff] [blame] | 157 | rm -f file* |