aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/parser/tests
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-06-24 13:38:11 +0200
committerMartin Robinson <mrobinson@igalia.com>2023-06-30 09:51:31 +0200
commit8be014ee46077e78db21c5d73058c35a4ee65fa9 (patch)
tree9bfd0bc11997381d792fd3015add8be9cd7abd70 /components/script/dom/bindings/codegen/parser/tests
parent7412e28349237055652a08a2216043d0993a3cea (diff)
downloadservo-8be014ee46077e78db21c5d73058c35a4ee65fa9.tar.gz
servo-8be014ee46077e78db21c5d73058c35a4ee65fa9.zip
Create a top-level "third_party" directory
This directory now contains third_party software that is vendored into the Servo source tree. The idea is that it would eventually hold webrender and other crates from mozilla-central as well with a standard patch management approach for each.
Diffstat (limited to 'components/script/dom/bindings/codegen/parser/tests')
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_any_null.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_argument_identifier_conflicts.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py22
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_arraybuffer.py95
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_attr.py199
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_attr_sequence_type.py77
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py570
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_builtin_filename.py14
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_builtins.py59
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_bytestring.py125
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_callback.py42
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py84
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_callback_interface.py106
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_cereactions.py157
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py128
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_const.py96
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor.py594
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py72
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py47
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_deduplicate.py20
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_dictionary.py875
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py425
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_double_null.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_duplicate_qualifiers.py64
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_empty_enum.py17
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py54
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_enum.py107
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_enum_duplicate_values.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_error_colno.py24
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py38
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py383
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_extended_attributes.py131
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_float_types.py145
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_forward_decl.py18
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_global_extended_attr.py129
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py49
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_incomplete_parent.py21
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_incomplete_types.py61
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface.py459
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface_const_identifier_conflicts.py17
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface_identifier_conflicts_across_members.py68
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py912
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interfacemixin.py534
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py84
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_method.py430
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_namespace.py232
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_newobject.py76
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_nullable_equivalency.py141
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_observableArray.py288
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_optional_constraints.py35
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_overload.py74
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_promise.py177
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_prototype_ident.py107
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_putForwards.py119
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_record.py61
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_replaceable.py84
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_sanity.py7
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_securecontext_extended_attribute.py499
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_special_method_signature_mismatch.py256
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_special_methods.py117
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_special_methods_uniqueness.py54
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_stringifier.py196
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_toJSON.py309
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_treatNonCallableAsNull.py80
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_typedef.py94
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_typedef_identifier_conflict.py19
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_undefined.py246
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py71
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py311
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_union.py198
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_union_any.py16
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_union_nullable.py60
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_usvstring.py40
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_variadic_callback.py13
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_variadic_constraints.py74
75 files changed, 0 insertions, 11670 deletions
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_any_null.py b/components/script/dom/bindings/codegen/parser/tests/test_any_null.py
deleted file mode 100644
index f9afdacb02f..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_any_null.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface DoubleNull {
- attribute any? foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_argument_identifier_conflicts.py b/components/script/dom/bindings/codegen/parser/tests/test_argument_identifier_conflicts.py
deleted file mode 100644
index 3f50cb05158..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_argument_identifier_conflicts.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface ArgumentIdentifierConflict {
- undefined foo(boolean arg1, boolean arg1);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py b/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py
deleted file mode 100644
index bbed33df926..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_argument_keywords.py
+++ /dev/null
@@ -1,22 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface Foo {
- undefined foo(object constructor);
- };
- """
- )
-
- results = parser.finish()
- harness.check(len(results), 1, "Should have an interface")
- iface = results[0]
- harness.check(len(iface.members), 1, "Should have an operation")
- operation = iface.members[0]
- harness.check(len(operation.signatures()), 1, "Should have one signature")
- (retval, args) = operation.signatures()[0]
- harness.check(len(args), 1, "Should have an argument")
- harness.check(
- args[0].identifier.name,
- "constructor",
- "Should have an identifier named 'constructor'",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_arraybuffer.py b/components/script/dom/bindings/codegen/parser/tests/test_arraybuffer.py
deleted file mode 100644
index b762d06ac29..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_arraybuffer.py
+++ /dev/null
@@ -1,95 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestArrayBuffer {
- attribute ArrayBuffer bufferAttr;
- undefined bufferMethod(ArrayBuffer arg1, ArrayBuffer? arg2, sequence<ArrayBuffer> arg3);
-
- attribute ArrayBufferView viewAttr;
- undefined viewMethod(ArrayBufferView arg1, ArrayBufferView? arg2, sequence<ArrayBufferView> arg3);
-
- attribute Int8Array int8ArrayAttr;
- undefined int8ArrayMethod(Int8Array arg1, Int8Array? arg2, sequence<Int8Array> arg3);
-
- attribute Uint8Array uint8ArrayAttr;
- undefined uint8ArrayMethod(Uint8Array arg1, Uint8Array? arg2, sequence<Uint8Array> arg3);
-
- attribute Uint8ClampedArray uint8ClampedArrayAttr;
- undefined uint8ClampedArrayMethod(Uint8ClampedArray arg1, Uint8ClampedArray? arg2, sequence<Uint8ClampedArray> arg3);
-
- attribute Int16Array int16ArrayAttr;
- undefined int16ArrayMethod(Int16Array arg1, Int16Array? arg2, sequence<Int16Array> arg3);
-
- attribute Uint16Array uint16ArrayAttr;
- undefined uint16ArrayMethod(Uint16Array arg1, Uint16Array? arg2, sequence<Uint16Array> arg3);
-
- attribute Int32Array int32ArrayAttr;
- undefined int32ArrayMethod(Int32Array arg1, Int32Array? arg2, sequence<Int32Array> arg3);
-
- attribute Uint32Array uint32ArrayAttr;
- undefined uint32ArrayMethod(Uint32Array arg1, Uint32Array? arg2, sequence<Uint32Array> arg3);
-
- attribute Float32Array float32ArrayAttr;
- undefined float32ArrayMethod(Float32Array arg1, Float32Array? arg2, sequence<Float32Array> arg3);
-
- attribute Float64Array float64ArrayAttr;
- undefined float64ArrayMethod(Float64Array arg1, Float64Array? arg2, sequence<Float64Array> arg3);
- };
- """
- )
-
- results = parser.finish()
-
- iface = results[0]
-
- harness.ok(True, "TestArrayBuffer interface parsed without error")
- harness.check(len(iface.members), 22, "Interface should have twenty two members")
-
- members = iface.members
-
- def checkStuff(attr, method, t):
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Expect an IDLAttribute")
- harness.ok(isinstance(method, WebIDL.IDLMethod), "Expect an IDLMethod")
-
- harness.check(str(attr.type), t, "Expect an ArrayBuffer type")
- harness.ok(attr.type.isSpiderMonkeyInterface(), "Should test as a js interface")
-
- (retType, arguments) = method.signatures()[0]
- harness.ok(retType.isUndefined(), "Should have an undefined return type")
- harness.check(len(arguments), 3, "Expect 3 arguments")
-
- harness.check(str(arguments[0].type), t, "Expect an ArrayBuffer type")
- harness.ok(
- arguments[0].type.isSpiderMonkeyInterface(), "Should test as a js interface"
- )
-
- harness.check(
- str(arguments[1].type), t + "OrNull", "Expect an ArrayBuffer type"
- )
- harness.ok(
- arguments[1].type.inner.isSpiderMonkeyInterface(),
- "Should test as a js interface",
- )
-
- harness.check(
- str(arguments[2].type), t + "Sequence", "Expect an ArrayBuffer type"
- )
- harness.ok(
- arguments[2].type.inner.isSpiderMonkeyInterface(),
- "Should test as a js interface",
- )
-
- checkStuff(members[0], members[1], "ArrayBuffer")
- checkStuff(members[2], members[3], "ArrayBufferView")
- checkStuff(members[4], members[5], "Int8Array")
- checkStuff(members[6], members[7], "Uint8Array")
- checkStuff(members[8], members[9], "Uint8ClampedArray")
- checkStuff(members[10], members[11], "Int16Array")
- checkStuff(members[12], members[13], "Uint16Array")
- checkStuff(members[14], members[15], "Int32Array")
- checkStuff(members[16], members[17], "Uint32Array")
- checkStuff(members[18], members[19], "Float32Array")
- checkStuff(members[20], members[21], "Float64Array")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_attr.py b/components/script/dom/bindings/codegen/parser/tests/test_attr.py
deleted file mode 100644
index e19689a81a9..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_attr.py
+++ /dev/null
@@ -1,199 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- testData = [
- ("::TestAttr%s::b", "b", "Byte%s", False),
- ("::TestAttr%s::rb", "rb", "Byte%s", True),
- ("::TestAttr%s::o", "o", "Octet%s", False),
- ("::TestAttr%s::ro", "ro", "Octet%s", True),
- ("::TestAttr%s::s", "s", "Short%s", False),
- ("::TestAttr%s::rs", "rs", "Short%s", True),
- ("::TestAttr%s::us", "us", "UnsignedShort%s", False),
- ("::TestAttr%s::rus", "rus", "UnsignedShort%s", True),
- ("::TestAttr%s::l", "l", "Long%s", False),
- ("::TestAttr%s::rl", "rl", "Long%s", True),
- ("::TestAttr%s::ul", "ul", "UnsignedLong%s", False),
- ("::TestAttr%s::rul", "rul", "UnsignedLong%s", True),
- ("::TestAttr%s::ll", "ll", "LongLong%s", False),
- ("::TestAttr%s::rll", "rll", "LongLong%s", True),
- ("::TestAttr%s::ull", "ull", "UnsignedLongLong%s", False),
- ("::TestAttr%s::rull", "rull", "UnsignedLongLong%s", True),
- ("::TestAttr%s::str", "str", "String%s", False),
- ("::TestAttr%s::rstr", "rstr", "String%s", True),
- ("::TestAttr%s::obj", "obj", "Object%s", False),
- ("::TestAttr%s::robj", "robj", "Object%s", True),
- ("::TestAttr%s::object", "object", "Object%s", False),
- ("::TestAttr%s::f", "f", "Float%s", False),
- ("::TestAttr%s::rf", "rf", "Float%s", True),
- ]
-
- parser.parse(
- """
- interface TestAttr {
- attribute byte b;
- readonly attribute byte rb;
- attribute octet o;
- readonly attribute octet ro;
- attribute short s;
- readonly attribute short rs;
- attribute unsigned short us;
- readonly attribute unsigned short rus;
- attribute long l;
- readonly attribute long rl;
- attribute unsigned long ul;
- readonly attribute unsigned long rul;
- attribute long long ll;
- readonly attribute long long rll;
- attribute unsigned long long ull;
- readonly attribute unsigned long long rull;
- attribute DOMString str;
- readonly attribute DOMString rstr;
- attribute object obj;
- readonly attribute object robj;
- attribute object _object;
- attribute float f;
- readonly attribute float rf;
- };
-
- interface TestAttrNullable {
- attribute byte? b;
- readonly attribute byte? rb;
- attribute octet? o;
- readonly attribute octet? ro;
- attribute short? s;
- readonly attribute short? rs;
- attribute unsigned short? us;
- readonly attribute unsigned short? rus;
- attribute long? l;
- readonly attribute long? rl;
- attribute unsigned long? ul;
- readonly attribute unsigned long? rul;
- attribute long long? ll;
- readonly attribute long long? rll;
- attribute unsigned long long? ull;
- readonly attribute unsigned long long? rull;
- attribute DOMString? str;
- readonly attribute DOMString? rstr;
- attribute object? obj;
- readonly attribute object? robj;
- attribute object? _object;
- attribute float? f;
- readonly attribute float? rf;
- };
- """
- )
-
- results = parser.finish()
-
- def checkAttr(attr, QName, name, type, readonly):
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.ok(attr.isAttr(), "Attr is an Attr")
- harness.ok(not attr.isMethod(), "Attr is not an method")
- harness.ok(not attr.isConst(), "Attr is not a const")
- harness.check(attr.identifier.QName(), QName, "Attr has the right QName")
- harness.check(attr.identifier.name, name, "Attr has the right name")
- harness.check(str(attr.type), type, "Attr has the right type")
- harness.check(attr.readonly, readonly, "Attr's readonly state is correct")
-
- harness.ok(True, "TestAttr interface parsed without error.")
- harness.check(len(results), 2, "Should be two productions.")
- iface = results[0]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(
- iface.identifier.QName(), "::TestAttr", "Interface has the right QName"
- )
- harness.check(iface.identifier.name, "TestAttr", "Interface has the right name")
- harness.check(
- len(iface.members), len(testData), "Expect %s members" % len(testData)
- )
-
- attrs = iface.members
-
- for i in range(len(attrs)):
- data = testData[i]
- attr = attrs[i]
- (QName, name, type, readonly) = data
- checkAttr(attr, QName % "", name, type % "", readonly)
-
- iface = results[1]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(
- iface.identifier.QName(), "::TestAttrNullable", "Interface has the right QName"
- )
- harness.check(
- iface.identifier.name, "TestAttrNullable", "Interface has the right name"
- )
- harness.check(
- len(iface.members), len(testData), "Expect %s members" % len(testData)
- )
-
- attrs = iface.members
-
- for i in range(len(attrs)):
- data = testData[i]
- attr = attrs[i]
- (QName, name, type, readonly) = data
- checkAttr(attr, QName % "Nullable", name, type % "OrNull", readonly)
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [SetterThrows] readonly attribute boolean foo;
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should not allow [SetterThrows] on readonly attributes")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throw] readonly attribute boolean foo;
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should spell [Throws] correctly")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [SameObject] readonly attribute boolean foo;
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw, "Should not allow [SameObject] on attributes not of interface type"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [SameObject] readonly attribute A foo;
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(not threw, "Should allow [SameObject] on attributes of interface type")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_attr_sequence_type.py b/components/script/dom/bindings/codegen/parser/tests/test_attr_sequence_type.py
deleted file mode 100644
index f3249de900a..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_attr_sequence_type.py
+++ /dev/null
@@ -1,77 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface AttrSequenceType {
- attribute sequence<object> foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Attribute type must not be a sequence type")
-
- parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface AttrUnionWithSequenceType {
- attribute (sequence<object> or DOMString) foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Attribute type must not be a union with a sequence member type")
-
- parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface AttrNullableUnionWithSequenceType {
- attribute (sequence<object>? or DOMString) foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Attribute type must not be a union with a nullable sequence " "member type",
- )
-
- parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface AttrUnionWithUnionWithSequenceType {
- attribute ((sequence<object> or DOMString) or AttrUnionWithUnionWithSequenceType) foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Attribute type must not be a union type with a union member "
- "type that has a sequence member type",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py b/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py
deleted file mode 100644
index 97a7f47859a..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_attributes_on_types.py
+++ /dev/null
@@ -1,570 +0,0 @@
-# Import the WebIDL module, so we can do isinstance checks and whatnot
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- # Basic functionality
- threw = False
- try:
- parser.parse(
- """
- typedef [EnforceRange] long Foo;
- typedef [Clamp] long Bar;
- typedef [LegacyNullToEmptyString] DOMString Baz;
- dictionary A {
- required [EnforceRange] long a;
- required [Clamp] long b;
- [ChromeOnly, EnforceRange] long c;
- Foo d;
- };
- interface B {
- attribute Foo typedefFoo;
- attribute [EnforceRange] long foo;
- attribute [Clamp] long bar;
- attribute [LegacyNullToEmptyString] DOMString baz;
- undefined method([EnforceRange] long foo, [Clamp] long bar,
- [LegacyNullToEmptyString] DOMString baz);
- undefined method2(optional [EnforceRange] long foo, optional [Clamp] long bar,
- optional [LegacyNullToEmptyString] DOMString baz);
- undefined method3(optional [LegacyNullToEmptyString] UTF8String foo = "");
- };
- interface C {
- attribute [EnforceRange] long? foo;
- attribute [Clamp] long? bar;
- undefined method([EnforceRange] long? foo, [Clamp] long? bar);
- undefined method2(optional [EnforceRange] long? foo, optional [Clamp] long? bar);
- };
- interface Setlike {
- setlike<[Clamp] long>;
- };
- interface Maplike {
- maplike<[Clamp] long, [EnforceRange] long>;
- };
- interface Iterable {
- iterable<[Clamp] long, [EnforceRange] long>;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(not threw, "Should not have thrown on parsing normal")
- if not threw:
- harness.check(
- results[0].innerType.hasEnforceRange(), True, "Foo is [EnforceRange]"
- )
- harness.check(results[1].innerType.hasClamp(), True, "Bar is [Clamp]")
- harness.check(
- results[2].innerType.legacyNullToEmptyString,
- True,
- "Baz is [LegacyNullToEmptyString]",
- )
- A = results[3]
- harness.check(
- A.members[0].type.hasEnforceRange(), True, "A.a is [EnforceRange]"
- )
- harness.check(A.members[1].type.hasClamp(), True, "A.b is [Clamp]")
- harness.check(
- A.members[2].type.hasEnforceRange(), True, "A.c is [EnforceRange]"
- )
- harness.check(
- A.members[3].type.hasEnforceRange(), True, "A.d is [EnforceRange]"
- )
- B = results[4]
- harness.check(
- B.members[0].type.hasEnforceRange(), True, "B.typedefFoo is [EnforceRange]"
- )
- harness.check(
- B.members[1].type.hasEnforceRange(), True, "B.foo is [EnforceRange]"
- )
- harness.check(B.members[2].type.hasClamp(), True, "B.bar is [Clamp]")
- harness.check(
- B.members[3].type.legacyNullToEmptyString,
- True,
- "B.baz is [LegacyNullToEmptyString]",
- )
- method = B.members[4].signatures()[0][1]
- harness.check(
- method[0].type.hasEnforceRange(),
- True,
- "foo argument of method is [EnforceRange]",
- )
- harness.check(
- method[1].type.hasClamp(), True, "bar argument of method is [Clamp]"
- )
- harness.check(
- method[2].type.legacyNullToEmptyString,
- True,
- "baz argument of method is [LegacyNullToEmptyString]",
- )
- method2 = B.members[5].signatures()[0][1]
- harness.check(
- method2[0].type.hasEnforceRange(),
- True,
- "foo argument of method2 is [EnforceRange]",
- )
- harness.check(
- method2[1].type.hasClamp(), True, "bar argument of method2 is [Clamp]"
- )
- harness.check(
- method2[2].type.legacyNullToEmptyString,
- True,
- "baz argument of method2 is [LegacyNullToEmptyString]",
- )
-
- method3 = B.members[6].signatures()[0][1]
- harness.check(
- method3[0].type.legacyNullToEmptyString,
- True,
- "bar argument of method2 is [LegacyNullToEmptyString]",
- )
- harness.check(
- method3[0].defaultValue.type.isUTF8String(),
- True,
- "default value of bar argument of method2 is correctly coerced to UTF8String",
- )
-
- C = results[5]
- harness.ok(C.members[0].type.nullable(), "C.foo is nullable")
- harness.ok(C.members[0].type.hasEnforceRange(), "C.foo has [EnforceRange]")
- harness.ok(C.members[1].type.nullable(), "C.bar is nullable")
- harness.ok(C.members[1].type.hasClamp(), "C.bar has [Clamp]")
- method = C.members[2].signatures()[0][1]
- harness.ok(method[0].type.nullable(), "foo argument of method is nullable")
- harness.ok(
- method[0].type.hasEnforceRange(),
- "foo argument of method has [EnforceRange]",
- )
- harness.ok(method[1].type.nullable(), "bar argument of method is nullable")
- harness.ok(method[1].type.hasClamp(), "bar argument of method has [Clamp]")
- method2 = C.members[3].signatures()[0][1]
- harness.ok(method2[0].type.nullable(), "foo argument of method2 is nullable")
- harness.ok(
- method2[0].type.hasEnforceRange(),
- "foo argument of method2 has [EnforceRange]",
- )
- harness.ok(method2[1].type.nullable(), "bar argument of method2 is nullable")
- harness.ok(method2[1].type.hasClamp(), "bar argument of method2 has [Clamp]")
-
- # Test [AllowShared]
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [AllowShared] ArrayBufferView Foo;
- dictionary A {
- required [AllowShared] ArrayBufferView a;
- [ChromeOnly, AllowShared] ArrayBufferView b;
- Foo c;
- };
- interface B {
- attribute Foo typedefFoo;
- attribute [AllowShared] ArrayBufferView foo;
- undefined method([AllowShared] ArrayBufferView foo);
- undefined method2(optional [AllowShared] ArrayBufferView foo);
- };
- interface C {
- attribute [AllowShared] ArrayBufferView? foo;
- undefined method([AllowShared] ArrayBufferView? foo);
- undefined method2(optional [AllowShared] ArrayBufferView? foo);
- };
- interface Setlike {
- setlike<[AllowShared] ArrayBufferView>;
- };
- interface Maplike {
- maplike<[Clamp] long, [AllowShared] ArrayBufferView>;
- };
- interface Iterable {
- iterable<[Clamp] long, [AllowShared] ArrayBufferView>;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(not threw, "Should not have thrown on parsing normal")
- if not threw:
- harness.ok(results[0].innerType.hasAllowShared(), "Foo is [AllowShared]")
- A = results[1]
- harness.ok(A.members[0].type.hasAllowShared(), "A.a is [AllowShared]")
- harness.ok(A.members[1].type.hasAllowShared(), "A.b is [AllowShared]")
- harness.ok(A.members[2].type.hasAllowShared(), "A.c is [AllowShared]")
- B = results[2]
- harness.ok(B.members[0].type.hasAllowShared(), "B.typedefFoo is [AllowShared]")
- harness.ok(B.members[1].type.hasAllowShared(), "B.foo is [AllowShared]")
- method = B.members[2].signatures()[0][1]
- harness.ok(
- method[0].type.hasAllowShared(), "foo argument of method is [AllowShared]"
- )
- method2 = B.members[3].signatures()[0][1]
- harness.ok(
- method2[0].type.hasAllowShared(), "foo argument of method2 is [AllowShared]"
- )
- C = results[3]
- harness.ok(C.members[0].type.nullable(), "C.foo is nullable")
- harness.ok(C.members[0].type.hasAllowShared(), "C.foo is [AllowShared]")
- method = C.members[1].signatures()[0][1]
- harness.ok(method[0].type.nullable(), "foo argument of method is nullable")
- harness.ok(
- method[0].type.hasAllowShared(), "foo argument of method is [AllowShared]"
- )
- method2 = C.members[2].signatures()[0][1]
- harness.ok(method2[0].type.nullable(), "foo argument of method2 is nullable")
- harness.ok(
- method2[0].type.hasAllowShared(), "foo argument of method2 is [AllowShared]"
- )
-
- ATTRIBUTES = [
- ("[Clamp]", "long"),
- ("[EnforceRange]", "long"),
- ("[LegacyNullToEmptyString]", "DOMString"),
- ("[AllowShared]", "ArrayBufferView"),
- ]
- TEMPLATES = [
- (
- "required dictionary members",
- """
- dictionary Foo {
- %s required %s foo;
- };
- """,
- ),
- (
- "optional arguments",
- """
- interface Foo {
- undefined foo(%s optional %s foo);
- };
- """,
- ),
- (
- "typedefs",
- """
- %s typedef %s foo;
- """,
- ),
- (
- "attributes",
- """
- interface Foo {
- %s attribute %s foo;
- };
- """,
- ),
- (
- "readonly attributes",
- """
- interface Foo {
- readonly attribute %s %s foo;
- };
- """,
- ),
- (
- "readonly unresolved attributes",
- """
- interface Foo {
- readonly attribute Bar baz;
- };
- typedef %s %s Bar;
- """,
- ),
- (
- "method",
- """
- interface Foo {
- %s %s foo();
- };
- """,
- ),
- (
- "interface",
- """
- %s
- interface Foo {
- attribute %s foo;
- };
- """,
- ),
- (
- "partial interface",
- """
- interface Foo {
- undefined foo();
- };
- %s
- partial interface Foo {
- attribute %s bar;
- };
- """,
- ),
- (
- "interface mixin",
- """
- %s
- interface mixin Foo {
- attribute %s foo;
- };
- """,
- ),
- (
- "namespace",
- """
- %s
- namespace Foo {
- attribute %s foo;
- };
- """,
- ),
- (
- "partial namespace",
- """
- namespace Foo {
- undefined foo();
- };
- %s
- partial namespace Foo {
- attribute %s bar;
- };
- """,
- ),
- (
- "dictionary",
- """
- %s
- dictionary Foo {
- %s foo;
- };
- """,
- ),
- ]
-
- for (name, template) in TEMPLATES:
- parser = parser.reset()
- threw = False
- try:
- parser.parse(template % ("", "long"))
- parser.finish()
- except:
- threw = True
- harness.ok(not threw, "Template for %s parses without attributes" % name)
- for (attribute, type) in ATTRIBUTES:
- parser = parser.reset()
- threw = False
- try:
- parser.parse(template % (attribute, type))
- parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow %s on %s" % (attribute, name))
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [Clamp, EnforceRange] long Foo;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow mixing [Clamp] and [EnforceRange]")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [EnforceRange, Clamp] long Foo;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow mixing [Clamp] and [EnforceRange]")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [Clamp] long Foo;
- typedef [EnforceRange] Foo bar;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow mixing [Clamp] and [EnforceRange] via typedefs")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [EnforceRange] long Foo;
- typedef [Clamp] Foo bar;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow mixing [Clamp] and [EnforceRange] via typedefs")
-
- TYPES = [
- "DOMString",
- "unrestricted float",
- "float",
- "unrestricted double",
- "double",
- ]
-
- for type in TYPES:
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [Clamp] %s Foo;
- """
- % type
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow [Clamp] on %s" % type)
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [EnforceRange] %s Foo;
- """
- % type
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow [EnforceRange] on %s" % type)
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [LegacyNullToEmptyString] long Foo;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow [LegacyNullToEmptyString] on long")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [LegacyNullToEmptyString] JSString Foo;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow [LegacyNullToEmptyString] on JSString")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [LegacyNullToEmptyString] DOMString? Foo;
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not allow [LegacyNullToEmptyString] on nullable DOMString"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [AllowShared] DOMString Foo;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[AllowShared] only allowed on buffer source types")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef [AllowShared=something] ArrayBufferView Foo;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[AllowShared] must take no arguments")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- undefined foo([Clamp] Bar arg);
- };
- typedef long Bar;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(not threw, "Should allow type attributes on unresolved types")
- harness.check(
- results[0].members[0].signatures()[0][1][0].type.hasClamp(),
- True,
- "Unresolved types with type attributes should correctly resolve with attributes",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- undefined foo(Bar arg);
- };
- typedef [Clamp] long Bar;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(not threw, "Should allow type attributes on typedefs")
- harness.check(
- results[0].members[0].signatures()[0][1][0].type.hasClamp(),
- True,
- "Unresolved types that resolve to typedefs with attributes should correctly resolve with attributes",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_builtin_filename.py b/components/script/dom/bindings/codegen/parser/tests/test_builtin_filename.py
deleted file mode 100644
index 6c913bba822..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_builtin_filename.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface Test {
- attribute long b;
- };
- """
- )
-
- attr = parser.finish()[0].members[0]
- harness.check(attr.type.filename(), "<builtin>", "Filename on builtin type")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_builtins.py b/components/script/dom/bindings/codegen/parser/tests/test_builtins.py
deleted file mode 100644
index a75a12e8143..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_builtins.py
+++ /dev/null
@@ -1,59 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestBuiltins {
- attribute boolean b;
- attribute byte s8;
- attribute octet u8;
- attribute short s16;
- attribute unsigned short u16;
- attribute long s32;
- attribute unsigned long u32;
- attribute long long s64;
- attribute unsigned long long u64;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestBuiltins interface parsed without error.")
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
- iface = results[0]
- harness.check(
- iface.identifier.QName(), "::TestBuiltins", "Interface has the right QName"
- )
- harness.check(iface.identifier.name, "TestBuiltins", "Interface has the right name")
- harness.check(iface.parent, None, "Interface has no parent")
-
- members = iface.members
- harness.check(len(members), 9, "Should be one production")
-
- names = ["b", "s8", "u8", "s16", "u16", "s32", "u32", "s64", "u64", "ts"]
- types = [
- "Boolean",
- "Byte",
- "Octet",
- "Short",
- "UnsignedShort",
- "Long",
- "UnsignedLong",
- "LongLong",
- "UnsignedLongLong",
- "UnsignedLongLong",
- ]
- for i in range(9):
- attr = members[i]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.check(
- attr.identifier.QName(),
- "::TestBuiltins::" + names[i],
- "Attr has correct QName",
- )
- harness.check(attr.identifier.name, names[i], "Attr has correct name")
- harness.check(str(attr.type), types[i], "Attr type is the correct name")
- harness.ok(attr.type.isPrimitive(), "Should be a primitive type")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_bytestring.py b/components/script/dom/bindings/codegen/parser/tests/test_bytestring.py
deleted file mode 100644
index a6f9f6ab9cb..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_bytestring.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: UTF-8 -*-
-
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestByteString {
- attribute ByteString bs;
- attribute DOMString ds;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestByteString interface parsed without error.")
-
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
- iface = results[0]
- harness.check(
- iface.identifier.QName(), "::TestByteString", "Interface has the right QName"
- )
- harness.check(
- iface.identifier.name, "TestByteString", "Interface has the right name"
- )
- harness.check(iface.parent, None, "Interface has no parent")
-
- members = iface.members
- harness.check(len(members), 2, "Should be two productions")
-
- attr = members[0]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.check(
- attr.identifier.QName(), "::TestByteString::bs", "Attr has correct QName"
- )
- harness.check(attr.identifier.name, "bs", "Attr has correct name")
- harness.check(str(attr.type), "ByteString", "Attr type is the correct name")
- harness.ok(attr.type.isByteString(), "Should be ByteString type")
- harness.ok(attr.type.isString(), "Should be String collective type")
- harness.ok(not attr.type.isDOMString(), "Should be not be DOMString type")
-
- # now check we haven't broken DOMStrings in the process.
- attr = members[1]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.check(
- attr.identifier.QName(), "::TestByteString::ds", "Attr has correct QName"
- )
- harness.check(attr.identifier.name, "ds", "Attr has correct name")
- harness.check(str(attr.type), "String", "Attr type is the correct name")
- harness.ok(attr.type.isDOMString(), "Should be DOMString type")
- harness.ok(attr.type.isString(), "Should be String collective type")
- harness.ok(not attr.type.isByteString(), "Should be not be ByteString type")
-
- # Cannot represent constant ByteString in IDL.
- threw = False
- try:
- parser.parse(
- """
- interface ConstByteString {
- const ByteString foo = "hello"
- };
- """
- )
- except WebIDL.WebIDLError:
- threw = True
- harness.ok(
- threw, "Should have thrown a WebIDL error for ByteString default in interface"
- )
-
- # Can have optional ByteStrings with default values
- try:
- parser.parse(
- """
- interface OptionalByteString {
- undefined passByteString(optional ByteString arg = "hello");
- };
- """
- )
- results2 = parser.finish()
- except WebIDL.WebIDLError as e:
- harness.ok(
- False,
- "Should not have thrown a WebIDL error for ByteString "
- "default in dictionary. " + str(e),
- )
-
- # Can have a default ByteString value in a dictionary
- try:
- parser.parse(
- """
- dictionary OptionalByteStringDict {
- ByteString item = "some string";
- };
- """
- )
- results3 = parser.finish()
- except WebIDL.WebIDLError as e:
- harness.ok(
- False,
- "Should not have thrown a WebIDL error for ByteString "
- "default in dictionary. " + str(e),
- )
-
- # Don't allow control characters in ByteString literals
- threw = False
- try:
- parser.parse(
- """
- dictionary OptionalByteStringDict2 {
- ByteString item = "\x03";
- };
- """
- )
- results4 = parser.finish()
- except WebIDL.WebIDLError as e:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown a WebIDL error for invalid ByteString "
- "default in dictionary",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_callback.py b/components/script/dom/bindings/codegen/parser/tests/test_callback.py
deleted file mode 100644
index 407644a6a8d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_callback.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestCallback {
- attribute CallbackType? listener;
- };
-
- callback CallbackType = boolean (unsigned long arg);
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestCallback interface parsed without error.")
- harness.check(len(results), 2, "Should be two productions.")
- iface = results[0]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(
- iface.identifier.QName(), "::TestCallback", "Interface has the right QName"
- )
- harness.check(iface.identifier.name, "TestCallback", "Interface has the right name")
- harness.check(len(iface.members), 1, "Expect %s members" % 1)
-
- attr = iface.members[0]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.ok(attr.isAttr(), "Should be an attribute")
- harness.ok(not attr.isMethod(), "Attr is not an method")
- harness.ok(not attr.isConst(), "Attr is not a const")
- harness.check(
- attr.identifier.QName(), "::TestCallback::listener", "Attr has the right QName"
- )
- harness.check(attr.identifier.name, "listener", "Attr has the right name")
- t = attr.type
- harness.ok(not isinstance(t, WebIDL.IDLWrapperType), "Attr has the right type")
- harness.ok(isinstance(t, WebIDL.IDLNullableType), "Attr has the right type")
- harness.ok(t.isCallback(), "Attr has the right type")
-
- callback = results[1]
- harness.ok(not callback.isConstructor(), "callback is not constructor")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py b/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py
deleted file mode 100644
index 832a92bb147..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_callback_constructor.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestCallbackConstructor {
- attribute CallbackConstructorType? constructorAttribute;
- };
-
- callback constructor CallbackConstructorType = TestCallbackConstructor (unsigned long arg);
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestCallbackConstructor interface parsed without error.")
- harness.check(len(results), 2, "Should be two productions.")
- iface = results[0]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(
- iface.identifier.QName(),
- "::TestCallbackConstructor",
- "Interface has the right QName",
- )
- harness.check(
- iface.identifier.name, "TestCallbackConstructor", "Interface has the right name"
- )
- harness.check(len(iface.members), 1, "Expect %s members" % 1)
-
- attr = iface.members[0]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.ok(attr.isAttr(), "Should be an attribute")
- harness.ok(not attr.isMethod(), "Attr is not an method")
- harness.ok(not attr.isConst(), "Attr is not a const")
- harness.check(
- attr.identifier.QName(),
- "::TestCallbackConstructor::constructorAttribute",
- "Attr has the right QName",
- )
- harness.check(
- attr.identifier.name, "constructorAttribute", "Attr has the right name"
- )
- t = attr.type
- harness.ok(not isinstance(t, WebIDL.IDLWrapperType), "Attr has the right type")
- harness.ok(isinstance(t, WebIDL.IDLNullableType), "Attr has the right type")
- harness.ok(t.isCallback(), "Attr has the right type")
-
- callback = results[1]
- harness.ok(callback.isConstructor(), "Callback is constructor")
-
- parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyTreatNonObjectAsNull]
- callback constructor CallbackConstructorType = object ();
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should throw on LegacyTreatNonObjectAsNull callback constructors"
- )
-
- parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [MOZ_CAN_RUN_SCRIPT_BOUNDARY]
- callback constructor CallbackConstructorType = object ();
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not permit MOZ_CAN_RUN_SCRIPT_BOUNDARY callback constructors"
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_callback_interface.py b/components/script/dom/bindings/codegen/parser/tests/test_callback_interface.py
deleted file mode 100644
index 0d657f48032..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_callback_interface.py
+++ /dev/null
@@ -1,106 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- callback interface TestCallbackInterface {
- attribute boolean bool;
- };
- """
- )
-
- results = parser.finish()
-
- iface = results[0]
-
- harness.ok(iface.isCallback(), "Interface should be a callback")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestInterface {
- };
- callback interface TestCallbackInterface : TestInterface {
- attribute boolean bool;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow non-callback parent of callback interface")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestInterface : TestCallbackInterface {
- };
- callback interface TestCallbackInterface {
- attribute boolean bool;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow callback parent of non-callback interface")
-
- parser = parser.reset()
- parser.parse(
- """
- callback interface TestCallbackInterface1 {
- undefined foo();
- };
- callback interface TestCallbackInterface2 {
- undefined foo(DOMString arg);
- undefined foo(TestCallbackInterface1 arg);
- };
- callback interface TestCallbackInterface3 {
- undefined foo(DOMString arg);
- undefined foo(TestCallbackInterface1 arg);
- static undefined bar();
- };
- callback interface TestCallbackInterface4 {
- undefined foo(DOMString arg);
- undefined foo(TestCallbackInterface1 arg);
- static undefined bar();
- const long baz = 5;
- };
- callback interface TestCallbackInterface5 {
- static attribute boolean bool;
- undefined foo();
- };
- callback interface TestCallbackInterface6 {
- undefined foo(DOMString arg);
- undefined foo(TestCallbackInterface1 arg);
- undefined bar();
- };
- callback interface TestCallbackInterface7 {
- static attribute boolean bool;
- };
- callback interface TestCallbackInterface8 {
- attribute boolean bool;
- };
- callback interface TestCallbackInterface9 : TestCallbackInterface1 {
- undefined foo();
- };
- callback interface TestCallbackInterface10 : TestCallbackInterface1 {
- undefined bar();
- };
- """
- )
- results = parser.finish()
- for (i, iface) in enumerate(results):
- harness.check(
- iface.isSingleOperationInterface(),
- i < 4,
- "Interface %s should be a single operation interface"
- % iface.identifier.name,
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py b/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py
deleted file mode 100644
index c56c3dbde10..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_cereactions.py
+++ /dev/null
@@ -1,157 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions(DOMString a)] undefined foo(boolean arg2);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] with an argument")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions(DOMString b)] readonly attribute boolean bar;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] with an argument")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] attribute boolean bar;
- };
- """
- )
-
- results = parser.finish()
- except Exception as e:
- harness.ok(
- False,
- "Shouldn't have thrown for [CEReactions] used on writable attribute. %s"
- % e,
- )
- threw = True
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] undefined foo(boolean arg2);
- };
- """
- )
-
- results = parser.finish()
- except Exception as e:
- harness.ok(
- False,
- "Shouldn't have thrown for [CEReactions] used on regular operations. %s"
- % e,
- )
- threw = True
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] readonly attribute boolean A;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should have thrown for [CEReactions] used on a readonly attribute"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [CEReactions]
- interface Foo {
- }
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] used on a interface")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] getter any(DOMString name);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] used on a named getter")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] legacycaller double compute(double x);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] used on a legacycaller")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- [CEReactions] stringifier DOMString ();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for [CEReactions] used on a stringifier")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py b/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py
deleted file mode 100644
index 2aef8ebe8ff..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_conditional_dictionary_member.py
+++ /dev/null
@@ -1,128 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- dictionary Dict {
- any foo;
- [ChromeOnly] any bar;
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should have a dictionary")
- members = results[0].members
- harness.check(len(members), 2, "Should have two members")
- # Note that members are ordered lexicographically, so "bar" comes
- # before "foo".
- harness.ok(
- members[0].getExtendedAttribute("ChromeOnly"), "First member is not ChromeOnly"
- )
- harness.ok(
- not members[1].getExtendedAttribute("ChromeOnly"), "Second member is ChromeOnly"
- )
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary Dict {
- any foo;
- any bar;
- };
-
- interface Iface {
- [Constant, Cached] readonly attribute Dict dict;
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 2, "Should have a dictionary and an interface")
-
- parser = parser.reset()
- exception = None
- try:
- parser.parse(
- """
- dictionary Dict {
- any foo;
- [ChromeOnly] any bar;
- };
-
- interface Iface {
- [Constant, Cached] readonly attribute Dict dict;
- };
- """
- )
- results = parser.finish()
- except Exception as e:
- exception = e
-
- harness.ok(exception, "Should have thrown.")
- harness.check(
- exception.message,
- "[Cached] and [StoreInSlot] must not be used on an attribute "
- "whose type contains a [ChromeOnly] dictionary member",
- "Should have thrown the right exception",
- )
-
- parser = parser.reset()
- exception = None
- try:
- parser.parse(
- """
- dictionary ParentDict {
- [ChromeOnly] any bar;
- };
-
- dictionary Dict : ParentDict {
- any foo;
- };
-
- interface Iface {
- [Constant, Cached] readonly attribute Dict dict;
- };
- """
- )
- results = parser.finish()
- except Exception as e:
- exception = e
-
- harness.ok(exception, "Should have thrown (2).")
- harness.check(
- exception.message,
- "[Cached] and [StoreInSlot] must not be used on an attribute "
- "whose type contains a [ChromeOnly] dictionary member",
- "Should have thrown the right exception (2)",
- )
-
- parser = parser.reset()
- exception = None
- try:
- parser.parse(
- """
- dictionary GrandParentDict {
- [ChromeOnly] any baz;
- };
-
- dictionary ParentDict : GrandParentDict {
- any bar;
- };
-
- dictionary Dict : ParentDict {
- any foo;
- };
-
- interface Iface {
- [Constant, Cached] readonly attribute Dict dict;
- };
- """
- )
- results = parser.finish()
- except Exception as e:
- exception = e
-
- harness.ok(exception, "Should have thrown (3).")
- harness.check(
- exception.message,
- "[Cached] and [StoreInSlot] must not be used on an attribute "
- "whose type contains a [ChromeOnly] dictionary member",
- "Should have thrown the right exception (3)",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_const.py b/components/script/dom/bindings/codegen/parser/tests/test_const.py
deleted file mode 100644
index f2d4b79d467..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_const.py
+++ /dev/null
@@ -1,96 +0,0 @@
-import WebIDL
-
-expected = [
- ("::TestConsts::zero", "zero", "Byte", 0),
- ("::TestConsts::b", "b", "Byte", -1),
- ("::TestConsts::o", "o", "Octet", 2),
- ("::TestConsts::s", "s", "Short", -3),
- ("::TestConsts::us", "us", "UnsignedShort", 4),
- ("::TestConsts::l", "l", "Long", -5),
- ("::TestConsts::ul", "ul", "UnsignedLong", 6),
- ("::TestConsts::ull", "ull", "UnsignedLongLong", 7),
- ("::TestConsts::ll", "ll", "LongLong", -8),
- ("::TestConsts::t", "t", "Boolean", True),
- ("::TestConsts::f", "f", "Boolean", False),
- ("::TestConsts::fl", "fl", "Float", 0.2),
- ("::TestConsts::db", "db", "Double", 0.2),
- ("::TestConsts::ufl", "ufl", "UnrestrictedFloat", 0.2),
- ("::TestConsts::udb", "udb", "UnrestrictedDouble", 0.2),
- ("::TestConsts::fli", "fli", "Float", 2),
- ("::TestConsts::dbi", "dbi", "Double", 2),
- ("::TestConsts::ufli", "ufli", "UnrestrictedFloat", 2),
- ("::TestConsts::udbi", "udbi", "UnrestrictedDouble", 2),
-]
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestConsts {
- const byte zero = 0;
- const byte b = -1;
- const octet o = 2;
- const short s = -3;
- const unsigned short us = 0x4;
- const long l = -0X5;
- const unsigned long ul = 6;
- const unsigned long long ull = 7;
- const long long ll = -010;
- const boolean t = true;
- const boolean f = false;
- const float fl = 0.2;
- const double db = 0.2;
- const unrestricted float ufl = 0.2;
- const unrestricted double udb = 0.2;
- const float fli = 2;
- const double dbi = 2;
- const unrestricted float ufli = 2;
- const unrestricted double udbi = 2;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestConsts 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(), "::TestConsts", "Interface has the right QName"
- )
- harness.check(iface.identifier.name, "TestConsts", "Interface has the right name")
- harness.check(
- len(iface.members), len(expected), "Expect %s members" % len(expected)
- )
-
- for (const, (QName, name, type, value)) in zip(iface.members, expected):
- harness.ok(isinstance(const, WebIDL.IDLConst), "Should be an IDLConst")
- harness.ok(const.isConst(), "Const is a const")
- harness.ok(not const.isAttr(), "Const is not an attr")
- harness.ok(not const.isMethod(), "Const is not a method")
- harness.check(const.identifier.QName(), QName, "Const has the right QName")
- harness.check(const.identifier.name, name, "Const has the right name")
- harness.check(str(const.type), type, "Const has the right type")
- harness.ok(const.type.isPrimitive(), "All consts should be primitive")
- harness.check(
- str(const.value.type),
- str(const.type),
- "Const's value has the same type as the type",
- )
- harness.check(const.value.value, value, "Const value has the right value.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestConsts {
- const boolean? zero = 0;
- };
- """
- )
- parser.finish()
- except:
- threw = True
- harness.ok(threw, "Nullable types are not allowed for consts.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor.py
deleted file mode 100644
index de5d52f1412..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor.py
+++ /dev/null
@@ -1,594 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- 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=True,
- getter=False,
- setter=False,
- deleter=False,
- legacycaller=False,
- stringifier=False,
- chromeOnly=False,
- htmlConstructor=False,
- secureContext=False,
- pref=None,
- func=None,
- ):
- 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.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(
- method.getExtendedAttribute("ChromeOnly") is not None,
- chromeOnly,
- "Method has the correct value for ChromeOnly",
- )
- harness.check(
- method.isHTMLConstructor(),
- htmlConstructor,
- "Method has the correct htmlConstructor value",
- )
- harness.check(
- len(method.signatures()),
- len(signatures),
- "Method has the correct number of signatures",
- )
- harness.check(
- method.getExtendedAttribute("Pref"),
- pref,
- "Method has the correct pref value",
- )
- harness.check(
- method.getExtendedAttribute("Func"),
- func,
- "Method has the correct func value",
- )
- harness.check(
- method.getExtendedAttribute("SecureContext") is not None,
- secureContext,
- "Method has the correct SecureContext value",
- )
-
- 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)
-
- def checkResults(results):
- harness.check(len(results), 3, "Should be three productions")
- harness.ok(
- isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface"
- )
- harness.ok(
- isinstance(results[1], WebIDL.IDLInterface), "Should be an IDLInterface"
- )
- harness.ok(
- isinstance(results[2], WebIDL.IDLInterface), "Should be an IDLInterface"
- )
-
- checkMethod(
- results[0].ctor(),
- "::TestConstructorNoArgs::constructor",
- "constructor",
- [("TestConstructorNoArgs (Wrapper)", [])],
- )
- harness.check(
- len(results[0].members), 0, "TestConstructorNoArgs should not have members"
- )
- checkMethod(
- results[1].ctor(),
- "::TestConstructorWithArgs::constructor",
- "constructor",
- [
- (
- "TestConstructorWithArgs (Wrapper)",
- [
- (
- "::TestConstructorWithArgs::constructor::name",
- "name",
- "String",
- False,
- False,
- )
- ],
- )
- ],
- )
- harness.check(
- len(results[1].members),
- 0,
- "TestConstructorWithArgs should not have members",
- )
- checkMethod(
- results[2].ctor(),
- "::TestConstructorOverloads::constructor",
- "constructor",
- [
- (
- "TestConstructorOverloads (Wrapper)",
- [
- (
- "::TestConstructorOverloads::constructor::foo",
- "foo",
- "Object",
- False,
- False,
- )
- ],
- ),
- (
- "TestConstructorOverloads (Wrapper)",
- [
- (
- "::TestConstructorOverloads::constructor::bar",
- "bar",
- "Boolean",
- False,
- False,
- )
- ],
- ),
- ],
- )
- harness.check(
- len(results[2].members),
- 0,
- "TestConstructorOverloads should not have members",
- )
-
- parser.parse(
- """
- interface TestConstructorNoArgs {
- constructor();
- };
-
- interface TestConstructorWithArgs {
- constructor(DOMString name);
- };
-
- interface TestConstructorOverloads {
- constructor(object foo);
- constructor(boolean bar);
- };
- """
- )
- results = parser.finish()
- checkResults(results)
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestPrefConstructor {
- [Pref="dom.webidl.test1"] constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestPrefConstructor::constructor",
- "constructor",
- [("TestPrefConstructor (Wrapper)", [])],
- pref=["dom.webidl.test1"],
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestChromeOnlyConstructor {
- [ChromeOnly] constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestChromeOnlyConstructor::constructor",
- "constructor",
- [("TestChromeOnlyConstructor (Wrapper)", [])],
- chromeOnly=True,
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestSCConstructor {
- [SecureContext] constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestSCConstructor::constructor",
- "constructor",
- [("TestSCConstructor (Wrapper)", [])],
- secureContext=True,
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestFuncConstructor {
- [Func="Document::IsWebAnimationsEnabled"] constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestFuncConstructor::constructor",
- "constructor",
- [("TestFuncConstructor (Wrapper)", [])],
- func=["Document::IsWebAnimationsEnabled"],
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestPrefChromeOnlySCFuncConstructor {
- [ChromeOnly, Pref="dom.webidl.test1", SecureContext, Func="Document::IsWebAnimationsEnabled"]
- constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestPrefChromeOnlySCFuncConstructor::constructor",
- "constructor",
- [("TestPrefChromeOnlySCFuncConstructor (Wrapper)", [])],
- func=["Document::IsWebAnimationsEnabled"],
- pref=["dom.webidl.test1"],
- chromeOnly=True,
- secureContext=True,
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestHTMLConstructor {
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- checkMethod(
- results[0].ctor(),
- "::TestHTMLConstructor::constructor",
- "constructor",
- [("TestHTMLConstructor (Wrapper)", [])],
- htmlConstructor=True,
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestChromeOnlyConstructor {
- constructor()
- [ChromeOnly] constructor(DOMString a);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have both a constructor and a ChromeOnly constructor")
-
- # Test HTMLConstructor with argument
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorWithArgs {
- [HTMLConstructor] constructor(DOMString a);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "HTMLConstructor should take no argument")
-
- # Test HTMLConstructor on a callback interface
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- callback interface TestHTMLConstructorOnCallbackInterface {
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "HTMLConstructor can't be used on a callback interface")
-
- # Test HTMLConstructor and constructor operation
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- constructor();
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have both a constructor and a HTMLConstructor")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [Throws]
- constructor();
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have both a throwing constructor and a HTMLConstructor")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- constructor(DOMString a);
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have both a HTMLConstructor and a constructor operation")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [Throws]
- constructor(DOMString a);
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Can't have both a HTMLConstructor and a throwing constructor " "operation",
- )
-
- # Test HTMLConstructor and [ChromeOnly] constructor operation
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [ChromeOnly]
- constructor();
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have both a ChromeOnly constructor and a HTMLConstructor")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [Throws, ChromeOnly]
- constructor();
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Can't have both a throwing chromeonly constructor and a " "HTMLConstructor",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [ChromeOnly]
- constructor(DOMString a);
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Can't have both a HTMLConstructor and a chromeonly constructor " "operation",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestHTMLConstructorAndConstructor {
- [Throws, ChromeOnly]
- constructor(DOMString a);
- [HTMLConstructor] constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Can't have both a HTMLConstructor and a throwing chromeonly "
- "constructor operation",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyNoInterfaceObject]
- interface InterfaceWithoutInterfaceObject {
- constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Can't have a constructor operation on a [LegacyNoInterfaceObject] "
- "interface",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface InterfaceWithPartial {
- };
-
- partial interface InterfaceWithPartial {
- constructor();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have a constructor operation on a partial interface")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface InterfaceWithMixin {
- };
-
- interface mixin Mixin {
- constructor();
- };
-
- InterfaceWithMixin includes Mixin
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Can't have a constructor operation on a mixin")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
deleted file mode 100644
index 5f3663602e4..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor_global.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import traceback
-
-
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=TestConstructorGlobal]
- interface TestConstructorGlobal {
- constructor();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=TestLegacyFactoryFunctionGlobal,
- LegacyFactoryFunction=FooBar]
- interface TestLegacyFactoryFunctionGlobal {
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyFactoryFunction=FooBar, Global,
- Exposed=TestLegacyFactoryFunctionGlobal]
- interface TestLegacyFactoryFunctionGlobal {
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=TestHTMLConstructorGlobal]
- interface TestHTMLConstructorGlobal {
- [HTMLConstructor] constructor();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py b/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py
deleted file mode 100644
index 9855352a9d4..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_constructor_no_interface_object.py
+++ /dev/null
@@ -1,47 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- [LegacyNoInterfaceObject]
- interface TestConstructorLegacyNoInterfaceObject {
- constructor();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
-
- parser.parse(
- """
- [LegacyNoInterfaceObject, LegacyFactoryFunction=FooBar]
- interface TestLegacyFactoryFunctionLegacyNoInterfaceObject {
- };
- """
- )
-
- # Test HTMLConstructor and LegacyNoInterfaceObject
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- [LegacyNoInterfaceObject]
- interface TestHTMLConstructorLegacyNoInterfaceObject {
- [HTMLConstructor] constructor();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_deduplicate.py b/components/script/dom/bindings/codegen/parser/tests/test_deduplicate.py
deleted file mode 100644
index 6649f4ec05d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_deduplicate.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface Foo;
- interface Bar;
- interface Foo;
- """
- )
-
- results = parser.finish()
-
- # There should be no duplicate interfaces in the result.
- expectedNames = sorted(["Foo", "Bar"])
- actualNames = sorted(map(lambda iface: iface.identifier.name, results))
- harness.check(
- actualNames, expectedNames, "Parser shouldn't output duplicate names."
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py b/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
deleted file mode 100644
index e7d04f995a9..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_dictionary.py
+++ /dev/null
@@ -1,875 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- dictionary Dict2 : Dict1 {
- long child = 5;
- Dict1 aaandAnother;
- };
- dictionary Dict1 {
- long parent;
- double otherParent;
- };
- """
- )
- results = parser.finish()
-
- dict1 = results[1]
- dict2 = results[0]
-
- harness.check(len(dict1.members), 2, "Dict1 has two members")
- harness.check(len(dict2.members), 2, "Dict2 has four members")
-
- harness.check(
- dict1.members[0].identifier.name, "otherParent", "'o' comes before 'p'"
- )
- harness.check(
- dict1.members[1].identifier.name, "parent", "'o' really comes before 'p'"
- )
- harness.check(
- dict2.members[0].identifier.name, "aaandAnother", "'a' comes before 'c'"
- )
- harness.check(
- dict2.members[1].identifier.name, "child", "'a' really comes before 'c'"
- )
-
- # Test partial dictionary.
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- long c;
- long g;
- };
- partial dictionary A {
- long h;
- long d;
- };
- """
- )
- results = parser.finish()
-
- dict1 = results[0]
- harness.check(len(dict1.members), 4, "Dict1 has four members")
- harness.check(dict1.members[0].identifier.name, "c", "c should be first")
- harness.check(dict1.members[1].identifier.name, "d", "d should come after c")
- harness.check(dict1.members[2].identifier.name, "g", "g should come after d")
- harness.check(dict1.members[3].identifier.name, "h", "h should be last")
-
- # Now reset our parser
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Dict {
- long prop = 5;
- long prop;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow name duplication in a dictionary")
-
- # Test no name duplication across normal and partial dictionary.
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- long prop = 5;
- };
- partial dictionary A {
- long prop;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not allow name duplication across normal and partial dictionary"
- )
-
- # Now reset our parser again
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Dict1 : Dict2 {
- long prop = 5;
- };
- dictionary Dict2 : Dict3 {
- long prop2;
- };
- dictionary Dict3 {
- double prop;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not allow name duplication in a dictionary and " "its ancestor"
- )
-
- # More reset
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Iface {};
- dictionary Dict : Iface {
- long prop;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow non-dictionary parents for dictionaries")
-
- # Even more reset
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A : B {};
- dictionary B : A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow cycles in dictionary inheritance chains")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- [LegacyNullToEmptyString] DOMString foo;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not allow [LegacyNullToEmptyString] on dictionary members"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(A arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Trailing dictionary arg must be optional")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional A arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Trailing dictionary arg must have a default value")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo((A or DOMString) arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Trailing union arg containing a dictionary must be optional")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or DOMString) arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Trailing union arg containing a dictionary must have a default value"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(A arg1, optional long arg2);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Dictionary arg followed by optional arg must be optional")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional A arg1, optional long arg2);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Dictionary arg followed by optional arg must have default value")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(A arg1, optional long arg2, long arg3);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- not threw,
- "Dictionary arg followed by non-optional arg doesn't have to be optional",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo((A or DOMString) arg1, optional long arg2);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Union arg containing dictionary followed by optional arg must " "be optional",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or DOMString) arg1, optional long arg2);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Union arg containing dictionary followed by optional arg must "
- "have a default value",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(A arg1, long arg2);
- };
- """
- )
- results = parser.finish()
- harness.ok(True, "Dictionary arg followed by required arg can be required")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional A? arg1 = {});
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = x
-
- harness.ok(threw, "Optional dictionary arg must not be nullable")
- harness.ok(
- "nullable" in str(threw),
- "Must have the expected exception for optional nullable dictionary arg",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- required long x;
- };
- interface X {
- undefined doFoo(A? arg1);
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = x
-
- harness.ok(threw, "Required dictionary arg must not be nullable")
- harness.ok(
- "nullable" in str(threw),
- "Must have the expected exception for required nullable " "dictionary arg",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or long)? arg1 = {});
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = x
-
- harness.ok(threw, "Dictionary arg must not be in an optional nullable union")
- harness.ok(
- "nullable" in str(threw),
- "Must have the expected exception for optional nullable union "
- "arg containing dictionary",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- required long x;
- };
- interface X {
- undefined doFoo((A or long)? arg1);
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = x
-
- harness.ok(threw, "Dictionary arg must not be in a required nullable union")
- harness.ok(
- "nullable" in str(threw),
- "Must have the expected exception for required nullable union "
- "arg containing dictionary",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(sequence<A?> arg1);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(not threw, "Nullable union should be allowed in a sequence argument")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or long?) arg1);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Dictionary must not be in a union with a nullable type")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (long? or A) arg1);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "A nullable type must not be in a union with a dictionary")
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- A? doFoo();
- };
- """
- )
- results = parser.finish()
- harness.ok(True, "Dictionary return value can be nullable")
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional A arg = {});
- };
- """
- )
- results = parser.finish()
- harness.ok(True, "Dictionary arg should actually parse")
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or DOMString) arg = {});
- };
- """
- )
- results = parser.finish()
- harness.ok(True, "Union arg containing a dictionary should actually parse")
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary A {
- };
- interface X {
- undefined doFoo(optional (A or DOMString) arg = "abc");
- };
- """
- )
- results = parser.finish()
- harness.ok(
- True,
- "Union arg containing a dictionary with string default should actually parse",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- Foo foo;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Member type must not be its Dictionary.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo3 : Foo {
- short d;
- };
-
- dictionary Foo2 : Foo3 {
- boolean c;
- };
-
- dictionary Foo1 : Foo2 {
- long a;
- };
-
- dictionary Foo {
- Foo1 b;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be a Dictionary that " "inherits from its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- (Foo or DOMString)[]? b;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be a Nullable type "
- "whose inner type includes its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- (DOMString or Foo) b;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be a Union type, one of "
- "whose member types includes its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- sequence<sequence<sequence<Foo>>> c;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be a Sequence type "
- "whose element type includes its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- (DOMString or Foo)[] d;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be an Array type "
- "whose element type includes its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- Foo1 b;
- };
-
- dictionary Foo3 {
- Foo d;
- };
-
- dictionary Foo2 : Foo3 {
- short c;
- };
-
- dictionary Foo1 : Foo2 {
- long a;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Member type must not be a Dictionary, one of whose "
- "members or inherited members has a type that includes "
- "its Dictionary.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- };
-
- dictionary Bar {
- Foo? d;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Member type must not be a nullable dictionary")
-
- parser = parser.reset()
- parser.parse(
- """
- dictionary Foo {
- unrestricted float urFloat = 0;
- unrestricted float urFloat2 = 1.1;
- unrestricted float urFloat3 = -1.1;
- unrestricted float? urFloat4 = null;
- unrestricted float infUrFloat = Infinity;
- unrestricted float negativeInfUrFloat = -Infinity;
- unrestricted float nanUrFloat = NaN;
-
- unrestricted double urDouble = 0;
- unrestricted double urDouble2 = 1.1;
- unrestricted double urDouble3 = -1.1;
- unrestricted double? urDouble4 = null;
- unrestricted double infUrDouble = Infinity;
- unrestricted double negativeInfUrDouble = -Infinity;
- unrestricted double nanUrDouble = NaN;
- };
- """
- )
- results = parser.finish()
- harness.ok(True, "Parsing default values for unrestricted types succeeded.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- double f = Infinity;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to Infinity")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- double f = -Infinity;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to -Infinity")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- double f = NaN;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to NaN")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- float f = Infinity;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to Infinity")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- float f = -Infinity;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to -Infinity")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- float f = NaN;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Only unrestricted values can be initialized to NaN")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Foo {
- long module;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(not threw, "Should be able to use 'module' as a dictionary member name")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py b/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
deleted file mode 100644
index e96026c2a09..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_distinguishability.py
+++ /dev/null
@@ -1,425 +0,0 @@
-import traceback
-
-
-def firstArgType(method):
- return method.signatures()[0][1][0].type
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- // Give our dictionary a required member so we don't need to
- // mess with optional and default values.
- dictionary Dict {
- required long member;
- };
- callback interface Foo {
- };
- interface Bar {
- // Bit of a pain to get things that have dictionary types
- undefined passDict(Dict arg);
- undefined passFoo(Foo arg);
- undefined passNullableUnion((object? or DOMString) arg);
- undefined passNullable(Foo? arg);
- };
- """
- )
- results = parser.finish()
-
- iface = results[2]
- harness.ok(iface.isInterface(), "Should have interface")
- dictMethod = iface.members[0]
- ifaceMethod = iface.members[1]
- nullableUnionMethod = iface.members[2]
- nullableIfaceMethod = iface.members[3]
-
- dictType = firstArgType(dictMethod)
- ifaceType = firstArgType(ifaceMethod)
-
- harness.ok(dictType.isDictionary(), "Should have dictionary type")
- harness.ok(ifaceType.isInterface(), "Should have interface type")
- harness.ok(ifaceType.isCallbackInterface(), "Should have callback interface type")
-
- harness.ok(
- not dictType.isDistinguishableFrom(ifaceType),
- "Dictionary not distinguishable from callback interface",
- )
- harness.ok(
- not ifaceType.isDistinguishableFrom(dictType),
- "Callback interface not distinguishable from dictionary",
- )
-
- nullableUnionType = firstArgType(nullableUnionMethod)
- nullableIfaceType = firstArgType(nullableIfaceMethod)
-
- harness.ok(nullableUnionType.isUnion(), "Should have union type")
- harness.ok(nullableIfaceType.isInterface(), "Should have interface type")
- harness.ok(nullableIfaceType.nullable(), "Should have nullable type")
-
- harness.ok(
- not nullableUnionType.isDistinguishableFrom(nullableIfaceType),
- "Nullable type not distinguishable from union with nullable " "member type",
- )
- harness.ok(
- not nullableIfaceType.isDistinguishableFrom(nullableUnionType),
- "Union with nullable member type not distinguishable from " "nullable type",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestIface {
- undefined passKid(Kid arg);
- undefined passParent(Parent arg);
- undefined passGrandparent(Grandparent arg);
- undefined passUnrelated1(Unrelated1 arg);
- undefined passUnrelated2(Unrelated2 arg);
- undefined passArrayBuffer(ArrayBuffer arg);
- undefined passArrayBuffer(ArrayBufferView arg);
- };
-
- interface Kid : Parent {};
- interface Parent : Grandparent {};
- interface Grandparent {};
- interface Unrelated1 {};
- interface Unrelated2 {};
- """
- )
- results = parser.finish()
-
- iface = results[0]
- harness.ok(iface.isInterface(), "Should have interface")
- argTypes = [firstArgType(method) for method in iface.members]
- unrelatedTypes = [firstArgType(method) for method in iface.members[-3:]]
-
- for type1 in argTypes:
- for type2 in argTypes:
- distinguishable = type1 is not type2 and (
- type1 in unrelatedTypes or type2 in unrelatedTypes
- )
-
- harness.check(
- type1.isDistinguishableFrom(type2),
- distinguishable,
- "Type %s should %sbe distinguishable from type %s"
- % (type1, "" if distinguishable else "not ", type2),
- )
- harness.check(
- type2.isDistinguishableFrom(type1),
- distinguishable,
- "Type %s should %sbe distinguishable from type %s"
- % (type2, "" if distinguishable else "not ", type1),
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Dummy {};
- interface TestIface {
- undefined method(long arg1, TestIface arg2);
- undefined method(long arg1, long arg2);
- undefined method(long arg1, Dummy arg2);
- undefined method(DOMString arg1, DOMString arg2, DOMString arg3);
- };
- """
- )
- results = parser.finish()
- harness.check(len(results[1].members), 1, "Should look like we have one method")
- harness.check(
- len(results[1].members[0].signatures()), 4, "Should have four signatures"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Dummy {};
- interface TestIface {
- undefined method(long arg1, TestIface arg2);
- undefined method(long arg1, long arg2);
- undefined method(any arg1, Dummy arg2);
- undefined method(DOMString arg1, DOMString arg2, DOMString arg3);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should throw when args before the distinguishing arg are not "
- "all the same type",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Dummy {};
- interface TestIface {
- undefined method(long arg1, TestIface arg2);
- undefined method(long arg1, long arg2);
- undefined method(any arg1, DOMString arg2);
- undefined method(DOMString arg1, DOMString arg2, DOMString arg3);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should throw when there is no distinguishing index")
-
- # Now let's test our whole distinguishability table
- argTypes = [
- "long",
- "short",
- "long?",
- "short?",
- "boolean",
- "boolean?",
- "undefined",
- "undefined?",
- "DOMString",
- "ByteString",
- "UTF8String",
- "Enum",
- "Enum2",
- "Interface",
- "Interface?",
- "AncestorInterface",
- "UnrelatedInterface",
- "CallbackInterface",
- "CallbackInterface?",
- "CallbackInterface2",
- "object",
- "Callback",
- "Callback2",
- "Dict",
- "Dict2",
- "sequence<long>",
- "sequence<short>",
- "record<DOMString, object>",
- "record<USVString, Dict>",
- "record<ByteString, long>",
- "record<UTF8String, long>",
- "any",
- "Promise<any>",
- "Promise<any>?",
- "USVString",
- "JSString",
- "ArrayBuffer",
- "ArrayBufferView",
- "Uint8Array",
- "Uint16Array",
- "(long or Callback)",
- "(long or Dict)",
- ]
-
- # Try to categorize things a bit to keep list lengths down
- def allBut(list1, list2):
- return [
- a
- for a in list1
- if a not in list2
- and (a != "any" and a != "Promise<any>" and a != "Promise<any>?")
- ]
-
- unions = ["(long or Callback)", "(long or Dict)"]
- numerics = ["long", "short", "long?", "short?"]
- booleans = ["boolean", "boolean?"]
- undefineds = ["undefined", "undefined?"]
- primitives = numerics + booleans
- nonNumerics = allBut(argTypes, numerics + unions)
- nonBooleans = allBut(argTypes, booleans)
- strings = [
- "DOMString",
- "ByteString",
- "Enum",
- "Enum2",
- "USVString",
- "JSString",
- "UTF8String",
- ]
- nonStrings = allBut(argTypes, strings)
- nonObjects = undefineds + primitives + strings
- objects = allBut(argTypes, nonObjects)
- bufferSourceTypes = ["ArrayBuffer", "ArrayBufferView", "Uint8Array", "Uint16Array"]
- interfaces = [
- "Interface",
- "Interface?",
- "AncestorInterface",
- "UnrelatedInterface",
- ] + bufferSourceTypes
- nullables = [
- "long?",
- "short?",
- "boolean?",
- "undefined?",
- "Interface?",
- "CallbackInterface?",
- "Dict",
- "Dict2",
- "Date?",
- "any",
- "Promise<any>?",
- ] + allBut(unions, ["(long or Callback)"])
- sequences = ["sequence<long>", "sequence<short>"]
- nonUserObjects = nonObjects + interfaces + sequences
- otherObjects = allBut(argTypes, nonUserObjects + ["object"])
- notRelatedInterfaces = (
- nonObjects
- + ["UnrelatedInterface"]
- + otherObjects
- + sequences
- + bufferSourceTypes
- )
- records = [
- "record<DOMString, object>",
- "record<USVString, Dict>",
- "record<ByteString, long>",
- "record<UTF8String, long>",
- ] # JSString not supported in records
- dictionaryLike = (
- [
- "Dict",
- "Dict2",
- "CallbackInterface",
- "CallbackInterface?",
- "CallbackInterface2",
- ]
- + records
- + allBut(unions, ["(long or Callback)"])
- )
-
- # Build a representation of the distinguishability table as a dict
- # of dicts, holding True values where needed, holes elsewhere.
- data = dict()
- for type in argTypes:
- data[type] = dict()
-
- def setDistinguishable(type, types):
- for other in types:
- data[type][other] = True
-
- setDistinguishable("long", nonNumerics)
- setDistinguishable("short", nonNumerics)
- setDistinguishable("long?", allBut(nonNumerics, nullables))
- setDistinguishable("short?", allBut(nonNumerics, nullables))
- setDistinguishable("boolean", nonBooleans)
- setDistinguishable("boolean?", allBut(nonBooleans, nullables))
- setDistinguishable("undefined", allBut(argTypes, undefineds + dictionaryLike))
- setDistinguishable(
- "undefined?", allBut(argTypes, undefineds + dictionaryLike + nullables)
- )
- setDistinguishable("DOMString", nonStrings)
- setDistinguishable("ByteString", nonStrings)
- setDistinguishable("UTF8String", nonStrings)
- setDistinguishable("USVString", nonStrings)
- setDistinguishable("JSString", nonStrings)
- setDistinguishable("Enum", nonStrings)
- setDistinguishable("Enum2", nonStrings)
- setDistinguishable("Interface", notRelatedInterfaces)
- setDistinguishable("Interface?", allBut(notRelatedInterfaces, nullables))
- setDistinguishable("AncestorInterface", notRelatedInterfaces)
- setDistinguishable(
- "UnrelatedInterface", allBut(argTypes, ["object", "UnrelatedInterface"])
- )
- setDistinguishable("CallbackInterface", allBut(nonUserObjects, undefineds))
- setDistinguishable(
- "CallbackInterface?", allBut(nonUserObjects, nullables + undefineds)
- )
- setDistinguishable("CallbackInterface2", allBut(nonUserObjects, undefineds))
- setDistinguishable("object", nonObjects)
- setDistinguishable("Callback", nonUserObjects)
- setDistinguishable("Callback2", nonUserObjects)
- setDistinguishable("Dict", allBut(nonUserObjects, nullables + undefineds))
- setDistinguishable("Dict2", allBut(nonUserObjects, nullables + undefineds))
- setDistinguishable("sequence<long>", allBut(argTypes, sequences + ["object"]))
- setDistinguishable("sequence<short>", allBut(argTypes, sequences + ["object"]))
- setDistinguishable("record<DOMString, object>", allBut(nonUserObjects, undefineds))
- setDistinguishable("record<USVString, Dict>", allBut(nonUserObjects, undefineds))
- # JSString not supported in records
- setDistinguishable("record<ByteString, long>", allBut(nonUserObjects, undefineds))
- setDistinguishable("record<UTF8String, long>", allBut(nonUserObjects, undefineds))
- setDistinguishable("any", [])
- setDistinguishable("Promise<any>", [])
- setDistinguishable("Promise<any>?", [])
- setDistinguishable("ArrayBuffer", allBut(argTypes, ["ArrayBuffer", "object"]))
- setDistinguishable(
- "ArrayBufferView",
- allBut(argTypes, ["ArrayBufferView", "Uint8Array", "Uint16Array", "object"]),
- )
- setDistinguishable(
- "Uint8Array", allBut(argTypes, ["ArrayBufferView", "Uint8Array", "object"])
- )
- setDistinguishable(
- "Uint16Array", allBut(argTypes, ["ArrayBufferView", "Uint16Array", "object"])
- )
- setDistinguishable("(long or Callback)", allBut(nonUserObjects, numerics))
- setDistinguishable(
- "(long or Dict)", allBut(nonUserObjects, numerics + nullables + undefineds)
- )
-
- def areDistinguishable(type1, type2):
- return data[type1].get(type2, False)
-
- def checkDistinguishability(parser, type1, type2):
- idlTemplate = """
- enum Enum { "a", "b" };
- enum Enum2 { "c", "d" };
- interface Interface : AncestorInterface {};
- interface AncestorInterface {};
- interface UnrelatedInterface {};
- callback interface CallbackInterface {};
- callback interface CallbackInterface2 {};
- callback Callback = any();
- callback Callback2 = long(short arg);
- // Give our dictionaries required members so we don't need to
- // mess with optional and default values.
- dictionary Dict { required long member; };
- dictionary Dict2 { required long member; };
- interface TestInterface {%s
- };
- """
- if type1 in undefineds or type2 in undefineds:
- methods = """
- (%s or %s) myMethod();""" % (
- type1,
- type2,
- )
- else:
- methodTemplate = """
- undefined myMethod(%s arg);"""
- methods = (methodTemplate % type1) + (methodTemplate % type2)
- idl = idlTemplate % methods
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(idl)
- results = parser.finish()
- except:
- threw = True
-
- if areDistinguishable(type1, type2):
- harness.ok(
- not threw,
- "Should not throw for '%s' and '%s' because they are distinguishable"
- % (type1, type2),
- )
- else:
- harness.ok(
- threw,
- "Should throw for '%s' and '%s' because they are not distinguishable"
- % (type1, type2),
- )
-
- # Enumerate over everything in both orders, since order matters in
- # terms of our implementation of distinguishability checks
- for type1 in argTypes:
- for type2 in argTypes:
- checkDistinguishability(parser, type1, type2)
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_double_null.py b/components/script/dom/bindings/codegen/parser/tests/test_double_null.py
deleted file mode 100644
index a8876a7fd2d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_double_null.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface DoubleNull {
- attribute byte?? foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_duplicate_qualifiers.py b/components/script/dom/bindings/codegen/parser/tests/test_duplicate_qualifiers.py
deleted file mode 100644
index 89a4e1acf0b..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_duplicate_qualifiers.py
+++ /dev/null
@@ -1,64 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface DuplicateQualifiers1 {
- getter getter byte foo(unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface DuplicateQualifiers2 {
- setter setter byte foo(unsigned long index, byte value);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface DuplicateQualifiers4 {
- deleter deleter byte foo(unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface DuplicateQualifiers5 {
- getter deleter getter byte foo(unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_empty_enum.py b/components/script/dom/bindings/codegen/parser/tests/test_empty_enum.py
deleted file mode 100644
index 09333a659cd..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_empty_enum.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- try:
- parser.parse(
- """
- enum TestEmptyEnum {
- };
- """
- )
-
- harness.ok(False, "Should have thrown!")
- except:
- harness.ok(True, "Parsing TestEmptyEnum enum should fail")
-
- results = parser.finish()
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py b/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py
deleted file mode 100644
index 21837743523..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_empty_sequence_default_value.py
+++ /dev/null
@@ -1,54 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface X {
- const sequence<long> foo = [];
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Constant cannot have [] as a default value")
-
- parser = parser.reset()
-
- parser.parse(
- """
- interface X {
- undefined foo(optional sequence<long> arg = []);
- };
- """
- )
- results = parser.finish()
-
- harness.ok(
- isinstance(
- results[0].members[0].signatures()[0][1][0].defaultValue,
- WebIDL.IDLEmptySequenceValue,
- ),
- "Should have IDLEmptySequenceValue as default value of argument",
- )
-
- parser = parser.reset()
-
- parser.parse(
- """
- dictionary X {
- sequence<long> foo = [];
- };
- """
- )
- results = parser.finish()
-
- harness.ok(
- isinstance(results[0].members[0].defaultValue, WebIDL.IDLEmptySequenceValue),
- "Should have IDLEmptySequenceValue as default value of " "dictionary member",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_enum.py b/components/script/dom/bindings/codegen/parser/tests/test_enum.py
deleted file mode 100644
index 56c6b3f64aa..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_enum.py
+++ /dev/null
@@ -1,107 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- enum TestEnum {
- "",
- "foo",
- "bar"
- };
-
- interface TestEnumInterface {
- TestEnum doFoo(boolean arg);
- readonly attribute TestEnum foo;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestEnumInterfaces interface parsed without error.")
- harness.check(len(results), 2, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLEnum), "Should be an IDLEnum")
- harness.ok(isinstance(results[1], WebIDL.IDLInterface), "Should be an IDLInterface")
-
- enum = results[0]
- harness.check(enum.identifier.QName(), "::TestEnum", "Enum has the right QName")
- harness.check(enum.identifier.name, "TestEnum", "Enum has the right name")
- harness.check(enum.values(), ["", "foo", "bar"], "Enum has the right values")
-
- iface = results[1]
-
- harness.check(
- iface.identifier.QName(), "::TestEnumInterface", "Interface has the right QName"
- )
- harness.check(
- iface.identifier.name, "TestEnumInterface", "Interface has the right name"
- )
- harness.check(iface.parent, None, "Interface has no parent")
-
- members = iface.members
- harness.check(len(members), 2, "Should be one production")
- harness.ok(isinstance(members[0], WebIDL.IDLMethod), "Should be an IDLMethod")
- method = members[0]
- harness.check(
- method.identifier.QName(),
- "::TestEnumInterface::doFoo",
- "Method has correct QName",
- )
- harness.check(method.identifier.name, "doFoo", "Method has correct name")
-
- signatures = method.signatures()
- harness.check(len(signatures), 1, "Expect one signature")
-
- (returnType, arguments) = signatures[0]
- harness.check(
- str(returnType), "TestEnum (Wrapper)", "Method type is the correct name"
- )
- harness.check(len(arguments), 1, "Method has the right number of arguments")
- arg = arguments[0]
- harness.ok(isinstance(arg, WebIDL.IDLArgument), "Should be an IDLArgument")
- harness.check(str(arg.type), "Boolean", "Argument has the right type")
-
- attr = members[1]
- harness.check(
- attr.identifier.QName(), "::TestEnumInterface::foo", "Attr has correct QName"
- )
- harness.check(attr.identifier.name, "foo", "Attr has correct name")
-
- harness.check(str(attr.type), "TestEnum (Wrapper)", "Attr type is the correct name")
-
- # Now reset our parser
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- enum Enum {
- "a",
- "b",
- "c"
- };
- interface TestInterface {
- undefined foo(optional Enum e = "d");
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow a bogus default value for an enum")
-
- # Now reset our parser
- parser = parser.reset()
- parser.parse(
- """
- enum Enum {
- "a",
- "b",
- "c",
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should allow trailing comma in enum")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_enum_duplicate_values.py b/components/script/dom/bindings/codegen/parser/tests/test_enum_duplicate_values.py
deleted file mode 100644
index 8969281e1c7..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_enum_duplicate_values.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- try:
- parser.parse(
- """
- enum TestEnumDuplicateValue {
- "",
- ""
- };
- """
- )
- harness.ok(False, "Should have thrown!")
- except:
- harness.ok(True, "Enum TestEnumDuplicateValue should throw")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py b/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py
deleted file mode 100644
index 1c9bb065580..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_error_colno.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- # Check that error messages put the '^' in the right place.
-
- threw = False
- input = "interface ?"
- try:
- parser.parse(input)
- results = parser.finish()
- except WebIDL.WebIDLError as e:
- threw = True
- lines = str(e).split("\n")
-
- harness.check(len(lines), 3, "Expected number of lines in error message")
- harness.check(lines[1], input, "Second line shows error")
- harness.check(
- lines[2],
- " " * (len(input) - 1) + "^",
- "Correct column pointer in error message",
- )
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py b/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py
deleted file mode 100644
index 0d10e006787..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_error_lineno.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- # Check that error messages put the '^' in the right place.
-
- threw = False
- input = """\
-// This is a comment.
-interface Foo {
-};
-
-/* This is also a comment. */
-interface ?"""
- try:
- parser.parse(input)
- results = parser.finish()
- except WebIDL.WebIDLError as e:
- threw = True
- lines = str(e).split("\n")
-
- harness.check(len(lines), 3, "Expected number of lines in error message")
- harness.ok(
- lines[0].endswith("line 6:10"),
- 'First line of error should end with "line 6:10", but was "%s".' % lines[0],
- )
- harness.check(
- lines[1],
- "interface ?",
- "Second line of error message is the line which caused the error.",
- )
- harness.check(
- lines[2],
- " " * (len("interface ?") - 1) + "^",
- "Correct column pointer in error message.",
- )
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py b/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py
deleted file mode 100644
index c5ea8e4b88b..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_exposed_extended_attribute.py
+++ /dev/null
@@ -1,383 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global=(Bar, Bar1,Bar2), Exposed=Bar] interface Bar {};
- [Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
-
- [Exposed=(Foo,Bar1)]
- interface Iface {
- undefined method1();
-
- [Exposed=Bar1]
- readonly attribute any attr;
- };
-
- [Exposed=Foo]
- partial interface Iface {
- undefined method2();
- };
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 5, "Should know about five things")
- iface = results[3]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
- members = iface.members
- harness.check(len(members), 3, "Should have three members")
-
- harness.ok(
- members[0].exposureSet == set(["Foo", "Bar"]),
- "method1 should have the right exposure set",
- )
- harness.ok(
- members[0]._exposureGlobalNames == set(["Foo", "Bar1"]),
- "method1 should have the right exposure global names",
- )
-
- harness.ok(
- members[1].exposureSet == set(["Bar"]),
- "attr should have the right exposure set",
- )
- harness.ok(
- members[1]._exposureGlobalNames == set(["Bar1"]),
- "attr should have the right exposure global names",
- )
-
- harness.ok(
- members[2].exposureSet == set(["Foo"]),
- "method2 should have the right exposure set",
- )
- harness.ok(
- members[2]._exposureGlobalNames == set(["Foo"]),
- "method2 should have the right exposure global names",
- )
-
- harness.ok(
- iface.exposureSet == set(["Foo", "Bar"]),
- "Iface should have the right exposure set",
- )
- harness.ok(
- iface._exposureGlobalNames == set(["Foo", "Bar1"]),
- "Iface should have the right exposure global names",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
- [Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
-
- [Exposed=Foo]
- interface Iface2 {
- undefined method3();
- };
- """
- )
- results = parser.finish()
-
- harness.check(len(results), 4, "Should know about four things")
- iface = results[3]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
- members = iface.members
- harness.check(len(members), 1, "Should have one member")
-
- harness.ok(
- members[0].exposureSet == set(["Foo"]),
- "method3 should have the right exposure set",
- )
- harness.ok(
- members[0]._exposureGlobalNames == set(["Foo"]),
- "method3 should have the right exposure global names",
- )
-
- harness.ok(
- iface.exposureSet == set(["Foo"]), "Iface2 should have the right exposure set"
- )
- harness.ok(
- iface._exposureGlobalNames == set(["Foo"]),
- "Iface2 should have the right exposure global names",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global=(Bar, Bar1, Bar2), Exposed=Bar] interface Bar {};
- [Global=(Baz, Baz2), Exposed=Baz] interface Baz {};
-
- [Exposed=Foo]
- interface Iface3 {
- undefined method4();
- };
-
- [Exposed=(Foo,Bar1)]
- interface mixin Mixin {
- undefined method5();
- };
-
- Iface3 includes Mixin;
- """
- )
- results = parser.finish()
- harness.check(len(results), 6, "Should know about six things")
- iface = results[3]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
- members = iface.members
- harness.check(len(members), 2, "Should have two members")
-
- harness.ok(
- members[0].exposureSet == set(["Foo"]),
- "method4 should have the right exposure set",
- )
- harness.ok(
- members[0]._exposureGlobalNames == set(["Foo"]),
- "method4 should have the right exposure global names",
- )
-
- harness.ok(
- members[1].exposureSet == set(["Foo", "Bar"]),
- "method5 should have the right exposure set",
- )
- harness.ok(
- members[1]._exposureGlobalNames == set(["Foo", "Bar1"]),
- "method5 should have the right exposure global names",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Exposed=Foo]
- interface Bar {
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Should have thrown on invalid Exposed value on interface.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Bar {
- [Exposed=Foo]
- readonly attribute bool attr;
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Should have thrown on invalid Exposed value on attribute.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Bar {
- [Exposed=Foo]
- undefined operation();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Should have thrown on invalid Exposed value on operation.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Bar {
- [Exposed=Foo]
- const long constant = 5;
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Should have thrown on invalid Exposed value on constant.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global, Exposed=Bar] interface Bar {};
-
- [Exposed=Foo]
- interface Baz {
- [Exposed=Bar]
- undefined method();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(
- threw, "Should have thrown on member exposed where its interface is not."
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global, Exposed=Bar] interface Bar {};
-
- [Exposed=Foo]
- interface Baz {
- undefined method();
- };
-
- [Exposed=Bar]
- interface mixin Mixin {
- undefined otherMethod();
- };
-
- Baz includes Mixin;
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 5, "Should know about five things")
- iface = results[2]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
- members = iface.members
- harness.check(len(members), 2, "Should have two members")
-
- harness.ok(
- members[0].exposureSet == set(["Foo"]),
- "method should have the right exposure set",
- )
- harness.ok(
- members[0]._exposureGlobalNames == set(["Foo"]),
- "method should have the right exposure global names",
- )
-
- harness.ok(
- members[1].exposureSet == set(["Bar"]),
- "otherMethod should have the right exposure set",
- )
- harness.ok(
- members[1]._exposureGlobalNames == set(["Bar"]),
- "otherMethod should have the right exposure global names",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global, Exposed=Bar] interface Bar {};
-
- [Exposed=*]
- interface Baz {
- undefined methodWild();
- };
-
- [Exposed=Bar]
- interface mixin Mixin {
- undefined methodNotWild();
- };
-
- Baz includes Mixin;
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 5, "Should know about five things")
- iface = results[2]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should have an interface here")
- members = iface.members
- harness.check(len(members), 2, "Should have two members")
-
- harness.ok(
- members[0].exposureSet == set(["Foo", "Bar"]),
- "methodWild should have the right exposure set",
- )
- harness.ok(
- members[0]._exposureGlobalNames == set(["Foo", "Bar"]),
- "methodWild should have the right exposure global names",
- )
-
- harness.ok(
- members[1].exposureSet == set(["Bar"]),
- "methodNotWild should have the right exposure set",
- )
- harness.ok(
- members[1]._exposureGlobalNames == set(["Bar"]),
- "methodNotWild should have the right exposure global names",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global, Exposed=Bar] interface Bar {};
-
- [Exposed=Foo]
- interface Baz {
- [Exposed=*]
- undefined method();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(
- threw, "Should have thrown on member exposed where its interface is not."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo] interface Foo {};
- [Global, Exposed=Bar] interface Bar {};
-
- [Exposed=(Foo,*)]
- interface Baz {
- undefined method();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
-
- harness.ok(threw, "Should have thrown on a wildcard in an identifier list.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_extended_attributes.py b/components/script/dom/bindings/codegen/parser/tests/test_extended_attributes.py
deleted file mode 100644
index 423a67540c7..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_extended_attributes.py
+++ /dev/null
@@ -1,131 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- [LegacyNoInterfaceObject]
- interface TestExtendedAttr {
- [LegacyUnforgeable] readonly attribute byte b;
- };
- """
- )
-
- results = parser.finish()
-
- parser = parser.reset()
- parser.parse(
- """
- [Pref="foo.bar",Pref=flop]
- interface TestExtendedAttr {
- [Pref="foo.bar"] attribute byte b;
- };
- """
- )
-
- results = parser.finish()
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestLegacyLenientThis {
- [LegacyLenientThis] attribute byte b;
- };
- """
- )
-
- results = parser.finish()
- harness.ok(
- results[0].members[0].hasLegacyLenientThis(), "Should have a lenient this"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestLegacyLenientThis2 {
- [LegacyLenientThis=something] attribute byte b;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "[LegacyLenientThis] must take no arguments")
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestClamp {
- undefined testClamp([Clamp] long foo);
- undefined testNotClamp(long foo);
- };
- """
- )
-
- results = parser.finish()
- # Pull out the first argument out of the arglist of the first (and
- # only) signature.
- harness.ok(
- results[0].members[0].signatures()[0][1][0].type.hasClamp(), "Should be clamped"
- )
- harness.ok(
- not results[0].members[1].signatures()[0][1][0].type.hasClamp(),
- "Should not be clamped",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestClamp2 {
- undefined testClamp([Clamp=something] long foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "[Clamp] must take no arguments")
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestEnforceRange {
- undefined testEnforceRange([EnforceRange] long foo);
- undefined testNotEnforceRange(long foo);
- };
- """
- )
-
- results = parser.finish()
- # Pull out the first argument out of the arglist of the first (and
- # only) signature.
- harness.ok(
- results[0].members[0].signatures()[0][1][0].type.hasEnforceRange(),
- "Should be enforceRange",
- )
- harness.ok(
- not results[0].members[1].signatures()[0][1][0].type.hasEnforceRange(),
- "Should not be enforceRange",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestEnforceRange2 {
- undefined testEnforceRange([EnforceRange=something] long foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "[EnforceRange] must take no arguments")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_float_types.py b/components/script/dom/bindings/codegen/parser/tests/test_float_types.py
deleted file mode 100644
index d37443819d8..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_float_types.py
+++ /dev/null
@@ -1,145 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- typedef float myFloat;
- typedef unrestricted float myUnrestrictedFloat;
- interface FloatTypes {
- attribute float f;
- attribute unrestricted float uf;
- attribute double d;
- attribute unrestricted double ud;
- [LenientFloat]
- attribute float lf;
- [LenientFloat]
- attribute double ld;
-
- undefined m1(float arg1, double arg2, float? arg3, double? arg4,
- myFloat arg5, unrestricted float arg6,
- unrestricted double arg7, unrestricted float? arg8,
- unrestricted double? arg9, myUnrestrictedFloat arg10);
- [LenientFloat]
- undefined m2(float arg1, double arg2, float? arg3, double? arg4,
- myFloat arg5, unrestricted float arg6,
- unrestricted double arg7, unrestricted float? arg8,
- unrestricted double? arg9, myUnrestrictedFloat arg10);
- [LenientFloat]
- undefined m3(float arg);
- [LenientFloat]
- undefined m4(double arg);
- [LenientFloat]
- undefined m5((float or FloatTypes) arg);
- [LenientFloat]
- undefined m6(sequence<float> arg);
- };
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 3, "Should be two typedefs and one interface.")
- iface = results[2]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- types = [a.type for a in iface.members if a.isAttr()]
- harness.ok(types[0].isFloat(), "'float' is a float")
- harness.ok(not types[0].isUnrestricted(), "'float' is not unrestricted")
- harness.ok(types[1].isFloat(), "'unrestricted float' is a float")
- harness.ok(types[1].isUnrestricted(), "'unrestricted float' is unrestricted")
- harness.ok(types[2].isFloat(), "'double' is a float")
- harness.ok(not types[2].isUnrestricted(), "'double' is not unrestricted")
- harness.ok(types[3].isFloat(), "'unrestricted double' is a float")
- harness.ok(types[3].isUnrestricted(), "'unrestricted double' is unrestricted")
-
- method = iface.members[6]
- harness.ok(isinstance(method, WebIDL.IDLMethod), "Should be an IDLMethod")
- argtypes = [a.type for a in method.signatures()[0][1]]
- for (idx, type) in enumerate(argtypes):
- harness.ok(type.isFloat(), "Type %d should be float" % idx)
- harness.check(
- type.isUnrestricted(),
- idx >= 5,
- "Type %d should %sbe unrestricted" % (idx, "" if idx >= 4 else "not "),
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface FloatTypes {
- [LenientFloat]
- long m(float arg);
- };
- """
- )
- except Exception as x:
- threw = True
- harness.ok(threw, "[LenientFloat] only allowed on methods returning undefined")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface FloatTypes {
- [LenientFloat]
- undefined m(unrestricted float arg);
- };
- """
- )
- except Exception as x:
- threw = True
- harness.ok(
- threw, "[LenientFloat] only allowed on methods with unrestricted float args"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface FloatTypes {
- [LenientFloat]
- undefined m(sequence<unrestricted float> arg);
- };
- """
- )
- except Exception as x:
- threw = True
- harness.ok(
- threw, "[LenientFloat] only allowed on methods with unrestricted float args (2)"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface FloatTypes {
- [LenientFloat]
- undefined m((unrestricted float or FloatTypes) arg);
- };
- """
- )
- except Exception as x:
- threw = True
- harness.ok(
- threw, "[LenientFloat] only allowed on methods with unrestricted float args (3)"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface FloatTypes {
- [LenientFloat]
- readonly attribute float foo;
- };
- """
- )
- except Exception as x:
- threw = True
- harness.ok(threw, "[LenientFloat] only allowed on writable attributes")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_forward_decl.py b/components/script/dom/bindings/codegen/parser/tests/test_forward_decl.py
deleted file mode 100644
index 1c81718400a..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_forward_decl.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface ForwardDeclared;
- interface ForwardDeclared;
-
- interface TestForwardDecl {
- attribute ForwardDeclared foo;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestForwardDeclared interface parsed without error.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_global_extended_attr.py b/components/script/dom/bindings/codegen/parser/tests/test_global_extended_attr.py
deleted file mode 100644
index 9ee27efbc8d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_global_extended_attr.py
+++ /dev/null
@@ -1,129 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- [Global, Exposed=Foo]
- interface Foo : Bar {
- getter any(DOMString name);
- };
- [Exposed=Foo]
- interface Bar {};
- """
- )
-
- results = parser.finish()
-
- harness.ok(
- results[0].isOnGlobalProtoChain(),
- "[Global] interface should be on global's proto chain",
- )
- harness.ok(
- results[1].isOnGlobalProtoChain(),
- "[Global] interface should be on global's proto chain",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo]
- interface Foo {
- getter any(DOMString name);
- setter undefined(DOMString name, any arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown for [Global] used on an interface with a " "named setter",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo]
- interface Foo {
- getter any(DOMString name);
- deleter undefined(DOMString name);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown for [Global] used on an interface with a " "named deleter",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, LegacyOverrideBuiltIns, Exposed=Foo]
- interface Foo {
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown for [Global] used on an interface with a "
- "[LegacyOverrideBuiltIns]",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo]
- interface Foo : Bar {
- };
- [LegacyOverrideBuiltIns, Exposed=Foo]
- interface Bar {
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown for [Global] used on an interface with an "
- "[LegacyOverrideBuiltIns] ancestor",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Foo]
- interface Foo {
- };
- [Exposed=Foo]
- interface Bar : Foo {
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown for [Global] used on an interface with a " "descendant",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py b/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py
deleted file mode 100644
index 7404c86f944..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_identifier_conflict.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Import the WebIDL module, so we can do isinstance checks and whatnot
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- try:
- parser.parse(
- """
- enum Foo { "a" };
- interface Foo;
- """
- )
- results = parser.finish()
- harness.ok(False, "Should fail to parse")
- except Exception as e:
- harness.ok(
- "Name collision" in str(e), "Should have name collision for interface"
- )
-
- parser = parser.reset()
- try:
- parser.parse(
- """
- dictionary Foo { long x; };
- enum Foo { "a" };
- """
- )
- results = parser.finish()
- harness.ok(False, "Should fail to parse")
- except Exception as e:
- harness.ok(
- "Name collision" in str(e), "Should have name collision for dictionary"
- )
-
- parser = parser.reset()
- try:
- parser.parse(
- """
- enum Foo { "a" };
- enum Foo { "b" };
- """
- )
- results = parser.finish()
- harness.ok(False, "Should fail to parse")
- except Exception as e:
- harness.ok(
- "Multiple unresolvable definitions" in str(e),
- "Should have name collision for dictionary",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_incomplete_parent.py b/components/script/dom/bindings/codegen/parser/tests/test_incomplete_parent.py
deleted file mode 100644
index ed476b8ed4c..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_incomplete_parent.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestIncompleteParent : NotYetDefined {
- undefined foo();
- };
-
- interface NotYetDefined : EvenHigherOnTheChain {
- };
-
- interface EvenHigherOnTheChain {
- };
- """
- )
-
- parser.finish()
-
- harness.ok(True, "TestIncompleteParent interface parsed without error.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_incomplete_types.py b/components/script/dom/bindings/codegen/parser/tests/test_incomplete_types.py
deleted file mode 100644
index 0d54f708bba..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_incomplete_types.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestIncompleteTypes {
- attribute FooInterface attr1;
-
- FooInterface method1(FooInterface arg);
- };
-
- interface FooInterface {
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestIncompleteTypes interface parsed without error.")
- harness.check(len(results), 2, "Should be two productions.")
- iface = results[0]
- harness.ok(isinstance(iface, WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(
- iface.identifier.QName(),
- "::TestIncompleteTypes",
- "Interface has the right QName",
- )
- harness.check(
- iface.identifier.name, "TestIncompleteTypes", "Interface has the right name"
- )
- harness.check(len(iface.members), 2, "Expect 2 members")
-
- attr = iface.members[0]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- method = iface.members[1]
- harness.ok(isinstance(method, WebIDL.IDLMethod), "Should be an IDLMethod")
-
- harness.check(
- attr.identifier.QName(),
- "::TestIncompleteTypes::attr1",
- "Attribute has the right QName",
- )
- harness.check(
- attr.type.name, "FooInterface", "Previously unresolved type has the right name"
- )
-
- harness.check(
- method.identifier.QName(),
- "::TestIncompleteTypes::method1",
- "Attribute has the right QName",
- )
- (returnType, args) = method.signatures()[0]
- harness.check(
- returnType.name, "FooInterface", "Previously unresolved type has the right name"
- )
- harness.check(
- args[0].type.name,
- "FooInterface",
- "Previously unresolved type has the right name",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface.py b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
deleted file mode 100644
index 85748848e1b..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface.py
+++ /dev/null
@@ -1,459 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse("interface Foo { };")
- results = parser.finish()
- harness.ok(True, "Empty interface parsed without error.")
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
- iface = results[0]
- harness.check(iface.identifier.QName(), "::Foo", "Interface has the right QName")
- harness.check(iface.identifier.name, "Foo", "Interface has the right name")
- harness.check(iface.parent, None, "Interface has no parent")
-
- parser.parse("interface Bar : Foo { };")
- results = parser.finish()
- harness.ok(True, "Empty interface parsed without error.")
- harness.check(len(results), 2, "Should be two productions")
- harness.ok(isinstance(results[1], WebIDL.IDLInterface), "Should be an IDLInterface")
- iface = results[1]
- harness.check(iface.identifier.QName(), "::Bar", "Interface has the right QName")
- harness.check(iface.identifier.name, "Bar", "Interface has the right name")
- harness.ok(isinstance(iface.parent, WebIDL.IDLInterface), "Interface has a parent")
-
- parser = parser.reset()
- parser.parse(
- """
- interface QNameBase {
- attribute long foo;
- };
-
- interface QNameDerived : QNameBase {
- attribute long long foo;
- attribute byte bar;
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 2, "Should be two productions")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.ok(isinstance(results[1], WebIDL.IDLInterface), "Should be an IDLInterface")
- harness.check(results[1].parent, results[0], "Inheritance chain is right")
- harness.check(len(results[0].members), 1, "Expect 1 productions")
- harness.check(len(results[1].members), 2, "Expect 2 productions")
- base = results[0]
- derived = results[1]
- harness.check(
- base.members[0].identifier.QName(),
- "::QNameBase::foo",
- "Member has the right QName",
- )
- harness.check(
- derived.members[0].identifier.QName(),
- "::QNameDerived::foo",
- "Member has the right QName",
- )
- harness.check(
- derived.members[1].identifier.QName(),
- "::QNameDerived::bar",
- "Member has the right QName",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A : B {};
- interface B : A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow cycles in interface inheritance chains")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A : C {};
- interface C : B {};
- interface B : A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw, "Should not allow indirect cycles in interface inheritance chains"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A;
- interface B : A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should not allow inheriting from an interface that is only forward declared",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface A {
- constructor();
- constructor(long arg);
- readonly attribute boolean x;
- undefined foo();
- };
- partial interface A {
- readonly attribute boolean y;
- undefined foo(long arg);
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 2, "Should have two results with partial interface")
- iface = results[0]
- harness.check(
- len(iface.members), 3, "Should have three members with partial interface"
- )
- harness.check(
- iface.members[0].identifier.name,
- "x",
- "First member should be x with partial interface",
- )
- harness.check(
- iface.members[1].identifier.name,
- "foo",
- "Second member should be foo with partial interface",
- )
- harness.check(
- len(iface.members[1].signatures()),
- 2,
- "Should have two foo signatures with partial interface",
- )
- harness.check(
- iface.members[2].identifier.name,
- "y",
- "Third member should be y with partial interface",
- )
- harness.check(
- len(iface.ctor().signatures()),
- 2,
- "Should have two constructors with partial interface",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- partial interface A {
- readonly attribute boolean y;
- undefined foo(long arg);
- };
- interface A {
- constructor();
- constructor(long arg);
- readonly attribute boolean x;
- undefined foo();
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results), 2, "Should have two results with reversed partial interface"
- )
- iface = results[1]
- harness.check(
- len(iface.members),
- 3,
- "Should have three members with reversed partial interface",
- )
- harness.check(
- iface.members[0].identifier.name,
- "x",
- "First member should be x with reversed partial interface",
- )
- harness.check(
- iface.members[1].identifier.name,
- "foo",
- "Second member should be foo with reversed partial interface",
- )
- harness.check(
- len(iface.members[1].signatures()),
- 2,
- "Should have two foo signatures with reversed partial interface",
- )
- harness.check(
- iface.members[2].identifier.name,
- "y",
- "Third member should be y with reversed partial interface",
- )
- harness.check(
- len(iface.ctor().signatures()),
- 2,
- "Should have two constructors with reversed partial interface",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- readonly attribute boolean x;
- };
- interface A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow two non-partial interfaces with the same name")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- partial interface A {
- readonly attribute boolean x;
- };
- partial interface A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Must have a non-partial interface for a given name")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- boolean x;
- };
- partial interface A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between partial interface "
- "and other object",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- boolean x;
- };
- interface A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow a name collision between interface " "and other object"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- boolean x;
- };
- interface A;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between external interface "
- "and other object",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- readonly attribute boolean x;
- };
- interface A;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between external interface " "and interface",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface A;
- interface A;
- """
- )
- results = parser.finish()
- harness.ok(
- len(results) == 1 and isinstance(results[0], WebIDL.IDLExternalInterface),
- "Should allow name collisions between external interface " "declarations",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SomeRandomAnnotation]
- interface A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow unknown extended attributes on interfaces")
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Exposed=Window, LegacyWindowAlias=A]
- interface B {};
- [Exposed=Window, LegacyWindowAlias=(C, D)]
- interface E {};
- """
- )
- results = parser.finish()
- harness.check(
- results[1].legacyWindowAliases, ["A"], "Should support a single identifier"
- )
- harness.check(
- results[2].legacyWindowAliases, ["C", "D"], "Should support an identifier list"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyWindowAlias]
- interface A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow [LegacyWindowAlias] with no value")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Exposed=Worker, LegacyWindowAlias=B]
- interface A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow [LegacyWindowAlias] without Window exposure")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Exposed=Window]
- interface A {};
- [Exposed=Window, LegacyWindowAlias=A]
- interface B {};
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow [LegacyWindowAlias] to conflict with other identifiers"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Exposed=Window, LegacyWindowAlias=A]
- interface B {};
- [Exposed=Window]
- interface A {};
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow [LegacyWindowAlias] to conflict with other identifiers"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Exposed=Window, LegacyWindowAlias=A]
- interface B {};
- [Exposed=Window, LegacyWindowAlias=A]
- interface C {};
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow [LegacyWindowAlias] to conflict with other identifiers"
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface_const_identifier_conflicts.py b/components/script/dom/bindings/codegen/parser/tests/test_interface_const_identifier_conflicts.py
deleted file mode 100644
index 5750f87a6fc..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface_const_identifier_conflicts.py
+++ /dev/null
@@ -1,17 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface IdentifierConflict {
- const byte thing1 = 1;
- const unsigned long thing1 = 1;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface_identifier_conflicts_across_members.py b/components/script/dom/bindings/codegen/parser/tests/test_interface_identifier_conflicts_across_members.py
deleted file mode 100644
index c1a544ce718..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface_identifier_conflicts_across_members.py
+++ /dev/null
@@ -1,68 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface IdentifierConflictAcrossMembers1 {
- const byte thing1 = 1;
- readonly attribute long thing1;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface IdentifierConflictAcrossMembers2 {
- readonly attribute long thing1;
- const byte thing1 = 1;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface IdentifierConflictAcrossMembers3 {
- getter boolean thing1(DOMString name);
- readonly attribute long thing1;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface IdentifierConflictAcrossMembers1 {
- const byte thing1 = 1;
- long thing1();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py b/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py
deleted file mode 100644
index 18c6023dd3b..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface_maplikesetlikeiterable.py
+++ /dev/null
@@ -1,912 +0,0 @@
-import WebIDL
-import traceback
-
-
-def WebIDLTest(parser, harness):
- def shouldPass(prefix, iface, expectedMembers, numProductions=1):
- p = parser.reset()
- p.parse(iface)
- results = p.finish()
- harness.check(
- len(results),
- numProductions,
- "%s - Should have production count %d" % (prefix, numProductions),
- )
- harness.ok(
- isinstance(results[0], WebIDL.IDLInterface),
- "%s - Should be an IDLInterface" % (prefix),
- )
- # Make a copy, since we plan to modify it
- expectedMembers = list(expectedMembers)
- for m in results[0].members:
- name = m.identifier.name
- if (name, type(m)) in expectedMembers:
- harness.ok(True, "%s - %s - Should be a %s" % (prefix, name, type(m)))
- expectedMembers.remove((name, type(m)))
- else:
- harness.ok(
- False,
- "%s - %s - Unknown symbol of type %s" % (prefix, name, type(m)),
- )
- # A bit of a hoop because we can't generate the error string if we pass
- if len(expectedMembers) == 0:
- harness.ok(True, "Found all the members")
- else:
- harness.ok(
- False,
- "Expected member not found: %s of type %s"
- % (expectedMembers[0][0], expectedMembers[0][1]),
- )
- return results
-
- def shouldFail(prefix, iface):
- try:
- p = parser.reset()
- p.parse(iface)
- p.finish()
- harness.ok(False, prefix + " - Interface passed when should've failed")
- except WebIDL.WebIDLError as e:
- harness.ok(True, prefix + " - Interface failed as expected")
- except Exception as e:
- harness.ok(
- False,
- prefix
- + " - Interface failed but not as a WebIDLError exception: %s" % e,
- )
-
- iterableMembers = [
- (x, WebIDL.IDLMethod) for x in ["entries", "keys", "values", "forEach"]
- ]
- setROMembers = (
- [(x, WebIDL.IDLMethod) for x in ["has"]]
- + [("__setlike", WebIDL.IDLMaplikeOrSetlike)]
- + iterableMembers
- )
- setROMembers.extend([("size", WebIDL.IDLAttribute)])
- setRWMembers = [
- (x, WebIDL.IDLMethod) for x in ["add", "clear", "delete"]
- ] + setROMembers
- setROChromeMembers = [
- (x, WebIDL.IDLMethod) for x in ["__add", "__clear", "__delete"]
- ] + setROMembers
- setRWChromeMembers = [
- (x, WebIDL.IDLMethod) for x in ["__add", "__clear", "__delete"]
- ] + setRWMembers
- mapROMembers = (
- [(x, WebIDL.IDLMethod) for x in ["get", "has"]]
- + [("__maplike", WebIDL.IDLMaplikeOrSetlike)]
- + iterableMembers
- )
- mapROMembers.extend([("size", WebIDL.IDLAttribute)])
- mapRWMembers = [
- (x, WebIDL.IDLMethod) for x in ["set", "clear", "delete"]
- ] + mapROMembers
- mapRWChromeMembers = [
- (x, WebIDL.IDLMethod) for x in ["__set", "__clear", "__delete"]
- ] + mapRWMembers
-
- # OK, now that we've used iterableMembers to set up the above, append
- # __iterable to it for the iterable<> case.
- iterableMembers.append(("__iterable", WebIDL.IDLIterable))
-
- asyncIterableMembers = [
- (x, WebIDL.IDLMethod) for x in ["entries", "keys", "values"]
- ]
- asyncIterableMembers.append(("__iterable", WebIDL.IDLAsyncIterable))
-
- valueIterableMembers = [("__iterable", WebIDL.IDLIterable)]
- valueIterableMembers.append(("__indexedgetter", WebIDL.IDLMethod))
- valueIterableMembers.append(("length", WebIDL.IDLAttribute))
-
- valueAsyncIterableMembers = [("__iterable", WebIDL.IDLAsyncIterable)]
- valueAsyncIterableMembers.append(("values", WebIDL.IDLMethod))
-
- disallowedIterableNames = ["keys", "entries", "values"]
- disallowedMemberNames = ["forEach", "has", "size"] + disallowedIterableNames
- mapDisallowedMemberNames = ["get"] + disallowedMemberNames
- disallowedNonMethodNames = ["clear", "delete"]
- mapDisallowedNonMethodNames = ["set"] + disallowedNonMethodNames
- setDisallowedNonMethodNames = ["add"] + disallowedNonMethodNames
- unrelatedMembers = [
- ("unrelatedAttribute", WebIDL.IDLAttribute),
- ("unrelatedMethod", WebIDL.IDLMethod),
- ]
-
- #
- # Simple Usage Tests
- #
-
- shouldPass(
- "Iterable (key only)",
- """
- interface Foo1 {
- iterable<long>;
- readonly attribute unsigned long length;
- getter long(unsigned long index);
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- valueIterableMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Iterable (key only) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- iterable<long>;
- readonly attribute unsigned long length;
- getter long(unsigned long index);
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- valueIterableMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Iterable (key and value)",
- """
- interface Foo1 {
- iterable<long, long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- iterableMembers + unrelatedMembers,
- # numProductions == 2 because of the generated iterator iface,
- numProductions=2,
- )
-
- shouldPass(
- "Iterable (key and value) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- iterable<long, long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- iterableMembers,
- # numProductions == 3 because of the generated iterator iface,
- numProductions=3,
- )
-
- shouldPass(
- "Async iterable (key only)",
- """
- interface Foo1 {
- async iterable<long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- valueAsyncIterableMembers + unrelatedMembers,
- # numProductions == 2 because of the generated iterator iface,
- numProductions=2,
- )
-
- shouldPass(
- "Async iterable (key only) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- async iterable<long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- valueAsyncIterableMembers,
- # numProductions == 3 because of the generated iterator iface,
- numProductions=3,
- )
-
- shouldPass(
- "Async iterable with argument (key only)",
- """
- interface Foo1 {
- async iterable<long>(optional long foo);
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- valueAsyncIterableMembers + unrelatedMembers,
- # numProductions == 2 because of the generated iterator iface,
- numProductions=2,
- )
-
- shouldPass(
- "Async iterable (key and value)",
- """
- interface Foo1 {
- async iterable<long, long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- asyncIterableMembers + unrelatedMembers,
- # numProductions == 2 because of the generated iterator iface,
- numProductions=2,
- )
-
- shouldPass(
- "Async iterable (key and value) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- async iterable<long, long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- asyncIterableMembers,
- # numProductions == 3 because of the generated iterator iface,
- numProductions=3,
- )
-
- shouldPass(
- "Async iterable with argument (key and value)",
- """
- interface Foo1 {
- async iterable<long, long>(optional long foo);
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- asyncIterableMembers + unrelatedMembers,
- # numProductions == 2 because of the generated iterator iface,
- numProductions=2,
- )
-
- shouldPass(
- "Maplike (readwrite)",
- """
- interface Foo1 {
- maplike<long, long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapRWMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Maplike (readwrite) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- maplike<long, long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Maplike (readwrite)",
- """
- interface Foo1 {
- maplike<long, long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapRWMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Maplike (readwrite) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- maplike<long, long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Maplike (readonly)",
- """
- interface Foo1 {
- readonly maplike<long, long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapROMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Maplike (readonly) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- readonly maplike<long, long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- mapROMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Setlike (readwrite)",
- """
- interface Foo1 {
- setlike<long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- setRWMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Setlike (readwrite) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- setlike<long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- setRWMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Setlike (readonly)",
- """
- interface Foo1 {
- readonly setlike<long>;
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- setROMembers + unrelatedMembers,
- )
-
- shouldPass(
- "Setlike (readonly) inheriting from parent",
- """
- interface Foo1 : Foo2 {
- readonly setlike<long>;
- };
- interface Foo2 {
- attribute long unrelatedAttribute;
- long unrelatedMethod();
- };
- """,
- setROMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Inheritance of maplike/setlike",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldFail(
- "JS Implemented maplike interface",
- """
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
- interface Foo1 {
- constructor();
- setlike<long>;
- };
- """,
- )
-
- shouldFail(
- "JS Implemented maplike interface",
- """
- [JSImplementation="@mozilla.org/dom/test-interface-js-maplike;1"]
- interface Foo1 {
- constructor();
- maplike<long, long>;
- };
- """,
- )
-
- #
- # Multiple maplike/setlike tests
- #
-
- shouldFail(
- "Two maplike/setlikes on same interface",
- """
- interface Foo1 {
- setlike<long>;
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Two iterable/setlikes on same interface",
- """
- interface Foo1 {
- iterable<long>;
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Two iterables on same interface",
- """
- interface Foo1 {
- iterable<long>;
- iterable<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Two iterables on same interface",
- """
- interface Foo1 {
- iterable<long>;
- async iterable<long>;
- };
- """,
- )
-
- shouldFail(
- "Two iterables on same interface",
- """
- interface Foo1 {
- async iterable<long>;
- async iterable<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Async iterable with non-optional arguments",
- """
- interface Foo1 {
- async iterable<long>(long foo);
- };
- """,
- )
-
- shouldFail(
- "Async iterable with non-optional arguments",
- """
- interface Foo1 {
- async iterable<long>(optional long foo, long bar);
- };
- """,
- )
-
- shouldFail(
- "Async iterable with non-optional arguments",
- """
- interface Foo1 {
- async iterable<long, long>(long foo);
- };
- """,
- )
-
- shouldFail(
- "Two maplike/setlikes in partials",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- partial interface Foo1 {
- setlike<long>;
- };
- """,
- )
-
- shouldFail(
- "Conflicting maplike/setlikes across inheritance",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- setlike<long>;
- };
- """,
- )
-
- shouldFail(
- "Conflicting maplike/iterable across inheritance",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- iterable<long>;
- };
- """,
- )
-
- shouldFail(
- "Conflicting maplike/setlikes across multistep inheritance",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- setlike<long>;
- };
- """,
- )
-
- #
- # Member name collision tests
- #
-
- def testConflictingMembers(likeMember, conflictName, expectedMembers, methodPasses):
- """
- Tests for maplike/setlike member generation against conflicting member
- names. If methodPasses is True, this means we expect the interface to
- pass in the case of method shadowing, and expectedMembers should be the
- list of interface members to check against on the passing interface.
-
- """
- if methodPasses:
- shouldPass(
- "Conflicting method: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s;
- [Throws]
- undefined %s(long test1, double test2, double test3);
- };
- """
- % (likeMember, conflictName),
- expectedMembers,
- )
- else:
- shouldFail(
- "Conflicting method: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s;
- [Throws]
- undefined %s(long test1, double test2, double test3);
- };
- """
- % (likeMember, conflictName),
- )
- # Inherited conflicting methods should ALWAYS fail
- shouldFail(
- "Conflicting inherited method: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- undefined %s(long test1, double test2, double test3);
- };
- interface Foo2 : Foo1 {
- %s;
- };
- """
- % (conflictName, likeMember),
- )
- shouldFail(
- "Conflicting static method: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s;
- static undefined %s(long test1, double test2, double test3);
- };
- """
- % (likeMember, conflictName),
- )
- shouldFail(
- "Conflicting attribute: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s
- attribute double %s;
- };
- """
- % (likeMember, conflictName),
- )
- shouldFail(
- "Conflicting const: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s;
- const double %s = 0;
- };
- """
- % (likeMember, conflictName),
- )
- shouldFail(
- "Conflicting static attribute: %s and %s" % (likeMember, conflictName),
- """
- interface Foo1 {
- %s;
- static attribute long %s;
- };
- """
- % (likeMember, conflictName),
- )
-
- for member in disallowedIterableNames:
- testConflictingMembers("iterable<long, long>", member, iterableMembers, False)
- for member in mapDisallowedMemberNames:
- testConflictingMembers("maplike<long, long>", member, mapRWMembers, False)
- for member in disallowedMemberNames:
- testConflictingMembers("setlike<long>", member, setRWMembers, False)
- for member in mapDisallowedNonMethodNames:
- testConflictingMembers("maplike<long, long>", member, mapRWMembers, True)
- for member in setDisallowedNonMethodNames:
- testConflictingMembers("setlike<long>", member, setRWMembers, True)
-
- shouldPass(
- "Inheritance of maplike/setlike with child member collision",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- undefined entries();
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Inheritance of multi-level maplike/setlike with child member collision",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- undefined entries();
- };
- """,
- mapRWMembers,
- numProductions=3,
- )
-
- shouldFail(
- "Maplike interface with mixin member collision",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface mixin Foo2 {
- undefined entries();
- };
- Foo1 includes Foo2;
- """,
- )
-
- shouldPass(
- "Inherited Maplike interface with consequential interface member collision",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface mixin Foo2 {
- undefined entries();
- };
- interface Foo3 : Foo1 {
- };
- Foo3 includes Foo2;
- """,
- mapRWMembers,
- numProductions=4,
- )
-
- shouldFail(
- "Inheritance of name collision with child maplike/setlike",
- """
- interface Foo1 {
- undefined entries();
- };
- interface Foo2 : Foo1 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Inheritance of multi-level name collision with child maplike/setlike",
- """
- interface Foo1 {
- undefined entries();
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldPass(
- "Inheritance of attribute collision with parent maplike/setlike",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- attribute double size;
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldPass(
- "Inheritance of multi-level attribute collision with parent maplike/setlike",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- attribute double size;
- };
- """,
- mapRWMembers,
- numProductions=3,
- )
-
- shouldFail(
- "Inheritance of attribute collision with child maplike/setlike",
- """
- interface Foo1 {
- attribute double size;
- };
- interface Foo2 : Foo1 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Inheritance of multi-level attribute collision with child maplike/setlike",
- """
- interface Foo1 {
- attribute double size;
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Inheritance of attribute/rw function collision with child maplike/setlike",
- """
- interface Foo1 {
- attribute double set;
- };
- interface Foo2 : Foo1 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Inheritance of const/rw function collision with child maplike/setlike",
- """
- interface Foo1 {
- const double set = 0;
- };
- interface Foo2 : Foo1 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldPass(
- "Inheritance of rw function with same name in child maplike/setlike",
- """
- interface Foo1 {
- maplike<long, long>;
- };
- interface Foo2 : Foo1 {
- undefined clear();
- };
- """,
- mapRWMembers,
- numProductions=2,
- )
-
- shouldFail(
- "Inheritance of unforgeable attribute collision with child maplike/setlike",
- """
- interface Foo1 {
- [LegacyUnforgeable]
- attribute double size;
- };
- interface Foo2 : Foo1 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldFail(
- "Inheritance of multi-level unforgeable attribute collision with child maplike/setlike",
- """
- interface Foo1 {
- [LegacyUnforgeable]
- attribute double size;
- };
- interface Foo2 : Foo1 {
- };
- interface Foo3 : Foo2 {
- maplike<long, long>;
- };
- """,
- )
-
- shouldPass(
- "Interface with readonly allowable overrides",
- """
- interface Foo1 {
- readonly setlike<long>;
- readonly attribute boolean clear;
- };
- """,
- setROMembers + [("clear", WebIDL.IDLAttribute)],
- )
-
- r = shouldPass(
- "Check proper override of clear/delete/set",
- """
- interface Foo1 {
- maplike<long, long>;
- long clear(long a, long b, double c, double d);
- long set(long a, long b, double c, double d);
- long delete(long a, long b, double c, double d);
- };
- """,
- mapRWMembers,
- )
-
- for m in r[0].members:
- if m.identifier.name in ["clear", "set", "delete"]:
- harness.ok(m.isMethod(), "%s should be a method" % m.identifier.name)
- harness.check(
- m.maxArgCount, 4, "%s should have 4 arguments" % m.identifier.name
- )
- harness.ok(
- not m.isMaplikeOrSetlikeOrIterableMethod(),
- "%s should not be a maplike/setlike function" % m.identifier.name,
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interfacemixin.py b/components/script/dom/bindings/codegen/parser/tests/test_interfacemixin.py
deleted file mode 100644
index b3c8573fa59..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_interfacemixin.py
+++ /dev/null
@@ -1,534 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse("interface mixin Foo { };")
- results = parser.finish()
- harness.ok(True, "Empty interface mixin parsed without error.")
- harness.check(len(results), 1, "Should be one production")
- harness.ok(
- isinstance(results[0], WebIDL.IDLInterfaceMixin),
- "Should be an IDLInterfaceMixin",
- )
- mixin = results[0]
- harness.check(
- mixin.identifier.QName(), "::Foo", "Interface mixin has the right QName"
- )
- harness.check(mixin.identifier.name, "Foo", "Interface mixin has the right name")
-
- parser = parser.reset()
- parser.parse(
- """
- interface mixin QNameBase {
- const long foo = 3;
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 1, "Should be one productions")
- harness.ok(
- isinstance(results[0], WebIDL.IDLInterfaceMixin),
- "Should be an IDLInterfaceMixin",
- )
- harness.check(len(results[0].members), 1, "Expect 1 productions")
- mixin = results[0]
- harness.check(
- mixin.members[0].identifier.QName(),
- "::QNameBase::foo",
- "Member has the right QName",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface mixin A {
- readonly attribute boolean x;
- undefined foo();
- };
- partial interface mixin A {
- readonly attribute boolean y;
- undefined foo(long arg);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results), 2, "Should have two results with partial interface mixin"
- )
- mixin = results[0]
- harness.check(
- len(mixin.members), 3, "Should have three members with partial interface mixin"
- )
- harness.check(
- mixin.members[0].identifier.name,
- "x",
- "First member should be x with partial interface mixin",
- )
- harness.check(
- mixin.members[1].identifier.name,
- "foo",
- "Second member should be foo with partial interface mixin",
- )
- harness.check(
- len(mixin.members[1].signatures()),
- 2,
- "Should have two foo signatures with partial interface mixin",
- )
- harness.check(
- mixin.members[2].identifier.name,
- "y",
- "Third member should be y with partial interface mixin",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- partial interface mixin A {
- readonly attribute boolean y;
- undefined foo(long arg);
- };
- interface mixin A {
- readonly attribute boolean x;
- undefined foo();
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results), 2, "Should have two results with reversed partial interface mixin"
- )
- mixin = results[1]
- harness.check(
- len(mixin.members),
- 3,
- "Should have three members with reversed partial interface mixin",
- )
- harness.check(
- mixin.members[0].identifier.name,
- "x",
- "First member should be x with reversed partial interface mixin",
- )
- harness.check(
- mixin.members[1].identifier.name,
- "foo",
- "Second member should be foo with reversed partial interface mixin",
- )
- harness.check(
- len(mixin.members[1].signatures()),
- 2,
- "Should have two foo signatures with reversed partial interface mixin",
- )
- harness.check(
- mixin.members[2].identifier.name,
- "y",
- "Third member should be y with reversed partial interface mixin",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Interface {};
- interface mixin Mixin {
- attribute short x;
- };
- Interface includes Mixin;
- """
- )
- results = parser.finish()
- iface = results[0]
- harness.check(len(iface.members), 1, "Should merge members from mixins")
- harness.check(
- iface.members[0].identifier.name, "x", "Should merge members from mixins"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- readonly attribute boolean x;
- };
- interface mixin A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow two non-partial interface mixins with the same name"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- partial interface mixin A {
- readonly attribute boolean x;
- };
- partial interface mixin A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Must have a non-partial interface mixin for a given name")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- boolean x;
- };
- partial interface mixin A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between partial interface "
- "mixin and other object",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary A {
- boolean x;
- };
- interface mixin A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between interface mixin " "and other object",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- readonly attribute boolean x;
- };
- interface A;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a name collision between external interface "
- "and interface mixin",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SomeRandomAnnotation]
- interface mixin A {
- readonly attribute boolean y;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow unknown extended attributes on interface mixins"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- getter double (DOMString propertyName);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow getters on interface mixins")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- setter undefined (DOMString propertyName, double propertyValue);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow setters on interface mixins")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- deleter undefined (DOMString propertyName);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow deleters on interface mixins")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- legacycaller double compute(double x);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow legacycallers on interface mixins")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin A {
- inherit attribute x;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow inherited attribute on interface mixins")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Interface {};
- interface NotMixin {
- attribute short x;
- };
- Interface includes NotMixin;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should fail if the right side does not point an interface mixin")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin NotInterface {};
- interface mixin Mixin {
- attribute short x;
- };
- NotInterface includes Mixin;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should fail if the left side does not point an interface")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin Mixin {
- iterable<DOMString>;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should fail if an interface mixin includes iterable")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin Mixin {
- setlike<DOMString>;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should fail if an interface mixin includes setlike")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface mixin Mixin {
- maplike<DOMString, DOMString>;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should fail if an interface mixin includes maplike")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Interface {
- attribute short attr;
- };
- interface mixin Mixin {
- attribute short attr;
- };
- Interface includes Mixin;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should fail if the included mixin interface has duplicated member"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Interface {};
- interface mixin Mixin1 {
- attribute short attr;
- };
- interface mixin Mixin2 {
- attribute short attr;
- };
- Interface includes Mixin1;
- Interface includes Mixin2;
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should fail if the included mixin interfaces have duplicated member"
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Global, Exposed=Worker] interface Worker {};
- [Exposed=Window]
- interface Base {};
- interface mixin Mixin {
- Base returnSelf();
- };
- Base includes Mixin;
- """
- )
- results = parser.finish()
- base = results[2]
- attr = base.members[0]
- harness.check(
- attr.exposureSet,
- set(["Window"]),
- "Should expose on globals where the base interfaces are exposed",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Global, Exposed=Worker] interface Worker {};
- [Exposed=Window]
- interface Base {};
- [Exposed=Window]
- interface mixin Mixin {
- attribute short a;
- };
- Base includes Mixin;
- """
- )
- results = parser.finish()
- base = results[2]
- attr = base.members[0]
- harness.check(
- attr.exposureSet, set(["Window"]), "Should follow [Exposed] on interface mixin"
- )
-
- parser = parser.reset()
- parser.parse(
- """
- [Global, Exposed=Window] interface Window {};
- [Global, Exposed=Worker] interface Worker {};
- [Exposed=Window]
- interface Base1 {};
- [Exposed=Worker]
- interface Base2 {};
- interface mixin Mixin {
- attribute short a;
- };
- Base1 includes Mixin;
- Base2 includes Mixin;
- """
- )
- results = parser.finish()
- base = results[2]
- attr = base.members[0]
- harness.check(
- attr.exposureSet,
- set(["Window", "Worker"]),
- "Should expose on all globals where including interfaces are " "exposed",
- )
- base = results[3]
- attr = base.members[0]
- harness.check(
- attr.exposureSet,
- set(["Window", "Worker"]),
- "Should expose on all globals where including interfaces are " "exposed",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py b/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py
deleted file mode 100644
index 9d2230c3bec..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_lenientSetter.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-def should_throw(parser, harness, message, code):
- parser = parser.reset()
- threw = False
- try:
- parser.parse(code)
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown: %s" % message)
-
-
-def WebIDLTest(parser, harness):
- # The [LegacyLenientSetter] extended attribute MUST take no arguments.
- should_throw(
- parser,
- harness,
- "no arguments",
- """
- interface I {
- [LegacyLenientSetter=X] readonly attribute long A;
- };
- """,
- )
-
- # An attribute with the [LegacyLenientSetter] extended attribute MUST NOT
- # also be declared with the [PutForwards] extended attribute.
- should_throw(
- parser,
- harness,
- "PutForwards",
- """
- interface I {
- [PutForwards=B, LegacyLenientSetter] readonly attribute J A;
- };
- interface J {
- attribute long B;
- };
- """,
- )
-
- # An attribute with the [LegacyLenientSetter] extended attribute MUST NOT
- # also be declared with the [Replaceable] extended attribute.
- should_throw(
- parser,
- harness,
- "Replaceable",
- """
- interface I {
- [Replaceable, LegacyLenientSetter] readonly attribute J A;
- };
- """,
- )
-
- # The [LegacyLenientSetter] extended attribute MUST NOT be used on an
- # attribute that is not read only.
- should_throw(
- parser,
- harness,
- "writable attribute",
- """
- interface I {
- [LegacyLenientSetter] attribute long A;
- };
- """,
- )
-
- # The [LegacyLenientSetter] extended attribute MUST NOT be used on a
- # static attribute.
- should_throw(
- parser,
- harness,
- "static attribute",
- """
- interface I {
- [LegacyLenientSetter] static readonly attribute long A;
- };
- """,
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_method.py b/components/script/dom/bindings/codegen/parser/tests/test_method.py
deleted file mode 100644
index 0ddfada28ac..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_method.py
+++ /dev/null
@@ -1,430 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestMethods {
- undefined basic();
- static undefined basicStatic();
- undefined basicWithSimpleArgs(boolean arg1, byte arg2, unsigned long arg3);
- boolean basicBoolean();
- static boolean basicStaticBoolean();
- boolean basicBooleanWithSimpleArgs(boolean arg1, byte arg2, unsigned long arg3);
- undefined optionalArg(optional byte? arg1, optional sequence<byte> arg2);
- undefined variadicArg(byte?... arg1);
- object getObject();
- undefined setObject(object arg1);
- undefined 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), 12, "Expect 12 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,
- 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.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", [("Undefined", [])])
- checkMethod(
- methods[1],
- "::TestMethods::basicStatic",
- "basicStatic",
- [("Undefined", [])],
- static=True,
- )
- checkMethod(
- methods[2],
- "::TestMethods::basicWithSimpleArgs",
- "basicWithSimpleArgs",
- [
- (
- "Undefined",
- [
- (
- "::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",
- [
- (
- "Undefined",
- [
- (
- "::TestMethods::optionalArg::arg1",
- "arg1",
- "ByteOrNull",
- True,
- False,
- ),
- (
- "::TestMethods::optionalArg::arg2",
- "arg2",
- "ByteSequence",
- True,
- False,
- ),
- ],
- )
- ],
- )
- checkMethod(
- methods[7],
- "::TestMethods::variadicArg",
- "variadicArg",
- [
- (
- "Undefined",
- [
- (
- "::TestMethods::variadicArg::arg1",
- "arg1",
- "ByteOrNull",
- True,
- True,
- )
- ],
- )
- ],
- )
- checkMethod(methods[8], "::TestMethods::getObject", "getObject", [("Object", [])])
- checkMethod(
- methods[9],
- "::TestMethods::setObject",
- "setObject",
- [
- (
- "Undefined",
- [("::TestMethods::setObject::arg1", "arg1", "Object", False, False)],
- )
- ],
- )
- checkMethod(
- methods[10],
- "::TestMethods::setAny",
- "setAny",
- [("Undefined", [("::TestMethods::setAny::arg1", "arg1", "Any", False, False)])],
- )
- checkMethod(
- methods[11],
- "::TestMethods::doFloats",
- "doFloats",
- [("Float", [("::TestMethods::doFloats::arg1", "arg1", "Float", False, False)])],
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- undefined foo(optional float bar = 1);
- };
- """
- )
- results = parser.finish()
- except Exception as 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] undefined foo();
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should not allow [GetterThrows] on methods")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [SetterThrows] undefined foo();
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should not allow [SetterThrows] on methods")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throw] undefined foo();
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should spell [Throws] correctly on methods")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- undefined __noSuchMethod__();
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should not allow __noSuchMethod__ methods")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throws, LenientFloat]
- undefined foo(float myFloat);
- [Throws]
- undefined foo();
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(not threw, "Should allow LenientFloat to be only in a specific overload")
-
- parser = parser.reset()
- parser.parse(
- """
- interface A {
- [Throws]
- undefined foo();
- [Throws, LenientFloat]
- undefined foo(float myFloat);
- };
- """
- )
- results = parser.finish()
- iface = results[0]
- methods = iface.members
- lenientFloat = methods[0].getExtendedAttribute("LenientFloat")
- harness.ok(
- lenientFloat is not None,
- "LenientFloat in overloads must be added to the method",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throws, LenientFloat]
- undefined foo(float myFloat);
- [Throws]
- undefined foo(float myFloat, float yourFloat);
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw,
- "Should prevent overloads from getting different restricted float behavior",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throws]
- undefined foo(float myFloat, float yourFloat);
- [Throws, LenientFloat]
- undefined foo(float myFloat);
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw,
- "Should prevent overloads from getting different restricted float behavior (2)",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Throws, LenientFloat]
- undefined foo(float myFloat);
- [Throws, LenientFloat]
- undefined foo(short myShort);
- };
- """
- )
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should prevent overloads from getting redundant [LenientFloat]")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_namespace.py b/components/script/dom/bindings/codegen/parser/tests/test_namespace.py
deleted file mode 100644
index 247c5b22232..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_namespace.py
+++ /dev/null
@@ -1,232 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- namespace MyNamespace {
- attribute any foo;
- any bar();
- };
- """
- )
-
- results = parser.finish()
- harness.check(len(results), 1, "Should have a thing.")
- harness.ok(results[0].isNamespace(), "Our thing should be a namespace")
- harness.check(len(results[0].members), 2, "Should have two things in our namespace")
- harness.ok(results[0].members[0].isAttr(), "First member is attribute")
- harness.ok(results[0].members[0].isStatic(), "Attribute should be static")
- harness.ok(results[0].members[1].isMethod(), "Second member is method")
- harness.ok(results[0].members[1].isStatic(), "Operation should be static")
-
- parser = parser.reset()
- parser.parse(
- """
- namespace MyNamespace {
- attribute any foo;
- };
- partial namespace MyNamespace {
- any bar();
- };
- """
- )
-
- results = parser.finish()
- harness.check(len(results), 2, "Should have things.")
- harness.ok(results[0].isNamespace(), "Our thing should be a namespace")
- harness.check(len(results[0].members), 2, "Should have two things in our namespace")
- harness.ok(results[0].members[0].isAttr(), "First member is attribute")
- harness.ok(results[0].members[0].isStatic(), "Attribute should be static")
- harness.ok(results[0].members[1].isMethod(), "Second member is method")
- harness.ok(results[0].members[1].isStatic(), "Operation should be static")
-
- parser = parser.reset()
- parser.parse(
- """
- partial namespace MyNamespace {
- any bar();
- };
- namespace MyNamespace {
- attribute any foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(len(results), 2, "Should have things.")
- harness.ok(results[1].isNamespace(), "Our thing should be a namespace")
- harness.check(len(results[1].members), 2, "Should have two things in our namespace")
- harness.ok(results[1].members[0].isAttr(), "First member is attribute")
- harness.ok(results[1].members[0].isStatic(), "Attribute should be static")
- harness.ok(results[1].members[1].isMethod(), "Second member is method")
- harness.ok(results[1].members[1].isStatic(), "Operation should be static")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- namespace MyNamespace {
- static attribute any foo;
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- namespace MyNamespace {
- static any bar();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- namespace MyNamespace {
- any bar();
- };
-
- interface MyNamespace {
- any baz();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface MyNamespace {
- any baz();
- };
-
- namespace MyNamespace {
- any bar();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- namespace MyNamespace {
- any baz();
- };
-
- namespace MyNamespace {
- any bar();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- partial namespace MyNamespace {
- any baz();
- };
-
- interface MyNamespace {
- any bar();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- namespace MyNamespace {
- any bar();
- };
-
- partial interface MyNamespace {
- any baz();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- partial interface MyNamespace {
- any baz();
- };
-
- namespace MyNamespace {
- any bar();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface MyNamespace {
- any bar();
- };
-
- partial namespace MyNamespace {
- any baz();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_newobject.py b/components/script/dom/bindings/codegen/parser/tests/test_newobject.py
deleted file mode 100644
index c12995a0e86..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_newobject.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Import the WebIDL module, so we can do isinstance checks and whatnot
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- # Basic functionality
- parser.parse(
- """
- interface Iface {
- [NewObject] readonly attribute Iface attr;
- [NewObject] Iface method();
- };
- """
- )
- results = parser.finish()
- harness.ok(results, "Should not have thrown on basic [NewObject] usage")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Iface {
- [Pure, NewObject] readonly attribute Iface attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[NewObject] attributes must depend on something")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Iface {
- [Pure, NewObject] Iface method();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[NewObject] methods must depend on something")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Iface {
- [Cached, NewObject, Affects=Nothing] readonly attribute Iface attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[NewObject] attributes must not be [Cached]")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Iface {
- [StoreInSlot, NewObject, Affects=Nothing] readonly attribute Iface attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[NewObject] attributes must not be [StoreInSlot]")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_nullable_equivalency.py b/components/script/dom/bindings/codegen/parser/tests/test_nullable_equivalency.py
deleted file mode 100644
index 012c5fcff7c..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_nullable_equivalency.py
+++ /dev/null
@@ -1,141 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestNullableEquivalency1 {
- attribute long a;
- attribute long? b;
- };
-
- interface TestNullableEquivalency2 {
- attribute ArrayBuffer a;
- attribute ArrayBuffer? b;
- };
-
- /* Can't have dictionary-valued attributes, so can't test that here */
-
- enum TestNullableEquivalency4Enum {
- "Foo",
- "Bar"
- };
-
- interface TestNullableEquivalency4 {
- attribute TestNullableEquivalency4Enum a;
- attribute TestNullableEquivalency4Enum? b;
- };
-
- interface TestNullableEquivalency5 {
- attribute TestNullableEquivalency4 a;
- attribute TestNullableEquivalency4? b;
- };
-
- interface TestNullableEquivalency6 {
- attribute boolean a;
- attribute boolean? b;
- };
-
- interface TestNullableEquivalency7 {
- attribute DOMString a;
- attribute DOMString? b;
- };
-
- interface TestNullableEquivalency8 {
- attribute float a;
- attribute float? b;
- };
-
- interface TestNullableEquivalency9 {
- attribute double a;
- attribute double? b;
- };
-
- interface TestNullableEquivalency10 {
- attribute object a;
- attribute object? b;
- };
- """
- )
-
- for decl in parser.finish():
- if decl.isInterface():
- checkEquivalent(decl, harness)
-
-
-def checkEquivalent(iface, harness):
- type1 = iface.members[0].type
- type2 = iface.members[1].type
-
- harness.check(type1.nullable(), False, "attr1 should not be nullable")
- harness.check(type2.nullable(), True, "attr2 should be nullable")
-
- # We don't know about type1, but type2, the nullable type, definitely
- # shouldn't be builtin.
- harness.check(type2.builtin, False, "attr2 should not be builtin")
-
- # Ensure that all attributes of type2 match those in type1, except for:
- # - names on an ignore list,
- # - names beginning with '_',
- # - functions which throw when called with no args, and
- # - class-level non-callables ("static variables").
- #
- # Yes, this is an ugly, fragile hack. But it finds bugs...
- for attr in dir(type1):
- if (
- attr.startswith("_")
- or attr
- in [
- "nullable",
- "builtin",
- "filename",
- "location",
- "inner",
- "QName",
- "getDeps",
- "name",
- "prettyName",
- ]
- or (hasattr(type(type1), attr) and not callable(getattr(type1, attr)))
- ):
- continue
-
- a1 = getattr(type1, attr)
-
- if callable(a1):
- try:
- v1 = a1()
- except:
- # Can't call a1 with no args, so skip this attriute.
- continue
-
- try:
- a2 = getattr(type2, attr)
- except:
- harness.ok(
- False,
- "Missing %s attribute on type %s in %s" % (attr, type2, iface),
- )
- continue
-
- if not callable(a2):
- harness.ok(
- False,
- "%s attribute on type %s in %s wasn't callable"
- % (attr, type2, iface),
- )
- continue
-
- v2 = a2()
- harness.check(v2, v1, "%s method return value" % attr)
- else:
- try:
- a2 = getattr(type2, attr)
- except:
- harness.ok(
- False,
- "Missing %s attribute on type %s in %s" % (attr, type2, iface),
- )
- continue
-
- harness.check(a2, a1, "%s attribute should match" % attr)
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_observableArray.py b/components/script/dom/bindings/codegen/parser/tests/test_observableArray.py
deleted file mode 100644
index 601f626bcf4..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_observableArray.py
+++ /dev/null
@@ -1,288 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-def WebIDLTest(parser, harness):
-
- # Test dictionary as inner type
- harness.should_throw(
- parser,
- """
- dictionary A {
- boolean member;
- };
- interface B {
- attribute ObservableArray<A> foo;
- };
- """,
- "use dictionary as inner type",
- )
-
- # Test sequence as inner type
- harness.should_throw(
- parser,
- """
- interface A {
- attribute ObservableArray<sequence<boolean>> foo;
- };
- """,
- "use sequence as inner type",
- )
-
- # Test sequence<dictionary> as inner type
- harness.should_throw(
- parser,
- """
- dictionary A {
- boolean member;
- };
- interface B {
- attribute ObservableArray<sequence<A>> foo;
- };
- """,
- "use sequence<dictionary> as inner type",
- )
-
- # Test record as inner type
- harness.should_throw(
- parser,
- """
- interface A {
- attribute ObservableArray<record<DOMString, boolean>> foo;
- };
- """,
- "use record as inner type",
- )
-
- # Test record<dictionary> as inner type
- harness.should_throw(
- parser,
- """
- dictionary A {
- boolean member;
- };
- interface B {
- attribute ObservableArray<record<DOMString, A>> foo;
- };
- """,
- "use record<dictionary> as inner type",
- )
-
- # Test observable array as inner type
- harness.should_throw(
- parser,
- """
- interface A {
- attribute ObservableArray<ObservableArray<boolean>> foo;
- };
- """,
- "use ObservableArray as inner type",
- )
-
- # Test nullable attribute
- harness.should_throw(
- parser,
- """
- interface A {
- attribute ObservableArray<boolean>? foo;
- };
- """,
- "nullable",
- )
-
- # Test sequence
- harness.should_throw(
- parser,
- """
- interface A {
- undefined foo(sequence<ObservableArray<boolean>> foo);
- };
- """,
- "used in sequence",
- )
-
- # Test record
- harness.should_throw(
- parser,
- """
- interface A {
- undefined foo(record<DOMString, ObservableArray<boolean>> foo);
- };
- """,
- "used in record",
- )
-
- # Test promise
- harness.should_throw(
- parser,
- """
- interface A {
- Promise<ObservableArray<boolean>> foo();
- };
- """,
- "used in promise",
- )
-
- # Test union
- harness.should_throw(
- parser,
- """
- interface A {
- attribute (DOMString or ObservableArray<boolean>>) foo;
- };
- """,
- "used in union",
- )
-
- # Test dictionary member
- harness.should_throw(
- parser,
- """
- dictionary A {
- ObservableArray<boolean> foo;
- };
- """,
- "used on dictionary member type",
- )
-
- # Test argument
- harness.should_throw(
- parser,
- """
- interface A {
- undefined foo(ObservableArray<boolean> foo);
- };
- """,
- "used on argument",
- )
-
- # Test static attribute
- harness.should_throw(
- parser,
- """
- interface A {
- static attribute ObservableArray<boolean> foo;
- };
- """,
- "used on static attribute type",
- )
-
- # Test iterable
- harness.should_throw(
- parser,
- """
- interface A {
- iterable<ObservableArray<boolean>>;
- };
- """,
- "used in iterable",
- )
-
- # Test maplike
- harness.should_throw(
- parser,
- """
- interface A {
- maplike<long, ObservableArray<boolean>>;
- };
- """,
- "used in maplike",
- )
-
- # Test setlike
- harness.should_throw(
- parser,
- """
- interface A {
- setlike<ObservableArray<boolean>>;
- };
- """,
- "used in setlike",
- )
-
- # Test JS implemented interface
- harness.should_throw(
- parser,
- """
- [JSImplementation="@mozilla.org/dom/test-interface-js;1"]
- interface A {
- readonly attribute ObservableArray<boolean> foo;
- };
- """,
- "used in JS implemented interface",
- )
-
- # Test namespace
- harness.should_throw(
- parser,
- """
- namespace A {
- readonly attribute ObservableArray<boolean> foo;
- };
- """,
- "used in namespaces",
- )
-
- # Test [Cached] extended attribute
- harness.should_throw(
- parser,
- """
- interface A {
- [Cached, Pure]
- readonly attribute ObservableArray<boolean> foo;
- };
- """,
- "have Cached extended attribute",
- )
-
- # Test [StoreInSlot] extended attribute
- harness.should_throw(
- parser,
- """
- interface A {
- [StoreInSlot, Pure]
- readonly attribute ObservableArray<boolean> foo;
- };
- """,
- "have StoreInSlot extended attribute",
- )
-
- # Test regular attribute
- parser = parser.reset()
- parser.parse(
- """
- interface A {
- readonly attribute ObservableArray<boolean> foo;
- attribute ObservableArray<[Clamp] octet> bar;
- attribute ObservableArray<long?> baz;
- attribute ObservableArray<(boolean or long)> qux;
- };
- """
- )
- results = parser.finish()
- A = results[0]
- foo = A.members[0]
- harness.ok(foo.readonly, "A.foo is readonly attribute")
- harness.ok(foo.type.isObservableArray(), "A.foo is ObservableArray type")
- harness.check(
- foo.slotIndices[A.identifier.name], 0, "A.foo should be stored in slot"
- )
- bar = A.members[1]
- harness.ok(bar.type.isObservableArray(), "A.bar is ObservableArray type")
- harness.check(
- bar.slotIndices[A.identifier.name], 1, "A.bar should be stored in slot"
- )
- harness.ok(bar.type.inner.hasClamp(), "A.bar's inner type should be clamped")
- baz = A.members[2]
- harness.ok(baz.type.isObservableArray(), "A.baz is ObservableArray type")
- harness.check(
- baz.slotIndices[A.identifier.name], 2, "A.baz should be stored in slot"
- )
- harness.ok(baz.type.inner.nullable(), "A.baz's inner type should be nullable")
- qux = A.members[3]
- harness.ok(qux.type.isObservableArray(), "A.qux is ObservableArray type")
- harness.check(
- qux.slotIndices[A.identifier.name], 3, "A.qux should be stored in slot"
- )
- harness.ok(qux.type.inner.isUnion(), "A.qux's inner type should be union")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_optional_constraints.py b/components/script/dom/bindings/codegen/parser/tests/test_optional_constraints.py
deleted file mode 100644
index 2044c6362c3..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_optional_constraints.py
+++ /dev/null
@@ -1,35 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface OptionalConstraints1 {
- undefined foo(optional byte arg1, byte arg2);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- not threw,
- "Should not have thrown on non-optional argument following "
- "optional argument.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface OptionalConstraints2 {
- undefined foo(optional byte arg1 = 1, optional byte arg2 = 2,
- optional byte arg3, optional byte arg4 = 4,
- optional byte arg5, optional byte arg6 = 9);
- };
- """
- )
- results = parser.finish()
- args = results[0].members[0].signatures()[0][1]
- harness.check(len(args), 6, "Should have 6 arguments")
- harness.check(args[5].defaultValue.value, 9, "Should have correct default value")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_overload.py b/components/script/dom/bindings/codegen/parser/tests/test_overload.py
deleted file mode 100644
index 7816276aa6d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_overload.py
+++ /dev/null
@@ -1,74 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestOverloads {
- undefined basic();
- undefined basic(long arg1);
- boolean abitharder(TestOverloads foo);
- boolean abitharder(boolean foo);
- undefined abitharder(ArrayBuffer? foo);
- undefined withVariadics(long... numbers);
- undefined withVariadics(TestOverloads iface);
- undefined withVariadics(long num, TestOverloads iface);
- undefined optionalTest();
- undefined optionalTest(optional long num1, long num2);
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestOverloads 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(), "::TestOverloads", "Interface has the right QName"
- )
- harness.check(
- iface.identifier.name, "TestOverloads", "Interface has the right name"
- )
- harness.check(len(iface.members), 4, "Expect %s members" % 4)
-
- member = iface.members[0]
- harness.check(
- member.identifier.QName(),
- "::TestOverloads::basic",
- "Method has the right QName",
- )
- harness.check(member.identifier.name, "basic", "Method has the right name")
- harness.check(member.hasOverloads(), True, "Method has overloads")
-
- signatures = member.signatures()
- harness.check(len(signatures), 2, "Method should have 2 signatures")
-
- (retval, argumentSet) = signatures[0]
-
- harness.check(str(retval), "Undefined", "Expect an undefined retval")
- harness.check(len(argumentSet), 0, "Expect an empty argument set")
-
- (retval, argumentSet) = signatures[1]
- harness.check(str(retval), "Undefined", "Expect an undefined retval")
- harness.check(len(argumentSet), 1, "Expect an argument set with one argument")
-
- argument = argumentSet[0]
- harness.ok(isinstance(argument, WebIDL.IDLArgument), "Should be an IDLArgument")
- harness.check(
- argument.identifier.QName(),
- "::TestOverloads::basic::arg1",
- "Argument has the right QName",
- )
- harness.check(argument.identifier.name, "arg1", "Argument has the right name")
- harness.check(str(argument.type), "Long", "Argument has the right type")
-
- member = iface.members[3]
- harness.check(
- len(member.overloadsForArgCount(0)), 1, "Only one overload for no args"
- )
- harness.check(len(member.overloadsForArgCount(1)), 0, "No overloads for one arg")
- harness.check(
- len(member.overloadsForArgCount(2)), 1, "Only one overload for two args"
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_promise.py b/components/script/dom/bindings/codegen/parser/tests/test_promise.py
deleted file mode 100644
index 9b418d51afe..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_promise.py
+++ /dev/null
@@ -1,177 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface A {
- legacycaller Promise<any> foo();
- };
- """
- )
- results = parser.finish()
-
- except:
- threw = True
- harness.ok(threw, "Should not allow Promise return values for legacycaller.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- Promise<any> foo();
- long foo(long arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow overloads which have both Promise and "
- "non-Promise return types.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- long foo(long arg);
- Promise<any> foo();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow overloads which have both Promise and "
- "non-Promise return types.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- Promise<any>? foo();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow nullable Promise return values.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- undefined foo(Promise<any>? arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow nullable Promise arguments.")
-
- parser = parser.reset()
- parser.parse(
- """
- interface A {
- Promise<any> foo();
- Promise<any> foo(long arg);
- };
- """
- )
- results = parser.finish()
-
- harness.ok(
- True, "Should allow overloads which only have Promise and return " "types."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- attribute Promise<any> attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow writable Promise-typed attributes.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [LegacyLenientSetter] readonly attribute Promise<any> attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "Should not allow [LegacyLenientSetter] Promise-typed attributes."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [PutForwards=bar] readonly attribute Promise<any> attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow [PutForwards] Promise-typed attributes.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [Replaceable] readonly attribute Promise<any> attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow [Replaceable] Promise-typed attributes.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface A {
- [SameObject] readonly attribute Promise<any> attr;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow [SameObject] Promise-typed attributes.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_prototype_ident.py b/components/script/dom/bindings/codegen/parser/tests/test_prototype_ident.py
deleted file mode 100644
index 5a806bf2a2d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_prototype_ident.py
+++ /dev/null
@@ -1,107 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface TestIface {
- static attribute boolean prototype;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "The identifier of a static attribute must not be 'prototype'")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestIface {
- static boolean prototype();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "The identifier of a static operation must not be 'prototype'")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestIface {
- const boolean prototype = true;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "The identifier of a constant must not be 'prototype'")
-
- # Make sure that we can parse non-static attributes with 'prototype' as identifier.
- parser = parser.reset()
- parser.parse(
- """
- interface TestIface {
- attribute boolean prototype;
- };
- """
- )
- results = parser.finish()
-
- testIface = results[0]
- harness.check(
- testIface.members[0].isStatic(), False, "Attribute should not be static"
- )
- harness.check(
- testIface.members[0].identifier.name,
- "prototype",
- "Attribute identifier should be 'prototype'",
- )
-
- # Make sure that we can parse non-static operations with 'prototype' as identifier.
- parser = parser.reset()
- parser.parse(
- """
- interface TestIface {
- boolean prototype();
- };
- """
- )
- results = parser.finish()
-
- testIface = results[0]
- harness.check(
- testIface.members[0].isStatic(), False, "Operation should not be static"
- )
- harness.check(
- testIface.members[0].identifier.name,
- "prototype",
- "Operation identifier should be 'prototype'",
- )
-
- # Make sure that we can parse dictionary members with 'prototype' as identifier.
- parser = parser.reset()
- parser.parse(
- """
- dictionary TestDict {
- boolean prototype;
- };
- """
- )
- results = parser.finish()
-
- testDict = results[0]
- harness.check(
- testDict.members[0].identifier.name,
- "prototype",
- "Dictionary member should be 'prototype'",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_putForwards.py b/components/script/dom/bindings/codegen/parser/tests/test_putForwards.py
deleted file mode 100644
index 5ec4dde280e..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_putForwards.py
+++ /dev/null
@@ -1,119 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface I {
- [PutForwards=B] readonly attribute long A;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface I {
- [PutForwards=B] readonly attribute J A;
- };
- interface J {
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface I {
- [PutForwards=B] attribute J A;
- };
- interface J {
- attribute long B;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface I {
- [PutForwards=B] static readonly attribute J A;
- };
- interface J {
- attribute long B;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- callback interface I {
- [PutForwards=B] readonly attribute J A;
- };
- interface J {
- attribute long B;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface I {
- [PutForwards=C] readonly attribute J A;
- [PutForwards=C] readonly attribute J B;
- };
- interface J {
- [PutForwards=D] readonly attribute K C;
- };
- interface K {
- [PutForwards=A] readonly attribute I D;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_record.py b/components/script/dom/bindings/codegen/parser/tests/test_record.py
deleted file mode 100644
index 3a31d721b27..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_record.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- dictionary Dict {};
- interface RecordArg {
- undefined foo(record<DOMString, Dict> arg);
- };
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 2, "Should know about two things")
- harness.ok(
- isinstance(results[1], WebIDL.IDLInterface), "Should have an interface here"
- )
- members = results[1].members
- harness.check(len(members), 1, "Should have one member")
- harness.ok(members[0].isMethod(), "Should have method")
- signature = members[0].signatures()[0]
- args = signature[1]
- harness.check(len(args), 1, "Should have one arg")
- harness.ok(args[0].type.isRecord(), "Should have a record type here")
- harness.ok(args[0].type.inner.isDictionary(), "Should have a dictionary inner type")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface RecordUndefinedArg {
- undefined foo(record<DOMString, undefined> arg);
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw, "Should have thrown because record can't have undefined as value type."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- dictionary Dict {
- record<DOMString, Dict> val;
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown on dictionary containing itself via record.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py b/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py
deleted file mode 100644
index 06ea6a47239..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_replaceable.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-def should_throw(parser, harness, message, code):
- parser = parser.reset()
- threw = False
- try:
- parser.parse(code)
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown: %s" % message)
-
-
-def WebIDLTest(parser, harness):
- # The [Replaceable] extended attribute MUST take no arguments.
- should_throw(
- parser,
- harness,
- "no arguments",
- """
- interface I {
- [Replaceable=X] readonly attribute long A;
- };
- """,
- )
-
- # An attribute with the [Replaceable] extended attribute MUST NOT also be
- # declared with the [PutForwards] extended attribute.
- should_throw(
- parser,
- harness,
- "PutForwards",
- """
- interface I {
- [PutForwards=B, Replaceable] readonly attribute J A;
- };
- interface J {
- attribute long B;
- };
- """,
- )
-
- # The [Replaceable] extended attribute MUST NOT be used on an attribute
- # that is not read only.
- should_throw(
- parser,
- harness,
- "writable attribute",
- """
- interface I {
- [Replaceable] attribute long A;
- };
- """,
- )
-
- # The [Replaceable] extended attribute MUST NOT be used on a static
- # attribute.
- should_throw(
- parser,
- harness,
- "static attribute",
- """
- interface I {
- [Replaceable] static readonly attribute long A;
- };
- """,
- )
-
- # The [Replaceable] extended attribute MUST NOT be used on an attribute
- # declared on a callback interface.
- should_throw(
- parser,
- harness,
- "callback interface",
- """
- callback interface I {
- [Replaceable] readonly attribute long A;
- };
- """,
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_sanity.py b/components/script/dom/bindings/codegen/parser/tests/test_sanity.py
deleted file mode 100644
index d3184c00731..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_sanity.py
+++ /dev/null
@@ -1,7 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse("")
- parser.finish()
- harness.ok(True, "Parsing nothing doesn't throw.")
- parser.parse("interface Foo {};")
- parser.finish()
- harness.ok(True, "Parsing a silly interface doesn't throw.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_securecontext_extended_attribute.py b/components/script/dom/bindings/codegen/parser/tests/test_securecontext_extended_attribute.py
deleted file mode 100644
index e0e967dd420..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_securecontext_extended_attribute.py
+++ /dev/null
@@ -1,499 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- [SecureContext]
- interface TestSecureContextOnInterface {
- const octet TEST_CONSTANT = 0;
- readonly attribute byte testAttribute;
- undefined testMethod(byte foo);
- };
- partial interface TestSecureContextOnInterface {
- const octet TEST_CONSTANT_2 = 0;
- readonly attribute byte testAttribute2;
- undefined testMethod2(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 6,
- "TestSecureContextOnInterface should have six members",
- )
- harness.ok(
- results[0].getExtendedAttribute("SecureContext"),
- "Interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to constant members",
- )
- harness.ok(
- results[0].members[1].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to attribute members",
- )
- harness.ok(
- results[0].members[2].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to method members",
- )
- harness.ok(
- results[0].members[3].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to constant members from partial interface",
- )
- harness.ok(
- results[0].members[4].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to attribute members from partial interface",
- )
- harness.ok(
- results[0].members[5].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to method members from partial interface",
- )
-
- # Same thing, but with the partial interface specified first:
- parser = parser.reset()
- parser.parse(
- """
- partial interface TestSecureContextOnInterfaceAfterPartialInterface {
- const octet TEST_CONSTANT_2 = 0;
- readonly attribute byte testAttribute2;
- undefined testMethod2(byte foo);
- };
- [SecureContext]
- interface TestSecureContextOnInterfaceAfterPartialInterface {
- const octet TEST_CONSTANT = 0;
- readonly attribute byte testAttribute;
- undefined testMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[1].members),
- 6,
- "TestSecureContextOnInterfaceAfterPartialInterface should have six members",
- )
- harness.ok(
- results[1].getExtendedAttribute("SecureContext"),
- "Interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[1].members[0].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to constant members",
- )
- harness.ok(
- results[1].members[1].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to attribute members",
- )
- harness.ok(
- results[1].members[2].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to method members",
- )
- harness.ok(
- results[1].members[3].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to constant members from partial interface",
- )
- harness.ok(
- results[1].members[4].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to attribute members from partial interface",
- )
- harness.ok(
- results[1].members[5].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to method members from partial interface",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestSecureContextOnPartialInterface {
- const octet TEST_CONSTANT = 0;
- readonly attribute byte testAttribute;
- undefined testMethod(byte foo);
- };
- [SecureContext]
- partial interface TestSecureContextOnPartialInterface {
- const octet TEST_CONSTANT_2 = 0;
- readonly attribute byte testAttribute2;
- undefined testMethod2(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 6,
- "TestSecureContextOnPartialInterface should have six members",
- )
- harness.ok(
- results[0].getExtendedAttribute("SecureContext") is None,
- "[SecureContext] should not propagate from a partial interface to the interface",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext") is None,
- "[SecureContext] should not propagate from a partial interface to the interface's constant members",
- )
- harness.ok(
- results[0].members[1].getExtendedAttribute("SecureContext") is None,
- "[SecureContext] should not propagate from a partial interface to the interface's attribute members",
- )
- harness.ok(
- results[0].members[2].getExtendedAttribute("SecureContext") is None,
- "[SecureContext] should not propagate from a partial interface to the interface's method members",
- )
- harness.ok(
- results[0].members[3].getExtendedAttribute("SecureContext"),
- "Constant members from [SecureContext] partial interface should be [SecureContext]",
- )
- harness.ok(
- results[0].members[4].getExtendedAttribute("SecureContext"),
- "Attribute members from [SecureContext] partial interface should be [SecureContext]",
- )
- harness.ok(
- results[0].members[5].getExtendedAttribute("SecureContext"),
- "Method members from [SecureContext] partial interface should be [SecureContext]",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestSecureContextOnInterfaceMembers {
- const octet TEST_NON_SECURE_CONSTANT_1 = 0;
- [SecureContext]
- const octet TEST_SECURE_CONSTANT = 1;
- const octet TEST_NON_SECURE_CONSTANT_2 = 2;
- readonly attribute byte testNonSecureAttribute1;
- [SecureContext]
- readonly attribute byte testSecureAttribute;
- readonly attribute byte testNonSecureAttribute2;
- undefined testNonSecureMethod1(byte foo);
- [SecureContext]
- undefined testSecureMethod(byte foo);
- undefined testNonSecureMethod2(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 9,
- "TestSecureContextOnInterfaceMembers should have nine members",
- )
- harness.ok(
- results[0].getExtendedAttribute("SecureContext") is None,
- "[SecureContext] on members should not propagate up to the interface",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext") is None,
- "Constant should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[1].getExtendedAttribute("SecureContext"),
- "Constant should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[2].getExtendedAttribute("SecureContext") is None,
- "Constant should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[3].getExtendedAttribute("SecureContext") is None,
- "Attribute should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[4].getExtendedAttribute("SecureContext"),
- "Attribute should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[5].getExtendedAttribute("SecureContext") is None,
- "Attribute should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[6].getExtendedAttribute("SecureContext") is None,
- "Method should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[7].getExtendedAttribute("SecureContext"),
- "Method should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[8].getExtendedAttribute("SecureContext") is None,
- "Method should not have [SecureContext] extended attribute",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestSecureContextOnPartialInterfaceMembers {
- };
- partial interface TestSecureContextOnPartialInterfaceMembers {
- const octet TEST_NON_SECURE_CONSTANT_1 = 0;
- [SecureContext]
- const octet TEST_SECURE_CONSTANT = 1;
- const octet TEST_NON_SECURE_CONSTANT_2 = 2;
- readonly attribute byte testNonSecureAttribute1;
- [SecureContext]
- readonly attribute byte testSecureAttribute;
- readonly attribute byte testNonSecureAttribute2;
- undefined testNonSecureMethod1(byte foo);
- [SecureContext]
- undefined testSecureMethod(byte foo);
- undefined testNonSecureMethod2(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 9,
- "TestSecureContextOnPartialInterfaceMembers should have nine members",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext") is None,
- "Constant from partial interface should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[1].getExtendedAttribute("SecureContext"),
- "Constant from partial interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[2].getExtendedAttribute("SecureContext") is None,
- "Constant from partial interface should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[3].getExtendedAttribute("SecureContext") is None,
- "Attribute from partial interface should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[4].getExtendedAttribute("SecureContext"),
- "Attribute from partial interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[5].getExtendedAttribute("SecureContext") is None,
- "Attribute from partial interface should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[6].getExtendedAttribute("SecureContext") is None,
- "Method from partial interface should not have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[7].getExtendedAttribute("SecureContext"),
- "Method from partial interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[8].getExtendedAttribute("SecureContext") is None,
- "Method from partial interface should not have [SecureContext] extended attribute",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SecureContext=something]
- interface TestSecureContextTakesNoValue1 {
- const octet TEST_SECURE_CONSTANT = 0;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "[SecureContext] must take no arguments (testing on interface)")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestSecureContextForOverloads1 {
- [SecureContext]
- undefined testSecureMethod(byte foo);
- };
- partial interface TestSecureContextForOverloads1 {
- undefined testSecureMethod(byte foo, byte bar);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "If [SecureContext] appears on an overloaded operation, then it MUST appear on all overloads",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestSecureContextForOverloads2 {
- [SecureContext]
- undefined testSecureMethod(byte foo);
- };
- partial interface TestSecureContextForOverloads2 {
- [SecureContext]
- undefined testSecureMethod(byte foo, byte bar);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- not threw,
- "[SecureContext] can appear on an overloaded operation if it appears on all overloads",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SecureContext]
- interface TestSecureContextOnInterfaceAndMember {
- [SecureContext]
- undefined testSecureMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw, "[SecureContext] must not appear on an interface and interface member"
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestSecureContextOnPartialInterfaceAndMember {
- };
- [SecureContext]
- partial interface TestSecureContextOnPartialInterfaceAndMember {
- [SecureContext]
- undefined testSecureMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "[SecureContext] must not appear on a partial interface and one of the partial interface's member's",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SecureContext]
- interface TestSecureContextOnInterfaceAndPartialInterfaceMember {
- };
- partial interface TestSecureContextOnInterfaceAndPartialInterfaceMember {
- [SecureContext]
- undefined testSecureMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "[SecureContext] must not appear on an interface and one of its partial interface's member's",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [SecureContext]
- interface TestSecureContextOnInheritedInterface {
- };
- interface TestSecureContextNotOnInheritingInterface : TestSecureContextOnInheritedInterface {
- undefined testSecureMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "[SecureContext] must appear on interfaces that inherit from another [SecureContext] interface",
- )
-
- # Test 'includes'.
- parser = parser.reset()
- parser.parse(
- """
- [SecureContext]
- interface TestSecureContextInterfaceThatIncludesNonSecureContextMixin {
- const octet TEST_CONSTANT = 0;
- };
- interface mixin TestNonSecureContextMixin {
- const octet TEST_CONSTANT_2 = 0;
- readonly attribute byte testAttribute2;
- undefined testMethod2(byte foo);
- };
- TestSecureContextInterfaceThatIncludesNonSecureContextMixin includes TestNonSecureContextMixin;
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 4,
- "TestSecureContextInterfaceThatImplementsNonSecureContextInterface should have four members",
- )
- harness.ok(
- results[0].getExtendedAttribute("SecureContext"),
- "Interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext"),
- "[SecureContext] should propagate from interface to constant members even when other members are copied from a non-[SecureContext] interface",
- )
- harness.ok(
- results[0].members[1].getExtendedAttribute("SecureContext") is None,
- "Constants copied from non-[SecureContext] mixin should not be [SecureContext]",
- )
- harness.ok(
- results[0].members[2].getExtendedAttribute("SecureContext") is None,
- "Attributes copied from non-[SecureContext] mixin should not be [SecureContext]",
- )
- harness.ok(
- results[0].members[3].getExtendedAttribute("SecureContext") is None,
- "Methods copied from non-[SecureContext] mixin should not be [SecureContext]",
- )
-
- # Test SecureContext and LegacyNoInterfaceObject
- parser = parser.reset()
- parser.parse(
- """
- [LegacyNoInterfaceObject, SecureContext]
- interface TestSecureContextLegacyNoInterfaceObject {
- undefined testSecureMethod(byte foo);
- };
- """
- )
- results = parser.finish()
- harness.check(
- len(results[0].members),
- 1,
- "TestSecureContextLegacyNoInterfaceObject should have only one member",
- )
- harness.ok(
- results[0].getExtendedAttribute("SecureContext"),
- "Interface should have [SecureContext] extended attribute",
- )
- harness.ok(
- results[0].members[0].getExtendedAttribute("SecureContext"),
- "Interface member should have [SecureContext] extended attribute",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_special_method_signature_mismatch.py b/components/script/dom/bindings/codegen/parser/tests/test_special_method_signature_mismatch.py
deleted file mode 100644
index a11860b3728..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_special_method_signature_mismatch.py
+++ /dev/null
@@ -1,256 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch1 {
- getter long long foo(long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch2 {
- getter undefined foo(unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch3 {
- getter boolean foo(unsigned long index, boolean extraArg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch4 {
- getter boolean foo(unsigned long... index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch5 {
- getter boolean foo(optional unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch6 {
- getter boolean foo();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch7 {
- deleter long long foo(long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch9 {
- deleter boolean foo(unsigned long index, boolean extraArg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch10 {
- deleter boolean foo(unsigned long... index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch11 {
- deleter boolean foo(optional unsigned long index);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch12 {
- deleter boolean foo();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch13 {
- setter long long foo(long index, long long value);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch15 {
- setter boolean foo(unsigned long index, boolean value, long long extraArg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch16 {
- setter boolean foo(unsigned long index, boolean... value);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch17 {
- setter boolean foo(unsigned long index, optional boolean value);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodSignatureMismatch18 {
- setter boolean foo();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_special_methods.py b/components/script/dom/bindings/codegen/parser/tests/test_special_methods.py
deleted file mode 100644
index 9601a0a968f..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_special_methods.py
+++ /dev/null
@@ -1,117 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface SpecialMethods {
- getter long long (unsigned long index);
- setter long long (unsigned long index, long long value);
- getter boolean (DOMString name);
- setter boolean (DOMString name, boolean value);
- deleter boolean (DOMString name);
- readonly attribute unsigned long length;
- };
-
- interface SpecialMethodsCombination {
- getter deleter boolean (DOMString name);
- };
- """
- )
-
- results = parser.finish()
-
- def checkMethod(
- method,
- QName,
- name,
- static=False,
- getter=False,
- setter=False,
- deleter=False,
- legacycaller=False,
- stringifier=False,
- ):
- harness.ok(isinstance(method, WebIDL.IDLMethod), "Should be an IDLMethod")
- 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.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(results), 2, "Expect 2 interfaces")
-
- iface = results[0]
- harness.check(len(iface.members), 6, "Expect 6 members")
-
- checkMethod(
- iface.members[0],
- "::SpecialMethods::__indexedgetter",
- "__indexedgetter",
- getter=True,
- )
- checkMethod(
- iface.members[1],
- "::SpecialMethods::__indexedsetter",
- "__indexedsetter",
- setter=True,
- )
- checkMethod(
- iface.members[2],
- "::SpecialMethods::__namedgetter",
- "__namedgetter",
- getter=True,
- )
- checkMethod(
- iface.members[3],
- "::SpecialMethods::__namedsetter",
- "__namedsetter",
- setter=True,
- )
- checkMethod(
- iface.members[4],
- "::SpecialMethods::__nameddeleter",
- "__nameddeleter",
- deleter=True,
- )
-
- iface = results[1]
- harness.check(len(iface.members), 1, "Expect 1 member")
-
- checkMethod(
- iface.members[0],
- "::SpecialMethodsCombination::__namedgetterdeleter",
- "__namedgetterdeleter",
- getter=True,
- deleter=True,
- )
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface IndexedDeleter {
- deleter undefined(unsigned long index);
- };
- """
- )
- parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "There are no indexed deleters")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_special_methods_uniqueness.py b/components/script/dom/bindings/codegen/parser/tests/test_special_methods_uniqueness.py
deleted file mode 100644
index 014737e8168..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_special_methods_uniqueness.py
+++ /dev/null
@@ -1,54 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodUniqueness1 {
- getter deleter boolean (DOMString name);
- getter boolean (DOMString name);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodUniqueness1 {
- deleter boolean (DOMString name);
- getter deleter boolean (DOMString name);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- threw = False
- try:
- parser.parse(
- """
- interface SpecialMethodUniqueness1 {
- setter boolean (DOMString name);
- setter boolean (DOMString name);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_stringifier.py b/components/script/dom/bindings/codegen/parser/tests/test_stringifier.py
deleted file mode 100644
index 948be71e4dd..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_stringifier.py
+++ /dev/null
@@ -1,196 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestStringifier {
- stringifier;
- };
- """
- )
-
- results = parser.finish()
-
- harness.ok(
- isinstance(results[0].members[0], WebIDL.IDLMethod),
- "Stringifer should be method",
- )
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface TestStringifier {
- stringifier;
- stringifier;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow two 'stringifier;'")
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- interface TestStringifier {
- stringifier;
- stringifier DOMString foo();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow a 'stringifier;' and a 'stringifier()'")
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestStringifier {
- stringifier attribute DOMString foo;
- };
- """
- )
- results = parser.finish()
- harness.ok(
- isinstance(results[0].members[0], WebIDL.IDLAttribute),
- "Stringifier attribute should be an attribute",
- )
- stringifier = results[0].members[1]
- harness.ok(
- isinstance(stringifier, WebIDL.IDLMethod),
- "Stringifier attribute should insert a method",
- )
- harness.ok(stringifier.isStringifier(), "Inserted method should be a stringifier")
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestStringifier {};
- interface mixin TestStringifierMixin {
- stringifier attribute DOMString foo;
- };
- TestStringifier includes TestStringifierMixin;
- """
- )
- results = parser.finish()
- harness.ok(
- isinstance(results[0].members[0], WebIDL.IDLAttribute),
- "Stringifier attribute should be an attribute",
- )
- stringifier = results[0].members[1]
- harness.ok(
- isinstance(stringifier, WebIDL.IDLMethod),
- "Stringifier attribute should insert a method",
- )
- harness.ok(stringifier.isStringifier(), "Inserted method should be a stringifier")
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestStringifier {
- stringifier attribute USVString foo;
- };
- """
- )
- results = parser.finish()
- stringifier = results[0].members[1]
- harness.ok(
- stringifier.signatures()[0][0].isUSVString(),
- "Stringifier attributes should allow USVString",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestStringifier {
- [Throws, NeedsSubjectPrincipal]
- stringifier attribute USVString foo;
- };
- """
- )
- results = parser.finish()
- stringifier = results[0].members[1]
- harness.ok(
- stringifier.getExtendedAttribute("Throws"),
- "Stringifier attributes should support [Throws]",
- )
- harness.ok(
- stringifier.getExtendedAttribute("NeedsSubjectPrincipal"),
- "Stringifier attributes should support [NeedsSubjectPrincipal]",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface TestStringifier {
- stringifier attribute UTF8String foo;
- };
- """
- )
- results = parser.finish()
- stringifier = results[0].members[1]
- harness.ok(
- stringifier.signatures()[0][0].isUTF8String(),
- "Stringifier attributes should allow UTF8String",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestStringifier {
- stringifier attribute ByteString foo;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow ByteString")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestStringifier {
- stringifier;
- stringifier attribute DOMString foo;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow a 'stringifier;' and a stringifier attribute")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface TestStringifier {
- stringifier attribute DOMString foo;
- stringifier attribute DOMString bar;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should not allow multiple stringifier attributes")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_toJSON.py b/components/script/dom/bindings/codegen/parser/tests/test_toJSON.py
deleted file mode 100644
index f312667ec4d..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_toJSON.py
+++ /dev/null
@@ -1,309 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- object toJSON();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(not threw, "Should allow a toJSON method.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- object toJSON(object arg);
- object toJSON(long arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow overloads of a toJSON method.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- object toJSON(object arg);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(threw, "Should not allow a toJSON method with arguments.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- long toJSON();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(not threw, "Should allow a toJSON method with 'long' as return type.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- [Default] object toJSON();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- not threw, "Should allow a default toJSON method with 'object' as return type."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Test {
- [Default] long toJSON();
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should not allow a default toJSON method with non-'object' as return type.",
- )
-
- JsonTypes = [
- "byte",
- "octet",
- "short",
- "unsigned short",
- "long",
- "unsigned long",
- "long long",
- "unsigned long long",
- "float",
- "unrestricted float",
- "double",
- "unrestricted double",
- "boolean",
- "DOMString",
- "ByteString",
- "UTF8String",
- "USVString",
- "Enum",
- "InterfaceWithToJSON",
- "object",
- ]
-
- nonJsonTypes = [
- "InterfaceWithoutToJSON",
- "any",
- "Int8Array",
- "Int16Array",
- "Int32Array",
- "Uint8Array",
- "Uint16Array",
- "Uint32Array",
- "Uint8ClampedArray",
- "Float32Array",
- "Float64Array",
- "ArrayBuffer",
- ]
-
- def doTest(testIDL, shouldThrow, description):
- p = parser.reset()
- threw = False
- try:
- p.parse(
- testIDL
- + """
- enum Enum { "a", "b", "c" };
- interface InterfaceWithToJSON { long toJSON(); };
- interface InterfaceWithoutToJSON {};
- """
- )
- p.finish()
- except Exception as x:
- threw = True
- harness.ok(x.message == "toJSON method has non-JSON return type", x)
- harness.check(threw, shouldThrow, description)
-
- for type in JsonTypes:
- doTest(
- "interface Test { %s toJSON(); };" % type,
- False,
- "%s should be a JSON type" % type,
- )
-
- doTest(
- "interface Test { sequence<%s> toJSON(); };" % type,
- False,
- "sequence<%s> should be a JSON type" % type,
- )
-
- doTest(
- "dictionary Foo { %s foo; }; " "interface Test { Foo toJSON(); }; " % type,
- False,
- "dictionary containing only JSON type (%s) should be a JSON type" % type,
- )
-
- doTest(
- "dictionary Foo { %s foo; }; dictionary Bar : Foo { }; "
- "interface Test { Bar toJSON(); }; " % type,
- False,
- "dictionary whose ancestors only contain JSON types should be a JSON type",
- )
-
- doTest(
- "dictionary Foo { any foo; }; dictionary Bar : Foo { %s bar; };"
- "interface Test { Bar toJSON(); };" % type,
- True,
- "dictionary whose ancestors contain non-JSON types should not be a JSON type",
- )
-
- doTest(
- "interface Test { record<DOMString, %s> toJSON(); };" % type,
- False,
- "record<DOMString, %s> should be a JSON type" % type,
- )
-
- doTest(
- "interface Test { record<ByteString, %s> toJSON(); };" % type,
- False,
- "record<ByteString, %s> should be a JSON type" % type,
- )
-
- doTest(
- "interface Test { record<UTF8String, %s> toJSON(); };" % type,
- False,
- "record<UTF8String, %s> should be a JSON type" % type,
- )
-
- doTest(
- "interface Test { record<USVString, %s> toJSON(); };" % type,
- False,
- "record<USVString, %s> should be a JSON type" % type,
- )
-
- otherUnionType = "Foo" if type != "object" else "long"
- doTest(
- "interface Foo { object toJSON(); };"
- "interface Test { (%s or %s) toJSON(); };" % (otherUnionType, type),
- False,
- "union containing only JSON types (%s or %s) should be a JSON type"
- % (otherUnionType, type),
- )
-
- doTest(
- "interface test { %s? toJSON(); };" % type,
- False,
- "Nullable type (%s) should be a JSON type" % type,
- )
-
- doTest(
- "interface Foo : InterfaceWithoutToJSON { %s toJSON(); };"
- "interface Test { Foo toJSON(); };" % type,
- False,
- "interface with toJSON should be a JSON type",
- )
-
- doTest(
- "interface Foo : InterfaceWithToJSON { };" "interface Test { Foo toJSON(); };",
- False,
- "inherited interface with toJSON should be a JSON type",
- )
-
- for type in nonJsonTypes:
- doTest(
- "interface Test { %s toJSON(); };" % type,
- True,
- "%s should not be a JSON type" % type,
- )
-
- doTest(
- "interface Test { sequence<%s> toJSON(); };" % type,
- True,
- "sequence<%s> should not be a JSON type" % type,
- )
-
- doTest(
- "dictionary Foo { %s foo; }; " "interface Test { Foo toJSON(); }; " % type,
- True,
- "Dictionary containing a non-JSON type (%s) should not be a JSON type"
- % type,
- )
-
- doTest(
- "dictionary Foo { %s foo; }; dictionary Bar : Foo { }; "
- "interface Test { Bar toJSON(); }; " % type,
- True,
- "dictionary whose ancestors only contain non-JSON types should not be a JSON type",
- )
-
- doTest(
- "interface Test { record<DOMString, %s> toJSON(); };" % type,
- True,
- "record<DOMString, %s> should not be a JSON type" % type,
- )
-
- doTest(
- "interface Test { record<ByteString, %s> toJSON(); };" % type,
- True,
- "record<ByteString, %s> should not be a JSON type" % type,
- )
-
- doTest(
- "interface Test { record<USVString, %s> toJSON(); };" % type,
- True,
- "record<USVString, %s> should not be a JSON type" % type,
- )
-
- if type != "any":
- doTest(
- "interface Foo { object toJSON(); }; "
- "interface Test { (Foo or %s) toJSON(); };" % type,
- True,
- "union containing a non-JSON type (%s) should not be a JSON type"
- % type,
- )
-
- doTest(
- "interface test { %s? toJSON(); };" % type,
- True,
- "Nullable type (%s) should not be a JSON type" % type,
- )
-
- doTest(
- "dictionary Foo { long foo; any bar; };" "interface Test { Foo toJSON(); };",
- True,
- "dictionary containing a non-JSON type should not be a JSON type",
- )
-
- doTest(
- "interface Foo : InterfaceWithoutToJSON { }; "
- "interface Test { Foo toJSON(); };",
- True,
- "interface without toJSON should not be a JSON type",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_treatNonCallableAsNull.py b/components/script/dom/bindings/codegen/parser/tests/test_treatNonCallableAsNull.py
deleted file mode 100644
index 7becfdca1f3..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_treatNonCallableAsNull.py
+++ /dev/null
@@ -1,80 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- [TreatNonCallableAsNull] callback Function = any(any... arguments);
-
- interface TestTreatNonCallableAsNull1 {
- attribute Function? onfoo;
- attribute Function onbar;
- };
- """
- )
-
- results = parser.finish()
-
- iface = results[1]
- attr = iface.members[0]
- harness.check(attr.type.treatNonCallableAsNull(), True, "Got the expected value")
- attr = iface.members[1]
- harness.check(attr.type.treatNonCallableAsNull(), False, "Got the expected value")
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- callback Function = any(any... arguments);
-
- interface TestTreatNonCallableAsNull2 {
- [TreatNonCallableAsNull] attribute Function onfoo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- callback Function = any(any... arguments);
-
- [TreatNonCallableAsNull]
- interface TestTreatNonCallableAsNull3 {
- attribute Function onfoo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
-
- threw = False
- try:
- parser.parse(
- """
- [TreatNonCallableAsNull, LegacyTreatNonObjectAsNull]
- callback Function = any(any... arguments);
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_typedef.py b/components/script/dom/bindings/codegen/parser/tests/test_typedef.py
deleted file mode 100644
index c19d064efff..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_typedef.py
+++ /dev/null
@@ -1,94 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- typedef long mylong;
- typedef long? mynullablelong;
- interface Foo {
- const mylong X = 5;
- undefined foo(optional mynullablelong arg = 7);
- undefined bar(optional mynullablelong arg = null);
- undefined baz(mylong arg);
- };
- """
- )
-
- results = parser.finish()
-
- harness.check(
- results[2].members[1].signatures()[0][1][0].type.name,
- "LongOrNull",
- "Should expand typedefs",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef long? mynullablelong;
- interface Foo {
- undefined foo(mynullablelong? Y);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown on nullable inside nullable arg.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- typedef long? mynullablelong;
- interface Foo {
- const mynullablelong? X = 5;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown on nullable inside nullable const.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Foo {
- const mynullablelong? X = 5;
- };
- typedef long? mynullablelong;
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown on nullable inside nullable const typedef "
- "after interface.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Foo {
- const mylong X = 5;
- };
- typedef long mylong;
- """
- )
-
- results = parser.finish()
-
- harness.check(
- results[0].members[0].type.name,
- "Long",
- "Should expand typedefs that come before interface",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_typedef_identifier_conflict.py b/components/script/dom/bindings/codegen/parser/tests/test_typedef_identifier_conflict.py
deleted file mode 100644
index 2aab3a8a91f..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_typedef_identifier_conflict.py
+++ /dev/null
@@ -1,19 +0,0 @@
-def WebIDLTest(parser, harness):
- exception = None
- try:
- parser.parse(
- """
- typedef long foo;
- typedef long foo;
- """
- )
-
- results = parser.finish()
- except Exception as e:
- exception = e
-
- harness.ok(exception, "Should have thrown.")
- harness.ok(
- "Multiple unresolvable definitions of identifier 'foo'" in str(exception),
- "Should have a sane exception message",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_undefined.py b/components/script/dom/bindings/codegen/parser/tests/test_undefined.py
deleted file mode 100644
index 4731ee1bcd7..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_undefined.py
+++ /dev/null
@@ -1,246 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- try:
- parser.parse(
- """
- dictionary Dict {
- undefined undefinedMember;
- double bar;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "undefined must not be used as the type of a dictionary member")
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- dictionary Dict {
- (undefined or double) undefinedMemberOfUnionInDict;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of a dictionary member, "
- "whether directly or in a union",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- double bar(undefined foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a regular operation)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- getter double(undefined name);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a getter)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- setter undefined(DOMString name, undefined value);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a setter)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- deleter undefined (undefined name);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a deleter)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- constructor (undefined foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a constructor)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- callback Callback = undefined (undefined foo);
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a callback)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- async iterable(undefined name);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of an async iterable "
- "iterator)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- static double bar(undefined foo);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined must not be used as the type of an argument in any "
- "circumstance (so not as the argument of a static operation)",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- const undefined FOO = undefined;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined is not a valid type for a constant",
- )
-
- parser = parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface Foo {
- const any FOO = undefined;
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "undefined is not a valid value for a constant",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py b/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py
deleted file mode 100644
index b024d317492..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_unenumerable_own_properties.py
+++ /dev/null
@@ -1,71 +0,0 @@
-def WebIDLTest(parser, harness):
-
- parser.parse(
- """
- interface Foo {};
- [LegacyUnenumerableNamedProperties]
- interface Bar : Foo {
- getter long(DOMString name);
- };
- interface Baz : Bar {
- getter long(DOMString name);
- };
- """
- )
- results = parser.finish()
- harness.check(len(results), 3, "Should have three interfaces")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyUnenumerableNamedProperties]
- interface NoNamedGetter {
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyUnenumerableNamedProperties=Foo]
- interface ShouldNotHaveArg {
- getter long(DOMString name);
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- [LegacyUnenumerableNamedProperties]
- interface Foo {
- getter long(DOMString name);
- };
- interface Bar : Foo {};
- [LegacyUnenumerableNamedProperties]
- interface Baz : Bar {
- getter long(DOMString name);
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py b/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py
deleted file mode 100644
index 500d123ddb2..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_unforgeable.py
+++ /dev/null
@@ -1,311 +0,0 @@
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface Child : Parent {
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results),
- 2,
- "Should be able to inherit from an interface with "
- "[LegacyUnforgeable] properties.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Child : Parent {
- const short foo = 10;
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results),
- 2,
- "Should be able to inherit from an interface with "
- "[LegacyUnforgeable] properties even if we have a constant with "
- "the same name.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Child : Parent {
- static attribute short foo;
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results),
- 2,
- "Should be able to inherit from an interface with "
- "[LegacyUnforgeable] properties even if we have a static attribute "
- "with the same name.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Child : Parent {
- static undefined foo();
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results),
- 2,
- "Should be able to inherit from an interface with "
- "[LegacyUnforgeable] properties even if we have a static operation "
- "with the same name.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- undefined foo();
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should have thrown when shadowing unforgeable attribute on "
- "parent with operation.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- undefined foo();
- };
- interface Parent {
- [LegacyUnforgeable] undefined foo();
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
- harness.ok(
- threw,
- "Should have thrown when shadowing unforgeable operation on "
- "parent with operation.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- attribute short foo;
- };
- interface Parent {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw,
- "Should have thrown when shadowing unforgeable attribute on "
- "parent with attribute.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- attribute short foo;
- };
- interface Parent {
- [LegacyUnforgeable] undefined foo();
- };
- """
- )
-
- results = parser.finish()
- except Exception as x:
- threw = True
- harness.ok(
- threw,
- "Should have thrown when shadowing unforgeable operation on "
- "parent with attribute.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface Child : Parent {
- };
- interface Parent {};
- interface mixin Mixin {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- Parent includes Mixin;
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results),
- 4,
- "Should be able to inherit from an interface with a "
- "mixin with [LegacyUnforgeable] properties.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- undefined foo();
- };
- interface Parent {};
- interface mixin Mixin {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- Parent includes Mixin;
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown when shadowing unforgeable attribute "
- "of parent's consequential interface.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- };
- interface Parent : GrandParent {};
- interface GrandParent {};
- interface mixin Mixin {
- [LegacyUnforgeable] readonly attribute long foo;
- };
- GrandParent includes Mixin;
- interface mixin ChildMixin {
- undefined foo();
- };
- Child includes ChildMixin;
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown when our consequential interface shadows unforgeable attribute "
- "of ancestor's consequential interface.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface Child : Parent {
- };
- interface Parent : GrandParent {};
- interface GrandParent {};
- interface mixin Mixin {
- [LegacyUnforgeable] undefined foo();
- };
- GrandParent includes Mixin;
- interface mixin ChildMixin {
- undefined foo();
- };
- Child includes ChildMixin;
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown when our consequential interface shadows unforgeable operation "
- "of ancestor's consequential interface.",
- )
-
- parser = parser.reset()
- parser.parse(
- """
- interface iface {
- [LegacyUnforgeable] attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- harness.check(
- len(results), 1, "Should allow writable [LegacyUnforgeable] attribute."
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface iface {
- [LegacyUnforgeable] static readonly attribute long foo;
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown for static [LegacyUnforgeable] attribute.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_union.py b/components/script/dom/bindings/codegen/parser/tests/test_union.py
deleted file mode 100644
index 7fc1236d54e..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_union.py
+++ /dev/null
@@ -1,198 +0,0 @@
-import WebIDL
-import itertools
-import string
-
-# We'd like to use itertools.chain but it's 2.6 or higher.
-
-
-def chain(*iterables):
- # chain('ABC', 'DEF') --> A B C D E F
- for it in iterables:
- for element in it:
- yield element
-
-
-# We'd like to use itertools.combinations but it's 2.6 or higher.
-def combinations(iterable, r):
- # combinations('ABCD', 2) --> AB AC AD BC BD CD
- # combinations(range(4), 3) --> 012 013 023 123
- pool = tuple(iterable)
- n = len(pool)
- if r > n:
- return
- indices = list(range(r))
- yield tuple(pool[i] for i in indices)
- while True:
- for i in reversed(range(r)):
- if indices[i] != i + n - r:
- break
- else:
- return
- indices[i] += 1
- for j in range(i + 1, r):
- indices[j] = indices[j - 1] + 1
- yield tuple(pool[i] for i in indices)
-
-
-# We'd like to use itertools.combinations_with_replacement but it's 2.7 or
-# higher.
-def combinations_with_replacement(iterable, r):
- # combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
- pool = tuple(iterable)
- n = len(pool)
- if not n and r:
- return
- indices = [0] * r
- yield tuple(pool[i] for i in indices)
- while True:
- for i in reversed(range(r)):
- if indices[i] != n - 1:
- break
- else:
- return
- indices[i:] = [indices[i] + 1] * (r - i)
- yield tuple(pool[i] for i in indices)
-
-
-def WebIDLTest(parser, harness):
- types = [
- "float",
- "double",
- "short",
- "unsigned short",
- "long",
- "unsigned long",
- "long long",
- "unsigned long long",
- "boolean",
- "byte",
- "octet",
- "DOMString",
- "ByteString",
- "USVString",
- # "sequence<float>",
- "object",
- "ArrayBuffer",
- # "Date",
- "TestInterface1",
- "TestInterface2",
- ]
-
- testPre = """
- interface TestInterface1 {
- };
- interface TestInterface2 {
- };
- """
-
- interface = (
- testPre
- + """
- interface PrepareForTest {
- """
- )
- for (i, type) in enumerate(types):
- interface += string.Template(
- """
- readonly attribute ${type} attr${i};
- """
- ).substitute(i=i, type=type)
- interface += """
- };
- """
-
- parser.parse(interface)
- results = parser.finish()
-
- iface = results[2]
-
- parser = parser.reset()
-
- def typesAreDistinguishable(t):
- return all(u[0].isDistinguishableFrom(u[1]) for u in combinations(t, 2))
-
- def typesAreNotDistinguishable(t):
- return any(not u[0].isDistinguishableFrom(u[1]) for u in combinations(t, 2))
-
- def unionTypeName(t):
- if len(t) > 2:
- t[0:2] = [unionTypeName(t[0:2])]
- return "(" + " or ".join(t) + ")"
-
- # typeCombinations is an iterable of tuples containing the name of the type
- # as a string and the parsed IDL type.
- def unionTypes(typeCombinations, predicate):
- for c in typeCombinations:
- if predicate(t[1] for t in c):
- yield unionTypeName([t[0] for t in c])
-
- # We limit invalid union types with a union member type to the subset of 3
- # types with one invalid combination.
- # typeCombinations is an iterable of tuples containing the name of the type
- # as a string and the parsed IDL type.
- def invalidUnionWithUnion(typeCombinations):
- for c in typeCombinations:
- if (
- typesAreNotDistinguishable((c[0][1], c[1][1]))
- and typesAreDistinguishable((c[1][1], c[2][1]))
- and typesAreDistinguishable((c[0][1], c[2][1]))
- ):
- yield unionTypeName([t[0] for t in c])
-
- # Create a list of tuples containing the name of the type as a string and
- # the parsed IDL type.
- types = zip(types, (a.type for a in iface.members))
-
- validUnionTypes = chain(
- unionTypes(combinations(types, 2), typesAreDistinguishable),
- unionTypes(combinations(types, 3), typesAreDistinguishable),
- )
- invalidUnionTypes = chain(
- unionTypes(combinations_with_replacement(types, 2), typesAreNotDistinguishable),
- invalidUnionWithUnion(combinations(types, 3)),
- )
- interface = (
- testPre
- + """
- interface TestUnion {
- """
- )
- for (i, type) in enumerate(validUnionTypes):
- interface += string.Template(
- """
- undefined method${i}(${type} arg);
- ${type} returnMethod${i}();
- attribute ${type} attr${i};
- undefined optionalMethod${i}(${type}? arg);
- """
- ).substitute(i=i, type=type)
- interface += """
- };
- """
- parser.parse(interface)
- results = parser.finish()
-
- parser = parser.reset()
-
- for invalid in invalidUnionTypes:
- interface = (
- testPre
- + string.Template(
- """
- interface TestUnion {
- undefined method(${type} arg);
- };
- """
- ).substitute(type=invalid)
- )
-
- threw = False
- try:
- parser.parse(interface)
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
-
- parser = parser.reset()
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_union_any.py b/components/script/dom/bindings/codegen/parser/tests/test_union_any.py
deleted file mode 100644
index caba44b55f9..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_union_any.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface AnyNotInUnion {
- undefined foo((any or DOMString) arg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_union_nullable.py b/components/script/dom/bindings/codegen/parser/tests/test_union_nullable.py
deleted file mode 100644
index d15ed4cfb54..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_union_nullable.py
+++ /dev/null
@@ -1,60 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface OneNullableInUnion {
- undefined foo((object? or DOMString?) arg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Two nullable member types of a union should have thrown.")
-
- parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface NullableInNullableUnion {
- undefined foo((object? or DOMString)? arg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "A nullable union type with a nullable member type should have " "thrown.",
- )
-
- parser.reset()
- threw = False
-
- try:
- parser.parse(
- """
- interface NullableInUnionNullableUnionHelper {
- };
- interface NullableInUnionNullableUnion {
- undefined foo(((object? or DOMString) or NullableInUnionNullableUnionHelper)? arg);
- };
- """
- )
-
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "A nullable union type with a nullable member type should have " "thrown.",
- )
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_usvstring.py b/components/script/dom/bindings/codegen/parser/tests/test_usvstring.py
deleted file mode 100644
index effede391cb..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_usvstring.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# -*- coding: UTF-8 -*-
-
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- interface TestUSVString {
- attribute USVString svs;
- };
- """
- )
-
- results = parser.finish()
-
- harness.check(len(results), 1, "Should be one production")
- harness.ok(isinstance(results[0], WebIDL.IDLInterface), "Should be an IDLInterface")
- iface = results[0]
- harness.check(
- iface.identifier.QName(), "::TestUSVString", "Interface has the right QName"
- )
- harness.check(
- iface.identifier.name, "TestUSVString", "Interface has the right name"
- )
- harness.check(iface.parent, None, "Interface has no parent")
-
- members = iface.members
- harness.check(len(members), 1, "Should be one member")
-
- attr = members[0]
- harness.ok(isinstance(attr, WebIDL.IDLAttribute), "Should be an IDLAttribute")
- harness.check(
- attr.identifier.QName(), "::TestUSVString::svs", "Attr has correct QName"
- )
- harness.check(attr.identifier.name, "svs", "Attr has correct name")
- harness.check(str(attr.type), "USVString", "Attr type is the correct name")
- harness.ok(attr.type.isUSVString(), "Should be USVString type")
- harness.ok(attr.type.isString(), "Should be String collective type")
- harness.ok(not attr.type.isDOMString(), "Should be not be DOMString type")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_variadic_callback.py b/components/script/dom/bindings/codegen/parser/tests/test_variadic_callback.py
deleted file mode 100644
index 3fd3dccd37a..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_variadic_callback.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import WebIDL
-
-
-def WebIDLTest(parser, harness):
- parser.parse(
- """
- callback TestVariadicCallback = any(any... arguments);
- """
- )
-
- results = parser.finish()
-
- harness.ok(True, "TestVariadicCallback callback parsed without error.")
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_variadic_constraints.py b/components/script/dom/bindings/codegen/parser/tests/test_variadic_constraints.py
deleted file mode 100644
index 06ce09d8236..00000000000
--- a/components/script/dom/bindings/codegen/parser/tests/test_variadic_constraints.py
+++ /dev/null
@@ -1,74 +0,0 @@
-def WebIDLTest(parser, harness):
- threw = False
- try:
- parser.parse(
- """
- interface VariadicConstraints1 {
- undefined foo(byte... arg1, byte arg2);
- };
- """
- )
- results = parser.finish()
-
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown on variadic argument followed by required " "argument.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface VariadicConstraints2 {
- undefined foo(byte... arg1, optional byte arg2);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown on variadic argument followed by optional " "argument.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface VariadicConstraints3 {
- undefined foo(optional byte... arg1);
- };
- """
- )
- results = parser.finish()
-
- except:
- threw = True
-
- harness.ok(
- threw,
- "Should have thrown on variadic argument explicitly flagged as " "optional.",
- )
-
- parser = parser.reset()
- threw = False
- try:
- parser.parse(
- """
- interface VariadicConstraints4 {
- undefined foo(byte... arg1 = 0);
- };
- """
- )
- results = parser.finish()
- except:
- threw = True
-
- harness.ok(threw, "Should have thrown on variadic argument with default value.")