Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions Lib/test/test_os/test_os.py
Original file line number Diff line number Diff line change
Expand Up @@ -1058,11 +1058,18 @@ def support_subsecond(self, filename):
or (st.st_mtime != st[8])
or (st.st_ctime != st[9]))

def support_atime(self, filename):
# Heuristic to check if the filesystem stores the access time.
# Use whole seconds, to not depend on the timestamp resolution.
os.utime(filename, (1, 2))
return os.stat(filename).st_atime == 1

def _test_utime(self, set_time, filename=None):
if not filename:
filename = self.fname

support_subsecond = self.support_subsecond(filename)
support_atime = self.support_atime(filename)
if support_subsecond:
# Timestamp with a resolution of 1 microsecond (10^-6).
#
Expand All @@ -1089,18 +1096,22 @@ def _test_utime(self, set_time, filename=None):
# digits worth of sub-second precision.
# Some day it would be good to fix this upstream.
delta=1e-5
self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-5)
if support_atime:
self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-5)
self.assertAlmostEqual(st.st_atime_ns, atime_ns, delta=1e9 * 1e-5)
self.assertAlmostEqual(st.st_mtime, mtime_ns * 1e-9, delta=1e-5)
self.assertAlmostEqual(st.st_atime_ns, atime_ns, delta=1e9 * 1e-5)
self.assertAlmostEqual(st.st_mtime_ns, mtime_ns, delta=1e9 * 1e-5)
else:
if support_subsecond:
self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-6)
if support_atime:
self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-6)
self.assertAlmostEqual(st.st_mtime, mtime_ns * 1e-9, delta=1e-6)
else:
self.assertEqual(st.st_atime, atime_ns * 1e-9)
if support_atime:
self.assertEqual(st.st_atime, atime_ns * 1e-9)
self.assertEqual(st.st_mtime, mtime_ns * 1e-9)
self.assertEqual(st.st_atime_ns, atime_ns)
if support_atime:
self.assertEqual(st.st_atime_ns, atime_ns)
self.assertEqual(st.st_mtime_ns, mtime_ns)

def test_utime(self):
Expand Down
Loading