Skip to content

Commit

Permalink
dotest: make inline tests compatible with -f
Browse files Browse the repository at this point in the history
Summary:
This is split off from D47265 where I needed to be able to invoke every test
with -f. That patch is kinda dead now, but this part seems like a good
cleanup anyway.

The problem with inline tests was in the way we were adding methods to
the class, which left them with an incorrect __name__ property. This
prevented dotest from finding them with -f.

I fix this with (what I think is) the correct way of dynamically
creating classes -- passing the list of methods during type construction
instead of fixing up the class afterwards. Among other things this has
the advantage of not needing to do anything special for debug info
variants. As our test method will be visible to the metaclass, it will
automagically do the multiplication for us.

Reviewers: JDevlieghere, aprantl, tberghammer

Subscribers: eraman, lldb-commits

Differential Revision: https://reviews.llvm.org/D47579

llvm-svn: 334009
  • Loading branch information
labath committed Jun 5, 2018
1 parent 53d35d2 commit 6637738
Showing 1 changed file with 7 additions and 54 deletions.
61 changes: 7 additions & 54 deletions lldb/packages/Python/lldbsuite/test/lldbinline.py
Expand Up @@ -84,18 +84,6 @@ def handle_breakpoint(self, test, breakpoint_id):
class InlineTest(TestBase):
# Internal implementation

def getRerunArgs(self):
# The -N option says to NOT run a if it matches the option argument, so
# if we are using dSYM we say to NOT run dwarf (-N dwarf) and vice
# versa.
if self.using_dsym is None:
# The test was skipped altogether.
return ""
elif self.using_dsym:
return "-N dwarf " + self.mydir
else:
return "-N dsym " + self.mydir

def BuildMakefile(self):
makefilePath = self.getBuildArtifact("Makefile")
if os.path.exists(makefilePath):
Expand Down Expand Up @@ -135,37 +123,10 @@ def BuildMakefile(self):
makefile.flush()
makefile.close()

@add_test_categories(["dsym"])
def __test_with_dsym(self):
self.using_dsym = True
self.BuildMakefile()
self.build()
self.do_test()
__test_with_dsym.debug_info = "dsym"

@add_test_categories(["dwarf"])
def __test_with_dwarf(self):
self.using_dsym = False
def _test(self):
self.BuildMakefile()
self.build()
self.do_test()
__test_with_dwarf.debug_info = "dwarf"

@add_test_categories(["dwo"])
def __test_with_dwo(self):
self.using_dsym = False
self.BuildMakefile()
self.build()
self.do_test()
__test_with_dwo.debug_info = "dwo"

@add_test_categories(["gmodules"])
def __test_with_gmodules(self):
self.using_dsym = False
self.BuildMakefile()
self.build()
self.do_test()
__test_with_gmodules.debug_info = "gmodules"

def execute_user_command(self, __command):
exec(__command, globals(), locals())
Expand Down Expand Up @@ -237,23 +198,15 @@ def MakeInlineTest(__file, __globals, decorators=None):
InlineTest.mydir = TestBase.compute_mydir(__file)

test_name, _ = os.path.splitext(file_basename)

test_func = ApplyDecoratorsToFunction(InlineTest._test, decorators)
# Build the test case
test = type(test_name, (InlineTest,), {'using_dsym': None})
test.name = test_name

test.test_with_dsym = ApplyDecoratorsToFunction(
test._InlineTest__test_with_dsym, decorators)
test.test_with_dwarf = ApplyDecoratorsToFunction(
test._InlineTest__test_with_dwarf, decorators)
test.test_with_dwo = ApplyDecoratorsToFunction(
test._InlineTest__test_with_dwo, decorators)
test.test_with_gmodules = ApplyDecoratorsToFunction(
test._InlineTest__test_with_gmodules, decorators)
test_class = type(test_name, (InlineTest,), dict(test=test_func, name=test_name))

# Add the test case to the globals, and hide InlineTest
__globals.update({test_name: test})
__globals.update({test_name: test_class})

# Keep track of the original test filename so we report it
# correctly in test results.
test.test_filename = __file
return test
test_class.test_filename = __file
return test_class

0 comments on commit 6637738

Please sign in to comment.