This restricts all keys to this set of values, it is a little lax in some cases, but represents the lowest common denominator for all of the keys. This should help to limit the number of errors from authors creating tests.
Signed-off-by: Dylan Baker <[email protected]> --- framework/glsl_parser_test.py | 13 +++++- framework/tests/glsl_parser_test_tests.py | 73 +++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/framework/glsl_parser_test.py b/framework/glsl_parser_test.py index 9d768fe..1277c07 100644 --- a/framework/glsl_parser_test.py +++ b/framework/glsl_parser_test.py @@ -152,7 +152,8 @@ class GLSLParserTest(PiglitTest): is_header = re.compile(r'(//|/\*|\*)\s*\[end config\]') is_metadata = re.compile( - r'(//|/\*|\*)\s*(?P<key>[a-z_]*)\:\s(?P<value>[A-Za-z0-9._ ]*)') + r'(//|/\*|\*)\s*(?P<key>[a-z_]*)\:\s(?P<value>.*)') + bad_values = re.compile(r'(?![\w\.\! ]).*') for line in lines: # If strip renendered '' that means we had a blank newline, @@ -177,6 +178,16 @@ class GLSLParserTest(PiglitTest): 'Duplicate entry for key {0} in file {1}'.format( match.group('key'), filepath)) else: + bad = bad_values.search(match.group('value')) + # XXX: this always seems to return a match object, even + # when the match is '' + if bad.group(): + raise GLSLParserException( + 'Bad character "{0}" in file: "{1}", ' + 'line: "{2}". Only alphanumerics, _, and space ' + 'are allowed'.format( + bad.group()[0], filepath, line)) + # Otherwise add the key to the set of found keys, and add # it to the dictionary that will be returned self.__found_keys.add(match.group('key')) diff --git a/framework/tests/glsl_parser_test_tests.py b/framework/tests/glsl_parser_test_tests.py index 22a1f2c..b8af98c 100644 --- a/framework/tests/glsl_parser_test_tests.py +++ b/framework/tests/glsl_parser_test_tests.py @@ -255,3 +255,76 @@ def test_duplicate_entries(): ''.join(x[1] for x in content), value) yield check_no_duplicates, test, name + + +def check_bad_character(tfile): + """ Check for bad characters """ + with nt.assert_raises(glsl.GLSLParserException) as e: + glsl.GLSLParserTest(tfile) + + # Obviously this isn't a perfect check, but it should be close enough + if not e.exception.message.startswith('Bad character "'): + raise AssertionError(e.exception) + + [email protected]_generator +def glslparser_exetensions_seperators(): + """ GlslParserTest() can only have [A-Za-z_] as characters + + This test generates a number of tests that should catch the majority of + errors relating to seperating extensions in the config block of a + glslparser test + + """ + problems = [ + ('comma seperator', '// require_extensions: ARB_ham, ARB_turkey\n'), + ('semi-colon seperator', '// require_extensions: ARB_ham; ARB_turkey\n'), + ('trailing semi-colon', '// require_extensions: ARB_ham ARB_turkey\n;'), + ('Non-alpha character', '// require_extensions: ARB_$$$\n'), + ] + + content = ('// [config]\n' + '// expect_result: pass\n' + '// glsl_version: 1.00\n' + '{}' + '// [end config]\n') + + for name, value in problems: + test = content.format(value) + with utils.with_tempfile(test) as tfile: + check_bad_character.description = ( + 'require_extensions: {0} should raise an error'.format(name)) + yield check_bad_character, tfile + + +def check_good_extension(file_, desc): + """ A good extension should not raise a GLSLParserException """ + try: + glsl.GLSLParserTest(file_) + except glsl.GLSLParserException: + nt.ok_(False, + 'GLSLParserException was raised by "required_extensions: {}"' + ', but should not'.format(desc)) + + [email protected]_generator +def test_good_extensions(): + """ Generates tests with good extensions which shouldn't raise errors """ + content = ('// [config]\n' + '// expect_result: pass\n' + '// glsl_version: 1.00\n' + '// require_extensions: {}\n' + '// [end config]\n') + options = [ + 'GL_EXT_texture_array', + 'GL_EXT_texture_array ARB_example', + '!GL_ARB_ham_sandwhich', + ] + + for x in options: + test = content.format(x) + check_good_extension.description = \ + 'require_extension {} is valid'.format(x) + + with utils.with_tempfile(test) as tfile: + yield check_good_extension, tfile, x -- 2.0.2 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
