Example #1
0
 def test_fails_on_parse_symbolic_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "range must be specified using decimal or integer numbers and ellipsis (...) but found: 'TAB'*",
         ranges.DecimalRange, "TAB")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "vt")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "Tab...Vt")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "Tab...11")
Example #2
0
 def test_fails_on_parse_symbolic_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "range must be specified using decimal or integer numbers and ellipsis (...) but found: 'TAB'*",
         ranges.DecimalRange, "TAB")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "vt")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "Tab...Vt")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "Tab...11")
Example #3
0
 def _test_fails_on_broken_validated_character(self, value, anticipated_error_message_pattern):
     dev_test.assert_raises_and_fnmatches(
         self,
         errors.InterfaceError,
         anticipated_error_message_pattern,
         data.DataFormat._validated_character,
         "x",
         value,
         self._location,
     )
Example #4
0
 def test_fails_on_zero_item_delimiter(self):
     delimited_format = data.DataFormat(data.FORMAT_DELIMITED)
     dev_test.assert_raises_and_fnmatches(
         self,
         errors.InterfaceError,
         "data format property 'item_delimiter' must not be 0 (*)",
         delimited_format.set_property,
         data.KEY_ITEM_DELIMITER,
         "\x00",
     )
Example #5
0
 def test_fails_on_invalid_character(self):
     data_format = data.DataFormat(data.FORMAT_DELIMITED)
     data_format.set_property(data.KEY_ALLOWED_CHARACTERS, '"a"..."c"')
     field_format = fields.AbstractFieldFormat('something', False, '3...5', '', data_format)
     field_format.validate_characters('cba')
     dev_test.assert_raises_and_fnmatches(
         self, errors.FieldValueError,
         "character 'x' (code point U+0078, decimal 120) in field 'something' at column 3 "
         + "must be an allowed character: 97...99",
         field_format.validate_characters, 'abxba'
     )
Example #6
0
 def test_fails_on_inconsistent_overlapping_multi_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "overlapping parts in decimal range must be cleaned up: '1.0...2.4' and '2.3...3.4'",
         ranges.DecimalRange, '1...2.4, 9...10, 2.3...3.4')
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "1...2.4, 2.3...3.4")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "1..., 2...3.1")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5.9, 2...3")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, ...4.9")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, 1...")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, 2")
Example #7
0
 def test_fails_on_invalid_character(self):
     data_format = data.DataFormat(data.FORMAT_DELIMITED)
     data_format.set_property(data.KEY_ALLOWED_CHARACTERS, '"a"..."c"')
     field_format = fields.AbstractFieldFormat('something', False, '3...5', '', data_format)
     field_format.validate_characters('cba')
     dev_test.assert_raises_and_fnmatches(
         self, errors.FieldValueError,
         "character 'x' (code point U+0078, decimal 120) in field 'something' at column 3 "
         + "must be an allowed character: 97...99",
         field_format.validate_characters, 'abxba'
     )
Example #8
0
 def test_fails_on_inconsistent_overlapping_multi_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "overlapping parts in decimal range must be cleaned up: '1.0...2.4' and '2.3...3.4'",
         ranges.DecimalRange, '1...2.4, 9...10, 2.3...3.4')
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "1...2.4, 2.3...3.4")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "1..., 2...3.1")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5.9, 2...3")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, ...4.9")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, 1...")
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "...5, 2")
Example #9
0
 def test_fails_on_inconsistent_fixed_length_and_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "length must be consistent with rule: "
         "length of partial rule limit '1234' is 4 but must be within range: 1...3",
         fields.IntegerFieldFormat, 'x', False, '3', '...1234', _FIXED_FORMAT
     )
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "length must be consistent with rule: "
         "length of partial rule limit '1234' is 4 but must be within range: 1...3",
         fields.IntegerFieldFormat, 'x', False, '3', '123...456, 1234...', _FIXED_FORMAT
     )
Example #10
0
 def test_fails_on_inconsistent_fixed_length_and_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "length must be consistent with rule: "
         "length of partial rule limit '1234' is 4 but must be within range: 1...3",
         fields.IntegerFieldFormat, 'x', False, '3', '...1234', _FIXED_FORMAT
     )
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "length must be consistent with rule: "
         "length of partial rule limit '1234' is 4 but must be within range: 1...3",
         fields.IntegerFieldFormat, 'x', False, '3', '123...456, 1234...', _FIXED_FORMAT
     )
Example #11
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'))
Example #12
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'))
Example #13
0
 def _test_fails_on_broken_validated_character(self, value, anticipated_error_message_pattern):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, anticipated_error_message_pattern,
         data.DataFormat._validated_character, 'x', value, self._location)
Example #14
0
 def test_fails_on_csv_with_fewer_elements_than_expected(self):
     cid = interface.Cid(dev_test.CID_CUSTOMERS_XLS_PATH)
     with validio.Reader(cid, dev_test.path_to_test_data("broken_customers_fewer_elements.csv")) as reader:
         dev_test.assert_raises_and_fnmatches(
             self, errors.DataError,
             "*(R3C1): row must contain 5 fields but only has 4: *'19253', *'Webster Inc.', *'', *''?", reader.validate_rows)
