def test_complex_file_validation_invalid(self): schema_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_schema.mediawiki') events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_events.tsv') hed_schema = schema.load_schema(schema_path) json_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "../data/validator_tests/bids_events_bad_defs.json") validator = HedValidator(hed_schema=hed_schema) sidecar = Sidecar(json_path) issues = sidecar.validate_entries(validators=validator, check_for_warnings=True) self.assertEqual(len(issues), 4) input_file = EventsInput(events_path, sidecars=sidecar) validation_issues = input_file.validate_file_sidecars( validator, check_for_warnings=True) self.assertEqual(len(validation_issues), 4) validation_issues = input_file.validate_file(validator, check_for_warnings=True) self.assertEqual(len(validation_issues), 42)
def test_loading_and_reset_mapper(self): events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_events.tsv') json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../data/validator_tests/bids_events.json") sidecar = Sidecar(json_path) self.assertEqual(len(sidecar.validate_entries()), 0) input_file_1 = EventsInput(events_path, sidecars=sidecar) input_file_2 = EventsInput(events_path, sidecars=sidecar) input_file_2.reset_column_mapper() for (row_number, column_dict), (row_number2, column_dict2) in zip( input_file_1.iter_dataframe(), input_file_2.iter_dataframe()): self.assertEqual( row_number, row_number2, f"EventsInput should have row {row_number} equal to {row_number2} after reset" ) self.assertTrue( len(column_dict) == 5, f"The column dictionary for row {row_number} should have the right length" ) self.assertTrue( len(column_dict2) == 11, f"The reset column dictionary for row {row_number2} should have the right length" )
def test_name(self): invalid_json = "invalidxmlfile.json" name = "PrettyDisplayName.json" try: json_dict = Sidecar(invalid_json) self.assertTrue(False) except HedFileError as e: self.assertTrue(name in e.format_error_message( return_string_only=True, name=name))
def test_invalid_filenames(self): # Handle missing or invalid files. invalid_json = "invalidxmlfile.json" self.assertRaises(HedFileError, Sidecar, invalid_json) json_dict = None try: json_dict = Sidecar(None) except HedFileError: pass self.assertTrue(len(json_dict._column_data) == 0) json_dict = None try: json_dict = Sidecar("") except HedFileError: pass self.assertTrue(len(json_dict._column_data) == 0)
def test_file_as_string(self): events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_events.tsv') json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../data/validator_tests/bids_events.json") sidecar = Sidecar(json_path) self.assertEqual(len(sidecar.validate_entries(expand_defs=True)), 0) input_file = EventsInput(events_path, sidecars=sidecar) with open(events_path) as file: events_file_as_string = io.StringIO(file.read()) input_file_from_string = EventsInput(file=events_file_as_string, sidecars=sidecar) for (row_number, column_dict), (row_number2, column_dict) in zip( input_file, input_file_from_string): self.assertEqual(row_number, row_number2) self.assertEqual(column_dict, column_dict)
def setUpClass(cls): cls.base_data_dir = os.path.join( os.path.dirname(os.path.abspath(__file__)), '../data/') hed_xml_file = os.path.join(cls.base_data_dir, "hed_pairs/HED8.0.0t.xml") cls.hed_schema = schema.load_schema(hed_xml_file) cls.json_filename = os.path.join( cls.base_data_dir, "sidecar_tests/both_types_events.json") cls.json_def_filename = os.path.join( cls.base_data_dir, "sidecar_tests/both_types_events_with_defs.json") cls.json_without_definitions_filename = \ os.path.join(cls.base_data_dir, "sidecar_tests/both_types_events_without_definitions.json") cls.json_errors_filename = os.path.join( cls.base_data_dir, "sidecar_tests/json_errors.json") cls.default_sidecar = Sidecar(cls.json_filename) cls.json_def_sidecar = Sidecar(cls.json_def_filename) cls.errors_sidecar = Sidecar(cls.json_errors_filename) cls.json_without_definitions_sidecar = Sidecar( cls.json_without_definitions_filename)
def test_complex_file_validation_invalid_definitions_removed(self): # This verifies definitions are being removed from sidecar strings before being added, or it will produce # extra errors. schema_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_schema.mediawiki') events_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../data/validator_tests/bids_events.tsv') hed_schema = schema.load_schema(schema_path) json_path = os.path.join( os.path.dirname(os.path.abspath(__file__)), "../data/validator_tests/bids_events_bad_defs2.json") sidecar = Sidecar(json_path) input_file = EventsInput(events_path, sidecars=sidecar) validator = HedValidator(hed_schema=hed_schema) validation_issues1 = input_file.validate_file_sidecars(validator) self.assertEqual(len(validation_issues1), 4) validation_issues = input_file.validate_file(validator) self.assertEqual(len(validation_issues), 42)
def test_add_json_string(self): with open(self.json_filename) as file: file_as_string = io.StringIO(file.read()) json_file = Sidecar(file_as_string) self.assertTrue(json_file)