aboutsummaryrefslogtreecommitdiff
path: root/tests/test/script/builtin
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test/script/builtin')
-rw-r--r--tests/test/script/builtin/mv.test252
1 files changed, 252 insertions, 0 deletions
diff --git a/tests/test/script/builtin/mv.test b/tests/test/script/builtin/mv.test
new file mode 100644
index 0000000..291832e
--- /dev/null
+++ b/tests/test/script/builtin/mv.test
@@ -0,0 +1,252 @@
+# file : tests/test/script/builtin/mv.test
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include ../common.test
+
+: args
+:
+{
+ : none
+ :
+ $c <'mv 2>"mv: missing arguments" == 1' && $b
+
+ : no-source
+ :
+ $c <'mv a 2>"mv: missing source path" == 1' && $b
+
+ : no-trailing-sep
+ :
+ $c <<EOI && $b
+ mv a b c 2>"mv: multiple source paths without trailing separator for destination directory" == 1
+ EOI
+
+ : empty
+ :
+ {
+ : dest
+ :
+ $c <<EOI && $b
+ mv '' 2>"mv: invalid path ''" == 1
+ EOI
+
+ : src1
+ :
+ $c <<EOI && $b
+ mv '' a 2>"mv: invalid path ''" == 1
+ EOI
+
+ : src2
+ :
+ $c <<EOI && $b
+ mv '' a b/ 2>"mv: invalid path ''" == 1
+ EOI
+ }
+}
+
+: synopsis-1
+:
+: Move an entity to the specified path.
+:
+{
+ : file
+ :
+ {
+ : existing
+ :
+ {
+ : to-non-existing
+ :
+ $c <<EOI && $b
+ touch a;
+ mv a b && test -f b && test -f a == 1
+ EOI
+
+ : to-existing
+ :
+ $c <<EOI && $b
+ touch a b;
+ mv a b && test -f b && test -f a == 1
+ EOI
+
+ : to-self
+ :
+ $c <<EOI && $b
+ touch a;
+ mv a a 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to itself%
+ EOE
+ EOI
+
+ : to-dir
+ :
+ $c <<EOI && $b
+ touch a;
+ mkdir b;
+ mv a b 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to '.+/b': .+%
+ EOE
+ EOI
+ }
+
+ : outside-scope
+ :
+ : Need to use a path that unlikely exists (not to remove something useful).
+ :
+ {
+ : fail
+ :
+ : Moving path outside the testscript working directory fails.
+ :
+ $c <<EOI && $b
+ mv ../../a/b/c ./c 2>>/~%EOE% == 1
+ %mv: '.+/fail/a/b/c' is out of working directory '.+/fail/test'%
+ EOE
+ EOI
+
+ : force
+ :
+ : Moving path outside the testscript working directory is allowed with -f
+ : option. We fail after this check succeeds as the source path does not
+ : exist.
+ :
+ $c <<EOI && $b
+ mv -f ../../a/b/c ./c 2>>/~%EOE% == 1
+ %mv: unable to move entity '.+/force/a/b/c' to '.+/c': .+%
+ EOE
+ EOI
+ }
+
+ : cleanup
+ :
+ {
+ : existing
+ :
+ : Test that moving over an existing file does not move the cleanup. If
+ : it does, then the file would be removed while leaving the embedded
+ : scope, and so the cleanup registered by the outer touch would fail. We
+ : also test that the source path cleanup is removed, otherwise it would
+ : fail.
+ :
+ $c <<EOI && $b
+ +touch b
+ {
+ touch a;
+ mv a ../b
+ }
+ EOI
+ }
+ }
+
+ : dir
+ :
+ {
+ : existing
+ :
+ {
+ : to-non-existing
+ :
+ : Note the here we also test that b path is cleaned up as a directory.
+ :
+ $c <<EOI && $b
+ mkdir a;
+ mv a b && test -d b && test -d a == 1
+ EOI
+
+ : to-non-empty
+ :
+ $c <<EOI && $b
+ mkdir a b;
+ touch b/c;
+ mv a b 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to '.+/b': .+%
+ EOE
+ EOI
+
+ : to-non-dir
+ :
+ $c <<EOI && $b
+ mkdir a;
+ touch b;
+ mv a b 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to '.+/b': .+%
+ EOE
+ EOI
+ }
+
+ : working-dir
+ :
+ {
+ : src
+ :
+ {
+ $c <<EOI && $b
+ mv $~ b 2>"mv: '([string] $~)' contains test working directory '$~'" != 0
+ EOI
+ }
+
+ : dst
+ :
+ {
+ $c <<EOI && $b
+ mkdir a;
+ mv a "$~" 2>"mv: '$~' contains test working directory '$~'" != 0
+ EOI
+ }
+ }
+
+ : overlap
+ :
+ $c <<EOI && $b
+ mkdir a;
+ mv a a/b 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to '.+/a/b': .+%
+ EOE
+ EOI
+
+ : cleanup
+ :
+ {
+ : sub-entry
+ :
+ {
+ mkdir a;
+ touch a/b;
+ mv a c
+ }
+
+ : reorder
+ :
+ : Test that a/, that is created before b/ and so should be removed after
+ : it, get removed before b/ after being renamed to b/c.
+ :
+ $c <<EOI && $b
+ mkdir a b;
+ mv a b/c
+ EOI
+ }
+ }
+
+ : non-existing
+ :
+ {
+ $c <<EOI && $b
+ mv a b 2>>/~%EOE% != 0
+ %mv: unable to move entity '.+/a' to '.+/b': .+%
+ EOE
+ EOI
+ }
+}
+
+: synopsis-2
+:
+: Move entities into the specified directory.
+:
+{
+ $c <<EOI && $b
+ mkdir a c;
+ touch a/b b;
+ mv a b c/;
+ test -d c/a && test -f c/a/b && test -f c/b
+ EOI
+}