Example #15
0
 def test_fails_on_multiple_tokens_in_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, "constant rule must be a single Python token but also found: ';'",
         fields.ConstantFieldFormat, 'multiple_tokens', False, None, '"x";', _ANY_FORMAT)
Example #16
0
 def test_fails_on_missing_empty_flag_with_empty_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, 'field must be marked as empty to describe a constant empty value',
         fields.ConstantFieldFormat, 'broken_empty', False, None, '', _ANY_FORMAT)
Example #17
0
 def test_fails_on_zero_item_delimiter(self):
     delimited_format = data.DataFormat(data.FORMAT_DELIMITED)
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, "data format property 'item_delimiter' must not be 0 (*)",
         delimited_format.set_property, data.KEY_ITEM_DELIMITER, '\x00')
Example #18
0
 def test_fails_on_parse_text_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "range must be specified using decimal or integer numbers and ellipsis (...) but found: 'a'*",
         ranges.DecimalRange, "a")
Example #19
0
 def test_fails_on_parse_hex_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, "number must be an decimal or integer but is: '0x7f'",
         ranges.DecimalRange, '0x7f')
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "0x7F")
Example #20
0
 def test_fails_on_other_value(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.FieldValueError, "value is 'other' but must be constant: 'some'",
         self._constant_format.validated, 'other'
     )
Example #21
0
 def test_fails_on_parse_text_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         "range must be specified using decimal or integer numbers and ellipsis (...) but found: 'a'*",
         ranges.DecimalRange, "a")
Example #22
0
 def test_fails_on_multiple_tokens_in_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, "constant rule must be a single Python token but also found: ';'",
         fields.ConstantFieldFormat, 'multiple_tokens', False, None, '"x";', _ANY_FORMAT)
Example #23
0
 def test_fails_on_parse_hex_range(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, "number must be an decimal or integer but is: '0x7f'",
         ranges.DecimalRange, '0x7f')
     self.assertRaises(errors.InterfaceError, ranges.DecimalRange, "0x7F")
Example #24
0
 def _test_fails_with_interface_error(self, description, anticipated_error_message_pattern):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, anticipated_error_message_pattern,
         ranges.DecimalRange, description)
Example #25
0
 def _test_fails_with_interface_error(self, description, anticipated_error_message_pattern):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, anticipated_error_message_pattern,
         ranges.DecimalRange, description)
Example #26
0
 def test_fails_on_empty_constant_with_non_empty_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         'to describe a Constant that can be empty, use a Choice field with a single choice',
         fields.ConstantFieldFormat, 'broken_empty', True, None, 'some', _ANY_FORMAT
     )
Example #27
0
 def test_fails_on_missing_empty_flag_with_empty_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError, 'field must be marked as empty to describe a constant empty value',
         fields.ConstantFieldFormat, 'broken_empty', False, None, '', _ANY_FORMAT)
Example #28
0
 def test_fails_on_csv_with_more_elements_than_expected(self):
     cid_reader = interface.Cid(dev_test.CID_CUSTOMERS_XLS_PATH)
     with validio.Reader(cid_reader, dev_test.path_to_test_data("broken_customers_more_elements.csv")) as reader:
         dev_test.assert_raises_and_fnmatches(
             self, errors.DataError,
             "*(R3C1): row must contain 5 fields but has 6, additional values are: *'error'*", reader.validate_rows)
Example #29
0
 def test_fails_on_other_value(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.FieldValueError, "value is 'other' but must be constant: 'some'",
         self._constant_format.validated, 'other'
     )
Example #30
0
 def test_fails_on_csv_with_more_elements_than_expected(self):
     cid_reader = interface.Cid(dev_test.CID_CUSTOMERS_XLS_PATH)
     with validio.Reader(cid_reader, dev_test.path_to_test_data("broken_customers_more_elements.csv")) as reader:
         dev_test.assert_raises_and_fnmatches(
             self, errors.DataError,
             "*(R3C1): row must contain 5 fields but has 6, additional values are: *'error'*", reader.validate_rows)
Example #31
0
 def test_fails_on_empty_constant_with_non_empty_rule(self):
     dev_test.assert_raises_and_fnmatches(
         self, errors.InterfaceError,
         'to describe a Constant that can be empty, use a Choice field with a single choice',
         fields.ConstantFieldFormat, 'broken_empty', True, None, 'some', _ANY_FORMAT
     )
Example #32
0
 def test_fails_on_csv_with_fewer_elements_than_expected(self):
     cid = interface.Cid(dev_test.CID_CUSTOMERS_XLS_PATH)
     with validio.Reader(cid, dev_test.path_to_test_data("broken_customers_fewer_elements.csv")) as reader:
         dev_test.assert_raises_and_fnmatches(
             self, errors.DataError,
             "*(R3C1): row must contain 5 fields but only has 4: *'19253', *'Webster Inc.', *'', *''?", reader.validate_rows)