mirror of
https://github.com/servo/servo.git
synced 2025-06-08 00:23:30 +00:00
145 lines
4.9 KiB
Python
145 lines
4.9 KiB
Python
from __future__ import print_function, unicode_literals
|
|
|
|
import json
|
|
import os
|
|
import os.path as path
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tarfile
|
|
from time import time
|
|
import urllib
|
|
|
|
from mach.registrar import Registrar
|
|
from mach.decorators import (
|
|
CommandArgument,
|
|
CommandProvider,
|
|
Command,
|
|
)
|
|
|
|
from servo.command_base import CommandBase
|
|
import tidy
|
|
|
|
@CommandProvider
|
|
class MachCommands(CommandBase):
|
|
def __init__(self, context):
|
|
CommandBase.__init__(self, context)
|
|
if not hasattr(self.context, "built_tests"):
|
|
self.context.built_tests = False
|
|
|
|
def ensure_built_tests(self):
|
|
if self.context.built_tests: return
|
|
Registrar.dispatch('build-tests', context=self.context)
|
|
self.context.built_tests = True
|
|
|
|
def find_test(self, prefix):
|
|
candidates = [f for f in os.listdir(path.join(self.context.topdir, "target"))
|
|
if f.startswith(prefix + "-")]
|
|
if candidates:
|
|
return path.join(self.context.topdir, "target", candidates[0])
|
|
return None
|
|
|
|
def run_test(self, prefix, args=[]):
|
|
t = self.find_test(prefix)
|
|
if t:
|
|
return subprocess.call([t] + args, env=self.build_env())
|
|
|
|
@Command('test',
|
|
description='Run all Servo tests',
|
|
category='testing')
|
|
def test(self):
|
|
test_start = time()
|
|
for t in ["tidy", "unit", "ref", "content", "wpt"]:
|
|
Registrar.dispatch("test-%s" % t, context=self.context)
|
|
elapsed = time() - test_start
|
|
|
|
print("Tests completed in %0.2fs" % elapsed)
|
|
|
|
@Command('test-unit',
|
|
description='Run libservo unit tests',
|
|
category='testing',
|
|
allow_all_args=True)
|
|
@CommandArgument('test_name', default=None, nargs="...",
|
|
help="Only run tests that match this pattern")
|
|
@CommandArgument('params', default=None, nargs="...",
|
|
help="Command-line arguments to be passed to the test harness")
|
|
def test_unit(self, test_name=None, params=None):
|
|
if params is None:
|
|
params = []
|
|
if test_name is not None:
|
|
params.append(test_name)
|
|
self.ensure_bootstrapped()
|
|
self.ensure_built_tests()
|
|
return self.run_test("servo", params)
|
|
|
|
@Command('test-ref',
|
|
description='Run the reference tests',
|
|
category='testing')
|
|
@CommandArgument('--kind', '-k', default=None,
|
|
help="'cpu' or 'gpu' (default both)")
|
|
@CommandArgument('test_name', default=None, nargs="?",
|
|
help="Only run tests that match this pattern")
|
|
@CommandArgument('servo_params', default=None, nargs="...",
|
|
help="Command-line arguments to be passed through to Servo")
|
|
def test_ref(self, kind=None, test_name=None, servo_params=None):
|
|
self.ensure_bootstrapped()
|
|
self.ensure_built_tests()
|
|
|
|
kinds = ["cpu", "gpu"] if kind is None else [kind]
|
|
test_path = path.join(self.context.topdir, "tests", "ref")
|
|
error = False
|
|
|
|
test_start = time()
|
|
for k in kinds:
|
|
print("Running %s reftests..." % k)
|
|
test_args = [k, test_path]
|
|
if test_name is not None:
|
|
test_args.append(test_name)
|
|
if servo_params is not None:
|
|
test_args += ["--"] + servo_params
|
|
ret = self.run_test("reftest", test_args)
|
|
error = error or ret != 0
|
|
elapsed = time() - test_start
|
|
|
|
print("Reference tests completed in %0.2fs" % elapsed)
|
|
|
|
if error: return 1
|
|
|
|
@Command('test-content',
|
|
description='Run the content tests',
|
|
category='testing',
|
|
allow_all_args=True)
|
|
@CommandArgument('test_name', default=None, nargs="?",
|
|
help="Only run tests that match this pattern")
|
|
def test_content(self, test_name=None):
|
|
self.ensure_bootstrapped()
|
|
self.ensure_built_tests()
|
|
|
|
test_path = path.join(self.context.topdir, "tests", "content")
|
|
test_args = ["--source-dir=%s" % test_path]
|
|
|
|
if test_name is not None:
|
|
test_args.append(test_name)
|
|
|
|
test_start = time()
|
|
ret = self.run_test("contenttest", test_args)
|
|
elapsed = time() - test_start
|
|
|
|
print("Content tests completed in %0.2fs" % elapsed)
|
|
return ret
|
|
|
|
@Command('test-tidy',
|
|
description='Run the source code tidiness check',
|
|
category='testing')
|
|
def test_tidy(self):
|
|
return tidy.scan()
|
|
|
|
@Command('test-wpt',
|
|
description='Run the web platform tests',
|
|
category='testing',
|
|
allow_all_args=True)
|
|
@CommandArgument('params', default=None, nargs='...',
|
|
help="Command-line arguments to be passed through to wpt/run.sh")
|
|
def test_wpt(self, params):
|
|
return subprocess.call(["bash", path.join("tests", "wpt", "run.sh")] + params,
|
|
env=self.build_env())
|