def assert_parser_after_write(self, parser_type, in_file, out_file_path, use_template=False): parser = parser_type(in_file, out_file_path) complex_defs = get_complex_definitions() # Update each value and read the file in again for prop in get_supported_props(): if prop in (ATTRIBUTES, CONTACTS, DIGITAL_FORMS, PROCESS_STEPS): value = [{}.fromkeys(complex_defs[prop], "test"), {}.fromkeys(complex_defs[prop], prop)] elif prop in (BOUNDING_BOX, LARGER_WORKS): value = {}.fromkeys(complex_defs[prop], "test " + prop) elif prop == DATES: value = {DATE_TYPE: DATE_TYPE_RANGE, DATE_VALUES: ["test", prop]} elif prop in (KEYWORDS_PLACE, KEYWORDS_THEME): value = ["test", prop] else: value = "test " + prop if prop in get_complex_definitions(): value = get_default_for_complex(prop, value) setattr(parser, prop, value) parser.write(use_template=use_template) with open(out_file_path) as out_file: self.assert_parsers_are_equal(parser, parser_type(out_file))
def assert_parsers_are_equal(self, parser_tgt, parser_val): parser_type = type(parser_tgt).__name__ self.assert_valid_parser(parser_tgt) self.assert_valid_parser(parser_val) for prop in get_supported_props(): self.assert_equal_for(parser_type, prop, getattr(parser_val, prop), getattr(parser_tgt, prop))
def test_validate_simple_values(self): complex_props = set(get_complex_definitions().keys()) simple_props = set(get_supported_props()).difference(complex_props) invalid_values = (None, [None], dict(), [dict()], set(), [set()], tuple(), [tuple()]) for parser in (ArcGISParser().validate(), FgdcParser().validate(), IsoParser().validate()): for prop in simple_props: for invalid in invalid_values: self.assert_validates_for(parser, prop, invalid)
def assert_parser_conversion(self, content_parser, target_parser, comparison_type=""): converted = content_parser.convert_to(target_parser) self.assert_valid_parser(content_parser) self.assert_valid_parser(target_parser) self.assertFalse( converted is target_parser, "{0} conversion is returning the original {0} instance".format(type(converted).__name__), ) for prop in get_supported_props(): self.assertEqual( getattr(content_parser, prop), getattr(converted, prop), "{0} {1}conversion does not equal original {2} content for {3}".format( type(converted).__name__, comparison_type, type(content_parser).__name__, prop ), )
def test_reparse_simple_values(self): complex_props = set(get_complex_definitions().keys()) required_props = set(get_supported_props()) simple_props = required_props.difference(complex_props) simple_props = simple_props.difference({KEYWORDS_PLACE, KEYWORDS_THEME}) simple_empty_vals = ("", u"", []) simple_valid_vals = (u"value", [u"item", u"list"]) arcgis_parser = ArcGISParser(self.arcgis_metadata) fgdc_parser = FgdcParser(self.fgdc_metadata) iso_parser = IsoParser(self.iso_metadata) for parser in (arcgis_parser, fgdc_parser, iso_parser): # Test reparsed empty values for val in simple_empty_vals: self.assert_reparsed_simple_for(parser, simple_props, val, u"") # Test reparsed valid values for val in simple_valid_vals: self.assert_reparsed_simple_for(parser, simple_props, val, val)