From 4bad3a3aa3ffc111197f1d5d4b50baa1c4390444 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 25 Nov 2016 18:40:03 +0300 Subject: Add rm builtin --- tests/test/script/builtin/buildfile | 2 +- tests/test/script/builtin/rm.test | 82 ++++++++++++++++++++++++++++++++++++ tests/test/script/builtin/touch.test | 14 +++++- 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 tests/test/script/builtin/rm.test (limited to 'tests') 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 : -- cgit v1.1