[Piglit] [PATCH 14/15] framework: Plug in fast-skipping to MultiShaderTest
Dylan Baker
dylan at pnwbakers.com
Fri Sep 9 19:18:52 UTC 2016
This adds fast-skipping support to the MultiShaderTest class. Both
patches seemed significant enough to warrant splitting them in two.
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
framework/test/base.py | 8 +++++-
framework/test/shader_test.py | 49 +++++++++++++++++++++++++++---------
2 files changed, 44 insertions(+), 13 deletions(-)
diff --git a/framework/test/base.py b/framework/test/base.py
index 224ca61..5f0491d 100644
--- a/framework/test/base.py
+++ b/framework/test/base.py
@@ -467,11 +467,17 @@ class ReducedProcessMixin(object):
"""
def __init__(self, command, subtests=None, **kwargs):
- assert subtests # This covers both "not None" and len(subtests) > 1
+ assert subtests is not None
super(ReducedProcessMixin, self).__init__(command, **kwargs)
self._expected = subtests
self._populate_subtests()
+ def is_skip(self):
+ """Skip if the length of expected is 0."""
+ if not self._expected:
+ raise TestIsSkip('All subtests skipped')
+ super(ReducedProcessMixin, self).is_skip()
+
def __find_sub(self):
"""Helper for getting the next index."""
return len([l for l in self.result.out.split('\n')
diff --git a/framework/test/shader_test.py b/framework/test/shader_test.py
index e72e2ec..447e8c0 100644
--- a/framework/test/shader_test.py
+++ b/framework/test/shader_test.py
@@ -32,8 +32,8 @@ import re
from framework import exceptions
from framework import status
-from .base import ReducedProcessMixin
-from .opengl import FastSkipMixin
+from .base import ReducedProcessMixin, TestIsSkip
+from .opengl import FastSkipMixin, FastSkip
from .piglit_test import PiglitBaseTest
__all__ = [
@@ -185,24 +185,49 @@ class MultiShaderTest(ReducedProcessMixin, PiglitBaseTest):
"""
def __init__(self, filenames):
- # TODO fast skip.
- parser = Parser(filenames[0])
- parser.parse()
- prog = parser.prog
- files = [parser.filename]
-
- for each in filenames[1:]:
+ assert filenames
+ prog = None
+ files = []
+ subtests = []
+ skips = []
+
+ # Walk each subtest, and either add it to the list of tests to run, or
+ # determine it is skip, and set the result of that test in the subtests
+ # dictionary to skip without adding it ot the liest of tests to run
+ for each in filenames:
parser = Parser(each)
parser.parse()
- assert parser.prog == prog
+ subtest = os.path.basename(os.path.splitext(each)[0]).lower()
+
+ if prog is not None:
+ assert parser.prog == prog
+ else:
+ prog = parser.prog
+
+ try:
+ skipper = FastSkip(gl_required=parser.gl_required,
+ gl_version=parser.gl_version,
+ gles_version=parser.gles_version,
+ glsl_version=parser.glsl_version,
+ glsl_es_version=parser.glsl_es_version)
+ skipper.test()
+ except TestIsSkip:
+ skips.append(subtest)
+ continue
files.append(parser.filename)
+ subtests.append(subtest)
+
+ assert len(subtests) + len(skips) == len(filenames), \
+ 'not all tests accounted for'
super(MultiShaderTest, self).__init__(
[prog] + files,
- subtests=[os.path.basename(os.path.splitext(f)[0]).lower()
- for f in filenames],
+ subtests=subtests,
run_concurrent=True)
+ for name in skips:
+ self.result.subtests[name] = status.SKIP
+
@PiglitBaseTest.command.getter # pylint: disable=no-member
def command(self):
"""Add -auto to the test command."""
--
git-series 0.8.10
More information about the Piglit
mailing list