diff --git a/hed/validator/tag_validator.py b/hed/validator/tag_validator.py index 8d11668d2..a1fcdf733 100644 --- a/hed/validator/tag_validator.py +++ b/hed/validator/tag_validator.py @@ -150,7 +150,7 @@ def check_invalid_character_issues(self, hed_string): """ validation_issues = [] for index, character in enumerate(hed_string): - if character in TagValidator.INVALID_STRING_CHARS: + if character in TagValidator.INVALID_STRING_CHARS or ord(character) > 127: validation_issues += self._report_invalid_character_error(hed_string, index) return validation_issues @@ -298,7 +298,7 @@ def check_tag_unit_class_units_are_valid(self, original_tag, report_tag_as=None, stripped_value, unit = original_tag.get_stripped_unit_value() if not unit: bad_units = " " in original_tag.extension - + had_error = False # Todo: in theory this should separately validate the number and the units, for units # that are prefixes like $. Right now those are marked as unit invalid AND value_invalid. if bad_units: @@ -306,11 +306,12 @@ def check_tag_unit_class_units_are_valid(self, original_tag, report_tag_as=None, if original_tag.is_takes_value_tag() and\ not self._validate_value_class_portion(original_tag, stripped_value): validation_issues += ErrorHandler.format_error(ValidationErrors.VALUE_INVALID, - report_tag_as if report_tag_as else original_tag, - actual_error=error_code) + report_tag_as if report_tag_as else original_tag) if error_code: + had_error = True validation_issues += ErrorHandler.format_error(ValidationErrors.VALUE_INVALID, - report_tag_as if report_tag_as else original_tag) + report_tag_as if report_tag_as else original_tag, + actual_error=error_code) if bad_units: @@ -325,7 +326,8 @@ def check_tag_unit_class_units_are_valid(self, original_tag, report_tag_as=None, tag=report_tag_as if report_tag_as else original_tag, default_unit=default_unit) - if error_code: + # We don't want to give this overall error twice + if error_code and not had_error: new_issue = validation_issues[0].copy() new_issue['code'] = error_code validation_issues += [new_issue] diff --git a/spec_tests/hed-specification b/spec_tests/hed-specification index a71c92e73..1415ff80d 160000 --- a/spec_tests/hed-specification +++ b/spec_tests/hed-specification @@ -1 +1 @@ -Subproject commit a71c92e73af4f89eaf24ae8b760de428804ffbdf +Subproject commit 1415ff80ddd86e11708b991b5b379ee1c5b18098 diff --git a/spec_tests/test_errors.py b/spec_tests/test_errors.py index 0313b10e3..b196afb96 100644 --- a/spec_tests/test_errors.py +++ b/spec_tests/test_errors.py @@ -44,10 +44,8 @@ skip_tests = { "VERSION_DEPRECATED": "Not applicable", - "CHARACTER_INVALID": "Not finalized", - "STYLE_WARNING": "Bad tests", "onset-offset-error-duplicated-onset-or-offset": "TBD how we implement this", - "tag-extension-invalid-bad-node-name": "Part of character invalid checking", + "tag-extension-invalid-bad-node-name": "Part of character invalid checking/didn't get to it yet", } class MyTestCase(unittest.TestCase): @@ -77,6 +75,7 @@ def run_single_test(self, test_file): if name in skip_tests: print(f"Skipping {name} test because: {skip_tests[name]}") continue + description = info['description'] schema = info['schema'] check_for_warnings = info.get("warning", False)