1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3
4
5class TestNumberFormatter (TestCase):
6    def testTypes(self):
7        self.failUnlessIsCFType(CFNumberFormatterRef)
8
9    def testTypeID(self):
10        self.failUnless(isinstance(CFNumberFormatterGetTypeID(), (int, long)))
11
12    def testFuncs(self):
13        locale = CFLocaleCopyCurrent()
14        fmt = CFNumberFormatterCreate(None, locale, kCFNumberFormatterDecimalStyle)
15        self.failUnless(isinstance(fmt, CFNumberFormatterRef))
16
17        v = CFNumberFormatterGetLocale(fmt)
18        self.failUnless(v is locale)
19
20        v = CFNumberFormatterGetStyle(fmt)
21        self.failUnless(v == kCFNumberFormatterDecimalStyle)
22
23        v = CFNumberFormatterGetFormat(fmt)
24        self.failUnless(isinstance(v, unicode))
25
26        CFNumberFormatterSetFormat(fmt, v[:-2])
27        v2 = CFNumberFormatterGetFormat(fmt)
28        self.failUnless(v2 == v[:-2])
29
30        v = CFNumberFormatterCreateStringWithNumber(None, fmt, 42.5)
31        self.failUnless(isinstance(v, unicode))
32        self.failUnless(v == u'42.5')
33
34        num, rng = CFNumberFormatterCreateNumberFromString(None, fmt, u"42.0a", (0, 5), 0)
35        self.failUnless(num == 42.0)
36        self.failUnless(rng == (0, 4))
37
38        num, rng = CFNumberFormatterCreateNumberFromString(None, fmt, u"42.0a", (0, 5), kCFNumberFormatterParseIntegersOnly)
39        self.failUnless(num == 42)
40        self.failUnless(rng == (0, 2))
41
42        v = CFNumberFormatterCopyProperty(fmt, kCFNumberFormatterCurrencyCode)
43        self.failUnless(isinstance(v, unicode))
44
45        CFNumberFormatterSetProperty(fmt, kCFNumberFormatterCurrencyCode, u"HFL")
46
47        self.failUnlessResultIsCFRetained(CFNumberFormatterCopyProperty)
48        v = CFNumberFormatterCopyProperty(fmt, kCFNumberFormatterCurrencyCode)
49        self.failUnless(v == u"HFL")
50
51        self.failUnlessArgIsOut(CFNumberFormatterGetDecimalInfoForCurrencyCode, 1)
52        self.failUnlessArgIsOut(CFNumberFormatterGetDecimalInfoForCurrencyCode, 2)
53        ok, frac, rnd = CFNumberFormatterGetDecimalInfoForCurrencyCode("EUR", None, None)
54        self.assertEquals(ok, True)
55        self.assertEquals(frac, 2)
56        self.assertEquals(rnd, 0.0)
57
58
59
60    def testConstants(self):
61        self.failUnless(kCFNumberFormatterNoStyle == 0)
62        self.failUnless(kCFNumberFormatterDecimalStyle == 1)
63        self.failUnless(kCFNumberFormatterCurrencyStyle == 2)
64        self.failUnless(kCFNumberFormatterPercentStyle == 3)
65        self.failUnless(kCFNumberFormatterScientificStyle == 4)
66        self.failUnless(kCFNumberFormatterSpellOutStyle == 5)
67        self.failUnless(kCFNumberFormatterParseIntegersOnly == 1)
68        self.failUnless(kCFNumberFormatterRoundCeiling == 0)
69        self.failUnless(kCFNumberFormatterRoundFloor == 1)
70        self.failUnless(kCFNumberFormatterRoundDown == 2)
71        self.failUnless(kCFNumberFormatterRoundUp == 3)
72        self.failUnless(kCFNumberFormatterRoundHalfEven == 4)
73        self.failUnless(kCFNumberFormatterRoundHalfDown == 5)
74        self.failUnless(kCFNumberFormatterRoundHalfUp == 6)
75        self.failUnless(kCFNumberFormatterPadBeforePrefix == 0)
76        self.failUnless(kCFNumberFormatterPadAfterPrefix == 1)
77        self.failUnless(kCFNumberFormatterPadBeforeSuffix == 2)
78        self.failUnless(kCFNumberFormatterPadAfterSuffix == 3)
79
80        self.failUnless(isinstance(kCFNumberFormatterCurrencyCode, unicode))
81        self.failUnless(isinstance(kCFNumberFormatterDecimalSeparator, unicode))
82        self.failUnless(isinstance(kCFNumberFormatterCurrencyDecimalSeparator, unicode))
83        self.failUnless(isinstance(kCFNumberFormatterAlwaysShowDecimalSeparator, unicode))
84        self.failUnless(isinstance(kCFNumberFormatterGroupingSeparator, unicode))
85        self.failUnless(isinstance(kCFNumberFormatterUseGroupingSeparator, unicode))
86        self.failUnless(isinstance(kCFNumberFormatterPercentSymbol, unicode))
87        self.failUnless(isinstance(kCFNumberFormatterZeroSymbol, unicode))
88        self.failUnless(isinstance(kCFNumberFormatterNaNSymbol, unicode))
89        self.failUnless(isinstance(kCFNumberFormatterInfinitySymbol, unicode))
90        self.failUnless(isinstance(kCFNumberFormatterMinusSign, unicode))
91        self.failUnless(isinstance(kCFNumberFormatterPlusSign, unicode))
92        self.failUnless(isinstance(kCFNumberFormatterCurrencySymbol, unicode))
93        self.failUnless(isinstance(kCFNumberFormatterExponentSymbol, unicode))
94        self.failUnless(isinstance(kCFNumberFormatterMinIntegerDigits, unicode))
95        self.failUnless(isinstance(kCFNumberFormatterMaxIntegerDigits, unicode))
96        self.failUnless(isinstance(kCFNumberFormatterMinFractionDigits, unicode))
97        self.failUnless(isinstance(kCFNumberFormatterMaxFractionDigits, unicode))
98        self.failUnless(isinstance(kCFNumberFormatterGroupingSize, unicode))
99        self.failUnless(isinstance(kCFNumberFormatterSecondaryGroupingSize, unicode))
100        self.failUnless(isinstance(kCFNumberFormatterRoundingMode, unicode))
101        self.failUnless(isinstance(kCFNumberFormatterRoundingIncrement, unicode))
102        self.failUnless(isinstance(kCFNumberFormatterFormatWidth, unicode))
103        self.failUnless(isinstance(kCFNumberFormatterPaddingPosition, unicode))
104        self.failUnless(isinstance(kCFNumberFormatterPaddingCharacter, unicode))
105        self.failUnless(isinstance(kCFNumberFormatterDefaultFormat, unicode))
106        self.failUnless(isinstance(kCFNumberFormatterMultiplier, unicode))
107        self.failUnless(isinstance(kCFNumberFormatterPositivePrefix, unicode))
108        self.failUnless(isinstance(kCFNumberFormatterPositiveSuffix, unicode))
109        self.failUnless(isinstance(kCFNumberFormatterNegativePrefix, unicode))
110        self.failUnless(isinstance(kCFNumberFormatterNegativeSuffix, unicode))
111        self.failUnless(isinstance(kCFNumberFormatterPerMillSymbol, unicode))
112        self.failUnless(isinstance(kCFNumberFormatterInternationalCurrencySymbol, unicode))
113
114    @min_os_level('10.5')
115    def testConstants10_5(self):
116        self.failUnless(isinstance(kCFNumberFormatterCurrencyGroupingSeparator, unicode))
117        self.failUnless(isinstance(kCFNumberFormatterIsLenient, unicode))
118        self.failUnless(isinstance(kCFNumberFormatterUseSignificantDigits, unicode))
119        self.failUnless(isinstance(kCFNumberFormatterMinSignificantDigits, unicode))
120        self.failUnless(isinstance(kCFNumberFormatterMaxSignificantDigits, unicode))
121
122
123
124
125
126if __name__ == "__main__":
127    main()
128