aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-06-14 17:56:49 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-06-15 21:08:07 +0300
commitfc8c0e410697928d644f06dea772b51c3abc0e3f (patch)
treee136e0d5e3df77ef65818ea94fee1bdced9a074f /tests
parent87f97db9d5dbe2aefbeb6c49c4bb65aa3b8afbc7 (diff)
Add support for ln testscript builtin
Diffstat (limited to 'tests')
-rw-r--r--tests/test/script/builtin/buildfile2
-rw-r--r--tests/test/script/builtin/ln.test184
2 files changed, 185 insertions, 1 deletions
diff --git a/tests/test/script/builtin/buildfile b/tests/test/script/builtin/buildfile
index f72688d..43649db 100644
--- a/tests/test/script/builtin/buildfile
+++ b/tests/test/script/builtin/buildfile
@@ -2,4 +2,4 @@
# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
# license : MIT; see accompanying LICENSE file
-./: test{cat cp echo mkdir rm rmdir sed test touch} $b
+./: test{*} $b
diff --git a/tests/test/script/builtin/ln.test b/tests/test/script/builtin/ln.test
new file mode 100644
index 0000000..99e2bcb
--- /dev/null
+++ b/tests/test/script/builtin/ln.test
@@ -0,0 +1,184 @@
+# file : tests/test/script/builtin/ln.test
+# copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+.include ../common.test
+
+: args
+:
+{
+ : -s-option
+ :
+ $c <'ln 2>"ln: missing -s option" == 1' && $b
+
+ : none
+ :
+ $c <'ln -s 2>"ln: missing arguments" == 1' && $b
+
+ : no-target
+ :
+ $c <'ln -s a 2>"ln: missing target path" == 1' && $b
+
+ : no-trailing-sep
+ :
+ $c <<EOI && $b
+ ln -s a b c 2>"ln: multiple target paths with non-directory link path" == 1
+ EOI
+
+ : empty
+ :
+ {
+ : link
+ :
+ $c <<EOI && $b
+ ln -s '' 2>"ln: invalid path ''" == 1
+ EOI
+
+ : target1
+ :
+ $c <<EOI && $b
+ ln -s '' a 2>"ln: invalid path ''" == 1
+ EOI
+
+ : target2
+ :
+ $c <<EOI && $b
+ ln -s '' a b/ 2>"ln: invalid path ''" == 1
+ EOI
+ }
+}
+
+: file
+:
+: Test creating a file symlink.
+:
+{
+ : non-existing-link-path
+ :
+ $c <<EOI && $b
+ touch a;
+ ln -s a b && test -f b
+ EOI
+
+ : existing-link
+ :
+ {
+ : file
+ :
+ $c <<EOI && $b
+ touch a b;
+ ln -s a b 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ EOI
+
+ : dir
+ :
+ $c <<EOI && $b
+ touch a;
+ mkdir b;
+ ln -s a b 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ EOI
+ }
+
+ : non-existing
+ {
+ : target
+ :
+ $c <<EOI && $b
+ ln -s a b 2>>/~%EOE% != 0
+ %ln: unable to create symlink to '.+/a': no such file or directory%
+ EOE
+ EOI
+
+ : link-dir
+ :
+ $c <<EOI && $b
+ touch a;
+ ln -s a b/c 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b/c' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b/c': .+%
+ %)
+ EOE
+ EOI
+ }
+}
+
+: dir
+:
+: Test creating a directory symlink.
+:
+{
+ : non-existing-link-path
+ :
+ $c <<EOI && $b
+ mkdir a;
+ touch a/b;
+ ln -s a c && test -f c/b
+ EOI
+
+ : existing-link
+ :
+ {
+ : dir
+ :
+ $c <<EOI && $b
+ mkdir a b;
+ ln -s a b 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ EOI
+
+ : file
+ :
+ $c <<EOI && $b
+ mkdir a;
+ touch b;
+ ln -s a b 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ EOI
+ }
+
+ : non-existing
+ {
+ : link-dir
+ :
+ $c <<EOI && $b
+ mkdir a;
+ ln -s a b/c 2>>/~%EOE% != 0
+ %(
+ %ln: unable to create .+link '.+/b/c' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b/c': .+%
+ %)
+ EOE
+ EOI
+ }
+}
+
+: multiple-targets
+:
+: Test creating links for multiple targets in the specified directory.
+:
+{
+ $c <<EOI && $b
+ touch a;
+ mkdir b c;
+ ln -s a b c/ && test -f c/a && test -d c/b
+ EOI
+}