Skip to content

Commit fde23b0

Browse files
committed
set_modtime, simplify, add tests
1 parent 43294df commit fde23b0

File tree

6 files changed

+48
-40
lines changed

6 files changed

+48
-40
lines changed

+stdlib/+java/set_modtime.m

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function ok = set_modtime(p, utc)
2+
3+
if isdatetime(utc)
4+
utc = convertTo(datetime(utc, 'TimeZone', "UTC"), "posixtime");
5+
end
6+
7+
ok = javaObject("java.io.File", p).setLastModified(int64(utc) * 1000);
8+
9+
end

+stdlib/+python/set_modtime.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
function ok = set_modtime(p, utc)
22

3+
ok = false;
4+
if ~isfile(p), return, end
5+
6+
if isdatetime(utc)
7+
utc = convertTo(datetime(utc, 'TimeZone', "UTC"), "posixtime");
8+
end
9+
310
try
411
s = py.os.stat(p);
512
py.os.utime(p, py.tuple([s.st_atime, utc]));

+stdlib/+sys/set_modtime.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
function ok = set_modtime(p, t)
22

3+
ok = false;
4+
5+
if ~isfile(p), return, end
6+
37
if ispc()
48
cmd = sprintf('pwsh -Command "(Get-Item ''%s'').LastWriteTime = ''%s''"', p, string(t, "yyyy-MM-dd HH:mm:ss"));
59
elseif ismac()

+stdlib/set_modtime.m

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,15 @@
66
t (1,1) datetime
77
end
88

9-
try
10-
utc = convertTo(datetime(t, 'TimeZone', "UTC"), "posixtime");
11-
catch e
12-
if strcmp(e.identifier, "Octave:undefined-function")
13-
utc = t;
14-
else
15-
rethrow(e);
16-
end
17-
end
9+
utc = convertTo(datetime(t, 'TimeZone', "UTC"), "posixtime");
1810

1911
% Java or Python assume POSIX epoch time (seconds since Jan 1, 1970)
2012
if stdlib.has_java()
21-
ok = javaObject("java.io.File", p).setLastModified(int64(utc) * 1000);
13+
ok = stdlib.java.set_modtime(p, utc);
2214
elseif stdlib.has_python()
2315
ok = stdlib.python.set_modtime(p, utc);
24-
end
25-
26-
if ~ok
16+
else
2717
ok = stdlib.sys.set_modtime(p, t);
2818
end
2919

3020
end
31-
32-
%!test
33-
%! p = tempname();
34-
%! t = now();
35-
%! assert(touch(p, t))
36-
%! assert(set_modtime(p, t))
37-
%! delete(p)

test/TestExists.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
classdef TestExists < matlab.unittest.TestCase
22

3+
methods(TestClassSetup)
4+
function pkg_path(tc)
5+
p = matlab.unittest.fixtures.PathFixture(fileparts(fileparts(mfilename('fullpath'))));
6+
tc.applyFixture(p)
7+
end
8+
end
9+
310
properties(TestParameter)
411
Ps = {
512
{pwd(), true}, ...

test/TestTime.m

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,20 @@
44
td
55
end
66

7+
properties (TestParameter)
8+
set_modtime_fun = {@stdlib.set_modtime, @stdlib.sys.set_modtime, @stdlib.java.set_modtime, @stdlib.python.set_modtime}
9+
end
10+
711
methods(TestClassSetup)
12+
function pkg_path(tc)
13+
p = matlab.unittest.fixtures.PathFixture(fileparts(fileparts(mfilename('fullpath'))));
14+
tc.applyFixture(p)
15+
end
16+
end
17+
18+
% per-method to avoid race conditions creating and modifying files
19+
methods(TestMethodSetup)
20+
821
function set_temp_wd(tc)
922
if isMATLABReleaseOlderThan('R2022a')
1023
tc.td = tempname();
@@ -15,7 +28,7 @@ function set_temp_wd(tc)
1528
end
1629
end
1730

18-
methods(TestClassTeardown)
31+
methods(TestMethodTeardown)
1932
function remove_temp_wd(tc)
2033
if isMATLABReleaseOlderThan('R2022a')
2134
[s, m, i] = rmdir(tc.td, 's');
@@ -31,33 +44,18 @@ function test_get_modtime(tc)
3144
end
3245

3346

34-
function test_touch_modtime(tc)
35-
fn = tc.td + "/modtime.txt";
36-
37-
tc.verifyTrue(stdlib.touch(fn, datetime("yesterday")))
38-
t0 = stdlib.get_modtime(fn);
39-
40-
tc.verifyTrue(stdlib.set_modtime(fn, datetime("now")))
41-
t1 = stdlib.get_modtime(fn);
42-
43-
tc.verifyGreaterThanOrEqual(t1, t0)
44-
end
45-
46-
end
47-
47+
function test_touch_modtime(tc, set_modtime_fun)
48+
is_capable(tc, set_modtime_fun)
4849

49-
methods(Test, TestTags="shell")
50-
51-
function test_set_modtime_sys(tc)
5250
fn = tc.td + "/modtime.txt";
5351

5452
tc.verifyTrue(stdlib.touch(fn, datetime("yesterday")))
5553
t0 = stdlib.get_modtime(fn);
5654

57-
tc.verifyTrue(stdlib.set_modtime(fn, datetime("now")))
55+
tc.verifyTrue(set_modtime_fun(fn, datetime("now")))
5856
t1 = stdlib.get_modtime(fn);
5957

60-
tc.verifyGreaterThanOrEqual(t1, t0);
58+
tc.verifyGreaterThanOrEqual(t1, t0)
6159
end
6260

6361
end

0 commit comments

Comments
 (0)