diff options
-rw-r--r-- | lldb/test/array_types/TestArrayTypes.py | 31 | ||||
-rw-r--r-- | lldb/test/class_types/TestClassTypes.py | 31 | ||||
-rwxr-xr-x | lldb/test/dotest.pl | 4 | ||||
-rwxr-xr-x | lldb/test/dotest.py | 9 | ||||
-rw-r--r-- | lldb/test/function_types/TestFunctionTypes.py | 33 | ||||
-rw-r--r-- | lldb/test/global_variables/TestGlobalVariables.py | 31 | ||||
-rw-r--r-- | lldb/test/help/TestHelp.py | 29 | ||||
-rw-r--r-- | lldb/test/lldbtest.py | 75 |
8 files changed, 108 insertions, 135 deletions
diff --git a/lldb/test/array_types/TestArrayTypes.py b/lldb/test/array_types/TestArrayTypes.py index 0afa058dcdb..35a75204814 100644 --- a/lldb/test/array_types/TestArrayTypes.py +++ b/lldb/test/array_types/TestArrayTypes.py @@ -1,37 +1,17 @@ """Test breakpoint by file/line number; and list variables with array types.""" import os, time -import lldb import unittest +import lldb +import lldbtest -main = False - -class TestArrayTypes(unittest.TestCase): - - def setUp(self): - global main - - # Save old working directory. - self.oldcwd = os.getcwd() - # Change current working directory if ${LLDB_TEST} is defined. - if ("LLDB_TEST" in os.environ): - os.chdir(os.path.join(os.environ["LLDB_TEST"], "array_types")); - self.dbg = lldb.SBDebugger.Create() if main else lldb.DBG - if not self.dbg.IsValid(): - raise Exception('Invalid debugger instance') - self.dbg.SetAsync(False) - self.ci = self.dbg.GetCommandInterpreter() - if not self.ci: - raise Exception('Could not get the command interpreter') +class TestArrayTypes(lldbtest.TestBase): - def tearDown(self): - # Restore old working directory. - os.chdir(self.oldcwd) - del self.dbg + mydir = "array_types" def test_array_types(self): """Test 'variable list var_name' on some variables with array types.""" - res = lldb.SBCommandReturnObject() + res = self.res exe = os.path.join(os.getcwd(), "a.out") self.ci.HandleCommand("file " + exe, res) self.assertTrue(res.Succeeded()) @@ -92,6 +72,5 @@ class TestArrayTypes(unittest.TestCase): if __name__ == '__main__': lldb.SBDebugger.Initialize() - main = True unittest.main() lldb.SBDebugger.Terminate() diff --git a/lldb/test/class_types/TestClassTypes.py b/lldb/test/class_types/TestClassTypes.py index 5953f2843f5..74ba30b7c0b 100644 --- a/lldb/test/class_types/TestClassTypes.py +++ b/lldb/test/class_types/TestClassTypes.py @@ -1,37 +1,17 @@ """Test breakpoint on a class constructor; and variable list the this object.""" import os, time -import lldb import unittest +import lldb +import lldbtest -main = False - -class TestClassTypes(unittest.TestCase): - - def setUp(self): - global main - - # Save old working directory. - self.oldcwd = os.getcwd() - # Change current working directory if ${LLDB_TEST} is defined. - if ("LLDB_TEST" in os.environ): - os.chdir(os.path.join(os.environ["LLDB_TEST"], "class_types")); - self.dbg = lldb.SBDebugger.Create() if main else lldb.DBG - if not self.dbg.IsValid(): - raise Exception('Invalid debugger instance') - self.dbg.SetAsync(False) - self.ci = self.dbg.GetCommandInterpreter() - if not self.ci: - raise Exception('Could not get the command interpreter') +class TestClassTypes(lldbtest.TestBase): - def tearDown(self): - # Restore old working directory. - os.chdir(self.oldcwd) - del self.dbg + mydir = "class_types" def test_class_types(self): """Test 'variable list this' when stopped on a class constructor.""" - res = lldb.SBCommandReturnObject() + res = self.res exe = os.path.join(os.getcwd(), "a.out") self.ci.HandleCommand("file " + exe, res) self.assertTrue(res.Succeeded()) @@ -69,6 +49,5 @@ class TestClassTypes(unittest.TestCase): if __name__ == '__main__': lldb.SBDebugger.Initialize() - main = True unittest.main() lldb.SBDebugger.Terminate() diff --git a/lldb/test/dotest.pl b/lldb/test/dotest.pl index 7849d8250a1..87dbc37261e 100755 --- a/lldb/test/dotest.pl +++ b/lldb/test/dotest.pl @@ -21,9 +21,9 @@ my $testDir = $ARGV[0]; my $dbgPath = "$baseDir/build/Debug/LLDB.framework/Resources/Python"; my $relPath = "$baseDir/build/Release/LLDB.framework/Resources/Python"; if (-d $dbgPath) { - $ENV{'PYTHONPATH'} = "$dbgPath"; + $ENV{'PYTHONPATH'} = "$dbgPath:$scriptDir"; } elsif (-d $relPath) { - $ENV{'PYTHONPATH'} = "$relPath"; + $ENV{'PYTHONPATH'} = "$relPath:$scriptDir"; } #print("ENV{PYTHONPATH}=$ENV{'PYTHONPATH'}\n"); diff --git a/lldb/test/dotest.py b/lldb/test/dotest.py index 9e03327290b..31421926b05 100755 --- a/lldb/test/dotest.py +++ b/lldb/test/dotest.py @@ -53,14 +53,14 @@ def setupSysPath(): """Add LLDB.framework/Resources/Python to the search paths for modules.""" # Get the directory containing the current script. - testPath = sys.path[0] - if not testPath.endswith('test'): + scriptPath = sys.path[0] + if not scriptPath.endswith('test'): print "This script expects to reside in lldb's test directory." sys.exit(-1) - os.environ["LLDB_TEST"] = testPath + os.environ["LLDB_TEST"] = scriptPath - base = os.path.abspath(os.path.join(testPath, os.pardir)) + base = os.path.abspath(os.path.join(scriptPath, os.pardir)) dbgPath = os.path.join(base, 'build', 'Debug', 'LLDB.framework', 'Resources', 'Python') relPath = os.path.join(base, 'build', 'Release', 'LLDB.framework', @@ -78,6 +78,7 @@ def setupSysPath(): sys.exit(-1) sys.path.append(lldbPath) + sys.path.append(scriptPath) def initTestdirs(): diff --git a/lldb/test/function_types/TestFunctionTypes.py b/lldb/test/function_types/TestFunctionTypes.py index 79cdf0e338c..7f6ce273e72 100644 --- a/lldb/test/function_types/TestFunctionTypes.py +++ b/lldb/test/function_types/TestFunctionTypes.py @@ -1,39 +1,21 @@ """Test variable with function ptr type and that break on the function works.""" import os, time -import lldb import unittest +import lldb +import lldbtest -main = False - -class TestClassTypes(unittest.TestCase): - - def setUp(self): - global main - - # Save old working directory. - self.oldcwd = os.getcwd() - # Change current working directory if ${LLDB_TEST} is defined. - if ("LLDB_TEST" in os.environ): - os.chdir(os.path.join(os.environ["LLDB_TEST"], "function_types")); - self.dbg = lldb.SBDebugger.Create() if main else lldb.DBG - if not self.dbg.IsValid(): - raise Exception('Invalid debugger instance') - self.dbg.SetAsync(False) - self.ci = self.dbg.GetCommandInterpreter() - if not self.ci: - raise Exception('Could not get the command interpreter') +class TestClassTypes(lldbtest.TestBase): - def tearDown(self): - # Restore old working directory. - os.chdir(self.oldcwd) - del self.dbg + mydir = "function_types" def test_function_types(self): """Test 'callback' has function ptr type, then break on the function.""" - res = lldb.SBCommandReturnObject() + res = self.res exe = os.path.join(os.getcwd(), "a.out") self.ci.HandleCommand("file " + exe, res) + print "os.getcwd(): ", os.getcwd() + print "file a.out :", res.GetOutput() self.assertTrue(res.Succeeded()) # Break inside the main. @@ -85,6 +67,5 @@ class TestClassTypes(unittest.TestCase): if __name__ == '__main__': lldb.SBDebugger.Initialize() - main = True unittest.main() lldb.SBDebugger.Terminate() diff --git a/lldb/test/global_variables/TestGlobalVariables.py b/lldb/test/global_variables/TestGlobalVariables.py index 44da9df9874..3b3009035f0 100644 --- a/lldb/test/global_variables/TestGlobalVariables.py +++ b/lldb/test/global_variables/TestGlobalVariables.py @@ -1,37 +1,17 @@ """Show global variables and check that they do indeed have global scopes.""" import os, time -import lldb import unittest +import lldb +import lldbtest -main = False - -class TestClassTypes(unittest.TestCase): - - def setUp(self): - global main - - # Save old working directory. - self.oldcwd = os.getcwd() - # Change current working directory if ${LLDB_TEST} is defined. - if ("LLDB_TEST" in os.environ): - os.chdir(os.path.join(os.environ["LLDB_TEST"], "global_variables")); - self.dbg = lldb.SBDebugger.Create() if main else lldb.DBG - if not self.dbg.IsValid(): - raise Exception('Invalid debugger instance') - self.dbg.SetAsync(False) - self.ci = self.dbg.GetCommandInterpreter() - if not self.ci: - raise Exception('Could not get the command interpreter') +class TestClassTypes(lldbtest.TestBase): - def tearDown(self): - # Restore old working directory. - os.chdir(self.oldcwd) - del self.dbg + mydir = "global_variables" def test_global_variables(self): """Test 'variable list -s -a' which omits args and shows scopes.""" - res = lldb.SBCommandReturnObject() + res = self.res exe = os.path.join(os.getcwd(), "a.out") self.ci.HandleCommand("file " + exe, res) self.assertTrue(res.Succeeded()) @@ -75,6 +55,5 @@ class TestClassTypes(unittest.TestCase): if __name__ == '__main__': lldb.SBDebugger.Initialize() - main = True unittest.main() lldb.SBDebugger.Terminate() diff --git a/lldb/test/help/TestHelp.py b/lldb/test/help/TestHelp.py index 0cf7ddb2ba4..530bbda1ecd 100644 --- a/lldb/test/help/TestHelp.py +++ b/lldb/test/help/TestHelp.py @@ -1,33 +1,13 @@ """Test lldb help command.""" import os, time -import lldb import unittest +import lldb +import lldbtest -main = False - -class TestHelpCommand(unittest.TestCase): - - def setUp(self): - global main - - # Save old working directory. - self.oldcwd = os.getcwd() - # Change current working directory if ${LLDB_TEST} is defined. - if ("LLDB_TEST" in os.environ): - os.chdir(os.path.join(os.environ["LLDB_TEST"], "help")); - self.dbg = lldb.SBDebugger.Create() if main else lldb.DBG - if not self.dbg.IsValid(): - raise Exception('Invalid debugger instance') - self.dbg.SetAsync(False) - self.ci = self.dbg.GetCommandInterpreter() - if not self.ci: - raise Exception('Could not get the command interpreter') +class TestHelpCommand(lldbtest.TestBase): - def tearDown(self): - # Restore old working directory. - os.chdir(self.oldcwd) - del self.dbg + mydir = "help" def test_simplehelp(self): """A simple test of 'help' command and its output.""" @@ -53,6 +33,5 @@ class TestHelpCommand(unittest.TestCase): if __name__ == '__main__': lldb.SBDebugger.Initialize() - main = True unittest.main() lldb.SBDebugger.Terminate() diff --git a/lldb/test/lldbtest.py b/lldb/test/lldbtest.py new file mode 100644 index 00000000000..0596757c05b --- /dev/null +++ b/lldb/test/lldbtest.py @@ -0,0 +1,75 @@ +""" +LLDB module which provides the abstract base class of lldb test case. + +The concrete subclass can override lldbtest.TesBase in order to inherit the +common behavior for unitest.TestCase.setUp/tearDown implemented in this file. + +The subclass should override the attribute mydir in order for the python runtime +to locate the individual test cases when running as part of a large test suite +or when running each test case as a separate python invocation. + +./dotest.py provides a test driver which sets up the environment to run the +entire test suite. Users who want to run a test case on its own can specify the +LLDB_TEST and PYTHONPATH environment variables, for example: + +$ export LLDB_TEST=$PWD +$ export PYTHONPATH=/Volumes/data/lldb/svn/trunk/build/Debug/LLDB.framework/Resources/Python:$LLDB_TEST +$ echo $LLDB_TEST +/Volumes/data/lldb/svn/trunk/test +$ echo $PYTHONPATH +/Volumes/data/lldb/svn/trunk/build/Debug/LLDB.framework/Resources/Python:/Volumes/data/lldb/svn/trunk/test +$ python function_types/TestFunctionTypes.py +. +---------------------------------------------------------------------- +Ran 1 test in 0.363s + +OK +$ +""" + +import os +import unittest +import lldb + +class TestBase(unittest.TestCase): + """This LLDB abstract base class is meant to be subclassed.""" + + # The concrete subclass should override this attribute. + mydir = "" + + def setUp(self): + # Save old working directory. + self.oldcwd = os.getcwd() + + # Change current working directory if ${LLDB_TEST} is defined. + # See also dotest.py which sets up ${LLDB_TEST}. + if ("LLDB_TEST" in os.environ): + os.chdir(os.path.join(os.environ["LLDB_TEST"], self.mydir)); + + # Create the debugger instance if necessary. + try: + self.dbg = lldb.DBG + except NameError: + self.dbg = lldb.SBDebugger.Create() + except AttributeError: + self.dbg = lldb.SBDebugger.Create() + if not self.dbg.IsValid(): + raise Exception('Invalid debugger instance') + + # We want our debugger to be synchronous. + self.dbg.SetAsync(False) + + # Retrieve the associated command interpreter instance. + self.ci = self.dbg.GetCommandInterpreter() + if not self.ci: + raise Exception('Could not get the command interpreter') + + # And the result object. + self.res = lldb.SBCommandReturnObject() + + + def tearDown(self): + del self.dbg + + # Restore old working directory. + os.chdir(self.oldcwd) |