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