aboutsummaryrefslogtreecommitdiff
path: root/tests/builtin/ln.testscript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/builtin/ln.testscript')
-rw-r--r--tests/builtin/ln.testscript217
1 files changed, 217 insertions, 0 deletions
diff --git a/tests/builtin/ln.testscript b/tests/builtin/ln.testscript
new file mode 100644
index 0000000..ed4ca67
--- /dev/null
+++ b/tests/builtin/ln.testscript
@@ -0,0 +1,217 @@
+# file : tests/builtin/ln.testscript
+# copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
+# license : MIT; see accompanying LICENSE file
+
+test.arguments = "ln"
+test.options += -c
+
+: unknown-option
+:
+$* -u >'option -u' 2>"ln: unknown option '-u'" == 1
+
+: args
+:
+{
+ : -s-option
+ :
+ $* 2>"ln: missing -s|--symbolic option" == 1
+
+ : none
+ :
+ $* -s 2>"ln: missing arguments" == 1
+
+ : no-target
+ :
+ $* -s a 2>"ln: missing target path" == 1
+
+ : no-trailing-sep
+ :
+ $* -s a b c 2>"ln: multiple target paths with non-directory link path" == 1
+
+ : empty
+ :
+ {
+ : link
+ :
+ $* -s '' 2>"ln: invalid path ''" == 1
+
+ : target1
+ :
+ $* -s '' a 2>"ln: invalid path ''" == 1
+
+ : target2
+ :
+ $* -s '' a b/ 2>"ln: invalid path ''" == 1
+ }
+}
+
+: file
+:
+: Test creating a file symlink.
+:
+{
+ : non-existing-link-path
+ :
+ {
+ touch a;
+
+ $* -s a b >>/~%EOO% &b;
+ %create .+/b true%
+ %create .+/b false%
+ EOO
+
+ test -f b
+ }
+
+ : existing-link
+ :
+ {
+ : file
+ :
+ {
+ touch a b;
+
+ $* -s a b >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ }
+
+ : dir
+ :
+ {
+ touch a;
+ mkdir b;
+
+ $* -s a b >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ }
+ }
+
+ : non-existing
+ {
+ : target
+ :
+ {
+ $* -s a b 2>>/~%EOE% != 0
+ %ln: unable to create symlink to '.+/a': no such file or directory%
+ EOE
+ }
+
+ : link-dir
+ :
+ {
+ touch a;
+
+ $* -s a b/c >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b/c true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b/c' to '.+/a': .+%|
+ %ln: unable to copy file '.+/a' to '.+/b/c': .+%
+ %)
+ EOE
+ }
+ }
+}
+
+: dir
+:
+: Test creating a directory symlink.
+:
+{
+ : non-existing-link-path
+ :
+ {
+ mkdir a;
+ touch a/b;
+
+ $* -s a c >>/~%EOO% &c;
+ %create .+/c true%
+ %create .+/c false%
+ EOO
+
+ test -f c/b
+ }
+
+ : existing-link
+ :
+ {
+ : dir
+ :
+ {
+ mkdir a b;
+
+ $* -s a b >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ }
+
+ : file
+ :
+ {
+ mkdir a;
+ touch b;
+
+ $* -s a b >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b': .+%
+ %)
+ EOE
+ }
+ }
+
+ : non-existing
+ {
+ : link-dir
+ :
+ {
+ mkdir a;
+
+ $* -s a b/c >>/~%EOO% 2>>/~%EOE% != 0
+ %create .+/b/c true%
+ EOO
+ %(
+ %ln: unable to create .+link '.+/b/c' to '.+/a': .+%|
+ %ln: unable to copy directory '.+/a' to '.+/b/c': .+%
+ %)
+ EOE
+ }
+ }
+}
+
+: multiple-targets
+:
+: Test creating links for multiple targets in the specified directory.
+:
+{
+ touch a;
+ mkdir b c;
+
+ $* -s a b c/ >>/~%EOO% &c/a &c/b;
+ %create .+/c/a true%
+ %create .+/c/a false%
+ %create .+/c/b true%
+ %create .+/c/b false%
+ EOO
+
+ test -f c/a && test -d c/b
+}