diff options
author | Zachary Turner <zturner@google.com> | 2015-12-08 01:15:30 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2015-12-08 01:15:30 +0000 |
commit | 606e3a5221ec611a2f5da6d9a4961e8e2199f9d2 (patch) | |
tree | a71b819581216c1153340efce0baafd6a7da6941 /lldb/packages/Python/lldbsuite/test/lldbtest.py | |
parent | da30cff9ef2e22cf9e8e307f132976a15feacdf8 (diff) | |
download | bcm5719-llvm-606e3a5221ec611a2f5da6d9a4961e8e2199f9d2.tar.gz bcm5719-llvm-606e3a5221ec611a2f5da6d9a4961e8e2199f9d2.zip |
Get rid of global variables in dotest.py
This moves all the global variables into a separate module called
`configuration`. This has a number of advantages:
1. Configuration data is centrally maintained so it's easy to get
a high level overview of what configuration data the test suite
makes use of.
2. The method of sharing configuration data among different parts
of the test suite becomes standardized. Previously we would
put some things into the `lldb` module, some things into the
`lldbtest_config` module, and some things would not get shared.
Now everything is shared through one module and is available to
the entire test suite.
3. It opens the door to moving some of the initialization code into
the `configuration` module, simplifying the implementation of
`dotest.py`.
There are a few stragglers that didn't get converted over to using
the `configuration` module in this patch, because it would have grown
the size of the patch unnecessarily. This includes everything
currently in the `lldbtest_config` module, as well as the
`lldb.remote_platform` variable. We can address these in the future.
llvm-svn: 254982
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lldbtest.py')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/lldbtest.py | 80 |
1 files changed, 41 insertions, 39 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index bd2dceb3259..2922445b9a4 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -58,6 +58,7 @@ import six # LLDB modules import lldb +from . import configuration from . import lldbtest_config from . import lldbutil from . import test_categories @@ -460,9 +461,9 @@ def target_is_android(): def android_device_api(): if not hasattr(android_device_api, 'result'): - assert lldb.platform_url is not None + assert configuration.lldb_platform_url is not None device_id = None - parsed_url = urlparse.urlparse(lldb.platform_url) + parsed_url = urlparse.urlparse(configuration.lldb_platform_url) host_name = parsed_url.netloc.split(":")[0] if host_name != 'localhost': device_id = host_name @@ -520,7 +521,7 @@ def benchmarks_test(func): raise Exception("@benchmarks_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if not lldb.just_do_benchmarks_test: + if not configuration.just_do_benchmarks_test: self.skipTest("benchmarks tests") return func(self, *args, **kwargs) @@ -547,7 +548,7 @@ def dsym_test(func): raise Exception("@dsym_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.dont_do_dsym_test: + if configuration.dont_do_dsym_test: self.skipTest("dsym tests") return func(self, *args, **kwargs) @@ -561,7 +562,7 @@ def dwarf_test(func): raise Exception("@dwarf_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.dont_do_dwarf_test: + if configuration.dont_do_dwarf_test: self.skipTest("dwarf tests") return func(self, *args, **kwargs) @@ -575,7 +576,7 @@ def dwo_test(func): raise Exception("@dwo_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.dont_do_dwo_test: + if configuration.dont_do_dwo_test: self.skipTest("dwo tests") return func(self, *args, **kwargs) @@ -589,7 +590,7 @@ def debugserver_test(func): raise Exception("@debugserver_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.dont_do_debugserver_test: + if configuration.dont_do_debugserver_test: self.skipTest("debugserver tests") return func(self, *args, **kwargs) @@ -603,7 +604,7 @@ def llgs_test(func): raise Exception("@llgs_test can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.dont_do_llgs_test: + if configuration.dont_do_llgs_test: self.skipTest("llgs tests") return func(self, *args, **kwargs) @@ -617,7 +618,7 @@ def not_remote_testsuite_ready(func): raise Exception("@not_remote_testsuite_ready can only be used to decorate a test method") @wraps(func) def wrapper(self, *args, **kwargs): - if lldb.lldbtest_remote_sandbox or lldb.remote_platform: + if configuration.lldbtest_remote_sandbox or lldb.remote_platform: self.skipTest("not ready for remote testsuite") return func(self, *args, **kwargs) @@ -927,7 +928,7 @@ def skipIfNoSBHeaders(func): def skipIfiOSSimulator(func): """Decorate the item to skip tests that should be skipped on the iOS Simulator.""" - return unittest2.skipIf(hasattr(lldb, 'remote_platform_name') and lldb.remote_platform_name == 'ios-simulator', 'skip on the iOS Simulator')(func) + return unittest2.skipIf(configuration.lldb_platform_name == 'ios-simulator', 'skip on the iOS Simulator')(func) def skipIfFreeBSD(func): """Decorate the item to skip tests that should be skipped on FreeBSD.""" @@ -1337,7 +1338,7 @@ class Base(unittest2.TestCase): Do class-wide cleanup. """ - if doCleanup and not lldb.skip_build_and_cleanup: + if doCleanup and not configuration.skip_build_and_cleanup: # First, let's do the platform-specific cleanup. module = builder_module() module.cleanup() @@ -1458,7 +1459,7 @@ class Base(unittest2.TestCase): # which also sets the "__benchmarks_test__" attribute of the # function object to True. try: - if lldb.just_do_benchmarks_test: + if configuration.just_do_benchmarks_test: testMethod = getattr(self, self._testMethodName) if getattr(testMethod, "__benchmarks_test__", False): pass @@ -1556,7 +1557,7 @@ class Base(unittest2.TestCase): See also dotest.py where lldb.runHooks are processed/populated. """ - if not lldb.runHooks: + if not configuration.runHooks: self.skipTest("No runhooks specified for lldb, skip the test") if use_cmd_api: for hook in lldb.runhooks: @@ -1853,16 +1854,16 @@ class Base(unittest2.TestCase): # output tracebacks into session pairs = [] if self.__errored__: - pairs = lldb.test_result.errors + pairs = configuration.test_result.errors prefix = 'Error' elif self.__cleanup_errored__: - pairs = lldb.test_result.cleanup_errors + pairs = configuration.test_result.cleanup_errors prefix = 'CleanupError' elif self.__failed__: - pairs = lldb.test_result.failures + pairs = configuration.test_result.failures prefix = 'Failure' elif self.__expected__: - pairs = lldb.test_result.expectedFailures + pairs = configuration.test_result.expectedFailures prefix = 'ExpectedFailure' elif self.__skipped__: prefix = 'SkippedTest' @@ -2158,7 +2159,7 @@ class Base(unittest2.TestCase): def buildDefault(self, architecture=None, compiler=None, dictionary=None, clean=True): """Platform specific way to build the default binaries.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if target_is_android(): @@ -2168,7 +2169,7 @@ class Base(unittest2.TestCase): def buildDsym(self, architecture=None, compiler=None, dictionary=None, clean=True): """Platform specific way to build binaries with dsym info.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if not module.buildDsym(self, architecture, compiler, dictionary, clean): @@ -2176,7 +2177,7 @@ class Base(unittest2.TestCase): def buildDwarf(self, architecture=None, compiler=None, dictionary=None, clean=True): """Platform specific way to build binaries with dwarf maps.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if target_is_android(): @@ -2186,7 +2187,7 @@ class Base(unittest2.TestCase): def buildDwo(self, architecture=None, compiler=None, dictionary=None, clean=True): """Platform specific way to build binaries with dwarf maps.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if target_is_android(): @@ -2263,7 +2264,7 @@ class Base(unittest2.TestCase): def cleanup(self, dictionary=None): """Platform specific way to do cleanup after build.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if not module.cleanup(self, dictionary): @@ -2432,13 +2433,14 @@ class TestBase(Base): Base.setUp(self) try: - if lldb.blacklist: + blacklist = configuration.blacklist + if blacklist: className = self.__class__.__name__ classAndMethodName = "%s.%s" % (className, self._testMethodName) - if className in lldb.blacklist: - self.skipTest(lldb.blacklist.get(className)) - elif classAndMethodName in lldb.blacklist: - self.skipTest(lldb.blacklist.get(classAndMethodName)) + if className in blacklist: + self.skipTest(blacklist.get(className)) + elif classAndMethodName in blacklist: + self.skipTest(blacklist.get(classAndMethodName)) except AttributeError: pass @@ -2458,7 +2460,7 @@ class TestBase(Base): # command, instead. See also runCmd() where it decorates the "file filename" call # with additional functionality when running testsuite remotely. # - if lldb.lldbtest_remote_sandbox: + if configuration.lldbtest_remote_sandbox: def DecoratedCreateTarget(arg): self.runCmd("file %s" % arg) target = self.dbg.GetSelectedTarget() @@ -2488,12 +2490,12 @@ class TestBase(Base): self.res = lldb.SBCommandReturnObject() # Run global pre-flight code, if defined via the config file. - if lldb.pre_flight: - lldb.pre_flight(self) + if configuration.pre_flight: + configuration.pre_flight(self) - if lldb.remote_platform and lldb.remote_platform_working_dir: + if lldb.remote_platform and configuration.lldb_platform_working_dir: remote_test_dir = lldbutil.join_remote_paths( - lldb.remote_platform_working_dir, + configuration.lldb_platform_working_dir, self.getArchitecture(), str(self.test_number), self.mydir) @@ -2617,8 +2619,8 @@ class TestBase(Base): self.dbg.DeleteTarget(target) # Run global post-flight code, if defined via the config file. - if lldb.post_flight: - lldb.post_flight(self) + if configuration.post_flight: + configuration.post_flight(self) # Do this last, to make sure it's in reverse order from how we setup. Base.tearDown(self) @@ -2657,7 +2659,7 @@ class TestBase(Base): # via the settig of lldb.lldbtest_remote_sandbox. if cmd.startswith("target create "): cmd = cmd.replace("target create ", "file ") - if cmd.startswith("file ") and lldb.lldbtest_remote_sandbox: + if cmd.startswith("file ") and configuration.lldbtest_remote_sandbox: with recording(self, trace) as sbuf: the_rest = cmd.split("file ")[1] # Split the rest of the command line. @@ -2672,7 +2674,7 @@ class TestBase(Base): print("Found a file command, target (with absolute pathname)=%s" % abs_target, file=sbuf) fpath, fname = os.path.split(abs_target) parent_dir = os.path.split(fpath)[0] - platform_target_install_command = 'platform target-install %s %s' % (fpath, lldb.lldbtest_remote_sandbox) + platform_target_install_command = 'platform target-install %s %s' % (fpath, configuration.lldbtest_remote_sandbox) print("Insert this command to be run first: %s" % platform_target_install_command, file=sbuf) self.ci.HandleCommand(platform_target_install_command, self.res) # And this is the file command we want to execute, instead. @@ -2681,8 +2683,8 @@ class TestBase(Base): # Populate the remote executable pathname into the lldb namespace, # so that test cases can grab this thing out of the namespace. # - lldb.lldbtest_remote_sandboxed_executable = abs_target.replace(parent_dir, lldb.lldbtest_remote_sandbox) - cmd = "file -P %s %s %s" % (lldb.lldbtest_remote_sandboxed_executable, the_rest.replace(target, ''), abs_target) + remote_sandboxed_executable = abs_target.replace(parent_dir, configuration.lldbtest_remote_sandbox) + cmd = "file -P %s %s %s" % (remote_sandboxed_executable, the_rest.replace(target, ''), abs_target) print("And this is the replaced file command: %s" % cmd, file=sbuf) running = (cmd.startswith("run") or cmd.startswith("process launch")) @@ -2865,7 +2867,7 @@ class TestBase(Base): def build(self, architecture=None, compiler=None, dictionary=None, clean=True): """Platform specific way to build the default binaries.""" - if lldb.skip_build_and_cleanup: + if configuration.skip_build_and_cleanup: return module = builder_module() if target_is_android(): |