[Lldb-commits] [lldb] r175523 - Minor test runner improvemenst

Daniel Malea daniel.malea at intel.com
Tue Feb 19 08:08:58 PST 2013


Author: dmalea
Date: Tue Feb 19 10:08:57 2013
New Revision: 175523

URL: http://llvm.org/viewvc/llvm-project?rev=175523&view=rev
Log:
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


Modified:
    lldb/trunk/test/functionalities/command_script/TestCommandScript.py
    lldb/trunk/test/lldbtest.py
    lldb/trunk/test/python_api/process/io/TestProcessIO.py
    lldb/trunk/test/python_api/value/change_values/TestChangeValueAPI.py

Modified: lldb/trunk/test/functionalities/command_script/TestCommandScript.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/command_script/TestCommandScript.py?rev=175523&r1=175522&r2=175523&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/command_script/TestCommandScript.py (original)
+++ lldb/trunk/test/functionalities/command_script/TestCommandScript.py Tue Feb 19 10:08:57 2013
@@ -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")

Modified: lldb/trunk/test/lldbtest.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbtest.py?rev=175523&r1=175522&r2=175523&view=diff
==============================================================================
--- lldb/trunk/test/lldbtest.py (original)
+++ lldb/trunk/test/lldbtest.py Tue Feb 19 10:08:57 2013
@@ -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:

Modified: lldb/trunk/test/python_api/process/io/TestProcessIO.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/process/io/TestProcessIO.py?rev=175523&r1=175522&r2=175523&view=diff
==============================================================================
--- lldb/trunk/test/python_api/process/io/TestProcessIO.py (original)
+++ lldb/trunk/test/python_api/process/io/TestProcessIO.py Tue Feb 19 10:08:57 2013
@@ -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."

Modified: lldb/trunk/test/python_api/value/change_values/TestChangeValueAPI.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/value/change_values/TestChangeValueAPI.py?rev=175523&r1=175522&r2=175523&view=diff
==============================================================================
--- lldb/trunk/test/python_api/value/change_values/TestChangeValueAPI.py (original)
+++ lldb/trunk/test/python_api/value/change_values/TestChangeValueAPI.py Tue Feb 19 10:08:57 2013
@@ -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)





More information about the lldb-commits mailing list