toybox/tests/mv.test
<<
>>
Prefs
   1#!/bin/bash
   2
   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
   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
  15touch file
  16testing "file to file" \
  17  "mv file file1 && [ ! -e file -a -f file1 ] && echo yes" \
  18  "yes\n" "" ""
  19rm -f file*
  20
  21touch file
  22mkdir dir
  23testing "file to dir" \
  24  "mv file dir && [ ! -e file -a -f dir/file ] && echo yes" \
  25  "yes\n" "" ""
  26rm -rf file* dir*
  27
  28mkdir dir
  29testing "dir to dir" \
  30  "mv dir dir1 && [ ! -e dir -a -d dir1 ] && echo yes" \
  31  "yes\n" "" ""
  32rm -rf dir*
  33
  34mkdir dir1 dir2
  35touch file1 file2 dir1/file3
  36ln -s file1 link1
  37testing "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" "" ""
  43rm -rf file* link* dir*
  44
  45dd if=/dev/zero of=file1 seek=10k count=1 >/dev/null 2>&1
  46testing "random file to new file" \
  47  "mv file1 file2 && [ ! -e file1 -a -f file2 ] && stat -c %s file2" \
  48  "5243392\n" "" ""
  49rm -f file*
  50
  51touch file1
  52ln -s file1 link1
  53testing "symlink to new symlink" \
  54  "mv link1 link2 && [ ! -e link1 -a -L link2 ] && readlink link2" \
  55  "file1\n" "" ""
  56unlink tLink2 &>/dev/null
  57rm -f file* link*
  58
  59touch file1
  60ln file1 link1
  61testing "hard link to new hardlink" \
  62  "mv link1 link2 && [ ! -e link1 -a -f link2 -a file1 -ef link2 ] && echo yes" \
  63  "yes\n" "" ""
  64unlink link2 &>/dev/null
  65rm -f file* link*
  66
  67touch file1
  68chmod a-r file1
  69testing "file to unreadable file" \
  70  "mv file1 file2 && [ ! -e file1 -a -f file2 ] && echo yes" \
  71  "yes\n" "" ""
  72rm -f file*
  73
  74touch file1
  75ln file1 link1
  76mkdir dir1
  77testing "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" "" ""
  82rm -rf file* link* dir*
  83
  84mkdir -p dir1/dir2 dir3
  85touch dir1/dir2/file1 dir1/dir2/file2
  86testing "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" "" ""
  91rm -rf file* dir*
  92
  93mkdir dir1 dir2
  94testing "dir to existing dir" \
  95  "mv dir1 dir2 && [ ! -e dir1 -a -d dir2/dir1 ] && echo yes" \
  96  "yes\n" "" ""
  97rm -rf dir*
  98
  99touch file1 file2
 100chmod 400 file1 file2
 101testing "force over unwritable" \
 102  "mv -f file1 file2 && [ ! -e file1 -a -e file2 ] && echo yes" \
 103  "yes\n" "" ""
 104rm -f file*
 105
 106touch file1 file2
 107testing "no clobber (dest exists)" \
 108  "mv -n file1 file2 && [ -e file1 -a -e file2 ] && echo yes"\
 109  "yes\n" "" ""
 110rm -f file*
 111
 112touch file1
 113testing "no clobber (dest doesn't exist)" \
 114  "mv -n file1 new-dest && [ ! -e file1 -a -e new-dest ] && echo yes"\
 115  "yes\n" "" ""
 116rm -f file*
 117
 118# If there is stdin, it prompts.  If no stdin, it moves anyway and file2 won't
 119# exist.
 120touch file1 file2
 121chmod 400 file1 file2
 122testing "mv over unwritable file: no stdin" \
 123  "mv file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 124  "yes\n" "" ""
 125rm -f file*
 126
 127touch file1 file2
 128chmod 400 file1 file2
 129testing "mv over unwritable file: answered YES" \
 130  "mv file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 131  "yes\n" "" "y\n"
 132rm -f file*
 133
 134touch file1 file2
 135chmod 400 file1 file2
 136testing "mv over unwritable file: answered NO" \
 137  "mv file2 file1 2>/dev/null && [ -e file1 -a -e file2 ] && echo yes" \
 138  "yes\n" "" "n\n"
 139rm -f file*
 140
 141touch file1 file2
 142testing "interactive: no stdin" \
 143  "mv -i file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 144  "yes\n" "" ""
 145rm -f file*
 146
 147touch file1 file2
 148testing "interactive: answered YES" \
 149  "mv -i file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 150  "yes\n" "" "y\n"
 151rm -f file*
 152
 153touch file1 file2
 154testing "interactive: answered NO" \
 155  "mv -i file2 file1 2>/dev/null && [ -e file1 -a -e file2 ] && echo yes" \
 156  "yes\n" "" "n\n"
 157rm -f file*
 158