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