labath created this revision.
Herald added subscribers: JDevlieghere, eraman.
This needs to be cleaned up before we can consider submitting it.
However, I am putting it out here, so we you can test it's impact on
your setup.
PS: This does not prevent the debug-info replication for "inline" tests.
It just implements it more nicely.
https://reviews.llvm.org/D47265
Files:
lit/Suite/lldbtest.py
packages/Python/lldbsuite/test/example/TestSequenceFunctions.py
packages/Python/lldbsuite/test/lldbinline.py
Index: packages/Python/lldbsuite/test/lldbinline.py
===================================================================
--- packages/Python/lldbsuite/test/lldbinline.py
+++ packages/Python/lldbsuite/test/lldbinline.py
@@ -135,37 +135,11 @@
makefile.flush()
makefile.close()
- @add_test_categories(["dsym"])
- def __test_with_dsym(self):
+ def _test(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
- 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())
@@ -237,18 +211,13 @@
InlineTest.mydir = TestBase.compute_mydir(__file)
test_name, _ = os.path.splitext(file_basename)
+
+ test = ApplyDecoratorsToFunction(
+ InlineTest._test, decorators)
# Build the test case
- test = type(test_name, (InlineTest,), {'using_dsym': None})
+ test = type(test_name, (InlineTest,), dict(using_dsym=None, test=test))
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)
# Add the test case to the globals, and hide InlineTest
__globals.update({test_name: test})
Index: packages/Python/lldbsuite/test/example/TestSequenceFunctions.py
===================================================================
--- packages/Python/lldbsuite/test/example/TestSequenceFunctions.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""An example unittest copied from python tutorial."""
-
-import random
-import unittest
-import traceback
-
-
-class SequenceFunctionsTestCase(unittest.TestCase):
-
- def setUp(self):
- # traceback.print_stack()
- self.seq = list(range(10))
-
- def tearDown(self):
- # traceback.print_stack()
- pass
-
- def test_shuffle(self):
- # make sure the shuffled sequence does not lose any elements
- random.shuffle(self.seq)
- self.seq.sort()
- self.assertEqual(self.seq, list(range(10)))
-
- def test_choice(self):
- element = random.choice(self.seq)
- self.assertTrue(element in self.seq)
-
- def test_sample(self):
- self.assertRaises(ValueError, random.sample, self.seq, 20)
- for element in random.sample(self.seq, 5):
- self.assertTrue(element in self.seq)
-
-if __name__ == '__main__':
- unittest.main()
Index: lit/Suite/lldbtest.py
===================================================================
--- lit/Suite/lldbtest.py
+++ lit/Suite/lldbtest.py
@@ -13,38 +13,41 @@
class LLDBTest(TestFormat):
def __init__(self, dotest_cmd):
self.dotest_cmd = dotest_cmd
+ self.tests = None
+
+ def getTests(self, bin_dir):
+ if self.tests:
+ return self.tests
+ dumper = os.path.join(os.path.dirname(__file__), "lldbtestdumper.py")
+ lldb_path = os.path.join(bin_dir, "lldb")
+ output = subprocess.check_output([sys.executable, dumper, lldb_path])
+ self.tests = [line.split() for line in output.splitlines()]
+ return self.tests
+
def getTestsInDirectory(self, testSuite, path_in_suite, litConfig,
localConfig):
- source_path = testSuite.getSourcePath(path_in_suite)
- for filename in os.listdir(source_path):
- # Ignore dot files and excluded tests.
- if (filename.startswith('.') or filename in localConfig.excludes):
- continue
-
- # Ignore files that don't start with 'Test'.
- if not filename.startswith('Test'):
+ for test in self.getTests(testSuite.config.llvm_tools_dir):
+ if test[0:-3] != list(path_in_suite):
continue
-
- filepath = os.path.join(source_path, filename)
- if not os.path.isdir(filepath):
- base, ext = os.path.splitext(filename)
- if ext in localConfig.suffixes:
- yield lit.Test.Test(testSuite, path_in_suite +
- (filename, ), localConfig)
+ yield lit.Test.Test(testSuite, test, localConfig)
def execute(self, test, litConfig):
if litConfig.noExecute:
return lit.Test.PASS, ''
if test.config.unsupported:
return (lit.Test.UNSUPPORTED, 'Test is unsupported')
- testPath, testFile = os.path.split(test.getSourcePath())
+ testDir = test.getSourcePath()
+ testDir, testMethod = os.path.split(testDir)
+ testDir, testClass = os.path.split(testDir)
+ testDir, testFile = os.path.split(testDir)
+
# On Windows, the system does not always correctly interpret shebang lines.
# To make sure we can execute the tests, add python exe as the first parameter
# of the command.
- cmd = [sys.executable] + self.dotest_cmd + [testPath, '-p', testFile]
+ cmd = [sys.executable] + self.dotest_cmd + [testDir, '-p', testFile, '-f', testClass+"."+testMethod]
try:
out, err, exitCode = lit.util.executeCommand(
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits