summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Malea <daniel.malea@intel.com>2013-02-19 16:08:57 +0000
committerDaniel Malea <daniel.malea@intel.com>2013-02-19 16:08:57 +0000
commit249287afdea3bb7761d1f3e93fcf3a3b5bc8d18e (patch)
treefb95ec034e532e57b72fd14953024d164819c02a
parenta9b732a32ad666cbc2bdd2b843d77c1c15576878 (diff)
downloadbcm5719-llvm-249287afdea3bb7761d1f3e93fcf3a3b5bc8d18e.tar.gz
bcm5719-llvm-249287afdea3bb7761d1f3e93fcf3a3b5bc8d18e.zip
Minor test runner improvemenst
- rework the way SBDebugger.SetAsync() is used to avoid side effects (reset original value at TearDownHook) - refactor expectedFailureClang (and add expectedFailureGcc decorator) - mark TestChangeValueAPI.py as expectedFailureGcc due to PR-15039 llvm-svn: 175523
-rw-r--r--lldb/test/functionalities/command_script/TestCommandScript.py5
-rw-r--r--lldb/test/lldbtest.py29
-rw-r--r--lldb/test/python_api/process/io/TestProcessIO.py4
-rw-r--r--lldb/test/python_api/value/change_values/TestChangeValueAPI.py1
4 files changed, 32 insertions, 7 deletions
diff --git a/lldb/test/functionalities/command_script/TestCommandScript.py b/lldb/test/functionalities/command_script/TestCommandScript.py
index bcc87ba062a..808f46b8046 100644
--- a/lldb/test/functionalities/command_script/TestCommandScript.py
+++ b/lldb/test/functionalities/command_script/TestCommandScript.py
@@ -44,6 +44,9 @@ class CmdPythonTestCase(TestBase):
# Execute the cleanup function during test case tear down.
self.addTearDownHook(cleanup)
+ # Interact with debugger in synchronous mode
+ self.setAsync(False)
+
# We don't want to display the stdout if not in TraceOn() mode.
if not self.TraceOn():
self.HideStdout()
@@ -106,7 +109,7 @@ class CmdPythonTestCase(TestBase):
self.expect("tell_async",
substrs = ['running async'])
self.expect("tell_curr",
- substrs = ['I am running','sync'])
+ substrs = ['I am running sync'])
self.runCmd("command script clear")
diff --git a/lldb/test/lldbtest.py b/lldb/test/lldbtest.py
index af71627b545..a1a386436cf 100644
--- a/lldb/test/lldbtest.py
+++ b/lldb/test/lldbtest.py
@@ -368,27 +368,40 @@ def dwarf_test(func):
wrapper.__dwarf_test__ = True
return wrapper
-def expectedFailureClang(func):
- """Decorate the item as a Clang only expectedFailure."""
+def expectedFailureCompiler(func, compiler):
+ """Decorate the item as an expectedFailure if the test compiler matches parameter compiler."""
if isinstance(func, type) and issubclass(func, unittest2.TestCase):
raise Exception("@expectedFailureClang can only be used to decorate a test method")
@wraps(func)
def wrapper(*args, **kwargs):
from unittest2 import case
self = args[0]
- compiler = self.getCompiler()
+ test_compiler = self.getCompiler()
try:
func(*args, **kwargs)
except Exception:
- if "clang" in compiler:
+ if compiler in test_compiler:
raise case._ExpectedFailure(sys.exc_info())
else:
raise
- if "clang" in compiler:
+ if compiler in test_compiler:
raise case._UnexpectedSuccess
return wrapper
+
+def expectedFailureGcc(func):
+ """Decorate the item as a GCC only expectedFailure."""
+ if isinstance(func, type) and issubclass(func, unittest2.TestCase):
+ raise Exception("@expectedFailureClang can only be used to decorate a test method")
+ return expectedFailureCompiler(func, "gcc")
+
+def expectedFailureClang(func):
+ """Decorate the item as a Clang only expectedFailure."""
+ if isinstance(func, type) and issubclass(func, unittest2.TestCase):
+ raise Exception("@expectedFailureClang can only be used to decorate a test method")
+ return expectedFailureCompiler(func, "clang")
+
def expectedFailurei386(func):
"""Decorate the item as an i386 only expectedFailure."""
if isinstance(func, type) and issubclass(func, unittest2.TestCase):
@@ -670,6 +683,12 @@ class Base(unittest2.TestCase):
child.sendline(hook)
child.expect_exact(child_prompt)
+ def setAsync(self, value):
+ """ Sets async mode to True/False and ensures it is reset after the testcase completes."""
+ old_async = self.dbg.GetAsync()
+ self.dbg.SetAsync(value)
+ self.addTearDownHook(lambda: self.dbg.SetAsync(old_async))
+
def cleanupSubprocesses(self):
# Ensure any subprocesses are cleaned up
for p in self.subprocesses:
diff --git a/lldb/test/python_api/process/io/TestProcessIO.py b/lldb/test/python_api/process/io/TestProcessIO.py
index 4d6a0221d3e..1096bce85a5 100644
--- a/lldb/test/python_api/process/io/TestProcessIO.py
+++ b/lldb/test/python_api/process/io/TestProcessIO.py
@@ -35,7 +35,9 @@ class ProcessIOTestCase(TestBase):
target = self.dbg.CreateTarget(self.exe)
- self.dbg.SetAsync(True)
+ # Perform synchronous interaction with the debugger.
+ self.setAsync(True)
+
process = target.LaunchSimple(None, None, os.getcwd())
if self.TraceOn():
print "process launched."
diff --git a/lldb/test/python_api/value/change_values/TestChangeValueAPI.py b/lldb/test/python_api/value/change_values/TestChangeValueAPI.py
index 26f849b6190..fb5c294fe76 100644
--- a/lldb/test/python_api/value/change_values/TestChangeValueAPI.py
+++ b/lldb/test/python_api/value/change_values/TestChangeValueAPI.py
@@ -40,6 +40,7 @@ class ChangeValueAPITestCase(TestBase):
self.line = line_number('main.c', '// Stop here and set values')
self.end_line = line_number ('main.c', '// Set a breakpoint here at the end')
+ @expectedFailureGcc # PR-15039: If GCC is the test compiler, stdout is not available via lldb.SBProcess.GetSTDOUT()
def change_value_api(self, exe_name):
"""Exercise some SBValue APIs."""
exe = os.path.join(os.getcwd(), exe_name)
OpenPOWER on IntegriCloud