[Piglit] [PATCH] unittests: test WflInfo in its own module and correct depending ones

Andres Gomez agomez at igalia.com
Wed Nov 15 09:21:51 UTC 2017


Fixes: edc41a1db ("framework: move WflInfo class into new wflinfo.py module")

Cc: Brian Paul <brianp at vmware.com>
Cc: Dylan Baker <dylanx.c.baker at intel.com>
Signed-off-by: Andres Gomez <agomez at igalia.com>
---
 unittests/framework/test/test_glsl_parser_test.py |   2 +-
 unittests/framework/test/test_opengl.py           | 363 +-------------------
 unittests/framework/test_wflinfo.py               | 389 ++++++++++++++++++++++
 3 files changed, 395 insertions(+), 359 deletions(-)
 create mode 100644 unittests/framework/test_wflinfo.py

diff --git a/unittests/framework/test/test_glsl_parser_test.py b/unittests/framework/test/test_glsl_parser_test.py
index 124f3e9e9..d252e27bc 100644
--- a/unittests/framework/test/test_glsl_parser_test.py
+++ b/unittests/framework/test/test_glsl_parser_test.py
@@ -55,7 +55,7 @@ class _Setup(object):
         self.patchers = [
             mock.patch('framework.test.glsl_parser_test._HAS_GL_BIN', True),
             mock.patch('framework.test.glsl_parser_test._HAS_GLES_BIN', True),
-            mock.patch.dict('framework.test.opengl.OPTIONS.env',
+            mock.patch.dict('framework.wflinfo.OPTIONS.env',
                             {'PIGLIT_PLATFORM': 'foo'}),
         ]
 
diff --git a/unittests/framework/test/test_opengl.py b/unittests/framework/test/test_opengl.py
index a3974081a..59024edf1 100644
--- a/unittests/framework/test/test_opengl.py
+++ b/unittests/framework/test/test_opengl.py
@@ -23,8 +23,6 @@
 from __future__ import (
     absolute_import, division, print_function, unicode_literals
 )
-import subprocess
-import textwrap
 try:
     from unittest import mock
 except ImportError:
@@ -32,6 +30,7 @@ except ImportError:
 
 import pytest
 
+from framework import wflinfo
 from framework.test import opengl
 from framework.test.base import TestIsSkip as _TestIsSkip
 
@@ -40,365 +39,13 @@ from .. import utils
 # pylint: disable=no-self-use,attribute-defined-outside-init,protected-access
 
 
-def _has_wflinfo():
-    """Return True if wflinfo is available in PATH."""
-    try:
-        subprocess.check_call(['wflinfo', '--help'])
-    except subprocess.CalledProcessError:
-        return False
-    except OSError as e:
-        if e.errno != 2:
-            raise
-        return False
-    return True
-
-
- at pytest.mark.skipif(not _has_wflinfo(), reason="Tests require wflinfo binary.")
-class TestWflInfo(object):
-    """Tests for the WflInfo class."""
-
-    class TestAttributes(object):
-        """test for attribute assignments."""
-
-        @pytest.yield_fixture(autouse=True)
-        def patch(self):
-            """Mock a few things for testing purposes."""
-            # This is pretty ugly, but as a Borb with a private shared state,
-            # the only way to test this module is to actually replace the
-            # shared_state with a mock value so it's reset after each test
-            with mock.patch.dict('framework.test.opengl.OPTIONS.env',
-                                 {'PIGLIT_PLATFORM': 'foo'}), \
-                    mock.patch(
-                        'framework.test.opengl.WflInfo._WflInfo__shared_state',
-                        {}):
-                yield
-
-        def setup(self):
-            """Setup each instance, patching necissary bits."""
-            self._test = opengl.WflInfo()
-
-        def test_gl_extension(self):
-            """test.opengl.WflInfo.gl_extensions: Provides list of gl
-            extensions.
-            """
-            rv = (b'foo\nbar\nboink\nOpenGL extensions: '
-                  b'GL_foobar GL_ham_sandwhich\n')
-            expected = set(['GL_foobar', 'GL_ham_sandwhich'])
-
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gl_extensions == expected
-
-        def test_gl_version(self):
-            """test.opengl.WflInfo.gl_version: Provides a version number."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gl
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: 18 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gl_version == 18.0
-
-        def test_gles_version(self):
-            """test.opengl.WflInfo.gles_version: Provides a version number."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gles3
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: OpenGL ES 7.1 Mesa 11.0.4
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gles_version == 7.1
-
-        def test_glsl_version(self):
-            """test.opengl.WflInfo.glsl_version: Provides a version number."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gl
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-                OpenGL shading language version string: 9.30
-                OpenGL extensions: this is some extension strings.
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.glsl_version == 9.3
-
-        def test_glsl_es_version_1(self):
-            """test.opengl.WflInfo.glsl_es_version: works with gles2."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gles2
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: OpenGL ES 3.0 Mesa 11.0.4
-                OpenGL shading language version string: OpenGL ES GLSL ES 1.0.17
-                OpenGL extensions: this is some extension strings.
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.glsl_es_version == 1.0
-
-        def test_glsl_es_version_3plus(self):
-            """test.opengl.WflInfo.glsl_es_version: works with gles3."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gles3
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: OpenGL ES 3.0 Mesa 11.0.4
-                OpenGL shading language version string: OpenGL ES GLSL ES 5.00
-                OpenGL extensions: this is some extension strings.
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.glsl_es_version == 5.0
-
-        def test_gl_version_patch(self):
-            """test.opengl.WflInfo.gl_version: Works with patch versions."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gl
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gl_version == 18.0
-
-        def test_glsl_version_patch(self):
-            """test.opengl.WflInfo.glsl_version: Works with patch versions."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gl
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-                OpenGL shading language version string: 9.30.7
-                OpenGL extensions: this is some extension strings.
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.glsl_version == 9.3
-
-        def test_leading_junk(self):
-            """test.opengl.WflInfo.gl_version: Handles leading junk."""
-            rv = textwrap.dedent("""\
-                Warning: I'm a big fat warnngs
-                Waffle platform: gbm
-                Waffle api: gl
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gl_version == 18.0
-
-        def test_mixed_junk(self):
-            """test.opengl.WflInfo.gl_version: Handles mixed junk."""
-            rv = textwrap.dedent("""\
-                Waffle platform: gbm
-                Waffle api: gl
-                Warning: I'm a big fat warnngs
-                OpenGL vendor string: Intel Open Source Technology Center
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                Warning: I'm a big fat warnngs
-                Warning: I'm a big fat warnngs
-                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
-                OpenGL context flags: 0x0
-            """).encode('utf-8')
-            with mock.patch('framework.test.opengl.subprocess.check_output',
-                            mock.Mock(return_value=rv)):
-                assert self._test.gl_version == 18.0
-
-    class TestWAFFLEINFO_GL_ERROR(object):
-        """Test class for WflInfo when "WFLINFO_GL_ERROR" is returned."""
-
-        @pytest.yield_fixture(autouse=True)
-        def patch(self):
-            """Setup each instance, patching necissary bits."""
-            rv = textwrap.dedent("""\
-                Waffle platform: glx
-                Waffle api: gles3
-                OpenGL vendor string: WFLINFO_GL_ERROR
-                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
-                OpenGL version string: WFLINFO_GL_ERROR
-                OpenGL context flags: 0x0\n
-                OpenGL shading language version string: WFLINFO_GL_ERROR
-                OpenGL extensions: WFLINFO_GL_ERROR
-            """).encode('utf-8')
-
-            with mock.patch.dict('framework.test.opengl.OPTIONS.env',
-                                 {'PIGLIT_PLATFORM': 'foo'}), \
-                    mock.patch(
-                        'framework.test.opengl.subprocess.check_output',
-                        mock.Mock(return_value=rv)):
-                yield
-
-        @pytest.fixture(scope='class')
-        def inst(self):
-            return opengl.WflInfo()
-
-        def test_gl_version(self, inst):
-            """test.opengl.WflInfo.gl_version: handles WFLINFO_GL_ERROR
-            correctly.
-            """
-            assert inst.gl_version is None
-
-        def test_gles_version(self, inst):
-            """test.opengl.WflInfo.gles_version: handles WFLINFO_GL_ERROR
-            correctly.
-            """
-            assert inst.gles_version is None
-
-        def test_glsl_version(self, inst):
-            """test.opengl.WflInfo.glsl_version: handles WFLINFO_GL_ERROR
-            correctly.
-            """
-            assert inst.glsl_version is None
-
-        def test_glsl_es_version(self, inst):
-            """test.opengl.WflInfo.glsl_es_version: handles WFLINFO_GL_ERROR
-            correctly.
-            """
-            assert inst.glsl_es_version is None
-
-        def test_gl_extensions(self, inst):
-            """test.opengl.WflInfo.gl_extensions: handles WFLINFO_GL_ERROR
-            correctly.
-            """
-            assert inst.gl_extensions == set()
-
-    class TestOSError(object):
-        """Tests for the Wflinfo functions to handle OSErrors."""
-
-        # pylint: disable=pointless-statement
-
-        @pytest.yield_fixture(autouse=True, scope='class')
-        def patch(self):
-            """Setup the class, patching as necessary."""
-            # pylint: disable=bad-continuation
-            with mock.patch.dict(
-                    'framework.test.opengl.OPTIONS.env',
-                    {'PIGLIT_PLATFORM': 'foo'}), \
-                    mock.patch(
-                        'framework.test.opengl.subprocess.check_output',
-                        mock.Mock(side_effect=OSError(2, 'foo'))), \
-                    mock.patch(
-                        'framework.test.opengl.WflInfo._WflInfo__shared_state',
-                        {}):
-                yield
-
-        @pytest.fixture
-        def inst(self):
-            return opengl.WflInfo()
-
-        def test_gl_extensions(self, inst):
-            """test.opengl.WflInfo.gl_extensions: Handles OSError "no file"
-            gracefully.
-            """
-            inst.gl_extensions
-
-        def test_gl_version(self, inst):
-            """test.opengl.WflInfo.get_gl_version: Handles OSError "no file"
-            gracefull.
-            """
-            inst.gl_version
-
-        def test_gles_version(self, inst):
-            """test.opengl.WflInfo.get_gles_version: Handles OSError "no file"
-            gracefully.
-            """
-            inst.gles_version
-
-        def test_glsl_version(self, inst):
-            """test.opengl.WflInfo.glsl_version: Handles OSError "no file"
-            gracefully.
-            """
-            inst.glsl_version
-
-        def test_glsl_es_version(self, inst):
-            """test.opengl.WflInfo.glsl_es_version: Handles OSError "no file"
-            gracefully.
-            """
-            inst.glsl_es_version
-
-    class TestCalledProcessError(object):
-        """Tests for the WflInfo functions to handle OSErrors."""
-
-        # pylint: disable=pointless-statement
-
-        @pytest.yield_fixture(autouse=True, scope='class')
-        def patch(self):
-            """Setup the class, patching as necessary."""
-            # pylint: disable=bad-continuation
-            with mock.patch.dict(
-                    'framework.test.opengl.OPTIONS.env',
-                    {'PIGLIT_PLATFORM': 'foo'}), \
-                    mock.patch(
-                        # pylint: disable=line-too-long
-                        'framework.test.opengl.subprocess.check_output',
-                        mock.Mock(side_effect=subprocess.CalledProcessError(1, 'foo'))), \
-                    mock.patch(
-                        'framework.test.opengl.WflInfo._WflInfo__shared_state',
-                        {}):
-                yield
-
-        @pytest.fixture
-        def inst(self):
-            return opengl.WflInfo()
-
-        def test_gl_extensions(self, inst):
-            """test.opengl.WflInfo.gl_extensions: Handles CalledProcessError
-            gracefully.
-            """
-            inst.gl_extensions
-
-        def test_gl_version(self, inst):
-            """test.opengl.WflInfo.get_gl_version: Handles CalledProcessError
-            gracefully.
-            """
-            inst.gl_version
-
-        def test_gles_version(self, inst):
-            """test.opengl.WflInfo.gles_version: Handles CalledProcessError
-            gracefully.
-            """
-            inst.gles_version
-
-        def test_glsl_version(self, inst):
-            """test.opengl.WflInfo.glsl_version: Handles CalledProcessError
-            gracefully.
-            """
-            inst.glsl_version
-
-        def test_glsl_es_version(self, inst):
-            """test.opengl.WflInfo.glsl_es_version: Handles CalledProcessError
-            gracefully.
-            """
-            inst.glsl_es_version
-
-
 class TestFastSkipMixin(object):  # pylint: disable=too-many-public-methods
     """Tests for the FastSkipMixin class."""
 
     @pytest.yield_fixture(autouse=True, scope='class')
     def patch(self):
         """Create a Class with FastSkipMixin, but patch various bits."""
-        _mock_wflinfo = mock.Mock(spec=opengl.WflInfo)
+        _mock_wflinfo = mock.Mock(spec=wflinfo.WflInfo)
         _mock_wflinfo.gl_version = 3.3
         _mock_wflinfo.gles_version = 3.0
         _mock_wflinfo.glsl_version = 3.3
@@ -428,7 +75,7 @@ class TestFastSkip(object):
     @pytest.yield_fixture(autouse=True, scope='class')
     def patch(self):
         """Create a Class with FastSkipMixin, but patch various bits."""
-        _mock_wflinfo = mock.Mock(spec=opengl.WflInfo)
+        _mock_wflinfo = mock.Mock(spec=wflinfo.WflInfo)
         _mock_wflinfo.gl_version = 3.3
         _mock_wflinfo.gles_version = 3.0
         _mock_wflinfo.glsl_version = 3.3
@@ -535,7 +182,7 @@ class TestFastSkip(object):
         @pytest.yield_fixture(autouse=True, scope='class')
         def patch(self):
             """Create a Class with FastSkipMixin, but patch various bits."""
-            _mock_wflinfo = mock.Mock(spec=opengl.WflInfo)
+            _mock_wflinfo = mock.Mock(spec=wflinfo.WflInfo)
             _mock_wflinfo.gl_version = None
             _mock_wflinfo.gles_version = None
             _mock_wflinfo.glsl_version = None
@@ -597,7 +244,7 @@ class TestFastSkipMixinDisabled(object):
     @pytest.yield_fixture(autouse=True, scope='class')
     def patch(self):
         """Create a Class with FastSkipMixin, but patch various bits."""
-        _mock_wflinfo = mock.Mock(spec=opengl.WflInfo)
+        _mock_wflinfo = mock.Mock(spec=wflinfo.WflInfo)
         _mock_wflinfo.gl_version = 3.3
         _mock_wflinfo.gles_version = 3.0
         _mock_wflinfo.glsl_version = 3.3
diff --git a/unittests/framework/test_wflinfo.py b/unittests/framework/test_wflinfo.py
new file mode 100644
index 000000000..d7e924e95
--- /dev/null
+++ b/unittests/framework/test_wflinfo.py
@@ -0,0 +1,389 @@
+# Copyright (c) 2015-2016 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+"""Test the wflinfo module."""
+
+from __future__ import (
+    absolute_import, division, print_function, unicode_literals
+)
+import subprocess
+import textwrap
+try:
+    from unittest import mock
+except ImportError:
+    import mock
+
+import pytest
+
+from framework import wflinfo
+
+# pylint: disable=no-self-use,attribute-defined-outside-init,protected-access
+
+
+def _has_wflinfo():
+    """Return True if wflinfo is available in PATH."""
+    try:
+        subprocess.check_call(['wflinfo', '--help'])
+    except subprocess.CalledProcessError:
+        return False
+    except OSError as e:
+        if e.errno != 2:
+            raise
+        return False
+    return True
+
+
+ at pytest.mark.skipif(not _has_wflinfo(), reason="Tests require wflinfo binary.")
+class TestWflInfo(object):
+    """Tests for the WflInfo class."""
+
+    class TestAttributes(object):
+        """test for attribute assignments."""
+
+        @pytest.yield_fixture(autouse=True)
+        def patch(self):
+            """Mock a few things for testing purposes."""
+            # This is pretty ugly, but as a Borb with a private shared state,
+            # the only way to test this module is to actually replace the
+            # shared_state with a mock value so it's reset after each test
+            with mock.patch.dict('framework.wflinfo.OPTIONS.env',
+                                 {'PIGLIT_PLATFORM': 'foo'}), \
+                    mock.patch(
+                        'framework.wflinfo.WflInfo._WflInfo__shared_state',
+                        {}):
+                yield
+
+        def setup(self):
+            """Setup each instance, patching necissary bits."""
+            self._test = wflinfo.WflInfo()
+
+        def test_gl_extension(self):
+            """wflinfo.WflInfo.gl_extensions: Provides list of gl
+            extensions.
+            """
+            rv = (b'foo\nbar\nboink\nOpenGL extensions: '
+                  b'GL_foobar GL_ham_sandwhich\n')
+            expected = set(['GL_foobar', 'GL_ham_sandwhich'])
+
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gl_extensions == expected
+
+        def test_gl_version(self):
+            """wflinfo.WflInfo.gl_version: Provides a version number."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gl
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: 18 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gl_version == 18.0
+
+        def test_gles_version(self):
+            """wflinfo.WflInfo.gles_version: Provides a version number."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gles3
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: OpenGL ES 7.1 Mesa 11.0.4
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gles_version == 7.1
+
+        def test_glsl_version(self):
+            """wflinfo.WflInfo.glsl_version: Provides a version number."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gl
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+                OpenGL shading language version string: 9.30
+                OpenGL extensions: this is some extension strings.
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.glsl_version == 9.3
+
+        def test_glsl_es_version_1(self):
+            """wflinfo.WflInfo.glsl_es_version: works with gles2."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gles2
+                Wflinfo vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: OpenGL ES 3.0 Mesa 11.0.4
+                OpenGL shading language version string: OpenGL ES GLSL ES 1.0.17
+                OpenGL extensions: this is some extension strings.
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.glsl_es_version == 1.0
+
+        def test_glsl_es_version_3plus(self):
+            """wflinfo.WflInfo.glsl_es_version: works with gles3."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gles3
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: OpenGL ES 3.0 Mesa 11.0.4
+                OpenGL shading language version string: OpenGL ES GLSL ES 5.00
+                OpenGL extensions: this is some extension strings.
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.glsl_es_version == 5.0
+
+        def test_gl_version_patch(self):
+            """wflinfo.WflInfo.gl_version: Works with patch versions."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gl
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gl_version == 18.0
+
+        def test_glsl_version_patch(self):
+            """wflinfo.WflInfo.glsl_version: Works with patch versions."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gl
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: 1.1 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+                OpenGL shading language version string: 9.30.7
+                OpenGL extensions: this is some extension strings.
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.glsl_version == 9.3
+
+        def test_leading_junk(self):
+            """wflinfo.WflInfo.gl_version: Handles leading junk."""
+            rv = textwrap.dedent("""\
+                Warning: I'm a big fat warnngs
+                Waffle platform: gbm
+                Waffle api: gl
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gl_version == 18.0
+
+        def test_mixed_junk(self):
+            """wflinfo.WflInfo.gl_version: Handles mixed junk."""
+            rv = textwrap.dedent("""\
+                Waffle platform: gbm
+                Waffle api: gl
+                Warning: I'm a big fat warnngs
+                OpenGL vendor string: Intel Open Source Technology Center
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                Warning: I'm a big fat warnngs
+                Warning: I'm a big fat warnngs
+                OpenGL version string: 18.0.1 (Core Profile) Mesa 11.0.4
+                OpenGL context flags: 0x0
+            """).encode('utf-8')
+            with mock.patch('framework.wflinfo.subprocess.check_output',
+                            mock.Mock(return_value=rv)):
+                assert self._test.gl_version == 18.0
+
+    class TestWAFFLEINFO_GL_ERROR(object):
+        """Test class for WflInfo when "WFLINFO_GL_ERROR" is returned."""
+
+        @pytest.yield_fixture(autouse=True)
+        def patch(self):
+            """Setup each instance, patching necissary bits."""
+            rv = textwrap.dedent("""\
+                Waffle platform: glx
+                Waffle api: gles3
+                OpenGL vendor string: WFLINFO_GL_ERROR
+                OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile
+                OpenGL version string: WFLINFO_GL_ERROR
+                OpenGL context flags: 0x0\n
+                OpenGL shading language version string: WFLINFO_GL_ERROR
+                OpenGL extensions: WFLINFO_GL_ERROR
+            """).encode('utf-8')
+
+            with mock.patch.dict('framework.wflinfo.OPTIONS.env',
+                                 {'PIGLIT_PLATFORM': 'foo'}), \
+                    mock.patch(
+                        'framework.wflinfo.subprocess.check_output',
+                        mock.Mock(return_value=rv)):
+                yield
+
+        @pytest.fixture(scope='class')
+        def inst(self):
+            return wflinfo.WflInfo()
+
+        def test_gl_version(self, inst):
+            """wflinfo.WflInfo.gl_version: handles WFLINFO_GL_ERROR
+            correctly.
+            """
+            assert inst.gl_version is None
+
+        def test_gles_version(self, inst):
+            """wflinfo.WflInfo.gles_version: handles WFLINFO_GL_ERROR
+            correctly.
+            """
+            assert inst.gles_version is None
+
+        def test_glsl_version(self, inst):
+            """wflinfo.WflInfo.glsl_version: handles WFLINFO_GL_ERROR
+            correctly.
+            """
+            assert inst.glsl_version is None
+
+        def test_glsl_es_version(self, inst):
+            """wflinfo.WflInfo.glsl_es_version: handles WFLINFO_GL_ERROR
+            correctly.
+            """
+            assert inst.glsl_es_version is None
+
+        def test_gl_extensions(self, inst):
+            """wflinfo.WflInfo.gl_extensions: handles WFLINFO_GL_ERROR
+            correctly.
+            """
+            assert inst.gl_extensions == set()
+
+    class TestOSError(object):
+        """Tests for the Wflinfo functions to handle OSErrors."""
+
+        # pylint: disable=pointless-statement
+
+        @pytest.yield_fixture(autouse=True, scope='class')
+        def patch(self):
+            """Setup the class, patching as necessary."""
+            # pylint: disable=bad-continuation
+            with mock.patch.dict(
+                    'framework.wflinfo.OPTIONS.env',
+                    {'PIGLIT_PLATFORM': 'foo'}), \
+                    mock.patch(
+                        'framework.wflinfo.subprocess.check_output',
+                        mock.Mock(side_effect=OSError(2, 'foo'))), \
+                    mock.patch(
+                        'framework.wflinfo.WflInfo._WflInfo__shared_state',
+                        {}):
+                yield
+
+        @pytest.fixture
+        def inst(self):
+            return wflinfo.WflInfo()
+
+        def test_gl_extensions(self, inst):
+            """wflinfo.WflInfo.gl_extensions: Handles OSError "no file"
+            gracefully.
+            """
+            inst.gl_extensions
+
+        def test_gl_version(self, inst):
+            """wflinfo.WflInfo.get_gl_version: Handles OSError "no file"
+            gracefull.
+            """
+            inst.gl_version
+
+        def test_gles_version(self, inst):
+            """wflinfo.WflInfo.get_gles_version: Handles OSError "no file"
+            gracefully.
+            """
+            inst.gles_version
+
+        def test_glsl_version(self, inst):
+            """wflinfo.WflInfo.glsl_version: Handles OSError "no file"
+            gracefully.
+            """
+            inst.glsl_version
+
+        def test_glsl_es_version(self, inst):
+            """wflinfo.WflInfo.glsl_es_version: Handles OSError "no file"
+            gracefully.
+            """
+            inst.glsl_es_version
+
+    class TestCalledProcessError(object):
+        """Tests for the WflInfo functions to handle OSErrors."""
+
+        # pylint: disable=pointless-statement
+
+        @pytest.yield_fixture(autouse=True, scope='class')
+        def patch(self):
+            """Setup the class, patching as necessary."""
+            # pylint: disable=bad-continuation
+            with mock.patch.dict(
+                    'framework.wflinfo.OPTIONS.env',
+                    {'PIGLIT_PLATFORM': 'foo'}), \
+                    mock.patch(
+                        # pylint: disable=line-too-long
+                        'framework.wflinfo.subprocess.check_output',
+                        mock.Mock(side_effect=subprocess.CalledProcessError(1, 'foo'))), \
+                    mock.patch(
+                        'framework.wflinfo.WflInfo._WflInfo__shared_state',
+                        {}):
+                yield
+
+        @pytest.fixture
+        def inst(self):
+            return wflinfo.WflInfo()
+
+        def test_gl_extensions(self, inst):
+            """wflinfo.WflInfo.gl_extensions: Handles CalledProcessError
+            gracefully.
+            """
+            inst.gl_extensions
+
+        def test_gl_version(self, inst):
+            """wflinfo.WflInfo.get_gl_version: Handles CalledProcessError
+            gracefully.
+            """
+            inst.gl_version
+
+        def test_gles_version(self, inst):
+            """wflinfo.WflInfo.gles_version: Handles CalledProcessError
+            gracefully.
+            """
+            inst.gles_version
+
+        def test_glsl_version(self, inst):
+            """wflinfo.WflInfo.glsl_version: Handles CalledProcessError
+            gracefully.
+            """
+            inst.glsl_version
+
+        def test_glsl_es_version(self, inst):
+            """wflinfo.WflInfo.glsl_es_version: Handles CalledProcessError
+            gracefully.
+            """
+            inst.glsl_es_version
-- 
2.14.2



More information about the Piglit mailing list