# file : tests/builtin/ln.testscript # 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 }