[Piglit] [PATCH 2/2] framework/glslparsertest: Don't add exclude extensions to the required list

Dylan Baker baker.dylan.c at gmail.com
Wed Apr 13 18:00:21 UTC 2016

glslparsertest has a syntax for the 'require_extensions' option that is
"!<extension_name>", when this is specified it means "This extensions is
not supported". There is a bug in the fast skip code in
glsl_parser_test.py that causes it to add these extensions to the fast
skip required extensions list, which is obviously wrong.

This patch adds a test for this behavior as well as fixing the behavior
to work correctly.

cc: Mark Janes <mark.a.janes at intel.com>
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>

Mark, I hate to have to ask you to review this, but it's masking
failures in jenkins a few cases (there aren't very many tests that use
this feature, but the generator I submitted recently does).

 framework/test/glsl_parser_test.py  |  3 ++-
 unittests/glsl_parser_test_tests.py | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/framework/test/glsl_parser_test.py b/framework/test/glsl_parser_test.py
index ce043a7..dcce8f8 100644
--- a/framework/test/glsl_parser_test.py
+++ b/framework/test/glsl_parser_test.py
@@ -126,7 +126,8 @@ class GLSLParserTest(FastSkipMixin, PiglitBaseTest):
         req = config.get('require_extensions')
         if req:
-            self.gl_required = set(req.split())
+            self.gl_required = set(
+                r for r in req.split() if not r.startswith('!'))
         # If GLES is requested, but piglit was not built with a gles version,
         # then ARB_ES3<ver>_compatibility is required. Add it to
diff --git a/unittests/glsl_parser_test_tests.py b/unittests/glsl_parser_test_tests.py
index c732bec..048c5a4 100644
--- a/unittests/glsl_parser_test_tests.py
+++ b/unittests/glsl_parser_test_tests.py
@@ -456,6 +456,22 @@ def test_set_gl_required():
     nt.eq_(test.gl_required, set(['GL_ARB_foobar', 'GL_EXT_foobar']))
+def test_set_exclude_gl_required():
+    """test.glsl_parser_test.GLSLParserTest: doesn't add excludes to gl_required"""
+    rt = {'require_extensions': 'GL_ARB_foobar !GL_EXT_foobar'}
+    with mock.patch.object(glsl.GLSLParserTest, '_GLSLParserTest__parser',
+                           mock.Mock(return_value=rt)):
+        with mock.patch.object(glsl.GLSLParserTest,
+                               '_GLSLParserTest__get_command',
+                               return_value=['foo']):
+            with mock.patch('framework.test.glsl_parser_test.open',
+                            mock.mock_open(), create=True):
+                with mock.patch('framework.test.glsl_parser_test.os.stat',
+                                mock.mock_open()):
+                    test = glsl.GLSLParserTest('foo')
+    nt.eq_(test.gl_required, set(['GL_ARB_foobar']))
 @mock.patch('framework.test.glsl_parser_test._HAS_GL_BIN', False)
 def test_binary_skip():

More information about the Piglit mailing list