aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2016-11-25 18:40:03 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2016-12-05 17:21:48 +0300
commit4bad3a3aa3ffc111197f1d5d4b50baa1c4390444 (patch)
tree10eb60d71cf2006ea1718e38cd0f6c974238669d /tests
parent2e4ba5a271cb5967feaf4686337e8f63d45acb1f (diff)
Add rm builtin
Diffstat (limited to 'tests')
-rw-r--r--tests/test/script/builtin/buildfile2
-rw-r--r--tests/test/script/builtin/rm.test82
-rw-r--r--tests/test/script/builtin/touch.test14
3 files changed, 95 insertions, 3 deletions
diff --git a/tests/test/script/builtin/buildfile b/tests/test/script/builtin/buildfile
index baa4996..77d74cb 100644
--- a/tests/test/script/builtin/buildfile
+++ b/tests/test/script/builtin/buildfile
@@ -2,4 +2,4 @@
# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
# license : MIT; see accompanying LICENSE file
-./: test{cat echo mkdir touch}
+./: test{cat echo mkdir rm touch}
diff --git a/tests/test/script/builtin/rm.test b/tests/test/script/builtin/rm.test
new file mode 100644
index 0000000..31dfca0
--- /dev/null
+++ b/tests/test/script/builtin/rm.test
@@ -0,0 +1,82 @@
+# file : tests/test/script/runner/rm.test
+# copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
++if ($cxx.target.class != windows) # @@ TMP trailing separator
+ s = '/'
+else
+ s = '\'
+end
+
+: no-args
+:
+: Removing with no arguments fails.
+:
+rm 2>"rm: missing file" == 1
+
+: no-args-force
+:
+: Removing with no arguments succeeds with -f option.
+:
+rm -f
+
+: empty-path
+:
+: Removing an empty path fails.
+:
+rm '' 2>"rm: invalid path ''" == 1
+
+: file
+:
+: Removing existing file succeeds.
+:
+touch a &!a;
+rm a
+
+: file-not-exists
+:
+: Removing non-existing file fails.
+:
+rm a 2>- == 1 # @@ REGEX
+
+: file-not-exists-force
+:
+: Removing non-existing file succeeds with -f option.
+:
+rm -f a
+
+: dir
+:
+: Removing directory fails by default.
+:
+mkdir a;
+rm a 2>"rm: '$normalize([path] $~/a)' is a directory" == 1
+
+: dir-recursive
+:
+: Removing directory succeeds with -r option.
+:
+mkdir -p a/b &!a &!a/b;
+rm -r a
+
+: scope-dir
+:
+: Removing scope directory fails.
+:
+rm -r ./ 2>"rm: '$~$s' contains scope working directory" == 1
+
+: outside-scope
+:
+: Removing path outside the script working directory fails. Need to use a path
+: that unlikely exists (not to remove something useful).
+:
+:
+rm ../../a/b/c 2>"rm: '$normalize([path] $~/../../a/b/c)' is outside script working directory" == 1
+
+: outside-scope-force
+:
+: Removing path outside the script scope working directory succeeds with -f
+: option. Need to use a path that unlikely exists (not to remove something
+: useful).
+:
+rm -f ../../a/b/c
diff --git a/tests/test/script/builtin/touch.test b/tests/test/script/builtin/touch.test
index ef950ea..0f9e4ef 100644
--- a/tests/test/script/builtin/touch.test
+++ b/tests/test/script/builtin/touch.test
@@ -20,8 +20,18 @@ rm a
cat <"" >>>a;
touch a
-# @@ How we can test that touch of an existing file doesn't register a cleanup?
-#
+: no-cleanup
+:
+: Test that touching an existing file doesn't register cleanup. If it does then
+: the file would be removed while leaving the embedded scope, and so the
+: cleanup registered by the first touch would fail.
+:
+{
+ +touch a
+ {
+ touch ../a
+ }
+}
: no-args
: