[Piglit] [Patch v2 08/11] framework: Move Test from core to exectest
Dylan Baker
baker.dylan.c at gmail.com
Thu Mar 27 15:34:01 PDT 2014
Since Test is exclusively used as a parent for ExecTest, the two classes
should be in the same module.
Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
---
framework/core.py | 70 --------------------------------------
framework/exectest.py | 72 +++++++++++++++++++++++++++++++++++++++-
framework/tests/core_tests.py | 2 +-
framework/tests/exectest_test.py | 15 +++++++--
4 files changed, 84 insertions(+), 75 deletions(-)
diff --git a/framework/core.py b/framework/core.py
index 5f5cf86..86ed993 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -29,8 +29,6 @@ import platform
import re
import subprocess
import sys
-import time
-import traceback
from cStringIO import StringIO
import multiprocessing
import multiprocessing.dummy
@@ -55,7 +53,6 @@ __all__ = ['PIGLIT_CONFIG',
'TestResult',
'TestProfile',
'Group',
- 'Test',
'testBinDir']
@@ -410,73 +407,6 @@ class Environment:
return result
-class Test(object):
- def __init__(self, runConcurrent=False):
- '''
- 'runConcurrent' controls whether this test will
- execute it's work (i.e. __doRunWork) on the calling thread
- (i.e. the main thread) or from the ConcurrentTestPool threads.
- '''
- self.runConcurrent = runConcurrent
- self.skip_test = False
-
- # This is a hook for doing some testing on execute right before
- # self.run is called.
- self._test_hook_execute_run = lambda: None
-
- def run(self):
- raise NotImplementedError
-
- def execute(self, env, path, log, json_writer, dmesg):
- '''
- Run the test.
-
- :path:
- Fully qualified test name as a string. For example,
- ``spec/glsl-1.30/preprocessor/compiler/keywords/void.frag``.
- '''
- log_current = log.pre_log(path if env.verbose else None)
-
- # Run the test
- if env.execute:
- try:
- time_start = time.time()
- dmesg.update_dmesg()
- self._test_hook_execute_run()
- result = self.run(env)
- result = dmesg.update_result(result)
- time_end = time.time()
- if 'time' not in result:
- result['time'] = time_end - time_start
- if 'result' not in result:
- result['result'] = 'fail'
- if not isinstance(result, TestResult):
- result = TestResult(result)
- result['result'] = 'warn'
- result['note'] = 'Result not returned as an instance ' \
- 'of TestResult'
- except:
- result = TestResult()
- result['result'] = 'fail'
- result['exception'] = str(sys.exc_info()[0]) + \
- str(sys.exc_info()[1])
- result['traceback'] = \
- "".join(traceback.format_tb(sys.exc_info()[2]))
-
- log.log(path, result['result'])
- log.post_log(log_current, result['result'])
-
- if 'subtest' in result and len(result['subtest']) > 1:
- for test in result['subtest']:
- result['result'] = result['subtest'][test]
- json_writer.write_dict_item(os.path.join(path, test), result)
- else:
- json_writer.write_dict_item(path, result)
- else:
- log.log(path, 'dry-run')
- log.post_log(log_current, 'dry-run')
-
-
class Group(dict):
pass
diff --git a/framework/exectest.py b/framework/exectest.py
index 4f88dbc..aef4197 100644
--- a/framework/exectest.py
+++ b/framework/exectest.py
@@ -24,8 +24,11 @@ import errno
import os
import subprocess
import shlex
+import time
+import sys
+import traceback
-from .core import Test, testBinDir, TestResult
+from .core import testBinDir, TestResult
# Platform global variables
@@ -35,6 +38,73 @@ else:
PIGLIT_PLATFORM = ''
+class Test(object):
+ def __init__(self, runConcurrent=False):
+ '''
+ 'runConcurrent' controls whether this test will
+ execute it's work (i.e. __doRunWork) on the calling thread
+ (i.e. the main thread) or from the ConcurrentTestPool threads.
+ '''
+ self.runConcurrent = runConcurrent
+ self.skip_test = False
+
+ # This is a hook for doing some testing on execute right before
+ # self.run is called.
+ self._test_hook_execute_run = lambda: None
+
+ def run(self):
+ raise NotImplementedError
+
+ def execute(self, env, path, log, json_writer, dmesg):
+ '''
+ Run the test.
+
+ :path:
+ Fully qualified test name as a string. For example,
+ ``spec/glsl-1.30/preprocessor/compiler/keywords/void.frag``.
+ '''
+ log_current = log.pre_log(path if env.verbose else None)
+
+ # Run the test
+ if env.execute:
+ try:
+ time_start = time.time()
+ dmesg.update_dmesg()
+ self._test_hook_execute_run()
+ result = self.run(env)
+ result = dmesg.update_result(result)
+ time_end = time.time()
+ if 'time' not in result:
+ result['time'] = time_end - time_start
+ if 'result' not in result:
+ result['result'] = 'fail'
+ if not isinstance(result, TestResult):
+ result = TestResult(result)
+ result['result'] = 'warn'
+ result['note'] = 'Result not returned as an instance ' \
+ 'of TestResult'
+ except:
+ result = TestResult()
+ result['result'] = 'fail'
+ result['exception'] = str(sys.exc_info()[0]) + \
+ str(sys.exc_info()[1])
+ result['traceback'] = \
+ "".join(traceback.format_tb(sys.exc_info()[2]))
+
+ log.log(path, result['result'])
+ log.post_log(log_current, result['result'])
+
+ if 'subtest' in result and len(result['subtest']) > 1:
+ for test in result['subtest']:
+ result['result'] = result['subtest'][test]
+ json_writer.write_dict_item(os.path.join(path, test), result)
+ else:
+ json_writer.write_dict_item(path, result)
+ else:
+ log.log(path, 'dry-run')
+ log.post_log(log_current, 'dry-run')
+
+
# ExecTest: A shared base class for tests that simply runs an executable.
class ExecTest(Test):
def __init__(self, command):
diff --git a/framework/tests/core_tests.py b/framework/tests/core_tests.py
index f63184e..4fa9296 100644
--- a/framework/tests/core_tests.py
+++ b/framework/tests/core_tests.py
@@ -49,7 +49,7 @@ def test_generate_initialize():
"""
yieldable = check_initialize
- for target in [core.TestProfile, core.Group, core.Test, core.Environment,
+ for target in [core.TestProfile, core.Group, core.Environment,
core.TestrunResult, core.TestResult,
core.PiglitJSONEncoder]:
yieldable.description = "Test that {} initializes".format(
diff --git a/framework/tests/exectest_test.py b/framework/tests/exectest_test.py
index 6c22a07..064edcf 100644
--- a/framework/tests/exectest_test.py
+++ b/framework/tests/exectest_test.py
@@ -20,10 +20,19 @@
""" Tests for the exectest module """
-from framework.exectest import PlainExecTest
+from framework.exectest import PlainExecTest, ExecTest, Test
+
+
+def test_initialize_test():
+ """ Test initializes """
+ Test('/bin/true')
+
+
+def test_initialize_exectest():
+ """ ExecTest initializes """
+ ExecTest('/bin/true')
def test_initialize_plainexectest():
""" Test that PlainExecTest initializes correctly """
- test = PlainExecTest('/bin/true')
- assert test
+ PlainExecTest('/bin/true')
--
1.9.1
More information about the Piglit
mailing list