Fixes: edc41a1db ("framework: move WflInfo class into new wflinfo.py module")
Cc: Brian Paul <bri...@vmware.com> Cc: Dylan Baker <dylanx.c.ba...@intel.com> Signed-off-by: Andres Gomez <ago...@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 - - -@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 + + +@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 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit