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