Skip to content

Commit 8ece3f0

Browse files
committed
is_symlink: choose_method
1 parent 23e7217 commit 8ece3f0

File tree

3 files changed

+19
-31
lines changed

3 files changed

+19
-31
lines changed

+stdlib/+native/is_symlink.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function ok = is_symlink(file)
2+
3+
ok = isSymbolicLink(file);
4+
5+
end

+stdlib/is_symlink.m

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,13 @@
11
%% IS_SYMLINK is path a symbolic link
22

3-
function ok = is_symlink(p)
3+
function ok = is_symlink(file, method)
44
arguments
5-
p {mustBeTextScalar}
5+
file {mustBeTextScalar}
6+
method (1,:) string = ["native", "java", "dotnet", "python", "sys"]
67
end
78

8-
if ~isMATLABReleaseOlderThan('R2024b')
9-
ok = isSymbolicLink(p);
10-
elseif stdlib.has_dotnet()
11-
ok = stdlib.dotnet.is_symlink(p);
12-
elseif stdlib.has_java()
13-
ok = stdlib.java.is_symlink(p);
14-
elseif stdlib.has_python()
15-
ok = stdlib.python.is_symlink(p);
16-
elseif stdlib.isoctave()
17-
% use lstat() to work with a broken symlink, like Matlab isSymbolicLink
18-
[s, err] = lstat(p);
19-
ok = err == 0 && S_ISLNK(s.mode);
20-
else
21-
ok = stdlib.sys.is_symlink(p);
22-
end
23-
24-
end
9+
fun = choose_method(method, "is_symlink", 'R2024b');
2510

11+
ok = fun(file);
2612

27-
%!test
28-
%! if !ispc
29-
%! p = tempname();
30-
%! assert(create_symlink("is_symlink.m", p))
31-
%! assert(is_symlink(p), p)
32-
%! delete(p)
33-
%! endif
13+
end

test/TestSymlink.m

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
{mfilename("fullpath") + ".m", false}, ...
1212
{"", false}};
1313
create_symlink_fun = {@stdlib.create_symlink, @stdlib.sys.create_symlink, @stdlib.dotnet.create_symlink, @stdlib.python.create_symlink}
14-
is_symlink_fun = {@stdlib.is_symlink, @stdlib.sys.is_symlink, @stdlib.dotnet.is_symlink, @stdlib.java.is_symlink, @stdlib.python.is_symlink}
14+
is_symlink_fun = {'native', 'sys', 'dotnet', 'java', 'python'}
1515
read_symlink_fun = {@stdlib.read_symlink, @stdlib.sys.read_symlink, @stdlib.dotnet.read_symlink, @stdlib.java.read_symlink, @stdlib.python.read_symlink}
1616
end
1717

@@ -45,10 +45,13 @@ function setup_symlink(tc)
4545
methods (Test, TestTags=["impure", "symlink"])
4646

4747
function test_is_symlink(tc, p, is_symlink_fun)
48-
is_capable(tc, is_symlink_fun)
49-
50-
tc.verifyTrue(is_symlink_fun(tc.link), "failed to detect own link")
51-
tc.verifyEqual(is_symlink_fun(p{1}), p{2}, p{1})
48+
tc.assertNotEmpty(which("stdlib." + is_symlink_fun + ".is_symlink"))
49+
try
50+
tc.verifyTrue(stdlib.is_symlink(tc.link, is_symlink_fun), "failed to detect own link")
51+
tc.verifyEqual(stdlib.is_symlink(p{1}, is_symlink_fun), p{2}, p{1})
52+
catch e
53+
tc.verifyEqual(e.identifier, 'stdlib:choose_method:NameError', e.message)
54+
end
5255
end
5356

5457

0 commit comments

Comments
 (0)