def testChangeOutputType(self): format = NumberFormat() format.type = decimal.Decimal self.assertEqual(format.parse('23341', '###0'), decimal.Decimal('23341')) self.assertEqual(format.parse('233.41', '###0.00'), decimal.Decimal('233.41'))
def testParseWithAlternativeExponentialSymbol(self): format = NumberFormat(symbols={ 'decimal': '.', 'group': ',', 'exponential': 'X' }) self.assertEqual(format.parse('1.2X11', '#.#E0'), 1.2e11)
def getFormatter(self, category, length=None, name=None): """See zope.i18n.interfaces.locales.ILocaleNumbers""" assert category in (u'decimal', u'percent', u'scientific', u'currency') assert length in (u'short', u'medium', u'long', u'full', None) formats = getattr(self, category + 'Formats') if length is None: length = getattr( self, 'default' + category[0].upper() + category[1:] + 'Format', formats.keys()[0]) formatLength = formats[length] if name is None: name = formatLength.default format = formatLength.formats[name] return NumberFormat(format.pattern, self.symbols)
def getFormatter(self, category, length=None, name=None): """See zope.i18n.interfaces.locales.ILocaleNumbers""" assert category in (_u("decimal"), _u("percent"), _u("scientific"), _u("currency")) assert length in (_u("short"), _u("medium"), _u("long"), _u("full"), None) formats = getattr(self, category+'Formats') if length is None: length = getattr( self, 'default'+category[0].upper()+category[1:]+'Format', list(formats.keys())[0]) formatLength = formats[length] if name is None: name = formatLength.default format = formatLength.formats[name] return NumberFormat(format.pattern, self.symbols)
def testParseWithAlternativeExponentialSymbol(self): format = NumberFormat( symbols={'decimal': '.', 'group': ',', 'exponential': 'X'}) self.assertEqual(format.parse('1.2X11', '#.#E0'), 1.2e11)
def testParseDecimalWithGermanDecimalSeparator(self): format = NumberFormat(symbols={'decimal': ',', 'group': '.'}) self.assertEqual(format.parse('1.234,567', '#,##0.000'), 1234.567)
class TestNumberFormat(TestCase): """Test the functionality of an implmentation of the NumberFormat.""" format = NumberFormat(symbols={ 'decimal': '.', 'group': ',', 'list': ';', 'percentSign': '%', 'nativeZeroDigit': '0', 'patternDigit': '#', 'plusSign': '+', 'minusSign': '-', 'exponential': 'E', 'perMille': 'o/oo', 'infinity': 'oo', 'nan': 'N/A'}) def testInterfaceConformity(self): self.assertTrue(INumberFormat.providedBy(self.format)) def testParseSimpleInteger(self): self.assertEqual(self.format.parse('23341', '###0'), 23341) self.assertEqual(self.format.parse('041', '#000'), 41) def testParseScientificInteger(self): self.assertEqual(self.format.parse('2.3341E4', '0.0###E0'), 23341) self.assertEqual(self.format.parse('4.100E01', '0.000##E00'), 41) self.assertEqual(self.format.parse('1E0', '0E0'), 1) self.assertEqual(self.format.parse('0E0', '0E0'), 0) # This is a special case I found not working, but is used frequently # in the new LDML Locale files. self.assertEqual(self.format.parse('2.3341E+04', '0.000###E+00'), 23341) def testParsePosNegAlternativeInteger(self): self.assertEqual(self.format.parse('23341', '#000;#00'), 23341) self.assertEqual(self.format.parse('041', '#000;#00'), 41) self.assertEqual(self.format.parse('41', '#000;#00'), -41) self.assertEqual(self.format.parse('01', '#000;#00'), -1) def testParsePrefixedInteger(self): self.assertEqual(self.format.parse('+23341', '+###0'), 23341) self.assertEqual(self.format.parse('+041', '+#000'), 41) def testParsePosNegInteger(self): self.assertEqual(self.format.parse('+23341', '+###0;-###0'), 23341) self.assertEqual(self.format.parse('+041', '+#000;-#000'), 41) self.assertEqual(self.format.parse('-23341', '+###0;-###0'), -23341) self.assertEqual(self.format.parse('-041', '+#000;-#000'), -41) def testParseThousandSeparatorInteger(self): self.assertEqual(self.format.parse('+23,341', '+#,##0;-#,##0'), 23341) self.assertEqual(self.format.parse('-23,341', '+#,##0;-#,##0'), -23341) self.assertEqual(self.format.parse('+0,041', '+#0,000;-#0,000'), 41) self.assertEqual(self.format.parse('-0,041', '+#0,000;-#0,000'), -41) def testParseDecimal(self): self.assertEqual(self.format.parse('23341.02', '###0.0#'), 23341.02) self.assertEqual(self.format.parse('23341.1', '###0.0#'), 23341.1) self.assertEqual(self.format.parse('23341.020', '###0.000#'), 23341.02) def testParseDecimalWithOptionalDecimalDigits(self): self.assertEqual(self.format.parse('23341.02', '###0.##'), 23341.02) self.assertEqual(self.format.parse('23341', '###0.#'), 23341.0) self.assertEqual(self.format.parse('23341.', '###0.#'), 23341.0) def testParseScientificDecimal(self): self.assertEqual(self.format.parse('2.334102E04', '0.00####E00'), 23341.02) self.assertEqual(self.format.parse('2.3341020E004', '0.0000000E000'), 23341.02) self.assertEqual(self.format.parse('0.0E0', '0.0#E0'), 0.0) def testParseScientificDecimalSmallerOne(self): self.assertEqual(self.format.parse('2.357E-02', '0.00####E00'), 0.02357) self.assertEqual(self.format.parse('2.0000E-02', '0.0000E00'), 0.02) def testParsePadding1WithoutPrefix(self): self.assertEqual(self.format.parse(' 41', '* ##0;*_##0'), 41) self.assertEqual(self.format.parse('_41', '* ##0;*_##0'), -41) def testParsePadding1WithPrefix(self): self.assertEqual(self.format.parse(' +41', '* +##0;*_-##0'), 41) self.assertEqual(self.format.parse('_-41', '* +##0;*_-##0'), -41) def testParsePadding1Padding2WithPrefix(self): self.assertEqual(self.format.parse(' + 41', '* +* ###0;*_-*_###0'), +41) self.assertEqual(self.format.parse('__-_41', '* +* ###0;*_-*_###0'), -41) def testParsePadding1Scientific(self): self.assertEqual(self.format.parse(' 4.102E1', '* 0.0####E0;*_0.0####E0'), 41.02) self.assertEqual(self.format.parse('__4.102E1', '* 0.0####E0;*_0.0####E0'), -41.02) self.assertEqual(self.format.parse(' +4.102E1', '* +0.0###E0;*_-0.0###E0'), 41.02) self.assertEqual(self.format.parse('_-4.102E1', '* +0.0###E0;*_-0.0###E0'), -41.02) def testParsePadding3WithoutSufffix(self): self.assertEqual(self.format.parse('41.02 ', '#0.0###* ;#0.0###*_'), 41.02) self.assertEqual(self.format.parse('41.02__', '#0.0###* ;#0.0###*_'), -41.02) def testParsePadding3WithSufffix(self): self.assertEqual( self.format.parse('[41.02 ]', '[#0.0###* ];(#0.0###*_)'), 41.02) self.assertEqual( self.format.parse('(41.02__)', '[#0.0###* ];(#0.0###*_)'), -41.02) def testParsePadding3Scientific(self): self.assertEqual(self.format.parse('4.102E1 ', '0.0##E0##* ;0.0##E0##*_'), 41.02) self.assertEqual(self.format.parse('4.102E1__', '0.0##E0##* ;0.0##E0##*_'), -41.02) self.assertEqual(self.format.parse('(4.102E1 )', '(0.0##E0##* );0.0E0'), 41.02) self.assertEqual(self.format.parse('[4.102E1__]', '0.0E0;[0.0##E0##*_]'), -41.02) def testParsePadding3Padding4WithSuffix(self): self.assertEqual(self.format.parse('(41.02 ) ', '(#0.0###* )* '), 41.02) self.assertEqual(self.format.parse('(4.102E1 ) ', '(0.0##E0##* )* '), 41.02) def testParseDecimalWithGermanDecimalSeparator(self): format = NumberFormat(symbols={'decimal': ',', 'group': '.'}) self.assertEqual(format.parse('1.234,567', '#,##0.000'), 1234.567) def testParseWithAlternativeExponentialSymbol(self): format = NumberFormat( symbols={'decimal': '.', 'group': ',', 'exponential': 'X'}) self.assertEqual(format.parse('1.2X11', '#.#E0'), 1.2e11) def testParseFailWithInvalidCharacters(self): self.assertRaises( NumberParseError,self.format.parse, '123xx', '###0.0#') self.assertRaises( NumberParseError, self.format.parse, 'xx123', '###0.0#') self.assertRaises( NumberParseError, self.format.parse, '1xx23', '###0.0#') def testParseFailWithInvalidGroupCharacterPosition(self): self.assertRaises( NumberParseError,self.format.parse, '123,00', '###0.0#') self.assertRaises( NumberParseError, self.format.parse, ',123', '###0.0#') self.assertRaises( NumberParseError, self.format.parse, '1,23.00', '###0.0#') def testChangeOutputType(self): format = NumberFormat() format.type = decimal.Decimal self.assertEqual(format.parse('23341', '###0'), decimal.Decimal('23341')) self.assertEqual(format.parse('233.41', '###0.00'), decimal.Decimal('233.41')) def testFormatSimpleInteger(self): self.assertEqual(self.format.format(23341, '###0'), '23341') self.assertEqual(self.format.format(41, '#000'), '041') def testFormatScientificInteger(self): self.assertEqual(self.format.format(23341, '0.000#E0'), '2.3341E4') self.assertEqual(self.format.format(23341, '0.000#E00'), '2.3341E04') self.assertEqual(self.format.format(1, '0.##E0'), '1E0') self.assertEqual(self.format.format(1, '0.00E00'), '1.00E00') # This is a special case I found not working, but is used frequently # in the new LDML Locale files. self.assertEqual(self.format.format(23341, '0.000###E+00'), '2.3341E+04') def testFormatScientificZero(self): self.assertEqual(self.format.format(0, '0.00E00'), '0.00E00') self.assertEqual(self.format.format(0, '0E0'), '0E0') def testFormatPosNegAlternativeInteger(self): self.assertEqual(self.format.format(23341, '#000;#00'), '23341') self.assertEqual(self.format.format(41, '#000;#00'), '041') self.assertEqual(self.format.format(-23341, '#000;#00'), '23341') self.assertEqual(self.format.format(-41, '#000;#00'), '41') self.assertEqual(self.format.format(-1, '#000;#00'), '01') def testFormatPrefixedInteger(self): self.assertEqual(self.format.format(23341, '+###0'), '+23341') self.assertEqual(self.format.format(41, '+#000'), '+041') self.assertEqual(self.format.format(-23341, '+###0'), '+23341') self.assertEqual(self.format.format(-41, '+#000'), '+041') def testFormatPosNegInteger(self): self.assertEqual(self.format.format(23341, '+###0;-###0'), '+23341') self.assertEqual(self.format.format(41, '+#000;-#000'), '+041') self.assertEqual(self.format.format(-23341, '+###0;-###0'), '-23341') self.assertEqual(self.format.format(-41, '+#000;-#000'), '-041') def testFormatPosNegScientificInteger(self): self.assertEqual(self.format.format(23341, '+0.00###E00;-0.00###E00'), '+2.3341E04') self.assertEqual(self.format.format(23341, '-0.00###E00;-0.00###E00'), '-2.3341E04') def testFormatThousandSeparatorInteger(self): self.assertEqual(self.format.format(23341, '+#,##0;-#,##0'), '+23,341') self.assertEqual(self.format.format(-23341, '+#,##0;-#,##0'), '-23,341') self.assertEqual(self.format.format(41, '+#0,000;-#0,000'), '+0,041') self.assertEqual(self.format.format(-41, '+#0,000;-#0,000'), '-0,041') def testFormatDecimal(self): self.assertEqual(self.format.format(23341.02357, '###0.0#'), '23341.02') self.assertEqual(self.format.format(23341.02357, '###0.000#'), '23341.0236') self.assertEqual(self.format.format(23341.02, '###0.000#'), '23341.020') def testRounding(self): self.assertEqual(self.format.format(0.5, '#'), '1') self.assertEqual(self.format.format(0.49, '#'), '0') self.assertEqual(self.format.format(0.45, '0.0'), '0.5') self.assertEqual(self.format.format(150, '0E0'), '2E2') self.assertEqual(self.format.format(149, '0E0'), '1E2') self.assertEqual(self.format.format(1.9999, '0.000'), '2.000') self.assertEqual(self.format.format(1.9999, '0.0000'), '1.9999') def testFormatScientificDecimal(self): self.assertEqual(self.format.format(23341.02357, '0.00####E00'), '2.334102E04') self.assertEqual(self.format.format(23341.02, '0.0000000E000'), '2.3341020E004') def testFormatScientificDecimalSmallerOne(self): self.assertEqual(self.format.format(0.02357, '0.00####E00'), '2.357E-02') self.assertEqual(self.format.format(0.02, '0.0000E00'), '2.0000E-02') def testFormatPadding1WithoutPrefix(self): self.assertEqual(self.format.format(41, '* ##0;*_##0'), ' 41') self.assertEqual(self.format.format(-41, '* ##0;*_##0'), '_41') def testFormatPadding1WithPrefix(self): self.assertEqual(self.format.format(41, '* +##0;*_-##0'), ' +41') self.assertEqual(self.format.format(-41, '* +##0;*_-##0'), '_-41') def testFormatPadding1Scientific(self): self.assertEqual(self.format.format(41.02, '* 0.0####E0;*_0.0####E0'), ' 4.102E1') self.assertEqual(self.format.format(-41.02, '* 0.0####E0;*_0.0####E0'), '__4.102E1') self.assertEqual(self.format.format(41.02, '* +0.0###E0;*_-0.0###E0'), ' +4.102E1') self.assertEqual(self.format.format(-41.02, '* +0.0###E0;*_-0.0###E0'), '_-4.102E1') def testFormatPadding1Padding2WithPrefix(self): self.assertEqual(self.format.format(41, '* +* ###0;*_-*_###0'), ' + 41') self.assertEqual(self.format.format(-41, '* +* ###0;*_-*_###0'), '__-_41') def testFormatPadding3WithoutSufffix(self): self.assertEqual(self.format.format(41.02, '#0.0###* ;#0.0###*_'), '41.02 ') self.assertEqual(self.format.format(-41.02, '#0.0###* ;#0.0###*_'), '41.02__') def testFormatPadding3WithSufffix(self): self.assertEqual(self.format.format(41.02, '[#0.0###* ];(#0.0###*_)'), '[41.02 ]') self.assertEqual(self.format.format(-41.02, '[#0.0###* ];(#0.0###*_)'), '(41.02__)') def testFormatPadding3Scientific(self): self.assertEqual(self.format.format(41.02, '0.0##E0##* ;0.0##E0##*_'), '4.102E1 ') self.assertEqual(self.format.format(-41.02, '0.0##E0##* ;0.0##E0##*_'), '4.102E1__') self.assertEqual(self.format.format(41.02, '(0.0##E0##* );0.0E0'), '(4.102E1 )') self.assertEqual(self.format.format(-41.02, '0.0E0;[0.0##E0##*_]'), '[4.102E1__]') def testFormatPadding3Padding4WithSuffix(self): self.assertEqual(self.format.format(41.02, '(#0.0###* )* '), '(41.02 ) ') self.assertEqual(self.format.format(41.02, '(0.0##E0##* )* '), '(4.102E1 ) ')
def testChangeOutputType(self): format = NumberFormat() format.type = decimal.Decimal self.assertEqual(format.parse("23341", "###0"), decimal.Decimal("23341")) self.assertEqual(format.parse("233.41", "###0.00"), decimal.Decimal("233.41"))
def testParseWithAlternativeExponentialSymbol(self): format = NumberFormat(symbols={"decimal": ".", "group": ",", "exponential": "X"}) self.assertEqual(format.parse("1.2X11", "#.#E0"), 1.2e11)
def testParseDecimalWithGermanDecimalSeparator(self): format = NumberFormat(symbols={"decimal": ",", "group": "."}) self.assertEqual(format.parse("1.234,567", "#,##0.000"), 1234.567)