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