aboutsummaryrefslogtreecommitdiff
path: root/tests/test/script/builtin/rm.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test/script/builtin/rm.testscript')
-rw-r--r--tests/test/script/builtin/rm.testscript119
1 files changed, 119 insertions, 0 deletions
diff --git a/tests/test/script/builtin/rm.testscript b/tests/test/script/builtin/rm.testscript
new file mode 100644
index 0000000..3dd2674
--- /dev/null
+++ b/tests/test/script/builtin/rm.testscript
@@ -0,0 +1,119 @@
+# file : tests/test/script/builtin/rm.testscript
+# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include ../common.testscript
+
+: no-args
+:
+{
+ : fail
+ :
+ : Removing with no arguments fails.
+ :
+ $c <'rm 2>"rm: missing file" == 1' && $b
+
+ : force
+ :
+ : Removing with no arguments succeeds with -f option.
+ :
+ $c <'rm -f' && $b
+}
+
+: file
+:
+{
+ : exists
+ :
+ : Removing existing file succeeds.
+ :
+ $c <<EOI && $b
+ touch a &!a;
+ rm a
+ EOI
+
+ : not-exists
+ :
+ {
+ : fail
+ :
+ : Removing non-existing file fails.
+ :
+ $c <<EOI && $b
+ rm a 2>>/~%EOE% == 1
+ %rm: unable to remove '.+/file/not-exists/fail/test/1/a': .+%
+ EOE
+ EOI
+
+ : force
+ :
+ : Removing non-existing file succeeds with -f option.
+ :
+ $c <'rm -f a' && $b
+ }
+}
+
+: dir
+:
+{
+ : default
+ :
+ : Removing directory fails by default.
+ :
+ $c <<EOI && $b
+ mkdir a;
+ rm a 2>"rm: '$normalize([path] $~/a)' is a directory" == 1
+ EOI
+
+ : recursive
+ :
+ : Removing directory succeeds with -r option.
+ :
+ $c <<EOI && $b
+ mkdir -p a/b &!a &!a/b;
+ rm -r a
+ EOI
+
+ : scope
+ :
+ : Removing scope directory fails.
+ :
+ $c <<EOI && $b
+ rm -r ./ 2>"rm: '([string] $~)' contains test working directory '$~'" == 1
+ EOI
+}
+
+: path
+:
+{
+ : empty
+ :
+ : Removing an empty path fails.
+ :
+ $c <<EOI && $b
+ rm '' 2>"rm: invalid path ''" == 1
+ EOI
+
+ : outside-scope
+ :
+ : Need to use a path that unlikely exists (not to remove something useful).
+ :
+ {
+ : fail
+ :
+ : Removing path outside the testscript working directory fails.
+ :
+ $c <<EOI && $b
+ rm ../../a/b/c 2>>/~%EOE% == 1
+ %rm: '.+/path/outside-scope/fail/a/b/c' is out of working directory '.+/path/outside-scope/fail/test'%
+ EOE
+ EOI
+
+ : force
+ :
+ : Removing path outside the testscript working directory succeeds with -f
+ : option.
+ :
+ $c <'rm -f ../../a/b/c' && $b
+ }
+}