From: Dylan Baker <[email protected]> This allows the command to be overwritten or modified after instantiation, which is useful for adding additional arguments in a profile.
Signed-off-by: Dylan Baker <[email protected]> --- framework/test/base.py | 5 ++++ framework/test/gleantest.py | 4 +++ framework/test/piglit_test.py | 4 +++ framework/test/shader_test.py | 4 +++ unittests/framework/backends/test_json.py | 5 ++++ unittests/framework/test/test_gleantest.py | 12 +++++++++ unittests/framework/test/test_piglit_test.py | 8 ++++++ unittests/framework/test/test_shader_test.py | 38 +++++++++++++++++++--------- 8 files changed, 68 insertions(+), 12 deletions(-) diff --git a/framework/test/base.py b/framework/test/base.py index 4e7c8b2..d73dee9 100644 --- a/framework/test/base.py +++ b/framework/test/base.py @@ -218,20 +218,25 @@ class Test(object): log.log(self.result.result) else: log.log('dry-run') @property def command(self): assert self._command return self._command + @command.setter + def command(self, new): + assert isinstance(new, list), 'Test.command must be a list' + self._command = new + @abc.abstractmethod def interpret_result(self): """Convert the raw output of the test into a form piglit understands. """ if is_crash_returncode(self.result.returncode): self.result.result = 'crash' elif self.result.returncode != 0: if self.result.result == 'pass': self.result.result = 'warn' else: diff --git a/framework/test/gleantest.py b/framework/test/gleantest.py index 3d0c2ef..b2d56f3 100644 --- a/framework/test/gleantest.py +++ b/framework/test/gleantest.py @@ -49,20 +49,24 @@ class GleanTest(Test): def __init__(self, name, **kwargs): super(GleanTest, self).__init__( [self._EXECUTABLE, "-o", "-v", "-v", "-v", "-t", "+" + name], **kwargs) @Test.command.getter def command(self): return super(GleanTest, self).command + self.GLOBAL_PARAMS + @Test.command.setter + def command(self, new): + self._command = [n for n in new if not n in self.GLOBAL_PARAMS] + def interpret_result(self): if self.result.returncode != 0 or 'FAIL' in self.result.out: self.result.result = 'fail' else: self.result.result = 'pass' super(GleanTest, self).interpret_result() def is_skip(self): # Glean tests require glx if options.OPTIONS.env['PIGLIT_PLATFORM'] not in ['glx', 'mixed_glx_egl']: diff --git a/framework/test/piglit_test.py b/framework/test/piglit_test.py index 571464b..491f3d3 100644 --- a/framework/test/piglit_test.py +++ b/framework/test/piglit_test.py @@ -147,19 +147,23 @@ class PiglitGLTest(WindowResizeMixin, PiglitBaseTest): super(PiglitGLTest, self).is_skip() @PiglitBaseTest.command.getter def command(self): """ Automatically add -auto and -fbo as appropriate """ if not self.run_concurrent: return super(PiglitGLTest, self).command + ['-auto'] else: return super(PiglitGLTest, self).command + ['-auto', '-fbo'] + @command.setter + def command(self, new): + self._command = [n for n in new if n not in ['-auto', '-fbo']] + class PiglitCLTest(PiglitBaseTest): # pylint: disable=too-few-public-methods """ OpenCL specific Test class. Set concurrency based on CL requirements. """ def __init__(self, command, run_concurrent=CL_CONCURRENT, **kwargs): super(PiglitCLTest, self).__init__(command, run_concurrent, **kwargs) diff --git a/framework/test/shader_test.py b/framework/test/shader_test.py index d98ec98..3e67cbd 100644 --- a/framework/test/shader_test.py +++ b/framework/test/shader_test.py @@ -165,20 +165,24 @@ class ShaderTest(FastSkipMixin, PiglitBaseTest): gl_version=parser.gl_version, gles_version=parser.gles_version, glsl_version=parser.glsl_version, glsl_es_version=parser.glsl_es_version) @PiglitBaseTest.command.getter def command(self): """ Add -auto and -fbo to the test command """ return self._command + ['-auto', '-fbo'] + @command.setter + def command(self, new): + self._command = [n for n in new if n not in ['-auto', '-fbo']] + class MultiShaderTest(ReducedProcessMixin, PiglitBaseTest): """A Shader class that can run more than one test at a time. This class can call shader_runner with multiple shader_files at a time, and interpret the results, as well as handle pre-mature exit through crashes or from breaking import assupmtions in the utils about skipping. Arguments: filenames -- a list of absolute paths to shader test files diff --git a/unittests/framework/backends/test_json.py b/unittests/framework/backends/test_json.py index e23bc29..8c2623c 100644 --- a/unittests/framework/backends/test_json.py +++ b/unittests/framework/backends/test_json.py @@ -182,22 +182,27 @@ class TestResume(object): t(results.TestResult('fail')) with backend.write_test("group1/test2") as t: t(results.TestResult('pass')) with backend.write_test("group2/test3") as t: t(results.TestResult('fail')) test = backends.json._resume(six.text_type(tmpdir)) assert set(test.tests.keys()) == \ {'group1/test1', 'group1/test2', 'group2/test3'} + @pytest.mark.xfail def test_load_invalid_folder(self, tmpdir): """backends.json._resume: ignores invalid results""" + # XXX: I'm not sure if this test is worth fixing or not, it would + # involve a lot of code, and for this case to actually be tripped a + # user would have to write a file into the tests directory that isn't a + # number f = six.text_type(tmpdir) backend = backends.json.JSONBackend(f) backend.initialize(shared.INITIAL_METADATA) with backend.write_test("group1/test1") as t: t(results.TestResult('fail')) with backend.write_test("group1/test2") as t: t(results.TestResult('pass')) with backend.write_test("group2/test3") as t: t(results.TestResult('fail')) with open(os.path.join(f, 'tests', 'x.json'), 'w') as w: diff --git a/unittests/framework/test/test_gleantest.py b/unittests/framework/test/test_gleantest.py index 59fb1e8..b9122d2 100644 --- a/unittests/framework/test/test_gleantest.py +++ b/unittests/framework/test/test_gleantest.py @@ -25,20 +25,21 @@ from __future__ import ( ) import pytest from framework.options import _Options as Options from framework import status from framework.test import GleanTest from framework.test.base import TestIsSkip as _TestIsSkip # make py.test happy # pylint: disable=invalid-name +# pylint: disable=protected-access def test_GLOBAL_PARAMS_assignment(): """test.gleantest.GleanTest: GLOBAL_PARAMS apply to instances created after GLABL_PARAMS is set. Specifically this tests for a bug where GLOBAL_PARAMS only affected instances of GleanTest created after GLOBAL_PARAMS were set, so changing the GLOBAL_PARAMS value had unexpected results. @@ -47,20 +48,31 @@ def test_GLOBAL_PARAMS_assignment(): after. A failure means the that GLOBAL_PARAMS are not being added to tests initialized before it is set. """ test1 = GleanTest('basic') GleanTest.GLOBAL_PARAMS = ['--quick'] test2 = GleanTest('basic') assert test1.command == test2.command +def test_global_params_setter(): + """Values from self.GLOBAL_ARGS are not pushed into self._command by a + setter. + """ + test = GleanTest('basic') + GleanTest.GLOBAL_PARAMS = ['--quick'] + test.command += '-foo' + assert '--quick' not in test._command + + + def test_bad_returncode(): """test.gleantest.GleanTest: If returncode is 0 the result is 'fail'. Currently glean returns 127 if piglit can't find it's libs (LD_LIBRARY_PATH isn't set properly), and then marks such tests as pass, when they obviously are not. """ test = GleanTest('basic') test.result.returncode = 1 diff --git a/unittests/framework/test/test_piglit_test.py b/unittests/framework/test/test_piglit_test.py index 288f738..9c769a6 100644 --- a/unittests/framework/test/test_piglit_test.py +++ b/unittests/framework/test/test_piglit_test.py @@ -31,20 +31,21 @@ except ImportError: import pytest from framework import status from framework.options import _Options as Options from framework.test.base import TestIsSkip as _TestIsSkip from framework.test.piglit_test import PiglitBaseTest, PiglitGLTest # pylint: disable=no-self-use +# pylint: disable=protected-access class TestPiglitBaseTest(object): """Tests for the PiglitBaseTest class.""" class TestIntepretResult(object): """Tests for PiglitBaseTest.interpret_results.""" def test_basic(self): """A basic sanity test with nothing tricky.""" @@ -112,20 +113,27 @@ class TestPiglitGLTest(object): """adds -auto to serial tests.""" test = PiglitGLTest(['foo']) assert '-auto' in test.command def test_getter_concurrent(self): """adds -fbo and -auto to concurrent tests.""" test = PiglitGLTest(['foo'], run_concurrent=True) assert '-auto' in test.command assert '-fbo' in test.command + def test_setter_no_add_auto(self): + """Doesn't add -fbo or -auto when setting.""" + test = PiglitGLTest(['foo'], run_concurrent=True) + test.command += ['bar'] + assert '-auto' not in test._command + assert '-fbo' not in test._command + class TestIsSkip(object): """Tests for the is_skip method and the constructor logic to make it work. """ @pytest.yield_fixture() def mock_options(self): with mock.patch('framework.test.piglit_test.options.OPTIONS', new_callable=Options) as m: yield m diff --git a/unittests/framework/test/test_shader_test.py b/unittests/framework/test/test_shader_test.py index 5484dca..1637231 100644 --- a/unittests/framework/test/test_shader_test.py +++ b/unittests/framework/test/test_shader_test.py @@ -28,21 +28,21 @@ import textwrap try: import mock except ImportError: from unittest import mock import pytest import six from framework.test import shader_test -# pylint: disable=invalid-name,no-self-use +# pylint: disable=invalid-name,no-self-use,protected-access class _Setup(object): def __init__(self): self.__patchers = [] self.__patchers.append(mock.patch.dict( 'framework.test.base.OPTIONS.env', {'PIGLIT_PLATFORM': 'foo'})) def setup(self, _): @@ -185,31 +185,46 @@ class TestConfigParsing(object): GL_MAX_VARYING_COMPONENTS GL_ARB_foobar """)) test = shader_test.ShaderTest(six.text_type(p)) assert test.gl_version == 3.3 assert test.glsl_version == 1.50 assert test.gl_required == {'GL_ARB_foobar'} -def test_command_add_auto(tmpdir): - """test.shader_test.ShaderTest: -auto is added to the command.""" - p = tmpdir.join('test.shader_test') - p.write(textwrap.dedent("""\ - [require] - GL ES >= 3.0 - GLSL ES >= 3.00 es - """)) - test = shader_test.ShaderTest(six.text_type(p)) +class TestCommand(object): + """Tests for the command property.""" - assert '-auto' in test.command + @pytest.fixture(scope='class') + def test_file(self, tmpdir_factory): + p = tmpdir_factory.mktemp('shader-test-command').join('test.shader_test') + p.write(textwrap.dedent("""\ + [require] + GL ES >= 3.0 + GLSL ES >= 3.00 es + """)) + return six.text_type(p) + + def test_getter_adds_auto_and_fbo(self, test_file): + """test.shader_test.ShaderTest: -auto and -fbo is added to the command. + """ + test = shader_test.ShaderTest(test_file) + assert '-auto' in test.command + assert '-fbo' in test.command + + def test_setter_doesnt_add_auto_and_fbo(self, test_file): + """Don't add -fbo or -auto to self._command when using the setter.""" + test = shader_test.ShaderTest(test_file) + test.command += ['-newarg'] + assert '-auto' not in test._command + assert '-fbo' not in test._command class TestMultiShaderTest(object): """Tests for the MultiShaderTest class.""" class TestConstructor(object): """Tests for the constructor object.""" @pytest.fixture def inst(self, tmpdir): @@ -257,11 +272,10 @@ class TestMultiShaderTest(object): [vertex shader]""")) return shader_test.MultiShaderTest( [six.text_type(one), six.text_type(two)]) def test_resume(self, inst): actual = inst._resume(1) # pylint: disable=protected-access assert os.path.basename(actual[0]) == 'shader_runner' assert os.path.basename(actual[1]) == 'bar.shader_test' assert os.path.basename(actual[2]) == '-auto' - -- 2.9.3 _______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
