Beispiel #1
0
 def test_can_parse_multiple_ranges(self):
     self.assertEquals(
         ranges.DecimalRange("1.1, 3").items,
         [(decimal.Decimal('1.1'), decimal.Decimal('1.1')), (3, 3)])
     self.assertEquals(
         ranges.DecimalRange("1...2.3, 5...").items,
         [(1, decimal.Decimal('2.3')), (5, None)])
Beispiel #2
0
 def test_can_get_upper_limit(self):
     self.assertEquals(
         ranges.DecimalRange("1...2.1").upper_limit, decimal.Decimal('2.1'))
     self.assertEquals(ranges.DecimalRange("0...").upper_limit, None)
     self.assertEquals(ranges.DecimalRange("...0").upper_limit, 0)
     self.assertEquals(ranges.DecimalRange("...1, 3...").upper_limit, None)
     self.assertEquals(
         ranges.DecimalRange("1...2, 5...9.3").upper_limit,
         decimal.Decimal('9.3'))
Beispiel #3
0
    def test_can_handle_proper_decimal_ranges(self):
        self.assertEquals(
            ranges.DecimalRange("1.1").items,
            [(decimal.Decimal('1.1'), decimal.Decimal('1.1'))])
        self.assertEquals(ranges.DecimalRange("1...").items, [(1, None)])
        self.assertEquals(
            ranges.DecimalRange("...1.").items, [(None, decimal.Decimal('1'))])
        self.assertEquals(
            ranges.DecimalRange("1.1" + "\u2026" + "2.1").items,
            [(decimal.Decimal('1.1'), decimal.Decimal('2.1'))])
        self.assertEquals(
            ranges.DecimalRange("-1.1...2").items,
            [(decimal.Decimal('-1.1'), 2)])

        self.assertEquals(
            ranges.DecimalRange("1.1...").items,
            [(decimal.Decimal('1.1'), None)])
        self.assertEquals(
            ranges.DecimalRange("...1.1").items,
            [(None, decimal.Decimal('1.1'))])
        self.assertEquals(
            ranges.DecimalRange("1.1...2.1").items,
            [(decimal.Decimal('1.1'), decimal.Decimal('2.1'))])
        self.assertEquals(
            ranges.DecimalRange("-1.1...2.1").items,
            [(decimal.Decimal('-1.1'), decimal.Decimal('2.1'))])
Beispiel #4
0
    def __init__(self, field_name, is_allowed_to_be_empty, length_text, rule, data_format, empty_value=None):
        super(DecimalFieldFormat, self).__init__(
            field_name, is_allowed_to_be_empty, "", "", data_format, empty_value)
        assert rule is not None, 'to specify "no rule" use "" instead of None'
        self.decimal_separator = data_format.decimal_separator
        self.thousands_separator = data_format.thousands_separator
        self.valid_range = ranges.DecimalRange(rule, ranges.DEFAULT_DECIMAL_RANGE_TEXT)
        self._length = ranges.DecimalRange(length_text)

        self._precision = self.valid_range.precision
        self._scale = self.valid_range.scale
Beispiel #5
0
    def test_can_set_precision_and_scale(self):
        empty_range = ranges.DecimalRange('')
        self.assertEqual(empty_range.precision, ranges.DEFAULT_PRECISION)
        self.assertEqual(empty_range.scale, ranges.DEFAULT_SCALE)

        range_without_digits_after_dot = ranges.DecimalRange('123')
        self.assertEqual(range_without_digits_after_dot.precision, 0)
        self.assertEqual(range_without_digits_after_dot.scale, 3)

        single_range = ranges.DecimalRange('123.45')
        self.assertEqual(single_range.precision, 2)
        self.assertEqual(single_range.scale, 5)

        trailing_zeroes_range = ranges.DecimalRange('123.00')
        self.assertEqual(trailing_zeroes_range.precision, 2)
        self.assertEqual(trailing_zeroes_range.scale, 5)

        negative_range = ranges.DecimalRange('-123.45')
        self.assertEqual(negative_range.precision, 2)
        self.assertEqual(negative_range.scale, 5)

        lower_and_upper_range = ranges.DecimalRange('123.45...5432.1')
        self.assertEqual(lower_and_upper_range.precision, 2)
        self.assertEqual(lower_and_upper_range.scale, 6)

        multi_range = ranges.DecimalRange('1.2...45.678, 56.7...1234')
        self.assertEqual(multi_range.precision, 3)
        self.assertEqual(multi_range.scale, 7)
Beispiel #6
0
    def test_fails_on_value_out_of_range(self):
        lower_and_upper_range = ranges.DecimalRange("-1.2...1.5")
        dev_test.assert_raises_and_fnmatches(
            self, errors.RangeValueError, "x is Decimal('-1.3') but must be within range: '-1.2...1.5'",
            lower_and_upper_range.validate, "x", '-1.3')
        self.assertRaises(errors.RangeValueError, lower_and_upper_range.validate, "x", decimal.Decimal('1.6'))

        lower_range = ranges.DecimalRange("1.1...")
        self.assertRaises(errors.RangeValueError, lower_range.validate, "x", 1)

        upper_range = ranges.DecimalRange("...1.1")
        self.assertRaises(errors.RangeValueError, upper_range.validate, "x", decimal.Decimal('1.2'))

        multi_range = ranges.DecimalRange("1.1...4.9, 7.1...9")
        self.assertRaises(errors.RangeValueError, multi_range.validate, "x", 1)
        self.assertRaises(errors.RangeValueError, multi_range.validate, "x", 5)
        self.assertRaises(errors.RangeValueError, multi_range.validate, "x", 7)
        self.assertRaises(errors.RangeValueError, multi_range.validate, "x", decimal.Decimal('9.1'))
Beispiel #7
0
 def test_can_get_lower_limit(self):
     self.assertEquals(ranges.DecimalRange("5.5...9").lower_limit, decimal.Decimal('5.5'))
     self.assertEquals(ranges.DecimalRange("0...").lower_limit, 0)
     self.assertEquals(ranges.DecimalRange("...0").lower_limit, None)
     self.assertEquals(ranges.DecimalRange("...1, 3...").lower_limit, None)
     self.assertEquals(ranges.DecimalRange("5...9").lower_limit, 5)
     self.assertEquals(ranges.DecimalRange("1.1...2, 5...9").lower_limit, decimal.Decimal('1.1'))
     self.assertEquals(ranges.DecimalRange("5...9, 1.1...2").lower_limit, decimal.Decimal('1.1'))
Beispiel #8
0
 def _test_can_handle_empty_range(self, description):
     empty_range = ranges.DecimalRange(description)
     self.assertEquals(empty_range.items, None)
     self.assertEquals(empty_range.lower_limit, None)
     self.assertEquals(empty_range.upper_limit, None)
     self.assertIsNone(empty_range.validate("x", decimal.Decimal(ranges.MIN_DECIMAL_TEXT) - 1))
     self.assertIsNone(empty_range.validate("x", decimal.Decimal('1.1')))
     self.assertIsNone(empty_range.validate("x", 0))
     self.assertIsNone(empty_range.validate("x", decimal.Decimal('-1.1')))
     self.assertIsNone(empty_range.validate("x", decimal.Decimal(ranges.MAX_DECIMAL_TEXT) + 1))
Beispiel #9
0
    def test_can_validate_values(self):
        lower_and_upper_range = ranges.DecimalRange("-1.2...1.5")
        lower_and_upper_range.validate("x", '-1.2')
        lower_and_upper_range.validate("x", 0)
        lower_and_upper_range.validate("x", '1.5')

        lower_range = ranges.DecimalRange("1.1...")
        lower_range.validate("x", '1.1')
        lower_range.validate("x", 2)
        lower_range.validate("x", 2 ** 32)

        upper_range = ranges.DecimalRange("...1.1")
        upper_range.validate("x", '1.1')
        upper_range.validate("x", - 2)
        upper_range.validate("x", - (2 ** 32) - 1)

        multi_range = ranges.DecimalRange("1.1...4.9, 7.1...9")
        multi_range.validate("x", '1.1')
        multi_range.validate("x", '4.9')
        multi_range.validate("x", '7.1')
        multi_range.validate("x", 9)
Beispiel #10
0
 def test_can_handle_scientific_notation(self):
     decimal_range = ranges.DecimalRange('1.23...1e4')
     self.assertEqual(7, decimal_range.scale)
     self.assertEqual(2, decimal_range.precision)
Beispiel #11
0
 def test_can_process_empty_range(self):
     self.assertEqual(ranges.DecimalRange("").items, None)
Beispiel #12
0
 def test_can_override_default_range(self):
     self.assertEquals(ranges.DecimalRange("1.1...2", "2...3").items, [(decimal.Decimal('1.1'), 2)])
Beispiel #13
0
 def test_can_use_default_range(self):
     self.assertEquals(ranges.DecimalRange("", "2.1...3").items, [(decimal.Decimal('2.1'), 3)])
Beispiel #14
0
 def test_can_display_lower_is_upper_length(self):
     self.assertEqual(six.text_type(ranges.DecimalRange("9.9...9.9")),
                      "9.9...9.9")
Beispiel #15
0
 def test_fails_on_non_decimal_value_to_validate(self):
     decimal_range = ranges.DecimalRange("1.1...2.2")
     self.assertRaises(errors.RangeValueError, decimal_range.validate, "x",
                       "a")
Beispiel #16
0
 def test_can_represent_range_containing_none(self):
     none_range = ranges.DecimalRange(None)
     self.assertEqual(six.text_type(none_range), six.text_type(None))
     upper_none_range = ranges.DecimalRange("1...")
     upper_none_range.items.append(None)
     self.assertEqual(six.text_type(upper_none_range), "1, None")
Beispiel #17
0
 def test_can_display_multi_range(self):
     self.assertEqual(
         six.text_type(ranges.DecimalRange("9.1...10.9, 11...13")),
         "9.1...10.9, 11.0...13.0")