1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4
5class TestDateFormatter (TestCase):
6    def testTypeID(self):
7        self.assertIsInstance(CFDateGetTypeID(), (int, long))
8    def testConstants(self):
9        self.assertEqual(kCFDateFormatterNoStyle , 0)
10        self.assertEqual(kCFDateFormatterShortStyle , 1)
11        self.assertEqual(kCFDateFormatterMediumStyle , 2)
12        self.assertEqual(kCFDateFormatterLongStyle , 3)
13        self.assertEqual(kCFDateFormatterFullStyle , 4)
14        self.assertIsInstance(kCFDateFormatterIsLenient, unicode)
15        self.assertIsInstance(kCFDateFormatterTimeZone, unicode)
16        self.assertIsInstance(kCFDateFormatterCalendarName, unicode)
17        self.assertIsInstance(kCFDateFormatterDefaultFormat, unicode)
18        self.assertIsInstance(kCFDateFormatterTwoDigitStartDate, unicode)
19        self.assertIsInstance(kCFDateFormatterDefaultDate, unicode)
20        self.assertIsInstance(kCFDateFormatterCalendar, unicode)
21        self.assertIsInstance(kCFDateFormatterEraSymbols, unicode)
22        self.assertIsInstance(kCFDateFormatterMonthSymbols, unicode)
23        self.assertIsInstance(kCFDateFormatterShortMonthSymbols, unicode)
24        self.assertIsInstance(kCFDateFormatterWeekdaySymbols, unicode)
25        self.assertIsInstance(kCFDateFormatterShortWeekdaySymbols, unicode)
26        self.assertIsInstance(kCFDateFormatterAMSymbol, unicode)
27        self.assertIsInstance(kCFDateFormatterPMSymbol, unicode)
28        self.assertIsInstance(kCFDateFormatterLongEraSymbols, unicode)
29        self.assertIsInstance(kCFDateFormatterVeryShortMonthSymbols, unicode)
30        self.assertIsInstance(kCFDateFormatterStandaloneMonthSymbols, unicode)
31        self.assertIsInstance(kCFDateFormatterShortStandaloneMonthSymbols, unicode)
32        self.assertIsInstance(kCFDateFormatterVeryShortStandaloneMonthSymbols, unicode)
33        self.assertIsInstance(kCFDateFormatterVeryShortWeekdaySymbols, unicode)
34        self.assertIsInstance(kCFDateFormatterStandaloneWeekdaySymbols, unicode)
35        self.assertIsInstance(kCFDateFormatterShortStandaloneWeekdaySymbols, unicode)
36        self.assertIsInstance(kCFDateFormatterVeryShortStandaloneWeekdaySymbols, unicode)
37        self.assertIsInstance(kCFDateFormatterQuarterSymbols, unicode)
38        self.assertIsInstance(kCFDateFormatterShortQuarterSymbols, unicode)
39        self.assertIsInstance(kCFDateFormatterStandaloneQuarterSymbols, unicode)
40        self.assertIsInstance( kCFDateFormatterShortStandaloneQuarterSymbols, unicode)
41        self.assertIsInstance( kCFDateFormatterGregorianStartDate, unicode)
42
43    @min_os_level('10.6')
44    def testConstants10_6(self):
45        self.assertIsInstance(kCFDateFormatterDoesRelativeDateFormattingKey, unicode)
46
47    @min_os_level('10.6')
48    def testFunction10_6(self):
49        self.assertResultIsCFRetained(CFDateFormatterCreateDateFormatFromTemplate)
50        r = CFDateFormatterCreateDateFormatFromTemplate(None, "%Y-%m-%d", 0, None)
51        self.assertIsInstance(r, unicode)
52
53
54
55    def testTypes(self):
56        self.assertIsCFType(CFDateFormatterRef)
57
58    def testInspection(self):
59        locale = CFLocaleCopyCurrent()
60        self.assertIsInstance(locale, CFLocaleRef)
61
62        date = CFDateCreate(None, CFAbsoluteTimeGetCurrent())
63        self.assertIsInstance(date, CFDateRef)
64
65        self.assertResultIsCFRetained(CFDateFormatterCreate)
66        fmt = CFDateFormatterCreate(None, locale, kCFDateFormatterShortStyle, kCFDateFormatterLongStyle)
67        self.assertIsInstance(fmt, CFDateFormatterRef)
68        v = CFDateFormatterGetLocale(fmt)
69        self.assertEqual(CFLocaleGetIdentifier(locale), CFLocaleGetIdentifier(v))
70
71        v = CFDateFormatterGetDateStyle(fmt)
72        self.assertEqual(v, kCFDateFormatterShortStyle)
73
74        v = CFDateFormatterGetTimeStyle(fmt)
75        self.assertEqual(v, kCFDateFormatterLongStyle)
76
77        v = CFDateFormatterGetFormat(fmt)
78        self.assertIsInstance(v, unicode)
79        CFDateFormatterSetFormat(fmt, v[:-1])
80        v2 = CFDateFormatterGetFormat(fmt)
81        self.assertEqual(v[:-1], v2)
82
83        v = CFDateFormatterCreateStringWithDate(None, fmt, date)
84        self.assertIsInstance(v, unicode)
85        v = CFDateFormatterCreateStringWithAbsoluteTime(None, fmt, CFAbsoluteTimeGetCurrent())
86        self.assertIsInstance(v, unicode)
87        dt, rng = CFDateFormatterCreateDateFromString(None, fmt, v, (0, len(v)))
88        self.assertIsInstance(dt, CFDateRef)
89        self.assertIsInstance(rng, CFRange)
90        ok, rng, abstime = CFDateFormatterGetAbsoluteTimeFromString(fmt, v, (0, len(v)), None)
91        self.assertIs(ok, True)
92        self.assertIsInstance(rng, CFRange)
93        self.assertIsInstance(abstime, float)
94        self.assertResultIsCFRetained(CFDateFormatterCopyProperty)
95        v = CFDateFormatterCopyProperty(fmt, kCFDateFormatterCalendarName)
96        self.assertIsInstance(v, unicode)
97        CFDateFormatterSetProperty(fmt, kCFDateFormatterCalendarName, u"gregorian")
98        v = CFDateFormatterCopyProperty(fmt, kCFDateFormatterCalendarName)
99        self.assertIsInstance(v, unicode)
100        self.assertEqual(v , u"gregorian")
101        v = CFDateFormatterCopyProperty(fmt, kCFDateFormatterIsLenient)
102        self.assertTrue(v is True or v is False)
103        CFDateFormatterSetProperty(fmt, kCFDateFormatterIsLenient, True)
104        v2 = CFDateFormatterCopyProperty(fmt, kCFDateFormatterIsLenient)
105        self.assertIs(v2, True)
106if __name__ == "__main__":
107    main()
108