From dfdbcabc2e9803a1beb975af8c3aa37331476f85 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Thu, 28 Jan 2016 00:58:15 +0100 Subject: Add infrastructure for compiletests Also adds compilefail tests for some lints, closes #5646. --- python/servo/testing_commands.py | 64 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) (limited to 'python/servo/testing_commands.py') diff --git a/python/servo/testing_commands.py b/python/servo/testing_commands.py index 142a59e766f..d9d26366d20 100644 --- a/python/servo/testing_commands.py +++ b/python/servo/testing_commands.py @@ -109,7 +109,10 @@ class MachCommands(CommandBase): "include_arg": "include"}), ("unit", {"kwargs": {}, "paths": [path.abspath(path.join("tests", "unit"))], - "include_arg": "test_name"}) + "include_arg": "test_name"}), + ("compiletest", {"kwargs": {"release": release}, + "paths": [path.abspath(path.join("tests", "compiletest"))], + "include_arg": "test_name"}) ]) suites_by_prefix = {path: k for k, v in suites.iteritems() if "paths" in v for path in v["paths"]} @@ -207,6 +210,65 @@ class MachCommands(CommandBase): if result != 0: return result + @Command('test-compiletest', + description='Run compiletests', + category='testing') + @CommandArgument('--package', '-p', default=None, help="Specific package to test") + @CommandArgument('test_name', nargs=argparse.REMAINDER, + help="Only run tests that match this pattern or file path") + @CommandArgument('--release', default=False, action="store_true", + help="Run with a release build of servo") + def test_compiletest(self, test_name=None, package=None, release=False): + if test_name is None: + test_name = [] + + self.ensure_bootstrapped() + + if package: + packages = {package} + else: + packages = set() + + test_patterns = [] + for test in test_name: + # add package if 'tests/compiletest/' + match = re.search("tests/compiletest/(\\w+)/?$", test) + if match: + packages.add(match.group(1)) + # add package & test if '/', 'tests/compiletest//.rs', or similar + elif re.search("\\w/\\w", test): + tokens = test.split("/") + packages.add(tokens[-2]) + test_prefix = tokens[-1] + if test_prefix.endswith(".rs"): + test_prefix = test_prefix[:-3] + test_prefix += "::" + test_patterns.append(test_prefix) + # add test as-is otherwise + else: + test_patterns.append(test) + + if not packages: + packages = set(os.listdir(path.join(self.context.topdir, "tests", "compiletest"))) + + packages.remove("helper") + + args = ["cargo", "test"] + for crate in packages: + args += ["-p", "%s_compiletest" % crate] + args += test_patterns + + env = self.build_env() + if release: + env["BUILD_MODE"] = "release" + args += ["--release"] + else: + env["BUILD_MODE"] = "debug" + + result = call(args, env=env, cwd=self.servo_crate()) + if result != 0: + return result + @Command('test-ref', description='Run the reference tests', category='testing') -- cgit v1.2.3