1from PyObjCTools.TestSupport import * 2import time 3from CoreFoundation import * 4 5 6class TestDate (TestCase): 7 def testTypes(self): 8 self.assertIsCFType(CFDateRef) 9 self.assertIsCFType(CFTimeZoneRef) 10 11 def testTypeID(self): 12 v = CFDateGetTypeID() 13 self.assertIsInstance(v, (int, long)) 14 def testConstants(self): 15 self.assertIsInstance(kCFAbsoluteTimeIntervalSince1970, float) 16 self.assertIsInstance(kCFAbsoluteTimeIntervalSince1904, float) 17 self.assertEqual(kCFGregorianUnitsYears , (1 << 0)) 18 self.assertEqual(kCFGregorianUnitsMonths , (1 << 1)) 19 self.assertEqual(kCFGregorianUnitsDays , (1 << 2)) 20 self.assertEqual(kCFGregorianUnitsHours , (1 << 3)) 21 self.assertEqual(kCFGregorianUnitsMinutes , (1 << 4)) 22 self.assertEqual(kCFGregorianUnitsSeconds , (1 << 5)) 23 self.assertEqual(kCFGregorianAllUnits , 0x00FFFFFF) 24 def testStructs(self): 25 v = CFGregorianDate() 26 self.assertHasAttr(v, 'year') 27 self.assertHasAttr(v, 'month') 28 self.assertHasAttr(v, 'day') 29 self.assertHasAttr(v, 'hour') 30 self.assertHasAttr(v, 'minute') 31 self.assertHasAttr(v, 'second') 32 v = CFGregorianUnits() 33 self.assertHasAttr(v, 'years') 34 self.assertHasAttr(v, 'months') 35 self.assertHasAttr(v, 'days') 36 self.assertHasAttr(v, 'hours') 37 self.assertHasAttr(v, 'minutes') 38 self.assertHasAttr(v, 'seconds') 39 def testAbsoluteTime(self): 40 v = CFAbsoluteTimeGetCurrent() 41 self.assertIsInstance(v, float) 42 self.assertLessThan(abs(v - time.time() + kCFAbsoluteTimeIntervalSince1970) , 1.0) 43 def testCreation(self): 44 now = CFAbsoluteTimeGetCurrent() 45 dt = CFDateCreate(None, now) 46 self.assertIsInstance(dt, CFDateRef) 47 def testInspection(self): 48 now = CFAbsoluteTimeGetCurrent() 49 nowtm = time.localtime() 50 dt = CFDateCreate(None, now) 51 self.assertIsInstance(dt, CFDateRef) 52 self.assertEqual(CFDateGetAbsoluteTime(dt) , now) 53 dt2 = CFDateCreate(None, now + 1000) 54 self.assertEqual(CFDateGetTimeIntervalSinceDate(dt2, dt) , 1000) 55 cmp = CFDateCompare(dt, dt2, 0) 56 self.assertLessThan(cmp , 0) 57 dt = CFGregorianDate() 58 dt.month = 12 59 self.assertIs(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths), True) 60 dt.month = 99 61 self.assertIs(CFGregorianDateIsValid(dt, kCFGregorianUnitsMonths), False) 62 tz = CFTimeZoneCopyDefault() 63 dt.year = 2008 64 dt.day = 1 65 dt.month = 1 66 abstime = CFGregorianDateGetAbsoluteTime(dt, tz) 67 self.assertIsInstance(abstime, float) 68 dt = CFAbsoluteTimeGetGregorianDate(now, tz) 69 self.assertEqual(dt.year , nowtm.tm_year) 70 self.assertEqual(dt.month , nowtm.tm_mon) 71 self.assertEqual(dt.day , nowtm.tm_mday) 72 self.assertEqual(dt.hour , nowtm.tm_hour) 73 self.assertEqual(dt.minute , nowtm.tm_min) 74 units = CFGregorianUnits(days = 1) 75 stamp = CFAbsoluteTimeAddGregorianUnits(now, tz, units) 76 self.assertEqual(stamp - now , 24 * 3600) 77 units = CFAbsoluteTimeGetDifferenceAsGregorianUnits(stamp, now, tz, kCFGregorianAllUnits) 78 self.assertEqual(units.days , 1) 79 self.assertEqual(units.seconds , 0) 80 v = CFAbsoluteTimeGetDayOfWeek(now, tz) 81 self.assertEqual(v , nowtm.tm_wday+1) 82 v = CFAbsoluteTimeGetDayOfYear(now, tz) 83 self.assertEqual(v , nowtm.tm_yday) 84 v = CFAbsoluteTimeGetWeekOfYear(now, tz) 85 self.assertIsInstance(v, (int, long)) 86if __name__ == "__main__": 87 main() 88