mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
604a6d61ce
- Bug 1123516 - Implement maplike/setlike in WebIDL parser; r=bz (5d62bcd93) - Bug 1140324 - Remove __noSuchMethod__ handling from WebIDL parser and throw an exception instead. r=peterv (f7ea99339) - Bug 1123516 - Implement maplike/setlike in WebIDL Codegen; r=b (0ca39b335) - Bug 1183604, add some more assertions to help implementing new cycle collectable classes, r=mccr8 (1e66d29fe) - Bug 1178665 - Part 1: Make Promise::DispatchToMicroTask public. r=khuey (b962e6006) - Bug 1178665 - Part 2 - Adapt to latest Animation.finish procedure changes. r=bbirtles (33219fc0d) - Bug 1178665 - Part 3: Make finish notifications asynchronously in most cases. r=bbirtles, r=smaug (144c0944a) - Bug1180770part 1. Remove the unused ThrowNotEnoughArgsError. r=peterv (8bc1690f5) - Bug1180770part 2. Remove the unused ifaceName/memberName arguments of ThrowMethodFailedWithDetails and rename it to ThrowMethodFailed. r=peterv (ee4900547) - Bug 1135961. Implement subclassing of DOM objects. r=peterv (8e7e67b88) - Bug 1170691 - part 1 - add the generating script's directory to sys.path in file_generate.py; r=glandium (dd1520952) - Bug 1168409 - part 1 - avoid importing buildconfig in histogram_tools.py; r=gfritzsche (6a46dce23) - Bug 1168409 - part 2 - avoiding importing usecounters in histogram_tools.py; r=gfritzsche (21a468303) - Bug 1144397. Disallow using fill when dedent would do. r=peterv (544d4978d) - Bug 1158806. Don't try to include stuff for a generated hasInstance hook if we have no interface object, since in that case we don't need the include. r=peterv (d280a1608) - missing bit of Bug 1161627 - part 2 - machine-convert TemporaryRef<T> to already_AddRefed<T> (c51384311) - Bug 1166910 followup: Add missing 'override' keyword to HTMLImageElement method GetImageReferrerPolicy. rs=ehsan (9e3dc8e6d) - Bug 1174913 - remove unnecessary attribute parsing. r=bz (fdb769eda) - Bug 1170680 - Do not add non-animated images to the visible list in response to UNLOCKED_DRAW. r=tn (a594883e8) - Bug 1174923 - Stop delaying the document load event until images are decoded. r=tn a=kwierso (caee1b25f) - Bug 968923 - part 3b - propagating use counters from SVG images into owning/parent documents; r=seth (234a41484) - Bug 968923 - part 3a - add core DOM use counter functionality; r=smaug (98bb77358) - Bug 968923 - part 3c - miscellaneous telemetry changes for use counters; r=gfritzsche (83adec291) - Bug 968923 - part 4 - hook up use counters to WebIDL bindings; r=bz (8545e9a9b) - Bug 771367 - Update test_animations_omta.html to support testing pseudo-elements. r=dbaron (4b2e5481b) - Bug 1177563 - Test that we share agent rule processors across different documents. r=dbaron (d64146359) - Bug 1181450 - Make GENERATED_FILES more visible during the build by printing their name when they are being generated. r=gps (b0c2166e8) - Bug 1215526 - part 1 - pass dependencies file to file_generate.py; r=glandium (a14ea304a) - Bug 1215526 - part 2 - write dependencies to file_generate.py's depfile; r=glandium (dc49ad380)
185 lines
8.0 KiB
Python
185 lines
8.0 KiB
Python
import WebIDL
|
|
|
|
def WebIDLTest(parser, harness):
|
|
parser.parse("""
|
|
interface TestMethods {
|
|
void basic();
|
|
static void basicStatic();
|
|
void basicWithSimpleArgs(boolean arg1, byte arg2, unsigned long arg3);
|
|
boolean basicBoolean();
|
|
static boolean basicStaticBoolean();
|
|
boolean basicBooleanWithSimpleArgs(boolean arg1, byte arg2, unsigned long arg3);
|
|
void optionalArg(optional byte? arg1, optional sequence<byte> arg2);
|
|
void variadicArg(byte?... arg1);
|
|
void crazyTypes(sequence<long?[]>? arg1, boolean?[][]? arg2);
|
|
object getObject();
|
|
void setObject(object arg1);
|
|
void setAny(any arg1);
|
|
float doFloats(float arg1);
|
|
};
|
|
""")
|
|
|
|
results = parser.finish()
|
|
|
|
harness.ok(True, "TestMethods interface parsed without error.")
|
|
harness.check(len(results), 1, "Should be one production.")
|
|
iface = results[0]
|
|
harness.ok(isinstance(iface, WebIDL.IDLInterface),
|
|
"Should be an IDLInterface")
|
|
harness.check(iface.identifier.QName(), "::TestMethods", "Interface has the right QName")
|
|
harness.check(iface.identifier.name, "TestMethods", "Interface has the right name")
|
|
harness.check(len(iface.members), 13, "Expect 13 members")
|
|
|
|
methods = iface.members
|
|
|
|
def checkArgument(argument, QName, name, type, optional, variadic):
|
|
harness.ok(isinstance(argument, WebIDL.IDLArgument),
|
|
"Should be an IDLArgument")
|
|
harness.check(argument.identifier.QName(), QName, "Argument has the right QName")
|
|
harness.check(argument.identifier.name, name, "Argument has the right name")
|
|
harness.check(str(argument.type), type, "Argument has the right return type")
|
|
harness.check(argument.optional, optional, "Argument has the right optional value")
|
|
harness.check(argument.variadic, variadic, "Argument has the right variadic value")
|
|
|
|
def checkMethod(method, QName, name, signatures,
|
|
static=False, getter=False, setter=False, creator=False,
|
|
deleter=False, legacycaller=False, stringifier=False):
|
|
harness.ok(isinstance(method, WebIDL.IDLMethod),
|
|
"Should be an IDLMethod")
|
|
harness.ok(method.isMethod(), "Method is a method")
|
|
harness.ok(not method.isAttr(), "Method is not an attr")
|
|
harness.ok(not method.isConst(), "Method is not a const")
|
|
harness.check(method.identifier.QName(), QName, "Method has the right QName")
|
|
harness.check(method.identifier.name, name, "Method has the right name")
|
|
harness.check(method.isStatic(), static, "Method has the correct static value")
|
|
harness.check(method.isGetter(), getter, "Method has the correct getter value")
|
|
harness.check(method.isSetter(), setter, "Method has the correct setter value")
|
|
harness.check(method.isCreator(), creator, "Method has the correct creator value")
|
|
harness.check(method.isDeleter(), deleter, "Method has the correct deleter value")
|
|
harness.check(method.isLegacycaller(), legacycaller, "Method has the correct legacycaller value")
|
|
harness.check(method.isStringifier(), stringifier, "Method has the correct stringifier value")
|
|
harness.check(len(method.signatures()), len(signatures), "Method has the correct number of signatures")
|
|
|
|
sigpairs = zip(method.signatures(), signatures)
|
|
for (gotSignature, expectedSignature) in sigpairs:
|
|
(gotRetType, gotArgs) = gotSignature
|
|
(expectedRetType, expectedArgs) = expectedSignature
|
|
|
|
harness.check(str(gotRetType), expectedRetType,
|
|
"Method has the expected return type.")
|
|
|
|
for i in range(0, len(gotArgs)):
|
|
(QName, name, type, optional, variadic) = expectedArgs[i]
|
|
checkArgument(gotArgs[i], QName, name, type, optional, variadic)
|
|
|
|
checkMethod(methods[0], "::TestMethods::basic", "basic", [("Void", [])])
|
|
checkMethod(methods[1], "::TestMethods::basicStatic", "basicStatic",
|
|
[("Void", [])], static=True)
|
|
checkMethod(methods[2], "::TestMethods::basicWithSimpleArgs",
|
|
"basicWithSimpleArgs",
|
|
[("Void",
|
|
[("::TestMethods::basicWithSimpleArgs::arg1", "arg1", "Boolean", False, False),
|
|
("::TestMethods::basicWithSimpleArgs::arg2", "arg2", "Byte", False, False),
|
|
("::TestMethods::basicWithSimpleArgs::arg3", "arg3", "UnsignedLong", False, False)])])
|
|
checkMethod(methods[3], "::TestMethods::basicBoolean", "basicBoolean", [("Boolean", [])])
|
|
checkMethod(methods[4], "::TestMethods::basicStaticBoolean", "basicStaticBoolean", [("Boolean", [])], static=True)
|
|
checkMethod(methods[5], "::TestMethods::basicBooleanWithSimpleArgs",
|
|
"basicBooleanWithSimpleArgs",
|
|
[("Boolean",
|
|
[("::TestMethods::basicBooleanWithSimpleArgs::arg1", "arg1", "Boolean", False, False),
|
|
("::TestMethods::basicBooleanWithSimpleArgs::arg2", "arg2", "Byte", False, False),
|
|
("::TestMethods::basicBooleanWithSimpleArgs::arg3", "arg3", "UnsignedLong", False, False)])])
|
|
checkMethod(methods[6], "::TestMethods::optionalArg",
|
|
"optionalArg",
|
|
[("Void",
|
|
[("::TestMethods::optionalArg::arg1", "arg1", "ByteOrNull", True, False),
|
|
("::TestMethods::optionalArg::arg2", "arg2", "ByteSequence", True, False)])])
|
|
checkMethod(methods[7], "::TestMethods::variadicArg",
|
|
"variadicArg",
|
|
[("Void",
|
|
[("::TestMethods::variadicArg::arg1", "arg1", "ByteOrNull", True, True)])])
|
|
checkMethod(methods[8], "::TestMethods::crazyTypes",
|
|
"crazyTypes",
|
|
[("Void",
|
|
[("::TestMethods::crazyTypes::arg1", "arg1", "LongOrNullArraySequenceOrNull", False, False),
|
|
("::TestMethods::crazyTypes::arg2", "arg2", "BooleanOrNullArrayArrayOrNull", False, False)])])
|
|
checkMethod(methods[9], "::TestMethods::getObject",
|
|
"getObject", [("Object", [])])
|
|
checkMethod(methods[10], "::TestMethods::setObject",
|
|
"setObject",
|
|
[("Void",
|
|
[("::TestMethods::setObject::arg1", "arg1", "Object", False, False)])])
|
|
checkMethod(methods[11], "::TestMethods::setAny",
|
|
"setAny",
|
|
[("Void",
|
|
[("::TestMethods::setAny::arg1", "arg1", "Any", False, False)])])
|
|
checkMethod(methods[12], "::TestMethods::doFloats",
|
|
"doFloats",
|
|
[("Float",
|
|
[("::TestMethods::doFloats::arg1", "arg1", "Float", False, False)])])
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface A {
|
|
void foo(optional float bar = 1);
|
|
};
|
|
""")
|
|
results = parser.finish()
|
|
except Exception, x:
|
|
threw = True
|
|
harness.ok(not threw, "Should allow integer to float type corecion")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface A {
|
|
[GetterThrows] void foo();
|
|
};
|
|
""")
|
|
results = parser.finish()
|
|
except Exception, x:
|
|
threw = True
|
|
harness.ok(threw, "Should not allow [GetterThrows] on methods")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface A {
|
|
[SetterThrows] void foo();
|
|
};
|
|
""")
|
|
results = parser.finish()
|
|
except Exception, x:
|
|
threw = True
|
|
harness.ok(threw, "Should not allow [SetterThrows] on methods")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface A {
|
|
[Throw] void foo();
|
|
};
|
|
""")
|
|
results = parser.finish()
|
|
except Exception, x:
|
|
threw = True
|
|
harness.ok(threw, "Should spell [Throws] correctly on methods")
|
|
|
|
parser = parser.reset()
|
|
threw = False
|
|
try:
|
|
parser.parse("""
|
|
interface A {
|
|
void __noSuchMethod__();
|
|
};
|
|
""")
|
|
results = parser.finish()
|
|
except Exception, x:
|
|
threw = True
|
|
harness.ok(threw, "Should not allow __noSuchMethod__ methods")
|