Skip to content

Commit 12a4ca1

Browse files
committed
relative_to, is_subdir: clarify
1 parent 64ca9c4 commit 12a4ca1

File tree

7 files changed

+61
-33
lines changed

7 files changed

+61
-33
lines changed

+stdlib/get_username.m

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
%% GET_USERNAME tell username of current user
22

3-
function username = get_username()
4-
username = string(java.lang.System.getProperty('user.name'));
3+
function n = get_username()
4+
5+
if stdlib.isoctave()
6+
n = javaMethod("getProperty", "java.lang.System", "user.name");
7+
else
8+
n = string(java.lang.System.getProperty('user.name'));
9+
end
10+
511
end
12+
13+
%!assert(!isempty(get_username()))

+stdlib/is_subdir.m

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,28 @@
11
%% IS_SUBDIR is subdir a subdirectory of dir?
22

3-
function yes = is_subdir(subdir, dir)
3+
function s = is_subdir(subdir, dir)
44
arguments
55
subdir (1,1) string
66
dir (1,1) string
77
end
88

99
r = stdlib.relative_to(dir, subdir);
1010

11-
yes = strlength(r) > 0 && r ~= "." && ~startsWith(r, "..");
11+
if stdlib.len(r) == 0 || r == "."
12+
s = false;
13+
elseif ischar(r)
14+
s = ~strncmp(r, '..', 2);
15+
else
16+
s = ~startsWith(r, "..");
17+
end
1218

1319
end
20+
21+
%!assert(!is_subdir("/a/b", "/a/b"))
22+
%!assert(!is_subdir("/a/b", "/a/b/c"))
23+
%!assert(!is_subdir("/a/b", "/a/b/c/"))
24+
%!assert(!is_subdir("/a/b", "d"))
25+
%!assert(is_subdir("a/b", "a"))
26+
%!assert(!is_subdir("a", "a/.c"))
27+
28+
% this is incorrect on Windows at least%assert(is_subdir("a/b", "a/b/.."))

+stdlib/is_writable.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
if use_java
1212
% java is about 10x slower than fileattrib
1313
% needs absolute()
14-
file = stdlib.absolute(file, "", false, use_java);
14+
file = stdlib.absolute(file, "", false, true);
1515

1616
% https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/nio/file/Files.html#isWritable(java.nio.file.Path)
1717
ok = java.nio.file.Files.isWritable(java.io.File(file).toPath());

+stdlib/java_api.m

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66

77
% major version is first number before "."
88

9-
a = split(v, ".");
9+
a = strsplit(v, '.');
1010
if(isempty(a))
1111
api = 0;
1212
return
1313
end
1414

15-
if a(1) == "1"
16-
api = double(a(2));
15+
if a{1} == "1"
16+
api = str2double(a{2});
1717
else
18-
api = double(a(1));
18+
api = str2double(a{1});
1919
end
2020

2121
end
22+
23+
24+
%!assert(java_api() > 0)

+stdlib/java_version.m

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
%% JAVA_VERSION get version of Java Virtual Machine
2-
3-
function v = java_version()
4-
5-
v = string(java.lang.System.getProperty("java.version"));
6-
72
% this gives a long string with more detail
83
% version("-java")
94

105
% these give the Matlab version, not the JVM version.
116
% java.lang.Runtime.version()
127
% java.lang.Runtime.getRuntime().version
8+
9+
function v = java_version()
10+
11+
if stdlib.isoctave()
12+
v = javaMethod("getProperty", "java.lang.System", "java.version");
13+
else
14+
v = string(java.lang.System.getProperty("java.version"));
1315
end
16+
17+
end
18+
19+
%!assert(!isempty(java_version()))

+stdlib/relative_to.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@
4343
%!assert(relative_to("/a/b", "/a/b"), ".")
4444
%!assert(relative_to("/a/b", "/a/b/c"), "c")
4545
%!assert(relative_to("/a/b", "/a/b/c/"), "c")
46+
%!assert(relative_to("a/b/..", "a/b"), "..")
4647
%!assert(relative_to("/a/b", "d"), "")

test/TestFilePure.m

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@
1010
p_is_absolute
1111
in_filename = {"", "/a/b/c", "/a/b/c/", "a/b/c.txt", "a/b/c.txt.gz"}
1212
ref_filename = {"", "c", "", "c.txt", "c.txt.gz"}
13-
dir_is_subdir
14-
sub_is_subdir
15-
ref_is_subdir
1613

14+
p_is_subdir
1715
p_parent
1816

1917
p_join = {{"", "", ""}, ...
@@ -84,6 +82,7 @@
8482
{"Hello", "Hello/", "."}, ...
8583
{"./this/one", "./this/two", "../two"}, ...
8684
{"/path/same", "/path/same/hi/..", "hi/.."}, ...
85+
{"a/b/..", "a/b", ".."}, ...
8786
{"", "/", ""}, ...
8887
{"/", "", ""}, ...
8988
{"/", "/", "."}, ...
@@ -148,24 +147,20 @@
148147
end
149148

150149

151-
function [dir_is_subdir, sub_is_subdir, ref_is_subdir] = init_is_subdir(classToTest) %#ok<INUSD>
150+
function [p_is_subdir] = init_is_subdir(classToTest) %#ok<INUSD>
152151

153-
dir_is_subdir = {"a/b", "a/b", "a/b", "a"};
154-
sub_is_subdir = {"a/b", "a/b/", "a", "a/.c"};
155-
ref_is_subdir = {false, false, false, true};
152+
p_is_subdir = {
153+
{"a/b", "a/b", false}, ...
154+
{"a/b", "a/b/", false}, ...
155+
{"a/b", "a", true}, ...
156+
{"a/.c", "a", true}, ...
157+
{"a/b", "a/b/..", false} % tricky one
158+
};
156159

157160
if ispc
158-
159-
dir_is_subdir{end+1} = "c:\";
160-
sub_is_subdir{end+1} = "c:/";
161-
ref_is_subdir{end+1} = false;
162-
161+
p_is_subdir{end+1} = {"c:\", "c:/", false};
163162
else
164-
165-
dir_is_subdir{end+1} = "/";
166-
sub_is_subdir{end+1} = "/";
167-
ref_is_subdir{end+1} = false;
168-
163+
p_is_subdir{end+1} = {"/", "/", false};
169164
end
170165

171166
end
@@ -281,9 +276,9 @@ function test_proximate_to(tc, p_proximate_to)
281276
end
282277

283278

284-
function test_is_subdir(tc, dir_is_subdir, sub_is_subdir, ref_is_subdir)
279+
function test_is_subdir(tc, p_is_subdir)
285280
tc.assumeTrue(stdlib.has_java)
286-
tc.verifyEqual(stdlib.is_subdir(sub_is_subdir, dir_is_subdir), ref_is_subdir)
281+
tc.verifyEqual(stdlib.is_subdir(p_is_subdir{1}, p_is_subdir{2}), p_is_subdir{3}, "subdir(" + p_is_subdir{1} + "," + p_is_subdir{2} + ")")
287282
end
288283

289284

0 commit comments

Comments
 (0)