Author: lawrence_danna Date: Mon Oct 7 17:26:53 2019 New Revision: 373997 URL: http://llvm.org/viewvc/llvm-project?rev=373997&view=rev Log: DWIMy filterspecs for dotest.py
Summary: dotest.py currently requires a filterspec to be of the form `TestCase.test_method`. This patch makes it more flexible, so you can pass `TestModule.TestCase.test_method` or `TestModule.TestCase` or `TestCase.test_method` or just `test_method`. This makes it more convenient to just copy a test name out of the terminal after running a bunch of tests and use it as a filterspec. Reviewers: JDevlieghere, jasonmolenda, labath Reviewed By: JDevlieghere Subscribers: jingham, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D68545 Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest.py lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/dotest.py?rev=373997&r1=373996&r2=373997&view=diff ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/dotest.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/dotest.py Mon Oct 7 17:26:53 2019 @@ -667,34 +667,42 @@ def visit_file(dir, name): # Thoroughly check the filterspec against the base module and admit # the (base, filterspec) combination only when it makes sense. - filterspec = None - for filterspec in configuration.filters: - # Optimistically set the flag to True. - filtered = True - module = __import__(base) - parts = filterspec.split('.') - obj = module + + def check(obj, parts): for part in parts: try: parent, obj = obj, getattr(obj, part) except AttributeError: # The filterspec has failed. - filtered = False - break + return False + return True + + module = __import__(base) - # If filtered, we have a good filterspec. Add it. - if filtered: - # print("adding filter spec %s to module %s" % (filterspec, module)) - configuration.suite.addTests( - unittest2.defaultTestLoader.loadTestsFromName( - filterspec, module)) - continue + def iter_filters(): + for filterspec in configuration.filters: + parts = filterspec.split('.') + if check(module, parts): + yield filterspec + elif parts[0] == base and len(parts) > 1 and check(module, parts[1:]): + yield '.'.join(parts[1:]) + else: + for key,value in module.__dict__.items(): + if check(value, parts): + yield key + '.' + filterspec + + filtered = False + for filterspec in iter_filters(): + filtered = True + print("adding filter spec %s to module %s" % (filterspec, repr(module))) + tests = unittest2.defaultTestLoader.loadTestsFromName(filterspec, module) + configuration.suite.addTests(tests) # Forgo this module if the (base, filterspec) combo is invalid if configuration.filters and not filtered: return - if not filterspec or not filtered: + if not filtered: # 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. Modified: lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py?rev=373997&r1=373996&r2=373997&view=diff ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/dotest_args.py Mon Oct 7 17:26:53 2019 @@ -61,7 +61,9 @@ def create_parser(): '-f', metavar='filterspec', action='append', - help='Specify a filter, which consists of the test class name, a dot, followed by the test method, to only admit such test into the test suite') # FIXME: Example? + help=('Specify a filter, which looks like "TestModule.TestClass.test_name". '+ + 'You may also use shortened filters, such as '+ + '"TestModule.TestClass", "TestClass.test_name", or just "test_name".')) group.add_argument( '-p', metavar='pattern', _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits