| #!/bin/bash |
| |
| # TODO: needs root to mount tmpfs to test moving across filesystems. |
| # check handling of chattr +i immutable bit |
| # "touch two; chmod -w two; mv one two" shouldn't prompt to delete two if |
| # one doesn't exist. |
| |
| # Copyright 2013 Robin Mittal <robinmittal.it@gmail.com> |
| # Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com> |
| |
| [ -f testing.sh ] && . testing.sh |
| |
| #testing "name" "command" "result" "infile" "stdin" |
| |
| touch file |
| testing "file to file" \ |
| "mv file file1 && [ ! -e file -a -f file1 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file |
| mkdir dir |
| testing "file to dir" \ |
| "mv file dir && [ ! -e file -a -f dir/file ] && echo yes" \ |
| "yes\n" "" "" |
| rm -rf file* dir* |
| |
| mkdir dir |
| testing "dir to dir" \ |
| "mv dir dir1 && [ ! -e dir -a -d dir1 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -rf dir* |
| |
| mkdir dir1 dir2 |
| touch file1 file2 dir1/file3 |
| ln -s file1 link1 |
| testing "multiple files/dirs to a dir" \ |
| "mv file1 file2 link1 dir1 dir2 && |
| [ ! -e file1 -a ! -e file2 -a ! -e link1 -a ! -e dir1 ] && |
| [ -f dir2/file1 -a -f dir2/file2 -a -L dir2/link1 -a -d dir2/dir1 ] && |
| [ -f dir2/dir1/file3 ] && readlink dir2/link1" \ |
| "file1\n" "" "" |
| rm -rf file* link* dir* |
| |
| dd if=/dev/zero of=file1 seek=10k count=1 >/dev/null 2>&1 |
| testing "random file to new file" \ |
| "mv file1 file2 && [ ! -e file1 -a -f file2 ] && stat -c %s file2" \ |
| "5243392\n" "" "" |
| rm -f file* |
| |
| touch file1 |
| ln -s file1 link1 |
| testing "symlink to new symlink" \ |
| "mv link1 link2 && [ ! -e link1 -a -L link2 ] && readlink link2" \ |
| "file1\n" "" "" |
| unlink tLink2 &>/dev/null |
| rm -f file* link* |
| |
| touch file1 |
| ln file1 link1 |
| testing "hard link to new hardlink" \ |
| "mv link1 link2 && [ ! -e link1 -a -f link2 -a file1 -ef link2 ] && echo yes" \ |
| "yes\n" "" "" |
| unlink link2 &>/dev/null |
| rm -f file* link* |
| |
| touch file1 |
| chmod a-r file1 |
| testing "file to unreadable file" \ |
| "mv file1 file2 && [ ! -e file1 -a -f file2 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file1 |
| ln file1 link1 |
| mkdir dir1 |
| testing "file hardlink dir" \ |
| "mv file1 link1 dir1 && |
| [ ! -e file1 -a ! -e link1 -a -f dir1/file1 -a -f dir1/link1 ] && |
| [ dir1/file1 -ef dir1/link1 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -rf file* link* dir* |
| |
| mkdir -p dir1/dir2 dir3 |
| touch dir1/dir2/file1 dir1/dir2/file2 |
| testing "dir to new dir" \ |
| "mv dir1/dir2 dir3/new && |
| [ ! -e dir1/dir2 -a -d dir3/new -a -f dir3/new/file1 ] && |
| [ -f dir3/new/file2 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -rf file* dir* |
| |
| mkdir dir1 dir2 |
| testing "dir to existing dir" \ |
| "mv dir1 dir2 && [ ! -e dir1 -a -d dir2/dir1 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -rf dir* |
| |
| touch file1 file2 |
| chmod 400 file1 file2 |
| testing "force over unwritable" \ |
| "mv -f file1 file2 && [ ! -e file1 -a -e file2 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file1 file2 |
| testing "no clobber (dest exists)" \ |
| "mv -n file1 file2 && [ -e file1 -a -e file2 ] && echo yes"\ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file1 |
| testing "no clobber (dest doesn't exist)" \ |
| "mv -n file1 new-dest && [ ! -e file1 -a -e new-dest ] && echo yes"\ |
| "yes\n" "" "" |
| rm -f file* |
| |
| # If there is stdin, it prompts. If no stdin, it moves anyway and file2 won't |
| # exist. |
| touch file1 file2 |
| chmod 400 file1 file2 |
| testing "mv over unwritable file: no stdin" \ |
| "mv file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file1 file2 |
| chmod 400 file1 file2 |
| testing "mv over unwritable file: answered YES" \ |
| "mv file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| "yes\n" "" "y\n" |
| rm -f file* |
| |
| touch file1 file2 |
| chmod 400 file1 file2 |
| testing "mv over unwritable file: answered NO" \ |
| "mv file2 file1 && [ -e file1 -a -e file2 ] && echo yes" \ |
| "yes\n" "" "n\n" |
| rm -f file* |
| |
| touch file1 file2 |
| testing "interactive: no stdin" \ |
| "mv -i file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| "yes\n" "" "" |
| rm -f file* |
| |
| touch file1 file2 |
| testing "interactive: answered YES" \ |
| "mv -i file2 file1 && [ -e file1 -a ! -e file2 ] && echo yes" \ |
| "yes\n" "" "y\n" |
| rm -f file* |
| |
| touch file1 file2 |
| testing "interactive: answered NO" \ |
| "mv -i file2 file1 && [ -e file1 -a -e file2 ] && echo yes" \ |
| "yes\n" "" "n\n" |
| rm -f file* |