aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/dotest.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/Python/lldbsuite/test/dotest.py')
-rw-r--r--packages/Python/lldbsuite/test/dotest.py407
1 files changed, 295 insertions, 112 deletions
diff --git a/packages/Python/lldbsuite/test/dotest.py b/packages/Python/lldbsuite/test/dotest.py
index 702e57e99871..6b6b2574e638 100644
--- a/packages/Python/lldbsuite/test/dotest.py
+++ b/packages/Python/lldbsuite/test/dotest.py
@@ -26,6 +26,7 @@ import atexit
import os
import errno
import platform
+import re
import signal
import socket
import subprocess
@@ -46,10 +47,12 @@ from . import test_result
from lldbsuite.test_event.event_builder import EventBuilder
from ..support import seven
+
def is_exe(fpath):
"""Returns true if fpath is an executable."""
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
def which(program):
"""Returns the full path to a program; None otherwise."""
fpath, fname = os.path.split(program)
@@ -63,24 +66,28 @@ def which(program):
return exe_file
return None
+
class _WritelnDecorator(object):
"""Used to decorate file-like objects with a handy 'writeln' method"""
- def __init__(self,stream):
+
+ def __init__(self, stream):
self.stream = stream
def __getattr__(self, attr):
if attr in ('stream', '__getstate__'):
raise AttributeError(attr)
- return getattr(self.stream,attr)
+ return getattr(self.stream, attr)
def writeln(self, arg=None):
if arg:
self.write(arg)
- self.write('\n') # text-mode streams translate to \r\n if needed
+ self.write('\n') # text-mode streams translate to \r\n if needed
#
# Global variables:
#
+
+
def usage(parser):
parser.print_help()
if configuration.verbose > 0:
@@ -195,6 +202,40 @@ o GDB_REMOTE_LOG: if defined, specifies the log file pathname for the
""")
sys.exit(0)
+
+def parseExclusion(exclusion_file):
+ """Parse an exclusion file, of the following format, where
+ 'skip files', 'skip methods', 'xfail files', and 'xfail methods'
+ are the possible list heading values:
+
+ skip files
+ <file name>
+ <file name>
+
+ xfail methods
+ <method name>
+ """
+ excl_type = None
+
+ with open(exclusion_file) as f:
+ for line in f:
+ line = line.strip()
+ if not excl_type:
+ excl_type = line
+ continue
+
+ if not line:
+ excl_type = None
+ elif excl_type == 'skip':
+ if not configuration.skip_tests:
+ configuration.skip_tests = []
+ configuration.skip_tests.append(line)
+ elif excl_type == 'xfail':
+ if not configuration.xfail_tests:
+ configuration.xfail_tests = []
+ configuration.xfail_tests.append(line)
+
+
def parseOptionsAndInitTestdirs():
"""Initialize the list of directories containing our unittest scripts.
@@ -213,9 +254,10 @@ def parseOptionsAndInitTestdirs():
for env_var in args.unset_env_varnames:
if env_var in os.environ:
# From Python Doc: When unsetenv() is supported, deletion of items in os.environ
- # is automatically translated into a corresponding call to unsetenv().
+ # is automatically translated into a corresponding call to
+ # unsetenv().
del os.environ[env_var]
- #os.unsetenv(env_var)
+ # os.unsetenv(env_var)
if args.set_env_vars:
for env_var in args.set_env_vars:
@@ -235,9 +277,13 @@ def parseOptionsAndInitTestdirs():
if args.compilers:
configuration.compilers = args.compilers
else:
- # Use a compiler appropriate appropriate for the Apple SDK if one was specified
+ # Use a compiler appropriate appropriate for the Apple SDK if one was
+ # specified
if platform_system == 'Darwin' and args.apple_sdk:
- configuration.compilers = [seven.get_command_output('xcrun -sdk "%s" -find clang 2> /dev/null' % (args.apple_sdk))]
+ configuration.compilers = [
+ seven.get_command_output(
+ 'xcrun -sdk "%s" -find clang 2> /dev/null' %
+ (args.apple_sdk))]
else:
# 'clang' on ubuntu 14.04 is 3.4 so we try clang-3.5 first
candidateCompilers = ['clang-3.5', 'clang', 'gcc']
@@ -254,33 +300,43 @@ def parseOptionsAndInitTestdirs():
# Set SDKROOT if we are using an Apple SDK
if platform_system == 'Darwin' and args.apple_sdk:
- os.environ['SDKROOT'] = seven.get_command_output('xcrun --sdk "%s" --show-sdk-path 2> /dev/null' % (args.apple_sdk))
+ os.environ['SDKROOT'] = seven.get_command_output(
+ 'xcrun --sdk "%s" --show-sdk-path 2> /dev/null' %
+ (args.apple_sdk))
if args.archs:
configuration.archs = args.archs
for arch in configuration.archs:
- if arch.startswith('arm') and platform_system == 'Darwin' and not args.apple_sdk:
- os.environ['SDKROOT'] = seven.get_command_output('xcrun --sdk iphoneos.internal --show-sdk-path 2> /dev/null')
+ if arch.startswith(
+ 'arm') and platform_system == 'Darwin' and not args.apple_sdk:
+ os.environ['SDKROOT'] = seven.get_command_output(
+ 'xcrun --sdk iphoneos.internal --show-sdk-path 2> /dev/null')
if not os.path.exists(os.environ['SDKROOT']):
- os.environ['SDKROOT'] = seven.get_command_output('xcrun --sdk iphoneos --show-sdk-path 2> /dev/null')
+ os.environ['SDKROOT'] = seven.get_command_output(
+ 'xcrun --sdk iphoneos --show-sdk-path 2> /dev/null')
else:
configuration.archs = [platform_machine]
if args.categoriesList:
- configuration.categoriesList = set(test_categories.validate(args.categoriesList, False))
+ configuration.categoriesList = set(
+ test_categories.validate(
+ args.categoriesList, False))
configuration.useCategories = True
else:
configuration.categoriesList = []
if args.skipCategories:
- configuration.skipCategories = test_categories.validate(args.skipCategories, False)
+ configuration.skipCategories = test_categories.validate(
+ args.skipCategories, False)
if args.E:
cflags_extras = args.E
os.environ['CFLAGS_EXTRAS'] = cflags_extras
if args.d:
- sys.stdout.write("Suspending the process %d to wait for debugger to attach...\n" % os.getpid())
+ sys.stdout.write(
+ "Suspending the process %d to wait for debugger to attach...\n" %
+ os.getpid())
sys.stdout.flush()
os.kill(os.getpid(), signal.SIGSTOP)
@@ -309,6 +365,10 @@ def parseOptionsAndInitTestdirs():
if args.executable:
lldbtest_config.lldbExec = os.path.realpath(args.executable)
+ if args.excluded:
+ for excl_file in args.excluded:
+ parseExclusion(excl_file)
+
if args.p:
if args.p.startswith('-'):
usage(parser)
@@ -334,10 +394,11 @@ def parseOptionsAndInitTestdirs():
configuration.count = args.sharp
if sys.platform.startswith('win32'):
- os.environ['LLDB_DISABLE_CRASH_DIALOG'] = str(args.disable_crash_dialog)
+ os.environ['LLDB_DISABLE_CRASH_DIALOG'] = str(
+ args.disable_crash_dialog)
os.environ['LLDB_LAUNCH_INFERIORS_WITHOUT_CONSOLE'] = str(True)
- if do_help == True:
+ if do_help:
usage(parser)
if args.no_multiprocess:
@@ -415,12 +476,16 @@ def parseOptionsAndInitTestdirs():
# Gather all the dirs passed on the command line.
if len(args.args) > 0:
- configuration.testdirs = list(map(lambda x: os.path.realpath(os.path.abspath(x)), args.args))
+ configuration.testdirs = list(
+ map(lambda x: os.path.realpath(os.path.abspath(x)), args.args))
# Shut off multiprocessing mode when test directories are specified.
configuration.no_multiprocess_test_runner = True
+ lldbtest_config.codesign_identity = args.codesign_identity
+
#print("testdirs:", testdirs)
+
def getXcodeOutputPaths(lldbRootDirectory):
result = []
@@ -428,11 +493,16 @@ def getXcodeOutputPaths(lldbRootDirectory):
xcode3_build_dir = ['build']
xcode4_build_dir = ['build', 'lldb', 'Build', 'Products']
- configurations = [['Debug'], ['DebugClang'], ['Release'], ['BuildAndIntegration']]
+ configurations = [
+ ['Debug'],
+ ['DebugClang'],
+ ['Release'],
+ ['BuildAndIntegration']]
xcode_build_dirs = [xcode3_build_dir, xcode4_build_dir]
for configuration in configurations:
for xcode_build_dir in xcode_build_dirs:
- outputPath = os.path.join(lldbRootDirectory, *(xcode_build_dir+configuration) )
+ outputPath = os.path.join(
+ lldbRootDirectory, *(xcode_build_dir + configuration))
result.append(outputPath)
return result
@@ -499,17 +569,24 @@ def getOutputPaths(lldbRootDirectory):
# cmake builds? look for build or build/host folder next to llvm directory
# lldb is located in llvm/tools/lldb so we need to go up three levels
- llvmParentDir = os.path.abspath(os.path.join(lldbRootDirectory, os.pardir, os.pardir, os.pardir))
+ llvmParentDir = os.path.abspath(
+ os.path.join(
+ lldbRootDirectory,
+ os.pardir,
+ os.pardir,
+ os.pardir))
result.append(os.path.join(llvmParentDir, 'build', 'bin'))
result.append(os.path.join(llvmParentDir, 'build', 'host', 'bin'))
- # some cmake developers keep their build directory beside their lldb directory
+ # some cmake developers keep their build directory beside their lldb
+ # directory
lldbParentDir = os.path.abspath(os.path.join(lldbRootDirectory, os.pardir))
result.append(os.path.join(lldbParentDir, 'build', 'bin'))
result.append(os.path.join(lldbParentDir, 'build', 'host', 'bin'))
return result
+
def setupSysPath():
"""
Add LLDB.framework/Resources/Python to the search paths for modules.
@@ -535,12 +612,15 @@ def setupSysPath():
toolsLLDBMIPath = os.path.join(scriptPath, 'tools', 'lldb-mi')
toolsLLDBServerPath = os.path.join(scriptPath, 'tools', 'lldb-server')
- # Insert script dir, plugin dir, lldb-mi dir and lldb-server dir to the sys.path.
+ # Insert script dir, plugin dir, lldb-mi dir and lldb-server dir to the
+ # sys.path.
sys.path.insert(0, pluginPath)
- sys.path.insert(0, toolsLLDBMIPath) # Adding test/tools/lldb-mi to the path makes it easy
- # to "import lldbmi_testcase" from the MI tests
- sys.path.insert(0, toolsLLDBServerPath) # Adding test/tools/lldb-server to the path makes it easy
- # to "import lldbgdbserverutils" from the lldb-server tests
+ # Adding test/tools/lldb-mi to the path makes it easy
+ sys.path.insert(0, toolsLLDBMIPath)
+ # to "import lldbmi_testcase" from the MI tests
+ # Adding test/tools/lldb-server to the path makes it easy
+ sys.path.insert(0, toolsLLDBServerPath)
+ # to "import lldbgdbserverutils" from the lldb-server tests
# This is the root of the lldb git/svn checkout
# When this changes over to a package instead of a standalone script, this
@@ -572,16 +652,22 @@ def setupSysPath():
lldbtest_config.lldbExec = which('lldb')
if lldbtest_config.lldbExec and not is_exe(lldbtest_config.lldbExec):
- print("'{}' is not a path to a valid executable".format(lldbtest_config.lldbExec))
+ print(
+ "'{}' is not a path to a valid executable".format(
+ lldbtest_config.lldbExec))
lldbtest_config.lldbExec = None
if not lldbtest_config.lldbExec:
print("The 'lldb' executable cannot be located. Some of the tests may not be run as a result.")
sys.exit(-1)
- lldbLibDir = os.path.dirname(lldbtest_config.lldbExec) # confusingly, this is the "bin" directory
+ # confusingly, this is the "bin" directory
+ lldbLibDir = os.path.dirname(lldbtest_config.lldbExec)
os.environ["LLDB_LIB_DIR"] = lldbLibDir
- lldbImpLibDir = os.path.join(lldbLibDir, '..', 'lib') if sys.platform.startswith('win32') else lldbLibDir
+ lldbImpLibDir = os.path.join(
+ lldbLibDir,
+ '..',
+ 'lib') if sys.platform.startswith('win32') else lldbLibDir
os.environ["LLDB_IMPLIB_DIR"] = lldbImpLibDir
print("LLDB library dir:", os.environ["LLDB_LIB_DIR"])
print("LLDB import library dir:", os.environ["LLDB_IMPLIB_DIR"])
@@ -589,32 +675,41 @@ def setupSysPath():
# Assume lldb-mi is in same place as lldb
# If not found, disable the lldb-mi tests
- lldbMiExec = None
- if lldbtest_config.lldbExec and is_exe(lldbtest_config.lldbExec + "-mi"):
- lldbMiExec = lldbtest_config.lldbExec + "-mi"
- if not lldbMiExec:
+ # TODO: Append .exe on Windows
+ # - this will be in a separate commit in case the mi tests fail horribly
+ lldbDir = os.path.dirname(lldbtest_config.lldbExec)
+ lldbMiExec = os.path.join(lldbDir, "lldb-mi")
+ if is_exe(lldbMiExec):
+ os.environ["LLDBMI_EXEC"] = lldbMiExec
+ else:
if not configuration.shouldSkipBecauseOfCategories(["lldb-mi"]):
- print("The 'lldb-mi' executable cannot be located. The lldb-mi tests can not be run as a result.")
+ print(
+ "The 'lldb-mi' executable cannot be located. The lldb-mi tests can not be run as a result.")
configuration.skipCategories.append("lldb-mi")
- else:
- os.environ["LLDBMI_EXEC"] = lldbMiExec
- lldbPythonDir = None # The directory that contains 'lldb/__init__.py'
+ lldbPythonDir = None # The directory that contains 'lldb/__init__.py'
+ if not configuration.lldbFrameworkPath and os.path.exists(os.path.join(lldbLibDir, "LLDB.framework")):
+ configuration.lldbFrameworkPath = os.path.join(lldbLibDir, "LLDB.framework")
if configuration.lldbFrameworkPath:
- candidatePath = os.path.join(configuration.lldbFrameworkPath, 'Resources', 'Python')
+ lldbtest_config.lldbFrameworkPath = configuration.lldbFrameworkPath
+ candidatePath = os.path.join(
+ configuration.lldbFrameworkPath, 'Resources', 'Python')
if os.path.isfile(os.path.join(candidatePath, 'lldb/__init__.py')):
lldbPythonDir = candidatePath
if not lldbPythonDir:
- print('Resources/Python/lldb/__init__.py was not found in ' + configuration.lldbFrameworkPath)
+ print(
+ 'Resources/Python/lldb/__init__.py was not found in ' +
+ configuration.lldbFrameworkPath)
sys.exit(-1)
else:
# If our lldb supports the -P option, use it to find the python path:
init_in_python_dir = os.path.join('lldb', '__init__.py')
- lldb_dash_p_result = subprocess.check_output([lldbtest_config.lldbExec, "-P"], stderr=subprocess.STDOUT, universal_newlines=True)
+ lldb_dash_p_result = subprocess.check_output(
+ [lldbtest_config.lldbExec, "-P"], stderr=subprocess.STDOUT, universal_newlines=True)
- if lldb_dash_p_result and not lldb_dash_p_result.startswith(("<", "lldb: invalid option:")) \
- and not lldb_dash_p_result.startswith("Traceback"):
+ if lldb_dash_p_result and not lldb_dash_p_result.startswith(
+ ("<", "lldb: invalid option:")) and not lldb_dash_p_result.startswith("Traceback"):
lines = lldb_dash_p_result.splitlines()
# Workaround for readline vs libedit issue on FreeBSD. If stdout
@@ -625,66 +720,88 @@ def setupSysPath():
# because cpython commit f0ab6f9f0603 added a #ifndef __APPLE__
# around the call. See http://bugs.python.org/issue19884 for more
# information. For now we just discard the warning output.
- if len(lines) >= 1 and lines[0].startswith("bind: Invalid command"):
+ if len(lines) >= 1 and lines[0].startswith(
+ "bind: Invalid command"):
lines.pop(0)
# Taking the last line because lldb outputs
# 'Cannot read termcap database;\nusing dumb terminal settings.\n'
# before the path
- if len(lines) >= 1 and os.path.isfile(os.path.join(lines[-1], init_in_python_dir)):
+ if len(lines) >= 1 and os.path.isfile(
+ os.path.join(lines[-1], init_in_python_dir)):
lldbPythonDir = lines[-1]
if "freebsd" in sys.platform or "linux" in sys.platform:
- os.environ['LLDB_LIB_DIR'] = os.path.join(lldbPythonDir, '..', '..')
-
+ os.environ['LLDB_LIB_DIR'] = os.path.join(
+ lldbPythonDir, '..', '..')
+
if not lldbPythonDir:
if platform.system() == "Darwin":
python_resource_dir = ['LLDB.framework', 'Resources', 'Python']
outputPaths = getXcodeOutputPaths(lldbRootDirectory)
for outputPath in outputPaths:
- candidatePath = os.path.join(outputPath, *python_resource_dir)
- if os.path.isfile(os.path.join(candidatePath, init_in_python_dir)):
+ candidatePath = os.path.join(
+ outputPath, *python_resource_dir)
+ if os.path.isfile(
+ os.path.join(
+ candidatePath,
+ init_in_python_dir)):
lldbPythonDir = candidatePath
break
if not lldbPythonDir:
print("lldb.py is not found, some tests may fail.")
else:
- print("Unable to load lldb extension module. Possible reasons for this include:")
+ print(
+ "Unable to load lldb extension module. Possible reasons for this include:")
print(" 1) LLDB was built with LLDB_DISABLE_PYTHON=1")
- print(" 2) PYTHONPATH and PYTHONHOME are not set correctly. PYTHONHOME should refer to")
- print(" the version of Python that LLDB built and linked against, and PYTHONPATH")
- print(" should contain the Lib directory for the same python distro, as well as the")
+ print(
+ " 2) PYTHONPATH and PYTHONHOME are not set correctly. PYTHONHOME should refer to")
+ print(
+ " the version of Python that LLDB built and linked against, and PYTHONPATH")
+ print(
+ " should contain the Lib directory for the same python distro, as well as the")
print(" location of LLDB\'s site-packages folder.")
- print(" 3) A different version of Python than that which was built against is exported in")
+ print(
+ " 3) A different version of Python than that which was built against is exported in")
print(" the system\'s PATH environment variable, causing conflicts.")
- print(" 4) The executable '%s' could not be found. Please check " % lldbtest_config.lldbExec)
+ print(
+ " 4) The executable '%s' could not be found. Please check " %
+ lldbtest_config.lldbExec)
print(" that it exists and is executable.")
if lldbPythonDir:
lldbPythonDir = os.path.normpath(lldbPythonDir)
- # Some of the code that uses this path assumes it hasn't resolved the Versions... link.
- # If the path we've constructed looks like that, then we'll strip out the Versions/A part.
- (before, frameWithVersion, after) = lldbPythonDir.rpartition("LLDB.framework/Versions/A")
- if frameWithVersion != "" :
+ # Some of the code that uses this path assumes it hasn't resolved the Versions... link.
+ # If the path we've constructed looks like that, then we'll strip out
+ # the Versions/A part.
+ (before, frameWithVersion, after) = lldbPythonDir.rpartition(
+ "LLDB.framework/Versions/A")
+ if frameWithVersion != "":
lldbPythonDir = before + "LLDB.framework" + after
lldbPythonDir = os.path.abspath(lldbPythonDir)
# If tests need to find LLDB_FRAMEWORK, now they can do it
- os.environ["LLDB_FRAMEWORK"] = os.path.dirname(os.path.dirname(lldbPythonDir))
+ os.environ["LLDB_FRAMEWORK"] = os.path.dirname(
+ os.path.dirname(lldbPythonDir))
- # This is to locate the lldb.py module. Insert it right after sys.path[0].
+ # This is to locate the lldb.py module. Insert it right after
+ # sys.path[0].
sys.path[1:1] = [lldbPythonDir]
def visit_file(dir, name):
# Try to match the regexp pattern, if specified.
if configuration.regexp:
- import re
if not re.search(configuration.regexp, name):
# We didn't match the regex, we're done.
return
+ if configuration.skip_tests:
+ for file_regexp in configuration.skip_tests:
+ if re.search(file_regexp, name):
+ return
+
# We found a match for our test. Add it to the suite.
# Update the sys.path first.
@@ -713,7 +830,8 @@ def visit_file(dir, name):
if filtered:
# print("adding filter spec %s to module %s" % (filterspec, module))
configuration.suite.addTests(
- unittest2.defaultTestLoader.loadTestsFromName(filterspec, module))
+ unittest2.defaultTestLoader.loadTestsFromName(
+ filterspec, module))
continue
# Forgo this module if the (base, filterspec) combo is invalid
@@ -724,7 +842,8 @@ def visit_file(dir, name):
# Add the entire file's worth of tests since we're not filtered.
# Also the fail-over case when the filterspec branch
# (base, filterspec) combo doesn't make sense.
- configuration.suite.addTests(unittest2.defaultTestLoader.loadTestsFromName(base))
+ configuration.suite.addTests(
+ unittest2.defaultTestLoader.loadTestsFromName(base))
def visit(prefix, dir, names):
@@ -774,10 +893,14 @@ def disabledynamics():
import lldb
ci = lldb.DBG.GetCommandInterpreter()
res = lldb.SBCommandReturnObject()
- ci.HandleCommand("setting set target.prefer-dynamic-value no-dynamic-values", res, False)
+ ci.HandleCommand(
+ "setting set target.prefer-dynamic-value no-dynamic-values",
+ res,
+ False)
if not res.Succeeded():
raise Exception('disabling dynamic type support failed')
+
def lldbLoggings():
import lldb
"""Check and do lldb loggings if necessary."""
@@ -793,7 +916,10 @@ def lldbLoggings():
else:
lldb_log_option = "event process expr state api"
ci.HandleCommand(
- "log enable -n -f " + os.environ["LLDB_LOG"] + " lldb " + lldb_log_option,
+ "log enable -n -f " +
+ os.environ["LLDB_LOG"] +
+ " lldb " +
+ lldb_log_option,
res)
if not res.Succeeded():
raise Exception('log enable failed (check LLDB_LOG env variable)')
@@ -805,11 +931,15 @@ def lldbLoggings():
else:
lldb_log_option = "event process expr state api"
ci.HandleCommand(
- "log enable -n -f " + os.environ["LLDB_LINUX_LOG"] + " linux " + lldb_log_option,
+ "log enable -n -f " +
+ os.environ["LLDB_LINUX_LOG"] +
+ " linux " +
+ lldb_log_option,
res)
if not res.Succeeded():
- raise Exception('log enable failed (check LLDB_LINUX_LOG env variable)')
-
+ raise Exception(
+ 'log enable failed (check LLDB_LINUX_LOG env variable)')
+
# Ditto for gdb-remote logging if ${GDB_REMOTE_LOG} environment variable is defined.
# Use ${GDB_REMOTE_LOG} to specify the log file.
if ("GDB_REMOTE_LOG" in os.environ):
@@ -822,7 +952,9 @@ def lldbLoggings():
+ gdb_remote_log_option,
res)
if not res.Succeeded():
- raise Exception('log enable failed (check GDB_REMOTE_LOG env variable)')
+ raise Exception(
+ 'log enable failed (check GDB_REMOTE_LOG env variable)')
+
def getMyCommandLine():
return ' '.join(sys.argv)
@@ -833,18 +965,24 @@ def getMyCommandLine():
# #
# ======================================== #
+
def checkDsymForUUIDIsNotOn():
cmd = ["defaults", "read", "com.apple.DebugSymbols"]
- pipe = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
+ pipe = subprocess.Popen(
+ cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
cmd_output = pipe.stdout.read()
if cmd_output and "DBGFileMappedPaths = " in cmd_output:
print("%s =>" % ' '.join(cmd))
print(cmd_output)
- print("Disable automatic lookup and caching of dSYMs before running the test suite!")
+ print(
+ "Disable automatic lookup and caching of dSYMs before running the test suite!")
print("Exiting...")
sys.exit(0)
-def exitTestSuite(exitCode = None):
+
+def exitTestSuite(exitCode=None):
import lldb
lldb.SBDebugger.Terminate()
if exitCode:
@@ -856,7 +994,9 @@ def isMultiprocessTestRunner():
# the inferior (as specified by the multiprocess test
# runner) OR we've been told to skip using the multiprocess
# test runner
- return not (configuration.is_inferior_test_runner or configuration.no_multiprocess_test_runner)
+ return not (
+ configuration.is_inferior_test_runner or configuration.no_multiprocess_test_runner)
+
def getVersionForSDK(sdk):
sdk = str.lower(sdk)
@@ -867,19 +1007,24 @@ def getVersionForSDK(sdk):
ver = basename.replace(sdk, '')
return ver
+
def getPathForSDK(sdk):
sdk = str.lower(sdk)
full_path = seven.get_command_output('xcrun -sdk %s --show-sdk-path' % sdk)
- if os.path.exists(full_path): return full_path
+ if os.path.exists(full_path):
+ return full_path
return None
+
def setDefaultTripleForPlatform():
if configuration.lldb_platform_name == 'ios-simulator':
- triple_str = 'x86_64-apple-ios%s' % (getVersionForSDK('iphonesimulator'))
+ triple_str = 'x86_64-apple-ios%s' % (
+ getVersionForSDK('iphonesimulator'))
os.environ['TRIPLE'] = triple_str
- return {'TRIPLE':triple_str}
+ return {'TRIPLE': triple_str}
return {}
+
def run_suite():
# On MacOS X, check to make sure that domain for com.apple.DebugSymbols defaults
# does not exist before proceeding to running the test suite.
@@ -900,8 +1045,11 @@ def run_suite():
# multiprocess test runner here.
if isMultiprocessTestRunner():
from . import dosep
- dosep.main(configuration.num_threads, configuration.multiprocess_test_subdir,
- configuration.test_runner_name, configuration.results_formatter_object)
+ dosep.main(
+ configuration.num_threads,
+ configuration.multiprocess_test_subdir,
+ configuration.test_runner_name,
+ configuration.results_formatter_object)
raise Exception("should never get here")
elif configuration.is_inferior_test_runner:
# Shut off Ctrl-C processing in inferiors. The parallel
@@ -924,20 +1072,29 @@ def run_suite():
lldb.DBG = lldb.SBDebugger.Create()
if configuration.lldb_platform_name:
- print("Setting up remote platform '%s'" % (configuration.lldb_platform_name))
- lldb.remote_platform = lldb.SBPlatform(configuration.lldb_platform_name)
+ print("Setting up remote platform '%s'" %
+ (configuration.lldb_platform_name))
+ lldb.remote_platform = lldb.SBPlatform(
+ configuration.lldb_platform_name)
if not lldb.remote_platform.IsValid():
- print("error: unable to create the LLDB platform named '%s'." % (configuration.lldb_platform_name))
+ print(
+ "error: unable to create the LLDB platform named '%s'." %
+ (configuration.lldb_platform_name))
exitTestSuite(1)
if configuration.lldb_platform_url:
- # We must connect to a remote platform if a LLDB platform URL was specified
- print("Connecting to remote platform '%s' at '%s'..." % (configuration.lldb_platform_name, configuration.lldb_platform_url))
- platform_connect_options = lldb.SBPlatformConnectOptions(configuration.lldb_platform_url)
+ # We must connect to a remote platform if a LLDB platform URL was
+ # specified
+ print(
+ "Connecting to remote platform '%s' at '%s'..." %
+ (configuration.lldb_platform_name, configuration.lldb_platform_url))
+ platform_connect_options = lldb.SBPlatformConnectOptions(
+ configuration.lldb_platform_url)
err = lldb.remote_platform.ConnectRemote(platform_connect_options)
if err.Success():
print("Connected.")
else:
- print("error: failed to connect to remote platform using URL '%s': %s" % (configuration.lldb_platform_url, err))
+ print("error: failed to connect to remote platform using URL '%s': %s" % (
+ configuration.lldb_platform_url, err))
exitTestSuite(1)
else:
configuration.lldb_platform_url = None
@@ -948,11 +1105,13 @@ def run_suite():
if first:
print("Environment variables setup for platform support:")
first = False
- print("%s = %s" % (key,platform_changes[key]))
+ print("%s = %s" % (key, platform_changes[key]))
if configuration.lldb_platform_working_dir:
- print("Setting remote platform working directory to '%s'..." % (configuration.lldb_platform_working_dir))
- lldb.remote_platform.SetWorkingDirectory(configuration.lldb_platform_working_dir)
+ print("Setting remote platform working directory to '%s'..." %
+ (configuration.lldb_platform_working_dir))
+ lldb.remote_platform.SetWorkingDirectory(
+ configuration.lldb_platform_working_dir)
lldb.DBG.SetSelectedPlatform(lldb.remote_platform)
else:
lldb.remote_platform = None
@@ -998,10 +1157,13 @@ def run_suite():
timestamp_started = datetime.datetime.now().strftime("%Y-%m-%d-%H_%M_%S")
if not configuration.sdir_name:
configuration.sdir_name = timestamp_started
- os.environ["LLDB_SESSION_DIRNAME"] = os.path.join(os.getcwd(), configuration.sdir_name)
+ os.environ["LLDB_SESSION_DIRNAME"] = os.path.join(
+ os.getcwd(), configuration.sdir_name)
- sys.stderr.write("\nSession logs for test failures/errors/unexpected successes"
- " will go into directory '%s'\n" % configuration.sdir_name)
+ sys.stderr.write(
+ "\nSession logs for test failures/errors/unexpected successes"
+ " will go into directory '%s'\n" %
+ configuration.sdir_name)
sys.stderr.write("Command invoked: %s\n" % getMyCommandLine())
if not os.path.isdir(configuration.sdir_name):
@@ -1024,14 +1186,16 @@ def run_suite():
#
# Add some intervention here to sanity check that the compilers requested are sane.
- # If found not to be an executable program, the invalid one is dropped from the list.
+ # If found not to be an executable program, the invalid one is dropped
+ # from the list.
for i in range(len(configuration.compilers)):
c = configuration.compilers[i]
if which(c):
continue
else:
if sys.platform.startswith("darwin"):
- pipe = subprocess.Popen(['xcrun', '-find', c], stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
+ pipe = subprocess.Popen(
+ ['xcrun', '-find', c], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
cmd_output = pipe.stdout.read()
if cmd_output:
if "not found" in cmd_output:
@@ -1039,7 +1203,9 @@ def run_suite():
configuration.compilers.remove(i)
else:
configuration.compilers[i] = cmd_output.split('\n')[0]
- print("'xcrun -find %s' returning %s" % (c, configuration.compilers[i]))
+ print(
+ "'xcrun -find %s' returning %s" %
+ (c, configuration.compilers[i]))
if not configuration.parsable:
print("compilers=%s" % str(configuration.compilers))
@@ -1048,10 +1214,14 @@ def run_suite():
print("No eligible compiler found, exiting.")
exitTestSuite(1)
- if isinstance(configuration.compilers, list) and len(configuration.compilers) >= 1:
+ if isinstance(
+ configuration.compilers,
+ list) and len(
+ configuration.compilers) >= 1:
iterCompilers = True
- # If we iterate on archs or compilers, there is a chance we want to split stderr/stdout.
+ # If we iterate on archs or compilers, there is a chance we want to split
+ # stderr/stdout.
if iterArchs or iterCompilers:
old_stderr = sys.stderr
old_stdout = sys.stdout
@@ -1067,7 +1237,8 @@ def run_suite():
for ic in range(len(configuration.compilers) if iterCompilers else 1):
if iterCompilers:
os.environ["CC"] = configuration.compilers[ic]
- configString = "%s compiler=%s" % (archConfig, configuration.compilers[ic])
+ configString = "%s compiler=%s" % (
+ archConfig, configuration.compilers[ic])
else:
configString = archConfig
@@ -1090,9 +1261,10 @@ def run_suite():
# First, write out the number of collected test cases.
if not configuration.parsable:
sys.stderr.write(configuration.separator + "\n")
- sys.stderr.write("Collected %d test%s\n\n"
- % (configuration.suite.countTestCases(),
- configuration.suite.countTestCases() != 1 and "s" or ""))
+ sys.stderr.write(
+ "Collected %d test%s\n\n" %
+ (configuration.suite.countTestCases(),
+ configuration.suite.countTestCases() != 1 and "s" or ""))
if configuration.parsable:
v = 0
@@ -1101,30 +1273,39 @@ def run_suite():
# Invoke the test runner.
if configuration.count == 1:
- result = unittest2.TextTestRunner(stream=sys.stderr,
- verbosity=v,
- resultclass=test_result.LLDBTestResult).run(configuration.suite)
+ result = unittest2.TextTestRunner(
+ stream=sys.stderr,
+ verbosity=v,
+ resultclass=test_result.LLDBTestResult).run(
+ configuration.suite)
else:
# We are invoking the same test suite more than once. In this case,
# mark __ignore_singleton__ flag as True so the signleton pattern is
# not enforced.
test_result.LLDBTestResult.__ignore_singleton__ = True
for i in range(configuration.count):
-
- result = unittest2.TextTestRunner(stream=sys.stderr,
- verbosity=v,
- resultclass=test_result.LLDBTestResult).run(configuration.suite)
+
+ result = unittest2.TextTestRunner(
+ stream=sys.stderr,
+ verbosity=v,
+ resultclass=test_result.LLDBTestResult).run(
+ configuration.suite)
configuration.failed = configuration.failed or not result.wasSuccessful()
if configuration.sdir_has_content and not configuration.parsable:
- sys.stderr.write("Session logs for test failures/errors/unexpected successes"
- " can be found in directory '%s'\n" % configuration.sdir_name)
+ sys.stderr.write(
+ "Session logs for test failures/errors/unexpected successes"
+ " can be found in directory '%s'\n" %
+ configuration.sdir_name)
- if configuration.useCategories and len(configuration.failuresPerCategory) > 0:
+ if configuration.useCategories and len(
+ configuration.failuresPerCategory) > 0:
sys.stderr.write("Failures per category:\n")
for category in configuration.failuresPerCategory:
- sys.stderr.write("%s - %d\n" % (category, configuration.failuresPerCategory[category]))
+ sys.stderr.write(
+ "%s - %d\n" %
+ (category, configuration.failuresPerCategory[category]))
# Terminate the test suite if ${LLDB_TESTSUITE_FORCE_FINISH} is defined.
# This should not be necessary now.
@@ -1136,5 +1317,7 @@ def run_suite():
exitTestSuite(configuration.failed)
if __name__ == "__main__":
- print(__file__ + " is for use as a module only. It should not be run as a standalone script.")
+ print(
+ __file__ +
+ " is for use as a module only. It should not be run as a standalone script.")
sys.exit(-1)