summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/test/array_types/TestArrayTypes.py31
-rw-r--r--lldb/test/class_types/TestClassTypes.py31
-rwxr-xr-xlldb/test/dotest.pl4
-rwxr-xr-xlldb/test/dotest.py9
-rw-r--r--lldb/test/function_types/TestFunctionTypes.py33
-rw-r--r--lldb/test/global_variables/TestGlobalVariables.py31
-rw-r--r--lldb/test/help/TestHelp.py29
-rw-r--r--lldb/test/lldbtest.py75
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)
OpenPOWER on IntegriCloud