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