From: Daniel Malea Date: Tue, 19 Feb 2013 16:08:57 +0000 (+0000) Subject: Minor test runner improvemenst X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=249287afdea3bb7761d1f3e93fcf3a3b5bc8d18e;p=platform%2Fupstream%2Fllvm.git 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 --- diff --git a/lldb/test/functionalities/command_script/TestCommandScript.py b/lldb/test/functionalities/command_script/TestCommandScript.py index bcc87ba..808f46b 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 af71627..a1a3864 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 4d6a022..1096bce 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 26f849b..fb5c294 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)