1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4try:
5    unicode
6except NameError:
7    unicode = str
8
9
10try:
11    long
12except NameError:
13    long = int
14
15
16class TestLocale (TestCase):
17    def testTypes(self):
18        self.assertIsCFType(CFLocaleRef)
19
20    def testGetTypeID(self):
21        self.assertIsInstance(CFLocaleGetTypeID(), (int, long))
22
23    def testInspection(self):
24        locale = CFLocaleGetSystem()
25        self.assertIsInstance(locale, CFLocaleRef)
26        locale = CFLocaleCopyCurrent()
27        self.assertIsInstance(locale, CFLocaleRef)
28        idents = CFLocaleCopyAvailableLocaleIdentifiers()
29        self.assertIsInstance(idents, CFArrayRef)
30        codes = CFLocaleCopyISOLanguageCodes()
31        self.assertIsInstance(codes, CFArrayRef)
32        codes = CFLocaleCopyISOCountryCodes()
33        self.assertIsInstance(codes, CFArrayRef)
34        codes = CFLocaleCopyISOCurrencyCodes()
35        self.assertIsInstance(codes, CFArrayRef)
36        val = CFLocaleCreateCanonicalLanguageIdentifierFromString(None, "de_DE")
37        self.assertIsInstance(val, unicode)
38        self.assertEqual(val , 'de-DE')
39        val = CFLocaleCreateCanonicalLocaleIdentifierFromString(None, "de_DE")
40        self.assertIsInstance(val, unicode)
41        self.assertEqual(val, 'de_DE')
42
43        val = CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes(None, 55, 75)
44        self.assertIsInstance(val, unicode)
45        dct = CFLocaleCreateComponentsFromLocaleIdentifier(None, "nl_NL")
46        try:
47            # 10.6
48            self.assertEqual(dct[kCFLocaleCountryCodeKey] , 'NL')
49            self.assertEqual(dct[kCFLocaleLanguageCodeKey] , 'nl')
50        except NameError:
51            # 10.5 and earlier
52            self.assertEqual(dct["locale:country code"] , 'NL')
53            self.assertEqual(dct["locale:language code"] , 'nl')
54        val = CFLocaleCreateLocaleIdentifierFromComponents(None, dct)
55        self.assertIsInstance(val, unicode)
56        self.assertEqual(val, 'nl_NL')
57
58        locale = CFLocaleCreate(None, "nl_NL")
59        self.assertIsInstance(locale, CFLocaleRef)
60        locale = CFLocaleCreateCopy(None, locale)
61        self.assertIsInstance(locale, CFLocaleRef)
62        ident = CFLocaleGetIdentifier(locale)
63        self.assertEqual(ident , "nl_NL")
64        v = CFLocaleGetValue(locale, kCFLocaleDecimalSeparator)
65        self.assertEqual(v , ',')
66        v = CFLocaleCopyDisplayNameForPropertyValue(locale, kCFLocaleIdentifier, "nl_NL")
67        if v is not None:
68            self.assertIsInstance(v, unicode)
69        self.assertEqual(v , b'Nederlands (Nederland)'.decode('ascii'))
70
71    def testConstants(self):
72        self.assertIsInstance( kCFLocaleIdentifier, unicode)
73        self.assertIsInstance( kCFLocaleLanguageCode, unicode)
74        self.assertIsInstance( kCFLocaleCountryCode, unicode)
75        self.assertIsInstance( kCFLocaleScriptCode, unicode)
76        self.assertIsInstance( kCFLocaleVariantCode, unicode)
77        self.assertIsInstance( kCFLocaleExemplarCharacterSet, unicode)
78        self.assertIsInstance( kCFLocaleCalendarIdentifier, unicode)
79        self.assertIsInstance( kCFLocaleCalendar, unicode)
80        self.assertIsInstance( kCFLocaleCollationIdentifier, unicode)
81        self.assertIsInstance( kCFLocaleUsesMetricSystem, unicode)
82        self.assertIsInstance( kCFLocaleMeasurementSystem, unicode)
83        self.assertIsInstance( kCFLocaleDecimalSeparator, unicode)
84        self.assertIsInstance( kCFLocaleGroupingSeparator, unicode)
85        self.assertIsInstance( kCFLocaleCurrencySymbol, unicode)
86        self.assertIsInstance( kCFLocaleCurrencyCode, unicode)
87        self.assertIsInstance( kCFGregorianCalendar, unicode)
88        self.assertIsInstance( kCFBuddhistCalendar, unicode)
89        self.assertIsInstance( kCFChineseCalendar, unicode)
90        self.assertIsInstance( kCFHebrewCalendar, unicode)
91        self.assertIsInstance( kCFIslamicCalendar, unicode)
92        self.assertIsInstance( kCFIslamicCivilCalendar, unicode)
93        self.assertIsInstance( kCFJapaneseCalendar, unicode)
94
95    @min_os_level('10.5')
96    def testFunctions10_5(self):
97        codes = CFLocaleCopyCommonISOCurrencyCodes()
98        self.assertIsInstance(codes, CFArrayRef)
99        codes = CFLocaleCopyPreferredLanguages()
100        self.assertIsInstance(codes, CFArrayRef)
101
102    @min_os_level('10.5')
103    def testConstants10_5(self):
104        self.assertIsInstance( kCFLocaleCurrentLocaleDidChangeNotification, unicode)
105
106    @min_os_level('10.6')
107    def testConstants10_6(self):
108        self.assertEqual(kCFLocaleLanguageDirectionUnknown, 0)
109        self.assertEqual(kCFLocaleLanguageDirectionLeftToRight, 1)
110        self.assertEqual(kCFLocaleLanguageDirectionRightToLeft, 2)
111        self.assertEqual(kCFLocaleLanguageDirectionTopToBottom, 3)
112        self.assertEqual(kCFLocaleLanguageDirectionBottomToTop, 4)
113
114        self.assertIsInstance(kCFLocaleCollatorIdentifier, unicode)
115        self.assertIsInstance(kCFLocaleQuotationBeginDelimiterKey, unicode)
116        self.assertIsInstance(kCFLocaleQuotationEndDelimiterKey, unicode)
117        self.assertIsInstance(kCFLocaleAlternateQuotationBeginDelimiterKey, unicode)
118        self.assertIsInstance(kCFLocaleAlternateQuotationEndDelimiterKey, unicode)
119        self.assertIsInstance(kCFRepublicOfChinaCalendar, unicode)
120        self.assertIsInstance(kCFPersianCalendar, unicode)
121        self.assertIsInstance(kCFIndianCalendar, unicode)
122        self.assertIsInstance(kCFISO8601Calendar, unicode)
123
124    @min_os_level('10.6')
125    def testFunctions10_6(self):
126        v = CFLocaleGetWindowsLocaleCodeFromLocaleIdentifier('nl_NL')
127        self.assertIsInstance(v, (int, long))
128
129        self.assertResultIsCFRetained(CFLocaleCreateLocaleIdentifierFromWindowsLocaleCode)
130        v = CFLocaleCreateLocaleIdentifierFromWindowsLocaleCode(None, 1043)
131        self.assertIsInstance(v, unicode)
132
133        v = CFLocaleGetLanguageCharacterDirection('NL')
134        self.assertEqual(v, kCFLocaleLanguageDirectionLeftToRight)
135
136        v = CFLocaleGetLanguageLineDirection('NL')
137        self.assertEqual(v, kCFLocaleLanguageDirectionTopToBottom)
138
139
140if __name__ == "__main__":
141    main()
142