From f7ac6530a70ad3b58a85add5ace83131777beb83 Mon Sep 17 00:00:00 2001 From: Charly C Date: Sat, 16 Jun 2018 11:09:13 +0200 Subject: add a `strict` mode to `parse_decimal()` Fixes https://github.com/python-babel/babel/issues/589 --- tests/test_numbers.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'tests') diff --git a/tests/test_numbers.py b/tests/test_numbers.py index 32f4280..50c53de 100644 --- a/tests/test_numbers.py +++ b/tests/test_numbers.py @@ -165,6 +165,25 @@ class NumberParsingTestCase(unittest.TestCase): self.assertRaises(numbers.NumberFormatError, lambda: numbers.parse_decimal('2,109,998', locale='de')) + def test_parse_decimal_strict_mode(self): + # Numbers with a misplaced grouping symbol should be rejected + with self.assertRaises(numbers.NumberFormatError): + numbers.parse_decimal('11.11', locale='de', strict=True) + # Partially grouped numbers should be rejected + with self.assertRaises(numbers.NumberFormatError): + numbers.parse_decimal('2000,000', locale='en_US', strict=True) + # Numbers with duplicate grouping symbols should be rejected + with self.assertRaises(numbers.NumberFormatError): + numbers.parse_decimal('0,,000', locale='en_US', strict=True) + # Properly formatted numbers should be accepted + assert str(numbers.parse_decimal('1.001', locale='de', strict=True)) == '1001' + # Trailing zeroes should be accepted + assert str(numbers.parse_decimal('3.00', locale='en_US', strict=True)) == '3.00' + # Numbers without any grouping symbol should be accepted + assert str(numbers.parse_decimal('2000.1', locale='en_US', strict=True)) == '2000.1' + # High precision numbers should be accepted + assert str(numbers.parse_decimal('5,000001', locale='fr', strict=True)) == '5.000001' + def test_list_currencies(): assert isinstance(list_currencies(), set) -- cgit v1.2.1