servo: Merge #9459 - Add mach test-webidl command (from shinglyu:testwebidl); r=Wafflespeanut

I updated the `WebIDL.py` from latest mozilla-central. And add a `./mach test-webidl` command. For #9397

Source-Repo: https://github.com/servo/servo
Source-Revision: 0ada7f9c8eda9879b5536cea3266c94214f9ce9b
This commit is contained in:
Shing Lyu 2016-01-30 20:52:53 +05:01
parent 61be94ab45
commit e405dcb806
6 changed files with 53 additions and 10 deletions

View File

@ -501,6 +501,10 @@ class IDLExposureMixins():
def isExposedInWindow(self):
return 'Window' in self.exposureSet
def isExposedOnMainThread(self):
return (self.isExposedInWindow() or
self.isExposedInSystemGlobals())
def isExposedInAnyWorker(self):
return len(self.getWorkerExposureSet()) > 0
@ -564,6 +568,9 @@ class IDLExternalInterface(IDLObjectWithIdentifier, IDLExposureMixins):
def isJSImplemented(self):
return False
def isProbablyShortLivingObject(self):
return False
def getNavigatorProperty(self):
return None
@ -1409,6 +1416,7 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins):
identifier == "Unforgeable" or
identifier == "UnsafeInPrerendering" or
identifier == "LegacyEventInit" or
identifier == "ProbablyShortLivingObject" or
identifier == "Abstract"):
# Known extended attributes that do not take values
if not attr.noArguments():
@ -1523,6 +1531,14 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins):
def isJSImplemented(self):
return bool(self.getJSImplementation())
def isProbablyShortLivingObject(self):
current = self
while current:
if current.getExtendedAttribute("ProbablyShortLivingObject"):
return True
current = current.parent
return False
def getNavigatorProperty(self):
naviProp = self.getExtendedAttribute("NavigatorProperty")
if not naviProp:

View File

@ -1,11 +1,11 @@
--- WebIDL.py
+++ WebIDL.py
@@ -1357,7 +1357,8 @@ class IDLInterface(IDLObjectWithScope, IDLExposureMixins):
identifier == "ChromeOnly" or
@@ -1416,7 +1416,8 @@
identifier == "Unforgeable" or
identifier == "UnsafeInPrerendering" or
- identifier == "LegacyEventInit"):
+ identifier == "LegacyEventInit" or
identifier == "LegacyEventInit" or
- identifier == "ProbablyShortLivingObject"):
+ identifier == "ProbablyShortLivingObject" or
+ identifier == "Abstract"):
# Known extended attributes that do not take values
if not attr.noArguments():

View File

@ -20,20 +20,20 @@ class TestHarness(object):
def finish(self):
if self.verbose or self.printed_intro:
print "Finished test %s" % self.test
print("Finished test %s" % self.test)
def maybe_print_intro(self):
if not self.printed_intro:
print "Starting test %s" % self.test
print("Starting test %s" % self.test)
self.printed_intro = True
def test_pass(self, msg):
if self.verbose:
print "TEST-PASS | %s" % msg
print("TEST-PASS | %s" % msg)
def test_fail(self, msg):
self.maybe_print_intro()
print "TEST-UNEXPECTED-FAIL | %s" % msg
print("TEST-UNEXPECTED-FAIL | %s" % msg)
def ok(self, condition, msg):
if condition:
@ -46,7 +46,7 @@ class TestHarness(object):
self.test_pass(msg)
else:
self.test_fail(msg)
print "\tGot %s expected %s" % (a, b)
print("\tGot %s expected %s" % (a, b))
def run_tests(tests, verbose):
testdir = os.path.join(os.path.dirname(__file__), 'tests')
@ -63,7 +63,7 @@ def run_tests(tests, verbose):
try:
_test.WebIDLTest.__call__(WebIDL.Parser(), harness)
except Exception, ex:
print "TEST-UNEXPECTED-FAIL | Unhandled exception in test %s: %s" % (testpath, ex)
print("TEST-UNEXPECTED-FAIL | Unhandled exception in test %s: %s" % (testpath, ex))
traceback.print_exc()
finally:
harness.finish()

View File

@ -1,2 +1,4 @@
wget https://mxr.mozilla.org/mozilla-central/source/dom/bindings/parser/WebIDL.py?raw=1 -O WebIDL.py
patch < abstract.patch
# TODO: update test files from https://dxr.mozilla.org/mozilla-central/source/dom/bindings/parser/tests

View File

@ -10,3 +10,6 @@ toml == 0.9.1
flake8 == 2.4.1
pep8 == 1.5.7
pyflakes == 0.8.0
# For test-webidl
ply == 3.8

View File

@ -232,6 +232,28 @@ class MachCommands(CommandBase):
def test_tidy(self, faster):
return tidy.scan(faster)
@Command('test-webidl',
description='Run the WebIDL parser tests',
category='testing')
@CommandArgument('--quiet', '-q', default=False, action="store_true",
help="Don't print passing tests.")
@CommandArgument('tests', default=None, nargs="...",
help="Specific tests to run, relative to the tests directory")
def test_webidl(self, quiet, tests):
self.ensure_bootstrapped()
test_file_dir = path.abspath(path.join(PROJECT_TOPLEVEL_PATH, "components", "script",
"dom", "bindings", "codegen", "parser"))
# For the `import WebIDL` in runtests.py
sys.path.insert(0, test_file_dir)
run_file = path.abspath(path.join(test_file_dir, "runtests.py"))
run_globals = {"__file__": run_file}
execfile(run_file, run_globals)
verbose = not quiet
return run_globals["run_tests"](tests, verbose)
@Command('test-wpt-failure',
description='Run the web platform tests',
category='testing')