]> granicus.if.org Git - python/commitdiff
Issue #13964: Skip os.*utime*() tests if os.stat() doesn't support timestamp
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 8 Feb 2012 03:09:37 +0000 (04:09 +0100)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 8 Feb 2012 03:09:37 +0000 (04:09 +0100)
with a subsecond resolution

Lib/test/test_os.py
Modules/posixmodule.c

index e44174c126e8f757c6852ea5e419821e986d5333..4d27c2b3145236bdb9b4a66a74c943b2fc759dcc 100644 (file)
@@ -27,6 +27,14 @@ try:
 except ImportError:
     threading = None
 
+os.stat_float_times(True)
+st = os.stat(__file__)
+stat_supports_subsecond = (
+    # check if float and int timestamps are different
+    (st.st_atime != st[7])
+    or (st.st_mtime != st[8])
+    or (st.st_ctime != st[9]))
+
 # Detect whether we're on a Linux system that uses the (now outdated
 # and unmaintained) linuxthreads threading library.  There's an issue
 # when combining linuxthreads with a failed execv call: see
@@ -300,6 +308,8 @@ class StatAttributeTests(unittest.TestCase):
         st2 = os.stat(support.TESTFN)
         self.assertAlmostEqual(st1.st_mtime, st2.st_mtime, delta=10)
 
+    @unittest.skipUnless(stat_supports_subsecond,
+                         "os.stat() doesn't has a subsecond resolution")
     def _test_utime_subsecond(self, set_time_func):
         asec, amsec = 1, 901
         atime = asec + amsec * 1e-3
@@ -308,6 +318,7 @@ class StatAttributeTests(unittest.TestCase):
         filename = self.fname
         os.utime(filename, (0, 0))
         set_time_func(filename, atime, mtime)
+        os.stat_float_times(True)
         st = os.stat(filename)
         self.assertAlmostEqual(st.st_atime, atime, places=3)
         self.assertAlmostEqual(st.st_mtime, mtime, places=3)
index 14ef71045c45a62ae4d748f2004aa98118c1eb8e..8b2b2117cb1dbd9c7e286dd36f95ed57d39f8a7e 100644 (file)
@@ -3539,7 +3539,6 @@ extract_time(PyObject *t, time_t* sec, long* nsec)
         mod = fmod(d, 1.0);
         mod *= 1e9;
         *nsec = (long)mod;
-        printf("%g => (%u, %li)\n", d, *sec, *nsec);
         return 0;
     }
 #if SIZEOF_TIME_T > SIZEOF_LONG