summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/WebIDL
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /testing/web-platform/tests/WebIDL
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/web-platform/tests/WebIDL')
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html59
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html139
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html11
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js111
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js3
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/exceptions.html136
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/has-instance.html13
-rw-r--r--testing/web-platform/tests/WebIDL/ecmascript-binding/interface-object.html28
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/enum.widl1
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/module.widl25
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/nonnullableany.widl3
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/nonnullableobjects.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/raises.widl18
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/scopedname.widl2
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/sequenceAsAttribute.widl3
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/special-omittable.widl8
-rw-r--r--testing/web-platform/tests/WebIDL/invalid/idl/stringconstants.idl3
-rw-r--r--testing/web-platform/tests/WebIDL/readme.txt3
-rw-r--r--testing/web-platform/tests/WebIDL/testable_assertions.txt29
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/allowany.widl6
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/array.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/attributes.widl14
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/callback.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/caller.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/constants.widl18
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/constructor.widl9
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/dictionary-inherits.widl9
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/dictionary.widl11
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/documentation-dos.widl33
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/documentation.widl34
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/enum.widl8
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/equivalent-decl.widl18
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/exception-inheritance.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/exception.widl8
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/getter-setter.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/identifier-qualified-names.widl44
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/implements.widl14
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/indexed-properties.widl12
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/inherits-getter.widl16
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/interface-inherits.widl12
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/iterator.widl35
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/namedconstructor.widl6
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/nointerfaceobject.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/nullable.widl9
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/nullableobjects.widl13
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/operation-optional-arg.widl4
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/overloading.widl20
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/overridebuiltins.widl6
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/partial-interface.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/primitives.widl19
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/prototyperoot.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/putforwards.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/reg-operations.widl17
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/replaceable.widl5
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/sequence.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/serializer.widl64
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/static.widl11
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/stringifier-attribute.widl6
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/stringifier-custom.widl9
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/stringifier.widl8
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/treatasnull.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/treatasundefined.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/typedef.widl22
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/typesuffixes.widl3
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/uniontype.widl3
-rw-r--r--testing/web-platform/tests/WebIDL/valid/idl/variadic-operations.widl7
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/allowany.widlprocxml44
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/array.widlprocxml27
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/attributes.widlprocxml38
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/callback.widlprocxml32
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/caller.widlprocxml21
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/constants.widlprocxml85
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/constructor.widlprocxml51
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/dictionary-inherits.widlprocxml44
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/dictionary.widlprocxml47
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/documentation-dos.widlprocxml59
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/documentation.widlprocxml61
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/enum.widlprocxml52
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/equivalent-decl.widlprocxml111
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/exception-inheritance.widlprocxml31
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/exception.widlprocxml23
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/getter-setter.widlprocxml43
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/identifier-qualified-names.widlprocxml107
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/implements.widlprocxml51
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/indexed-properties.widlprocxml92
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/inherits-getter.widlprocxml44
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/interface-inherits.widlprocxml48
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/iterator.widlprocxml132
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/module.widlprocxml99
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/namedconstructor.widlprocxml30
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/namespaceobject.widlprocxml60
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/nointerfaceobject.widlprocxml28
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/nullable.widlprocxml29
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/nullableobjects.widlprocxml46
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/operation-optional-arg.widlprocxml30
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/overloading.widlprocxml113
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/overridebuiltins.widlprocxml34
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/partial-interface.widlprocxml29
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/primitives.widlprocxml112
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/prototyperoot.widlprocxml23
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/putforwards.widlprocxml27
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/reg-operations.widlprocxml70
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/replaceable.widlprocxml28
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/sequence.widlprocxml32
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/serializer.widlprocxml296
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/special-omittable.widlprocxml37
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/static.widlprocxml58
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/stringifier-attribute.widlprocxml29
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/stringifier-custom.widlprocxml44
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/stringifier.widlprocxml29
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/treatasnull.widlprocxml40
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/treatasundefined.widlprocxml40
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/typedef.widlprocxml100
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/typesuffixes.widlprocxml25
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/uniontype.widlprocxml26
-rw-r--r--testing/web-platform/tests/WebIDL/valid/xml/variadic-operations.widlprocxml40
116 files changed, 4002 insertions, 0 deletions
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html
new file mode 100644
index 000000000..450b4b334
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constants.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>DOMException constants</title>
+<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-constructor-object">
+<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-prototype-object">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27732
+ var constants = [
+ "INDEX_SIZE_ERR",
+ "DOMSTRING_SIZE_ERR",
+ "HIERARCHY_REQUEST_ERR",
+ "WRONG_DOCUMENT_ERR",
+ "INVALID_CHARACTER_ERR",
+ "NO_DATA_ALLOWED_ERR",
+ "NO_MODIFICATION_ALLOWED_ERR",
+ "NOT_FOUND_ERR",
+ "NOT_SUPPORTED_ERR",
+ "INUSE_ATTRIBUTE_ERR",
+ "INVALID_STATE_ERR",
+ "SYNTAX_ERR",
+ "INVALID_MODIFICATION_ERR",
+ "NAMESPACE_ERR",
+ "INVALID_ACCESS_ERR",
+ "VALIDATION_ERR",
+ "TYPE_MISMATCH_ERR",
+ "SECURITY_ERR",
+ "NETWORK_ERR",
+ "ABORT_ERR",
+ "URL_MISMATCH_ERR",
+ "QUOTA_EXCEEDED_ERR",
+ "TIMEOUT_ERR",
+ "INVALID_NODE_TYPE_ERR",
+ "DATA_CLONE_ERR"
+ ]
+ var objects = [
+ [DOMException, "DOMException constructor object"],
+ [DOMException.prototype, "DOMException prototype object"]
+ ]
+ constants.forEach(function(name, i) {
+ objects.forEach(function(o) {
+ var object = o[0], description = o[1];
+ test(function() {
+ assert_equals(object[name], i + 1, name)
+ assert_own_property(object, name)
+ var pd = Object.getOwnPropertyDescriptor(object, name)
+ assert_false("get" in pd, "property has getter")
+ assert_false("set" in pd, "property has setter")
+ assert_false(pd.writable, "not writable")
+ assert_true(pd.enumerable, "enumerable")
+ assert_false(pd.configurable, "not configurable")
+ }, "Constant " + name + " on " + description)
+ })
+ })
+})
+</script>
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html
new file mode 100644
index 000000000..0e5ffea7d
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/DOMException-constructor.html
@@ -0,0 +1,139 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>DOMException constructor</title>
+<link rel=help href="https://heycam.github.io/webidl/#es-DOMException-constructor-object">
+<link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.message">
+<link rel=help href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-error.prototype.name">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var ex = new DOMException();
+ assert_equals(ex.name, "Error",
+ "Not passing a name should end up with 'Error' as the name");
+ assert_equals(ex.message, "",
+ "Not passing a message should end up with empty string as the message");
+}, 'new DOMException()');
+
+test(function() {
+ var ex = new DOMException();
+ assert_false(ex.hasOwnProperty("name"),
+ "The name property should be inherited");
+ assert_false(ex.hasOwnProperty("message"),
+ "The message property should be inherited");
+}, 'new DOMException(): own-ness');
+
+test(function() {
+ var ex = new DOMException(null);
+ assert_equals(ex.name, "Error",
+ "Not passing a name should end up with 'Error' as the name");
+ assert_equals(ex.message, "null",
+ "Passing null as message should end up with stringified 'null' as the message");
+}, 'new DOMException(null)');
+
+test(function() {
+ var ex = new DOMException(undefined);
+ assert_equals(ex.name, "Error",
+ "Not passing a name should end up with 'Error' as the name");
+ assert_equals(ex.message, "",
+ "Not passing a message should end up with empty string as the message");
+}, 'new DOMException(undefined)');
+
+test(function() {
+ var ex = new DOMException(undefined);
+ assert_false(ex.hasOwnProperty("name"),
+ "The name property should be inherited");
+ assert_false(ex.hasOwnProperty("message"),
+ "The message property should be inherited");
+}, 'new DOMException(undefined): own-ness');
+
+test(function() {
+ var ex = new DOMException("foo");
+ assert_equals(ex.name, "Error",
+ "Not passing a name should still end up with 'Error' as the name");
+ assert_equals(ex.message, "foo", "Should be using passed-in message");
+}, 'new DOMException("foo")');
+
+test(function() {
+ var ex = new DOMException("foo");
+ assert_false(ex.hasOwnProperty("name"),
+ "The name property should be inherited");
+ assert_true(ex.hasOwnProperty("message"),
+ "The message property should be own");
+}, 'new DOMException("foo"): own-ness');
+
+test(function() {
+ var ex = new DOMException("bar", undefined);
+ assert_equals(ex.name, "Error",
+ "Passing undefined for name should end up with 'Error' as the name");
+ assert_equals(ex.message, "bar", "Should still be using passed-in message");
+}, 'new DOMException("bar", undefined)');
+
+test(function() {
+ var ex = new DOMException("bar", "NotSupportedError");
+ assert_equals(ex.name, "NotSupportedError", "Should be using the passed-in name");
+ assert_equals(ex.message, "bar", "Should still be using passed-in message");
+ assert_equals(ex.code, DOMException.NOT_SUPPORTED_ERR,
+ "Should have the right exception code");
+}, 'new DOMException("bar", "NotSupportedError")');
+
+test(function() {
+ var ex = new DOMException("bar", "NotSupportedError");
+ assert_true(ex.hasOwnProperty("name"),
+ "The name property should be own");
+ assert_true(ex.hasOwnProperty("message"),
+ "The message property should be own");
+}, 'new DOMException("bar", "NotSupportedError"): own-ness');
+
+test(function() {
+ var ex = new DOMException("bar", "foo");
+ assert_equals(ex.name, "foo", "Should be using the passed-in name");
+ assert_equals(ex.message, "bar", "Should still be using passed-in message");
+ assert_equals(ex.code, 0,
+ "Should have 0 for code for a name not in the exception names table");
+}, 'new DOMException("bar", "foo")');
+
+[
+ {name: "IndexSizeError", code: 1},
+ {name: "HierarchyRequestError", code: 3},
+ {name: "WrongDocumentError", code: 4},
+ {name: "InvalidCharacterError", code: 5},
+ {name: "NoModificationAllowedError", code: 7},
+ {name: "NotFoundError", code: 8},
+ {name: "NotSupportedError", code: 9},
+ {name: "InUseAttributeError", code: 10},
+ {name: "InvalidStateError", code: 11},
+ {name: "SyntaxError", code: 12},
+ {name: "InvalidModificationError", code: 13},
+ {name: "NamespaceError", code: 14},
+ {name: "InvalidAccessError", code: 15},
+ {name: "SecurityError", code: 18},
+ {name: "NetworkError", code: 19},
+ {name: "AbortError", code: 20},
+ {name: "URLMismatchError", code: 21},
+ {name: "QuotaExceededError", code: 22},
+ {name: "TimeoutError", code: 23},
+ {name: "InvalidNodeTypeError", code: 24},
+ {name: "DataCloneError", code: 25}
+].forEach(function(test_case) {
+ test(function() {
+ var ex = new DOMException("msg", test_case.name);
+ assert_equals(ex.name, test_case.name,
+ "Should be using the passed-in name");
+ assert_equals(ex.message, "msg",
+ "Should be using the passed-in message");
+ assert_equals(ex.code, test_case.code,
+ "Should have matching legacy code from error names table");
+ },'new DOMexception("msg", "' + test_case.name + '")');
+});
+
+test(function() {
+ var ex = new DOMException("bar", "UnknownError");
+ assert_equals(ex.name, "UnknownError", "Should be using the passed-in name");
+ assert_equals(ex.message, "bar", "Should still be using passed-in message");
+ assert_equals(ex.code, 0,
+ "Should have 0 for code for a name in the exception names table with no legacy code");
+}, 'new DOMException("bar", "UnknownError")');
+
+</script>
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html
new file mode 100644
index 000000000..ddb40f4dd
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>DOMException constructor and prototype object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src=constructor-object.js></script>
+<div id="log"></div>
+<script>
+setup({ explicit_done: true })
+run_test()
+</script>
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js
new file mode 100644
index 000000000..e539d85db
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.js
@@ -0,0 +1,111 @@
+function run_test() {
+ test(function() {
+ // "There MUST exist a property on the ECMAScript global object whose
+ // name is “DOMException” and value is an object called the
+ // DOMException constructor object, which provides access to legacy
+ // DOMException code constants. The property has the attributes
+ // { [[Writable]]: true, [[Enumerable]]: false,
+ // [[Configurable]]: true }."
+ assert_own_property(self, "DOMException",
+ "self does not have own property \"DOMException\"");
+ var desc = Object.getOwnPropertyDescriptor(self, "DOMException");
+ assert_false("get" in desc, "self's property \"DOMException\" has getter");
+ assert_false("set" in desc, "self's property \"DOMException\" has setter");
+ assert_true(desc.writable, "self's property \"DOMException\" is not writable");
+ assert_false(desc.enumerable, "self's property \"DOMException\" is enumerable");
+ assert_true(desc.configurable, "self's property \"DOMException\" is not configurable");
+
+ // "The DOMException constructor object MUST be a function object but
+ // with a [[Prototype]] value of %Error% ([ECMA-262], section 6.1.7.4)."
+ assert_equals(Object.getPrototypeOf(self.DOMException), Error,
+ "prototype of self's property \"DOMException\" is not Error");
+
+ // "Its [[Get]] internal property is set as described in ECMA-262
+ // section 9.1.8."
+ // Not much to test for this.
+ // "Its [[Construct]] internal property is set as described in ECMA-262
+ // section 19.2.2.3."
+ // "Its @@hasInstance property is set as described in ECMA-262 section
+ // 19.2.3.8, unless otherwise specified."
+
+ // String() returns something implementation-dependent, because it
+ // calls Function#toString.
+ assert_class_string(self.DOMException, "Function",
+ "class string of DOMException");
+
+ // "For every legacy code listed in the error names table, there MUST
+ // be a property on the DOMException constructor object whose name and
+ // value are as indicated in the table. The property has attributes
+ // { [[Writable]]: false, [[Enumerable]]: true,
+ // [[Configurable]]: false }."
+ // See DOMException-constants.html.
+ }, "existence and properties of DOMException");
+
+ test(function() {
+ assert_own_property(self, "DOMException",
+ "self does not have own property \"DOMException\"");
+
+ // "The DOMException constructor object MUST also have a property named
+ // “prototype” with attributes { [[Writable]]: false,
+ // [[Enumerable]]: false, [[Configurable]]: false } whose value is an
+ // object called the DOMException prototype object. This object also
+ // provides access to the legacy code values."
+ assert_own_property(self.DOMException, "prototype",
+ 'exception "DOMException" does not have own property "prototype"');
+ var desc = Object.getOwnPropertyDescriptor(self.DOMException, "prototype");
+ assert_false("get" in desc, "DOMException.prototype has getter");
+ assert_false("set" in desc, "DOMException.prototype has setter");
+ assert_false(desc.writable, "DOMException.prototype is writable");
+ assert_false(desc.enumerable, "DOMException.prototype is enumerable");
+ assert_false(desc.configurable, "DOMException.prototype is configurable");
+
+ // "The DOMException prototype object MUST have an internal
+ // [[Prototype]] property whose value is %ErrorPrototype% ([ECMA-262],
+ // section 6.1.7.4)."
+ assert_own_property(self, "Error",
+ 'should inherit from Error, but self has no such property');
+ assert_own_property(self.Error, "prototype",
+ 'should inherit from Error, but that object has no "prototype" property');
+ assert_equals(Object.getPrototypeOf(self.DOMException.prototype),
+ self.Error.prototype,
+ 'prototype of DOMException.prototype is not Error.prototype');
+
+ // "The class string of the DOMException prototype object is
+ // “DOMExceptionPrototype”."
+ assert_class_string(self.DOMException.prototype, "DOMExceptionPrototype",
+ "class string of DOMException.prototype");
+ }, "existence and properties of DOMException.prototype");
+
+ test(function() {
+ assert_false(self.DOMException.prototype.hasOwnProperty("name"),
+ "DOMException.prototype should not have an own \"name\" " +
+ "property.");
+ assert_false(self.DOMException.prototype.hasOwnProperty("code"),
+ "DOMException.prototype should not have an own \"name\" " +
+ "property.");
+ }, "existence of name and code properties on DOMException.prototype");
+
+ test(function() {
+ assert_own_property(self, "DOMException",
+ "self does not have own property \"DOMException\"");
+ assert_own_property(self.DOMException, "prototype",
+ 'interface "DOMException" does not have own property "prototype"');
+
+ // "There MUST be a property named “constructor” on the DOMException
+ // prototype object with attributes { [[Writable]]: true,
+ // [[Enumerable]]: false, [[Configurable]]: true } and whose value is
+ // the DOMException constructor object."
+ assert_own_property(self.DOMException.prototype, "constructor",
+ "DOMException" + '.prototype does not have own property "constructor"');
+ var desc = Object.getOwnPropertyDescriptor(self.DOMException.prototype, "constructor");
+ assert_false("get" in desc, "DOMException.prototype.constructor has getter");
+ assert_false("set" in desc, "DOMException.prototype.constructor has setter");
+ assert_true(desc.writable, "DOMException.prototype.constructor is not writable");
+ assert_false(desc.enumerable, "DOMException.prototype.constructor is enumerable");
+ assert_true(desc.configurable, "DOMException.prototype.constructor in not configurable");
+ assert_equals(self.DOMException.prototype.constructor, self.DOMException,
+ "DOMException.prototype.constructor is not the same object as DOMException");
+ }, "existence and properties of exception interface prototype object's \"constructor\" property");
+
+ done();
+}
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js
new file mode 100644
index 000000000..75149244f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/constructor-object.worker.js
@@ -0,0 +1,3 @@
+importScripts("/resources/testharness.js")
+importScripts("constructor-object.js")
+run_test();
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/exceptions.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
new file mode 100644
index 000000000..bc1d7fe63
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/es-exceptions/exceptions.html
@@ -0,0 +1,136 @@
+<!doctype html>
+<title>DOMException-throwing tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+/**
+ * This file just picks one case where browsers are supposed to throw an
+ * exception, and tests the heck out of whether it meets the spec. In the
+ * future, all these checks should be in assert_throws(), but we don't want
+ * every browser failing every assert_throws() check until they fix every
+ * single bug in their exception-throwing.
+ *
+ * We don't go out of our way to test everything that's already tested by
+ * interfaces.html, like whether all constants are present on the object, but
+ * some things are duplicated.
+ */
+setup({explicit_done: true});
+
+function testException(exception, global, desc) {
+ // https://heycam.github.io/webidl/#es-exception-objects
+ // (as of 2015-01-03): "The value of the internal [[Prototype]] property of a
+ // DOMException object MUST be the DOMException prototype object from the
+ // global environment the exception object is associated with."
+ test(function() {
+ assert_equals(global.Object.getPrototypeOf(exception),
+ global.DOMException.prototype);
+ }, desc + "Object.getPrototypeOf(exception) === DOMException.prototype");
+
+
+ // https://heycam.github.io/webidl/#es-creating-throwing-exceptions
+ // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/
+ // passing “name”, Property Descriptor { [[Value]]: /N/, [[Writable]]: true,
+ // [[Enumerable]]: true, [[Configurable]]: true }, and false as arguments."
+ test(function() {
+ assert_true(exception.hasOwnProperty("name"));
+ }, desc + "exception.hasOwnProperty(\"name\")");
+
+ test(function() {
+ assert_equals(exception.name, "HierarchyRequestError");
+ }, desc + "exception.name === \"HierarchyRequestError\"");
+
+ test(function() {
+ var desc = global.Object.getOwnPropertyDescriptor(exception, "name");
+ assert_true(desc.writable, "must be writable");
+ assert_true(desc.enumerable, "must be enumerable");
+ assert_true(desc.configurable, "must be configurable");
+ }, desc + "Object.getOwnPropertyDescriptor(exception, \"name\")");
+
+
+ // https://heycam.github.io/webidl/#es-creating-throwing-exceptions
+ // (as of 2015-01-03): "If the optional user agent-defined message /M/ was
+ // specified, then this list has a single element whose value is the result
+ // of converting /M/ to a String value. Otherwise, the list is empty."
+ //
+ // https://heycam.github.io/webidl/#es-DOMException-constructor-object
+ // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/
+ // passing “message”, Property Descriptor { [[Value]]: /S/,
+ // [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }, and
+ // false as arguments."
+ test(function() {
+ if (exception.hasOwnProperty("message")) {
+ var desc = global.Object.getOwnPropertyDescriptor(exception, "message");
+ assert_true(desc.writable, "must be writable");
+ assert_false(desc.enumerable, "must not be enumerable");
+ assert_true(desc.configurable, "must be configurable");
+ }
+ }, desc + "Object.getOwnPropertyDescriptor(exception, \"message\")");
+
+ test(function() {
+ if (exception.hasOwnProperty("message")) {
+ // Can't test anything more specific, since it's implementation-defined :(
+ assert_equals(typeof exception.message, "string");
+ } else {
+ // Error.prototype.message
+ assert_equals(exception.message, "");
+ }
+ }, desc + "typeof exception.message === \"string\"");
+
+
+ // https://heycam.github.io/webidl/#es-exception-objects
+ // (as of 2015-01-03): "The class string of a DOMException object MUST be
+ // “DOMException”."
+ test(function() {
+ assert_equals(global.Object.prototype.toString.call(exception),
+ "[object DOMException]");
+ }, desc + "Object.prototype.toString.call(exception) === \"[object DOMException]\"");
+
+
+ // https://heycam.github.io/webidl/#es-creating-throwing-exceptions
+ // (as of 2015-01-03): "Call the [[DefineOwnProperty]] internal method of /O/
+ // passing “code”, Property Descriptor { [[Value]]: /code/,
+ // [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }, and
+ // false as arguments."
+ test(function() {
+ assert_equals(exception.code, global.DOMException.HIERARCHY_REQUEST_ERR);
+ }, desc + "exception.code === DOMException.HIERARCHY_REQUEST_ERR");
+
+ test(function() {
+ var desc = global.Object.getOwnPropertyDescriptor(exception, "name");
+ assert_true(desc.writable, "must be writable");
+ assert_true(desc.enumerable, "must be enumerable");
+ assert_true(desc.configurable, "must be configurable");
+ }, desc + "Object.getOwnPropertyDescriptor(exception, \"code\")");
+}
+
+
+// Test in current window
+var exception = null;
+try {
+ // This should throw a HierarchyRequestError in every browser since the
+ // Stone Age, so we're really only testing exception-throwing details.
+ document.documentElement.appendChild(document);
+} catch(e) {
+ exception = e;
+}
+testException(exception, window, "");
+
+// Test in iframe
+var iframe = document.createElement("iframe");
+iframe.src = "about:blank";
+iframe.onload = function() {
+ var exception = null;
+ try {
+ iframe.contentDocument.documentElement.appendChild(iframe.contentDocument);
+ } catch(e) {
+ exception = e;
+ }
+ testException(exception, iframe.contentWindow, "In iframe: ");
+
+ document.body.removeChild(iframe);
+ done();
+};
+document.body.appendChild(iframe);
+</script>
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/has-instance.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/has-instance.html
new file mode 100644
index 000000000..986d27c9b
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/has-instance.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<meta charset="utf-8">
+<title></title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(function() {
+ var obj = Object.create(Element.prototype);
+ assert_true(obj instanceof Element);
+ assert_true(obj instanceof Node);
+ assert_false(obj instanceof Attr);
+}, "Manually-constructed prototype chains are correctly handled by instanceof");
+</script>
diff --git a/testing/web-platform/tests/WebIDL/ecmascript-binding/interface-object.html b/testing/web-platform/tests/WebIDL/ecmascript-binding/interface-object.html
new file mode 100644
index 000000000..132c61dda
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/ecmascript-binding/interface-object.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>Interface objects</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(function () {
+ assert_equals(typeof window.Blob, "function")
+ delete window.Blob;
+ assert_equals(window.Blob, undefined);
+}, "An interface object deleted after it has been accessed is undefined");
+
+test(function () {
+ delete window.File;
+ assert_equals(window.File, undefined);
+}, "An interface object deleted before it has been defined is undefined");
+
+test(function () {
+ delete window.ImageData;
+ assert_equals(Object.getOwnPropertyDescriptor(window, "ImageData"), undefined);
+ delete window.ImageData;
+ assert_equals(Object.getOwnPropertyDescriptor(window, "ImageData"), undefined);
+}, "Interface objects deleted multiple times stay deleted");
+
+test(function () {
+ assert_equals(window["abc\udc88"], undefined);
+}, "Fancy property names don't break the resolve hook on Window");
+</script>
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/enum.widl b/testing/web-platform/tests/WebIDL/invalid/idl/enum.widl
new file mode 100644
index 000000000..c355c3251
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/enum.widl
@@ -0,0 +1 @@
+enum foo { 1, 2, 3}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/module.widl b/testing/web-platform/tests/WebIDL/invalid/idl/module.widl
new file mode 100644
index 000000000..a4c79fdf1
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/module.widl
@@ -0,0 +1,25 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+module gfx {
+
+ module geom {
+ interface Shape { /* ... */ };
+ interface Rectangle : Shape { /* ... */ };
+ interface Path : Shape { /* ... */ };
+ };
+
+ interface GraphicsContext {
+ void fillShape(geom::Shape s);
+ void strokeShape(geom::Shape s);
+ };
+};
+
+module gui {
+
+ interface Widget { /* ... */ };
+
+ interface Window : Widget {
+ gfx::GraphicsContext getGraphicsContext();
+ };
+
+ interface Button : Widget { /* ... */ };
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableany.widl b/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableany.widl
new file mode 100644
index 000000000..389576555
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableany.widl
@@ -0,0 +1,3 @@
+interface NonNullable {
+ attribute any? foo;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableobjects.widl b/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableobjects.widl
new file mode 100644
index 000000000..1deac5aee
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/nonnullableobjects.widl
@@ -0,0 +1,5 @@
+interface Foo {};
+
+interface NonNullable {
+ attribute Foo?? foo;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/raises.widl b/testing/web-platform/tests/WebIDL/invalid/idl/raises.widl
new file mode 100644
index 000000000..ff65522f2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/raises.widl
@@ -0,0 +1,18 @@
+// getraises and setraises are not longer valid Web IDL
+interface Person {
+
+ // An attribute that can raise an exception if it is set to an invalid value.
+ attribute DOMString name setraises (InvalidName);
+
+ // An attribute whose value cannot be assigned to, and which can raise an
+ // exception some circumstances.
+ readonly attribute DOMString petName getraises (NoSuchPet);
+};
+
+exception SomeException {
+};
+
+interface ExceptionThrower {
+ // This attribute always throws a SomeException and never returns a value.
+ attribute long valueOf getraises(SomeException);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/scopedname.widl b/testing/web-platform/tests/WebIDL/invalid/idl/scopedname.widl
new file mode 100644
index 000000000..cfcb1ccc9
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/scopedname.widl
@@ -0,0 +1,2 @@
+// scoped names are no longer valid in WebIDL
+ typedef gfx::geom::geom2d::Point Point;
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/sequenceAsAttribute.widl b/testing/web-platform/tests/WebIDL/invalid/idl/sequenceAsAttribute.widl
new file mode 100644
index 000000000..c23da82ac
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/sequenceAsAttribute.widl
@@ -0,0 +1,3 @@
+interface sequenceAsAttribute {
+ attribute sequence<short> invalid;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/special-omittable.widl b/testing/web-platform/tests/WebIDL/invalid/idl/special-omittable.widl
new file mode 100644
index 000000000..bdfbfa709
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/special-omittable.widl
@@ -0,0 +1,8 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+// omittable is no longer a recognized keywoard as of 20110905
+interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ omittable getter float getProperty(DOMString propertyName);
+ omittable setter void setProperty(DOMString propertyName, float propertyValue);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/invalid/idl/stringconstants.idl b/testing/web-platform/tests/WebIDL/invalid/idl/stringconstants.idl
new file mode 100644
index 000000000..44fd3ff13
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/invalid/idl/stringconstants.idl
@@ -0,0 +1,3 @@
+interface Util {
+ const DOMString hello = "world";
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/readme.txt b/testing/web-platform/tests/WebIDL/readme.txt
new file mode 100644
index 000000000..12ded6acd
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/readme.txt
@@ -0,0 +1,3 @@
+These are syntax tests for WebIDL parser. A correct parser should fail on the tests in the "invalid" directory, and should be able to collect the data necessary to generate the XML serialization for valid fragments collected in the "valid" directory.
+
+(the said XML serialization is the one produced by widlproc https://github.com/dontcallmedom/widlproc from which these tests have been imported)
diff --git a/testing/web-platform/tests/WebIDL/testable_assertions.txt b/testing/web-platform/tests/WebIDL/testable_assertions.txt
new file mode 100644
index 000000000..c1706f8c3
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/testable_assertions.txt
@@ -0,0 +1,29 @@
+{
+ "travil_test_1": {
+ "title": "The Title of this spec",
+ "specRef": "html > body:nth-child(2) > div:nth-child(1) > h1:nth-child(2)",
+ "notes": "This assertion is linked to the H1 in the beginning of the spec.",
+ "author": "Microsoft",
+ "date": "2012-07-11T23:39:23.634Z",
+ "testURL": "",
+ "testApproved": false
+ },
+ "travil_test_2": {
+ "title": "The Initial publication of WebIDL (at the bottom of the spec)",
+ "specRef": "#changes > dl:nth-child(4) > dt:nth-child(19)",
+ "notes": "17 October 2007 was the FPWD.\nTime to start testing.",
+ "author": "Microsoft",
+ "date": "2012-07-11T23:40:41.624Z",
+ "testURL": "",
+ "testApproved": false
+ },
+ "travil_test_3": {
+ "title": "This assertion should not be found (by design)",
+ "specRef": "#does_not_exist > div",
+ "notes": "This is for testing purposes only (testing the framework)",
+ "author": "Microsoft",
+ "date": "2012-07-11T23:40:41.624Z",
+ "testURL": "",
+ "testApproved": false
+ }
+} \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/allowany.widl b/testing/web-platform/tests/WebIDL/valid/idl/allowany.widl
new file mode 100644
index 000000000..2343bb963
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/allowany.widl
@@ -0,0 +1,6 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface B {
+ void g();
+ void g(B b);
+ void g([AllowAny] DOMString s);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/array.widl b/testing/web-platform/tests/WebIDL/valid/idl/array.widl
new file mode 100644
index 000000000..22e21fb65
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/array.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[Constructor]
+interface LotteryResults {
+ readonly attribute unsigned short[][] numbers;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/attributes.widl b/testing/web-platform/tests/WebIDL/valid/idl/attributes.widl
new file mode 100644
index 000000000..7e1d691cb
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/attributes.widl
@@ -0,0 +1,14 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+exception InvalidName {
+ DOMString reason;
+};
+
+exception NoSuchPet { };
+
+interface Person {
+
+ // A simple attribute that can be set to any value the range an unsigned
+ // short can take.
+ attribute unsigned short age;
+
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/callback.widl b/testing/web-platform/tests/WebIDL/valid/idl/callback.widl
new file mode 100644
index 000000000..d92f6a18c
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/callback.widl
@@ -0,0 +1,5 @@
+callback AsyncOperationCallback = void (DOMString status);
+
+callback interface EventHandler {
+ void eventOccurred(DOMString details);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/caller.widl b/testing/web-platform/tests/WebIDL/valid/idl/caller.widl
new file mode 100644
index 000000000..92acb1c01
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/caller.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface NumberQuadrupler {
+ // This operation simply returns four times the given number x.
+ legacycaller float compute(float x);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/constants.widl b/testing/web-platform/tests/WebIDL/valid/idl/constants.widl
new file mode 100644
index 000000000..5e28ae9c1
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/constants.widl
@@ -0,0 +1,18 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Util {
+ const boolean DEBUG = false;
+ const short negative = -1;
+ const octet LF = 10;
+ const unsigned long BIT_MASK = 0x0000fc00;
+ const float AVOGADRO = 6.022e23;
+ const unrestricted float sobig = Infinity;
+ const unrestricted double minusonedividedbyzero = -Infinity;
+ const short notanumber = NaN;
+};
+
+exception Error {
+ const short ERR_UNKNOWN = 0;
+ const short ERR_OUT_OF_MEMORY = 1;
+
+ short errorCode;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/constructor.widl b/testing/web-platform/tests/WebIDL/valid/idl/constructor.widl
new file mode 100644
index 000000000..f93ec08a6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/constructor.widl
@@ -0,0 +1,9 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[Constructor,
+ Constructor(float radius)]
+interface Circle {
+ attribute float r;
+ attribute float cx;
+ attribute float cy;
+ readonly attribute float circumference;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/dictionary-inherits.widl b/testing/web-platform/tests/WebIDL/valid/idl/dictionary-inherits.widl
new file mode 100644
index 000000000..48f8a0fdc
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/dictionary-inherits.widl
@@ -0,0 +1,9 @@
+dictionary PaintOptions {
+ DOMString? fillPattern = "black";
+ DOMString? strokePattern = null;
+ Point position;
+};
+
+dictionary WetPaintOptions : PaintOptions {
+ float hydrometry;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/dictionary.widl b/testing/web-platform/tests/WebIDL/valid/idl/dictionary.widl
new file mode 100644
index 000000000..f46b7ba78
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/dictionary.widl
@@ -0,0 +1,11 @@
+// Extracted from Web IDL editors draft May 31 2011
+dictionary PaintOptions {
+ DOMString? fillPattern = "black";
+ DOMString? strokePattern = null;
+ Point position;
+};
+
+partial dictionary A {
+ long h;
+ long d;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/documentation-dos.widl b/testing/web-platform/tests/WebIDL/valid/idl/documentation-dos.widl
new file mode 100644
index 000000000..fb801101f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/documentation-dos.widl
@@ -0,0 +1,33 @@
+/**
+* \brief Testing documentation features
+*
+* This is a
+* single paragraph
+*
+* <p>This is valid.</p>
+* <p>This is <em>valid</em>.</p>
+* <p>This is <b>valid</b>.</p>
+* <p>This is <a href=''>valid</a>.</p>
+* <ul>
+* <li>This</li>
+* <li>is</li>
+* <li>valid</li>
+* </ul>
+* <dl>
+* <dt>This</dt>
+* <dd>valid</dd>
+* </dl>
+* <table>
+* <tr>
+* <td>this</td>
+* <td>is</td>
+* </tr>
+* <tr>
+* <td>valid</td>
+* </tr>
+* </table>
+* <p>This is <br> valid.</p>
+* <p>This is <br /> valid.</p>
+* <p>This is <br/> valid.</p>
+*/
+interface Documentation {}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/documentation.widl b/testing/web-platform/tests/WebIDL/valid/idl/documentation.widl
new file mode 100644
index 000000000..003e9226f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/documentation.widl
@@ -0,0 +1,34 @@
+/**
+* \brief Testing documentation features
+*
+* This is a
+* single paragraph
+*
+* <p>This is valid.</p>
+* <p>This is <em>valid</em>.</p>
+* <p>This is <b>valid</b>.</p>
+* <p>This is <a href=''>valid</a>.</p>
+* <ul>
+* <li>This</li>
+* <li>is</li>
+* <li>valid</li>
+* </ul>
+* <dl>
+* <dt>This</dt>
+* <dd>valid</dd>
+* </dl>
+* <table>
+* <tr>
+* <td>this</td>
+* <td>is</td>
+* </tr>
+* <tr>
+* <td>valid</td>
+* </tr>
+* </table>
+* <p>This is <br> valid.</p>
+* <p>This is <br /> valid.</p>
+* <p>This is <br/> valid.</p>
+* <p><img src="foo.png" alt="Valid"/></p>
+*/
+interface Documentation {}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/enum.widl b/testing/web-platform/tests/WebIDL/valid/idl/enum.widl
new file mode 100644
index 000000000..851fca2e6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/enum.widl
@@ -0,0 +1,8 @@
+enum MealType { "rice", "noodles", "other" };
+
+interface Meal {
+ attribute MealType type;
+ attribute float size; // in grams
+
+ void initialize(MealType type, float size);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/equivalent-decl.widl b/testing/web-platform/tests/WebIDL/valid/idl/equivalent-decl.widl
new file mode 100644
index 000000000..6b3e0eda2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/equivalent-decl.widl
@@ -0,0 +1,18 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float getProperty(DOMString propertyName);
+ setter void setProperty(DOMString propertyName, float propertyValue);
+};
+
+
+interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ float getProperty(DOMString propertyName);
+ void setProperty(DOMString propertyName, float propertyValue);
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/exception-inheritance.widl b/testing/web-platform/tests/WebIDL/valid/idl/exception-inheritance.widl
new file mode 100644
index 000000000..258fdeba6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/exception-inheritance.widl
@@ -0,0 +1,7 @@
+// from http://lists.w3.org/Archives/Public/public-script-coord/2010OctDec/0112.html
+ exception DOMException {
+ unsigned short code;
+ };
+
+ exception HierarchyRequestError : DOMException { };
+ exception NoModificationAllowedError : DOMException { }; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/exception.widl b/testing/web-platform/tests/WebIDL/valid/idl/exception.widl
new file mode 100644
index 000000000..f4b6ae29e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/exception.widl
@@ -0,0 +1,8 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Dahut {
+ attribute DOMString type;
+};
+
+exception SomeException {
+};
+
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/getter-setter.widl b/testing/web-platform/tests/WebIDL/valid/idl/getter-setter.widl
new file mode 100644
index 000000000..bdf87e1c7
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/getter-setter.widl
@@ -0,0 +1,7 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/identifier-qualified-names.widl b/testing/web-platform/tests/WebIDL/valid/idl/identifier-qualified-names.widl
new file mode 100644
index 000000000..33893d4c6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/identifier-qualified-names.widl
@@ -0,0 +1,44 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+ // Typedef identifier: "number"
+ // Qualified name: "::framework::number"
+ typedef float number;
+
+ // Exception identifier: "FrameworkException"
+ // Qualified name: "::framework::FrameworkException"
+ exception FrameworkException {
+
+ // Constant identifier: "ERR_NOT_FOUND"
+ // Qualified name: "::framework::FrameworkException::ERR_NOT_FOUND"
+ const long ERR_NOT_FOUND = 1;
+
+ // Exception field identifier: "code"
+ long code;
+ };
+
+ // Interface identifier: "System"
+ // Qualified name: "::framework::System"
+ interface System {
+
+ // Operation identifier: "createObject"
+ // Operation argument identifier: "interface"
+ object createObject(DOMString _interface);
+
+ // Operation has no identifier; it declares a getter.
+ getter DOMString (DOMString keyName);
+ };
+
+
+ // Interface identifier: "TextField"
+ // Qualified name: "::framework::gui::TextField"
+ interface TextField {
+
+ // Attribute identifier: "const"
+ attribute boolean _const;
+
+ // Attribute identifier: "value"
+ attribute DOMString? _value;
+ };
+
+interface Foo {
+ void op(object interface);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/implements.widl b/testing/web-platform/tests/WebIDL/valid/idl/implements.widl
new file mode 100644
index 000000000..7a310926f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/implements.widl
@@ -0,0 +1,14 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+ interface Node {
+ readonly attribute unsigned short nodeType;
+ // ...
+ };
+
+ interface EventTarget {
+ void addEventListener(DOMString type,
+ EventListener listener,
+ boolean useCapture);
+ // ...
+ };
+
+ Node implements EventTarget;
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/indexed-properties.widl b/testing/web-platform/tests/WebIDL/valid/idl/indexed-properties.widl
new file mode 100644
index 000000000..acf0ed3bf
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/indexed-properties.widl
@@ -0,0 +1,12 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface OrderedMap {
+ readonly attribute unsigned long size;
+
+ getter any getByIndex(unsigned long index);
+ setter void setByIndex(unsigned long index, any value);
+ deleter void removeByIndex(unsigned long index);
+
+ getter any get(DOMString name);
+ setter creator void set(DOMString name, any value);
+ deleter void remove(DOMString name);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/inherits-getter.widl b/testing/web-platform/tests/WebIDL/valid/idl/inherits-getter.widl
new file mode 100644
index 000000000..558e81164
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/inherits-getter.widl
@@ -0,0 +1,16 @@
+interface Animal {
+
+ // A simple attribute that can be set to any string value.
+ readonly attribute DOMString name;
+};
+
+interface Person : Animal {
+
+ // An attribute whose value cannot be assigned to.
+ readonly attribute unsigned short age;
+
+ // An attribute that can raise an exception if it is set to an invalid value.
+ // Its getter behavior is inherited from Animal, and need not be specified
+ // the description of Person.
+ inherit attribute DOMString name;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/interface-inherits.widl b/testing/web-platform/tests/WebIDL/valid/idl/interface-inherits.widl
new file mode 100644
index 000000000..7921def77
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/interface-inherits.widl
@@ -0,0 +1,12 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Animal {
+ attribute DOMString name;
+};
+
+interface Human : Animal {
+ attribute Dog pet;
+};
+
+interface Dog : Animal {
+ attribute Human owner;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/iterator.widl b/testing/web-platform/tests/WebIDL/valid/idl/iterator.widl
new file mode 100644
index 000000000..3bf1b36de
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/iterator.widl
@@ -0,0 +1,35 @@
+interface SessionManager {
+ Session getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ Session iterator;
+};
+
+interface Session {
+ readonly attribute DOMString username;
+ // ...
+};
+
+interface SessionManager2 {
+ Session2 getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ Session2 iterator = SessionIterator;
+};
+
+interface Session2 {
+ readonly attribute DOMString username;
+ // ...
+};
+
+interface SessionIterator {
+ readonly attribute unsigned long remainingSessions;
+};
+
+ interface NodeList {
+ Node iterator = NodeIterator;
+ };
+
+ interface NodeIterator {
+ Node iterator object;
+ }; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/namedconstructor.widl b/testing/web-platform/tests/WebIDL/valid/idl/namedconstructor.widl
new file mode 100644
index 000000000..c468b78f8
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/namedconstructor.widl
@@ -0,0 +1,6 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[NamedConstructor=Audio,
+ NamedConstructor=Audio(DOMString src)]
+interface HTMLAudioElement : HTMLMediaElement {
+ // ...
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/nointerfaceobject.widl b/testing/web-platform/tests/WebIDL/valid/idl/nointerfaceobject.widl
new file mode 100644
index 000000000..c17d75ff8
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/nointerfaceobject.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[NoInterfaceObject]
+interface Query {
+ any lookupEntry(unsigned long key);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/nullable.widl b/testing/web-platform/tests/WebIDL/valid/idl/nullable.widl
new file mode 100644
index 000000000..ccbf625ff
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/nullable.widl
@@ -0,0 +1,9 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface MyConstants {
+ const boolean? ARE_WE_THERE_YET = false;
+};
+
+interface Node {
+ readonly attribute DOMString? namespaceURI;
+ // ...
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/nullableobjects.widl b/testing/web-platform/tests/WebIDL/valid/idl/nullableobjects.widl
new file mode 100644
index 000000000..83d1d40b2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/nullableobjects.widl
@@ -0,0 +1,13 @@
+// Extracted from WebIDL spec 2011-05-23
+
+interface A {
+ // ...
+};
+interface B {
+ // ...
+};
+interface C {
+ void f(A? x);
+ void f(B? x);
+
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/operation-optional-arg.widl b/testing/web-platform/tests/WebIDL/valid/idl/operation-optional-arg.widl
new file mode 100644
index 000000000..379053b45
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/operation-optional-arg.widl
@@ -0,0 +1,4 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface ColorCreator {
+ object createColor(float v1, float v2, float v3, optional float alpha = 3.5);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/overloading.widl b/testing/web-platform/tests/WebIDL/valid/idl/overloading.widl
new file mode 100644
index 000000000..ef1288a88
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/overloading.widl
@@ -0,0 +1,20 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface A {
+ // ...
+};
+
+interface B {
+ // ...
+};
+
+interface C {
+ void f(A x);
+ void f(B x);
+};
+
+interface A {
+ /* f1 */ void f(DOMString a);
+ /* f2 */ void f([AllowAny] DOMString a, DOMString b, float... c);
+ /* f3 */ void f();
+ /* f4 */ void f(long a, DOMString b, optional DOMString c, float... d);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/overridebuiltins.widl b/testing/web-platform/tests/WebIDL/valid/idl/overridebuiltins.widl
new file mode 100644
index 000000000..79211c29e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/overridebuiltins.widl
@@ -0,0 +1,6 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[OverrideBuiltins]
+interface StringMap2 {
+ readonly attribute unsigned long length;
+ getter DOMString lookup(DOMString key);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/partial-interface.widl b/testing/web-platform/tests/WebIDL/valid/idl/partial-interface.widl
new file mode 100644
index 000000000..90e7e0ea4
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/partial-interface.widl
@@ -0,0 +1,7 @@
+interface Foo {
+ attribute DOMString bar;
+};
+
+partial interface Foo {
+ attribute DOMString quux;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/primitives.widl b/testing/web-platform/tests/WebIDL/valid/idl/primitives.widl
new file mode 100644
index 000000000..92939601a
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/primitives.widl
@@ -0,0 +1,19 @@
+interface Primitives {
+ attribute boolean truth;
+ attribute byte character;
+ attribute octet value;
+ attribute short number;
+ attribute unsigned short positive;
+ attribute long big;
+ attribute unsigned long bigpositive;
+ attribute long long bigbig;
+ attribute unsigned long long bigbigpositive;
+ attribute float real;
+ attribute double bigreal;
+ attribute unrestricted float realwithinfinity;
+ attribute unrestricted double bigrealwithinfinity;
+ attribute DOMString string;
+ attribute ByteString bytes;
+ attribute Date date;
+ attribute RegExp regexp;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/prototyperoot.widl b/testing/web-platform/tests/WebIDL/valid/idl/prototyperoot.widl
new file mode 100644
index 000000000..30dd5cbca
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/prototyperoot.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[PrototypeRoot]
+interface Node {
+ readonly attribute unsigned short nodeType;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/putforwards.widl b/testing/web-platform/tests/WebIDL/valid/idl/putforwards.widl
new file mode 100644
index 000000000..1e50a4ee3
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/putforwards.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Person {
+ [PutForwards=full] readonly attribute Name name;
+ attribute unsigned short age;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/reg-operations.widl b/testing/web-platform/tests/WebIDL/valid/idl/reg-operations.widl
new file mode 100644
index 000000000..13997cb1d
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/reg-operations.widl
@@ -0,0 +1,17 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Dimensions {
+ attribute unsigned long width;
+ attribute unsigned long height;
+};
+
+exception NoPointerDevice { };
+
+interface Button {
+
+ // An operation that takes no arguments, returns a boolean
+ boolean isMouseOver();
+
+ // Overloaded operations.
+ void setDimensions(Dimensions size);
+ void setDimensions(unsigned long width, unsigned long height);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/replaceable.widl b/testing/web-platform/tests/WebIDL/valid/idl/replaceable.widl
new file mode 100644
index 000000000..c14d0c376
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/replaceable.widl
@@ -0,0 +1,5 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Counter {
+ [Replaceable] readonly attribute unsigned long value;
+ void increment();
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/sequence.widl b/testing/web-platform/tests/WebIDL/valid/idl/sequence.widl
new file mode 100644
index 000000000..a1aa931f5
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/sequence.widl
@@ -0,0 +1,7 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+// edited to remove sequence as attributes, now invalid
+interface Canvas {
+ void drawPolygon(sequence<float> coordinates);
+ sequence<float> getInflectionPoints();
+ // ...
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/serializer.widl b/testing/web-platform/tests/WebIDL/valid/idl/serializer.widl
new file mode 100644
index 000000000..6f6ccd0e8
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/serializer.widl
@@ -0,0 +1,64 @@
+interface Transaction {
+ readonly attribute Account from;
+ readonly attribute Account to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer;
+};
+
+interface Account {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer DOMString serialize();
+};
+
+interface Transaction2 {
+ readonly attribute Account2 from;
+ readonly attribute Account2 to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer = { from, to, amount, description };
+};
+
+interface Account2 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = number;
+};
+
+interface Account3 {
+ attribute DOMString name;
+ attribute unsigned long number;
+
+ serializer = { attribute };
+};
+
+interface Account4 {
+ getter object getItem(unsigned long index);
+ serializer = { getter };
+};
+
+interface Account5 : Account {
+ attribute DOMString secondname;
+ serializer = { inherit, secondname };
+};
+
+interface Account6 : Account {
+ attribute DOMString secondname;
+ serializer = { inherit, attribute };
+};
+
+interface Account7 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = [ name, number ];
+};
+
+interface Account8 {
+ getter object getItem(unsigned long index);
+ serializer = [ getter ];
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/static.widl b/testing/web-platform/tests/WebIDL/valid/idl/static.widl
new file mode 100644
index 000000000..5b2cd3659
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/static.widl
@@ -0,0 +1,11 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Point { /* ... */ };
+
+interface Circle {
+ attribute float cx;
+ attribute float cy;
+ attribute float radius;
+
+ static readonly attribute long triangulationCount;
+ static Point triangulate(Circle c1, Circle c2, Circle c3);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/stringifier-attribute.widl b/testing/web-platform/tests/WebIDL/valid/idl/stringifier-attribute.widl
new file mode 100644
index 000000000..c964ecb93
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/stringifier-attribute.widl
@@ -0,0 +1,6 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[Constructor]
+interface Student {
+ attribute unsigned long id;
+ stringifier attribute DOMString name;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/stringifier-custom.widl b/testing/web-platform/tests/WebIDL/valid/idl/stringifier-custom.widl
new file mode 100644
index 000000000..b5d7c87e7
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/stringifier-custom.widl
@@ -0,0 +1,9 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+[Constructor]
+interface Student {
+ attribute unsigned long id;
+ attribute DOMString? familyName;
+ attribute DOMString givenName;
+
+ stringifier DOMString ();
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/stringifier.widl b/testing/web-platform/tests/WebIDL/valid/idl/stringifier.widl
new file mode 100644
index 000000000..4eb483d9b
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/stringifier.widl
@@ -0,0 +1,8 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface A {
+ stringifier DOMString ();
+};
+
+interface A {
+ stringifier;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/treatasnull.widl b/testing/web-platform/tests/WebIDL/valid/idl/treatasnull.widl
new file mode 100644
index 000000000..d3c55b008
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/treatasnull.widl
@@ -0,0 +1,7 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Dog {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatNullAs=EmptyString] DOMString breedName);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/treatasundefined.widl b/testing/web-platform/tests/WebIDL/valid/idl/treatasundefined.widl
new file mode 100644
index 000000000..e30050f84
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/treatasundefined.widl
@@ -0,0 +1,7 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface Cat {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatUndefinedAs=EmptyString] DOMString breedName);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/typedef.widl b/testing/web-platform/tests/WebIDL/valid/idl/typedef.widl
new file mode 100644
index 000000000..b4c17d8d3
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/typedef.widl
@@ -0,0 +1,22 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+ interface Point {
+ attribute float x;
+ attribute float y;
+ };
+
+ typedef sequence<Point> PointSequence;
+
+ interface Rect {
+ attribute Point topleft;
+ attribute Point bottomright;
+ };
+
+ interface Widget {
+
+ readonly attribute Rect bounds;
+
+ boolean pointWithinBounds(Point p);
+ boolean allPointsWithinBounds(PointSequence ps);
+ };
+
+ typedef [Clamp] octet value; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/typesuffixes.widl b/testing/web-platform/tests/WebIDL/valid/idl/typesuffixes.widl
new file mode 100644
index 000000000..95e31c169
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/typesuffixes.widl
@@ -0,0 +1,3 @@
+interface Suffixes {
+ void test(sequence<DOMString[]?>? foo);
+};
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/uniontype.widl b/testing/web-platform/tests/WebIDL/valid/idl/uniontype.widl
new file mode 100644
index 000000000..4d99f0196
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/uniontype.widl
@@ -0,0 +1,3 @@
+interface Union {
+ attribute (float or (Date or Event) or (Node or DOMString)?) test;
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/idl/variadic-operations.widl b/testing/web-platform/tests/WebIDL/valid/idl/variadic-operations.widl
new file mode 100644
index 000000000..51fae4cc1
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/idl/variadic-operations.widl
@@ -0,0 +1,7 @@
+// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
+interface IntegerSet {
+ readonly attribute unsigned long cardinality;
+
+ void union(long... ints);
+ void intersection(long... ints);
+}; \ No newline at end of file
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/allowany.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/allowany.widlprocxml
new file mode 100644
index 000000000..7da508bcb
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/allowany.widlprocxml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface B {
+ void g();
+ void g(<ref>B</ref> b);
+ void g([AllowAny] DOMString s);
+};</webidl>
+ <Interface name="B" id="::B">
+ <webidl>interface B {
+ void g();
+ void g(<ref>B</ref> b);
+ void g([AllowAny] DOMString s);
+};</webidl>
+ <Operation name="g" id="::B::g">
+ <webidl> void g();</webidl>
+ <Type type="void"/>
+ <ArgumentList/>
+ </Operation>
+ <Operation name="g" id="::B::g">
+ <webidl> void g(<ref>B</ref> b);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="b">
+ <Type name="B"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="g" id="::B::g">
+ <webidl> void g([AllowAny] DOMString s);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="s">
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="AllowAny">
+ <webidl>AllowAny</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/array.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/array.widlprocxml
new file mode 100644
index 000000000..3df72ff16
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/array.widlprocxml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[Constructor]
+interface LotteryResults {
+ readonly attribute unsigned short[][] numbers;
+};</webidl>
+ <Interface name="LotteryResults" id="::LotteryResults">
+ <webidl>[Constructor]
+interface LotteryResults {
+ readonly attribute unsigned short[][] numbers;
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor">
+ <webidl>Constructor</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute readonly="readonly" name="numbers" id="::LotteryResults::numbers">
+ <webidl> readonly attribute unsigned short[][] numbers;</webidl>
+ <Type type="array">
+ <Type type="array">
+ <Type type="unsigned short"/>
+ </Type>
+ </Type>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/attributes.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/attributes.widlprocxml
new file mode 100644
index 000000000..89bd8ac9b
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/attributes.widlprocxml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>exception InvalidName {
+ DOMString reason;
+};
+
+exception NoSuchPet { };
+
+interface Person {
+
+ attribute unsigned short age;
+
+};</webidl>
+ <Exception name="InvalidName" id="::InvalidName">
+ <webidl>exception InvalidName {
+ DOMString reason;
+};</webidl>
+ <ExceptionField name="reason" id="::InvalidName::reason">
+ <webidl> DOMString reason;</webidl>
+ <Type type="DOMString"/>
+ </ExceptionField>
+ </Exception>
+ <Exception name="NoSuchPet" id="::NoSuchPet">
+ <webidl>exception NoSuchPet { };</webidl>
+ </Exception>
+ <Interface name="Person" id="::Person">
+ <webidl>interface Person {
+
+ attribute unsigned short age;
+
+};</webidl>
+ <Attribute name="age" id="::Person::age">
+ <webidl> attribute unsigned short age;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/callback.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/callback.widlprocxml
new file mode 100644
index 000000000..9eac06ce2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/callback.widlprocxml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>callback AsyncOperationCallback = void (DOMString status);
+
+callback interface EventHandler {
+ void eventOccurred(DOMString details);
+};</webidl>
+ <Callback name="AsyncOperationCallback" id="::AsyncOperationCallback">
+ <webidl>callback AsyncOperationCallback = void (DOMString status);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="status">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Callback>
+ <Interface name="EventHandler" callback="callback" id="::EventHandler">
+ <webidl>callback interface EventHandler {
+ void eventOccurred(DOMString details);
+};</webidl>
+ <Operation name="eventOccurred" id="::EventHandler::eventOccurred">
+ <webidl> void eventOccurred(DOMString details);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="details">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/caller.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/caller.widlprocxml
new file mode 100644
index 000000000..9754d4e02
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/caller.widlprocxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface NumberQuadrupler {
+ legacycaller float compute(float x);
+};</webidl>
+ <Interface name="NumberQuadrupler" id="::NumberQuadrupler">
+ <webidl>interface NumberQuadrupler {
+ legacycaller float compute(float x);
+};</webidl>
+ <Operation legacycaller="legacycaller" name="compute" id="::NumberQuadrupler::compute">
+ <webidl> legacycaller float compute(float x);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="x">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/constants.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/constants.widlprocxml
new file mode 100644
index 000000000..51cb4331f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/constants.widlprocxml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Util {
+ const boolean DEBUG = false;
+ const short negative = -1;
+ const octet LF = 10;
+ const unsigned long BIT_MASK = 0x0000fc00;
+ const float AVOGADRO = 6.022e23;
+ const unrestricted float sobig = Infinity;
+ const unrestricted double minusonedividedbyzero = -Infinity;
+ const short notanumber = NaN;
+};
+
+exception Error {
+ const short ERR_UNKNOWN = 0;
+ const short ERR_OUT_OF_MEMORY = 1;
+
+ short errorCode;
+};</webidl>
+ <Interface name="Util" id="::Util">
+ <webidl>interface Util {
+ const boolean DEBUG = false;
+ const short negative = -1;
+ const octet LF = 10;
+ const unsigned long BIT_MASK = 0x0000fc00;
+ const float AVOGADRO = 6.022e23;
+ const unrestricted float sobig = Infinity;
+ const unrestricted double minusonedividedbyzero = -Infinity;
+ const short notanumber = NaN;
+};</webidl>
+ <Const name="DEBUG" value="false" id="::Util::DEBUG">
+ <webidl> const boolean DEBUG = false;</webidl>
+ <Type type="boolean"/>
+ </Const>
+ <Const name="negative" value="-1" id="::Util::negative">
+ <webidl> const short negative = -1;</webidl>
+ <Type type="short"/>
+ </Const>
+ <Const name="LF" value="10" id="::Util::LF">
+ <webidl> const octet LF = 10;</webidl>
+ <Type type="octet"/>
+ </Const>
+ <Const name="BIT_MASK" value="0x0000fc00" id="::Util::BIT_MASK">
+ <webidl> const unsigned long BIT_MASK = 0x0000fc00;</webidl>
+ <Type type="unsigned long"/>
+ </Const>
+ <Const name="AVOGADRO" value="6.022e23" id="::Util::AVOGADRO">
+ <webidl> const float AVOGADRO = 6.022e23;</webidl>
+ <Type type="float"/>
+ </Const>
+ <Const name="sobig" value="Infinity" id="::Util::sobig">
+ <webidl> const unrestricted float sobig = Infinity;</webidl>
+ <Type type="unrestricted float"/>
+ </Const>
+ <Const name="minusonedividedbyzero" value="-Infinity" id="::Util::minusonedividedbyzero">
+ <webidl> const unrestricted double minusonedividedbyzero = -Infinity;</webidl>
+ <Type type="unrestricted double"/>
+ </Const>
+ <Const name="notanumber" value="NaN" id="::Util::notanumber">
+ <webidl> const short notanumber = NaN;</webidl>
+ <Type type="short"/>
+ </Const>
+ </Interface>
+ <Exception name="Error" id="::Error">
+ <webidl>exception Error {
+ const short ERR_UNKNOWN = 0;
+ const short ERR_OUT_OF_MEMORY = 1;
+
+ short errorCode;
+};</webidl>
+ <Const name="ERR_UNKNOWN" value="0" id="::Error::ERR_UNKNOWN">
+ <webidl> const short ERR_UNKNOWN = 0;</webidl>
+ <Type type="short"/>
+ </Const>
+ <Const name="ERR_OUT_OF_MEMORY" value="1" id="::Error::ERR_OUT_OF_MEMORY">
+ <webidl> const short ERR_OUT_OF_MEMORY = 1;</webidl>
+ <Type type="short"/>
+ </Const>
+ <ExceptionField name="errorCode" id="::Error::errorCode">
+ <webidl> short errorCode;</webidl>
+ <Type type="short"/>
+ </ExceptionField>
+ </Exception>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/constructor.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/constructor.widlprocxml
new file mode 100644
index 000000000..8e78fbab3
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/constructor.widlprocxml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[Constructor,
+ Constructor(float radius)]
+interface Circle {
+ attribute float r;
+ attribute float cx;
+ attribute float cy;
+ readonly attribute float circumference;
+};</webidl>
+ <Interface name="Circle" id="::Circle">
+ <webidl>[Constructor,
+ Constructor(float radius)]
+interface Circle {
+ attribute float r;
+ attribute float cx;
+ attribute float cy;
+ readonly attribute float circumference;
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor">
+ <webidl>Constructor</webidl>
+ </ExtendedAttribute>
+ <ExtendedAttribute name="Constructor">
+ <webidl> Constructor(float radius)</webidl>
+ <ArgumentList>
+ <Argument name="radius">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute name="r" id="::Circle::r">
+ <webidl> attribute float r;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="cx" id="::Circle::cx">
+ <webidl> attribute float cx;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="cy" id="::Circle::cy">
+ <webidl> attribute float cy;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="circumference" id="::Circle::circumference">
+ <webidl> readonly attribute float circumference;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/dictionary-inherits.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/dictionary-inherits.widlprocxml
new file mode 100644
index 000000000..269a83cd8
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/dictionary-inherits.widlprocxml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>dictionary PaintOptions {
+ DOMString? fillPattern = &quot;black&quot;;
+ DOMString? strokePattern = null;
+ <ref>Point</ref> position;
+};
+
+dictionary WetPaintOptions : <ref>PaintOptions</ref> {
+ float hydrometry;
+};</webidl>
+ <Dictionary name="PaintOptions" id="::PaintOptions">
+ <webidl>dictionary PaintOptions {
+ DOMString? fillPattern = &quot;black&quot;;
+ DOMString? strokePattern = null;
+ <ref>Point</ref> position;
+};</webidl>
+ <DictionaryMember name="fillPattern" stringvalue="black" id="::PaintOptions::fillPattern">
+ <webidl> DOMString? fillPattern = &quot;black&quot;;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </DictionaryMember>
+ <DictionaryMember name="strokePattern" value="null" id="::PaintOptions::strokePattern">
+ <webidl> DOMString? strokePattern = null;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </DictionaryMember>
+ <DictionaryMember name="position" id="::PaintOptions::position">
+ <webidl> <ref>Point</ref> position;</webidl>
+ <Type name="Point"/>
+ </DictionaryMember>
+ </Dictionary>
+ <Dictionary name="WetPaintOptions" id="::WetPaintOptions">
+ <webidl>dictionary WetPaintOptions : <ref>PaintOptions</ref> {
+ float hydrometry;
+};</webidl>
+ <DictionaryInheritance>
+ <Name name="PaintOptions"/>
+ </DictionaryInheritance>
+ <DictionaryMember name="hydrometry" id="::WetPaintOptions::hydrometry">
+ <webidl> float hydrometry;</webidl>
+ <Type type="float"/>
+ </DictionaryMember>
+ </Dictionary>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/dictionary.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/dictionary.widlprocxml
new file mode 100644
index 000000000..978ccb4e2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/dictionary.widlprocxml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>dictionary PaintOptions {
+ DOMString? fillPattern = &quot;black&quot;;
+ DOMString? strokePattern = null;
+ <ref>Point</ref> position;
+};
+
+partial dictionary A {
+ long h;
+ long d;
+};</webidl>
+ <Dictionary name="PaintOptions" id="::PaintOptions">
+ <webidl>dictionary PaintOptions {
+ DOMString? fillPattern = &quot;black&quot;;
+ DOMString? strokePattern = null;
+ <ref>Point</ref> position;
+};</webidl>
+ <DictionaryMember name="fillPattern" stringvalue="black" id="::PaintOptions::fillPattern">
+ <webidl> DOMString? fillPattern = &quot;black&quot;;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </DictionaryMember>
+ <DictionaryMember name="strokePattern" value="null" id="::PaintOptions::strokePattern">
+ <webidl> DOMString? strokePattern = null;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </DictionaryMember>
+ <DictionaryMember name="position" id="::PaintOptions::position">
+ <webidl> <ref>Point</ref> position;</webidl>
+ <Type name="Point"/>
+ </DictionaryMember>
+ </Dictionary>
+ <Dictionary name="A" partial="partial" id="::A">
+ <webidl>partial dictionary A {
+ long h;
+ long d;
+};</webidl>
+ <DictionaryMember name="h" id="::A::h">
+ <webidl> long h;</webidl>
+ <Type type="long"/>
+ </DictionaryMember>
+ <DictionaryMember name="d" id="::A::d">
+ <webidl> long d;</webidl>
+ <Type type="long"/>
+ </DictionaryMember>
+ </Dictionary>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/documentation-dos.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/documentation-dos.widlprocxml
new file mode 100644
index 000000000..1611f0e57
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/documentation-dos.widlprocxml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Documentation {};</webidl>
+ <Interface name="Documentation" id="::Documentation">
+ <webidl>interface Documentation {};</webidl>
+ <descriptive>
+ <brief>
+ Testing documentation features
+ </brief>
+ <description>
+ <p>
+This is a
+single paragraph
+ </p>
+ <p>
+This is valid. </p>
+ <p>
+This is <em>valid</em>. </p>
+ <p>
+This is <b>valid</b>. </p>
+ <p>
+This is <a href=''>valid</a>. </p>
+ <ul>
+ <li>
+This </li>
+ <li>
+is </li>
+ <li>
+valid </li>
+ </ul>
+ <dl>
+ <dt>
+This </dt>
+ <dd>
+valid </dd>
+ </dl>
+ <table>
+ <tr>
+ <td>
+this </td>
+ <td>
+is </td>
+ </tr>
+ <tr>
+ <td>
+valid </td>
+ </tr>
+ </table>
+ <p>
+This is <br/> valid. </p>
+ <p>
+This is <br /> valid. </p>
+ <p>
+This is <br/> valid. </p>
+ </description>
+ </descriptive>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/documentation.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/documentation.widlprocxml
new file mode 100644
index 000000000..afe4527c2
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/documentation.widlprocxml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Documentation {};</webidl>
+ <Interface name="Documentation" id="::Documentation">
+ <webidl>interface Documentation {};</webidl>
+ <descriptive>
+ <brief>
+ Testing documentation features
+ </brief>
+ <description>
+ <p>
+This is a
+single paragraph
+ </p>
+ <p>
+This is valid. </p>
+ <p>
+This is <em>valid</em>. </p>
+ <p>
+This is <b>valid</b>. </p>
+ <p>
+This is <a href=''>valid</a>. </p>
+ <ul>
+ <li>
+This </li>
+ <li>
+is </li>
+ <li>
+valid </li>
+ </ul>
+ <dl>
+ <dt>
+This </dt>
+ <dd>
+valid </dd>
+ </dl>
+ <table>
+ <tr>
+ <td>
+this </td>
+ <td>
+is </td>
+ </tr>
+ <tr>
+ <td>
+valid </td>
+ </tr>
+ </table>
+ <p>
+This is <br/> valid. </p>
+ <p>
+This is <br /> valid. </p>
+ <p>
+This is <br/> valid. </p>
+ <p>
+<img src="foo.png" alt="Valid"/> </p>
+ </description>
+ </descriptive>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/enum.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/enum.widlprocxml
new file mode 100644
index 000000000..e1e8258fb
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/enum.widlprocxml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>enum MealType { &quot;rice&quot;, &quot;noodles&quot;, &quot;other&quot; };
+
+interface Meal {
+ attribute <ref>MealType</ref> type;
+ attribute float size;
+
+ void initialize(<ref>MealType</ref> type, float size);
+};</webidl>
+ <Enum name="MealType" id="::MealType">
+ <webidl>enum MealType { &quot;rice&quot;, &quot;noodles&quot;, &quot;other&quot; };</webidl>
+ <EnumValue stringvalue="rice">
+ <webidl> &quot;rice</webidl>
+ </EnumValue>
+ <EnumValue stringvalue="noodles">
+ <webidl> &quot;noodles</webidl>
+ </EnumValue>
+ <EnumValue stringvalue="other">
+ <webidl> &quot;other</webidl>
+ </EnumValue>
+ </Enum>
+ <Interface name="Meal" id="::Meal">
+ <webidl>interface Meal {
+ attribute <ref>MealType</ref> type;
+ attribute float size;
+
+ void initialize(<ref>MealType</ref> type, float size);
+};</webidl>
+ <Attribute name="type" id="::Meal::type">
+ <webidl> attribute <ref>MealType</ref> type;</webidl>
+ <Type name="MealType"/>
+ </Attribute>
+ <Attribute name="size" id="::Meal::size">
+ <webidl> attribute float size;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Operation name="initialize" id="::Meal::initialize">
+ <webidl> void initialize(<ref>MealType</ref> type, float size);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="type">
+ <Type name="MealType"/>
+ </Argument>
+ <Argument name="size">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/equivalent-decl.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/equivalent-decl.widlprocxml
new file mode 100644
index 000000000..c322d0a5e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/equivalent-decl.widlprocxml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float getProperty(DOMString propertyName);
+ setter void setProperty(DOMString propertyName, float propertyValue);
+};
+
+
+interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ float getProperty(DOMString propertyName);
+ void setProperty(DOMString propertyName, float propertyValue);
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+};</webidl>
+ <Interface name="Dictionary" id="::Dictionary">
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float getProperty(DOMString propertyName);
+ setter void setProperty(DOMString propertyName, float propertyValue);
+};</webidl>
+ <Attribute readonly="readonly" name="propertyCount" id="::Dictionary::propertyCount">
+ <webidl> readonly attribute unsigned long propertyCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation getter="getter" name="getProperty" id="::Dictionary::getProperty">
+ <webidl> getter float getProperty(DOMString propertyName);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation setter="setter" name="setProperty" id="::Dictionary::setProperty">
+ <webidl> setter void setProperty(DOMString propertyName, float propertyValue);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="propertyValue">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ <Interface name="Dictionary" id="::Dictionary">
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ float getProperty(DOMString propertyName);
+ void setProperty(DOMString propertyName, float propertyValue);
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+};</webidl>
+ <Attribute readonly="readonly" name="propertyCount" id="::Dictionary::propertyCount">
+ <webidl> readonly attribute unsigned long propertyCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation name="getProperty" id="::Dictionary::getProperty">
+ <webidl> float getProperty(DOMString propertyName);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="setProperty" id="::Dictionary::setProperty">
+ <webidl> void setProperty(DOMString propertyName, float propertyValue);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="propertyValue">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation getter="getter">
+ <webidl> getter float (DOMString propertyName);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation setter="setter">
+ <webidl> setter void (DOMString propertyName, float propertyValue);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="propertyValue">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/exception-inheritance.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/exception-inheritance.widlprocxml
new file mode 100644
index 000000000..3a1f868a4
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/exception-inheritance.widlprocxml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl> exception DOMException {
+ unsigned short code;
+ };
+
+ exception HierarchyRequestError : <ref>DOMException</ref> { };
+ exception NoModificationAllowedError : <ref>DOMException</ref> { };</webidl>
+ <Exception name="DOMException" id="::DOMException">
+ <webidl> exception DOMException {
+ unsigned short code;
+ };</webidl>
+ <ExceptionField name="code" id="::DOMException::code">
+ <webidl> unsigned short code;</webidl>
+ <Type type="unsigned short"/>
+ </ExceptionField>
+ </Exception>
+ <Exception name="HierarchyRequestError" id="::HierarchyRequestError">
+ <webidl> exception HierarchyRequestError : <ref>DOMException</ref> { };</webidl>
+ <ExceptionInheritance>
+ <Name name="DOMException"/>
+ </ExceptionInheritance>
+ </Exception>
+ <Exception name="NoModificationAllowedError" id="::NoModificationAllowedError">
+ <webidl> exception NoModificationAllowedError : <ref>DOMException</ref> { };</webidl>
+ <ExceptionInheritance>
+ <Name name="DOMException"/>
+ </ExceptionInheritance>
+ </Exception>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/exception.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/exception.widlprocxml
new file mode 100644
index 000000000..ac93320fe
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/exception.widlprocxml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Dahut {
+ attribute DOMString type;
+};
+
+exception SomeException {
+};</webidl>
+ <Interface name="Dahut" id="::Dahut">
+ <webidl>interface Dahut {
+ attribute DOMString type;
+};</webidl>
+ <Attribute name="type" id="::Dahut::type">
+ <webidl> attribute DOMString type;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Exception name="SomeException" id="::SomeException">
+ <webidl>exception SomeException {
+};</webidl>
+ </Exception>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/getter-setter.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/getter-setter.widlprocxml
new file mode 100644
index 000000000..76afc058c
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/getter-setter.widlprocxml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+};</webidl>
+ <Interface name="Dictionary" id="::Dictionary">
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ getter float (DOMString propertyName);
+ setter void (DOMString propertyName, float propertyValue);
+};</webidl>
+ <Attribute readonly="readonly" name="propertyCount" id="::Dictionary::propertyCount">
+ <webidl> readonly attribute unsigned long propertyCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation getter="getter">
+ <webidl> getter float (DOMString propertyName);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation setter="setter">
+ <webidl> setter void (DOMString propertyName, float propertyValue);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="propertyValue">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/identifier-qualified-names.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/identifier-qualified-names.widlprocxml
new file mode 100644
index 000000000..b6024e5ff
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/identifier-qualified-names.widlprocxml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl> typedef float number;
+
+ exception FrameworkException {
+
+ const long ERR_NOT_FOUND = 1;
+
+ long code;
+ };
+
+ interface System {
+
+ object createObject(DOMString _interface);
+
+ getter DOMString (DOMString keyName);
+ };
+
+
+ interface TextField {
+
+ attribute boolean _const;
+
+ attribute DOMString? _value;
+ };
+
+interface Foo {
+ void op(object interface);
+};</webidl>
+ <Typedef name="number" id="::number">
+ <webidl> typedef float number;</webidl>
+ <Type type="float"/>
+ </Typedef>
+ <Exception name="FrameworkException" id="::FrameworkException">
+ <webidl> exception FrameworkException {
+
+ const long ERR_NOT_FOUND = 1;
+
+ long code;
+ };</webidl>
+ <Const name="ERR_NOT_FOUND" value="1" id="::FrameworkException::ERR_NOT_FOUND">
+ <webidl> const long ERR_NOT_FOUND = 1;</webidl>
+ <Type type="long"/>
+ </Const>
+ <ExceptionField name="code" id="::FrameworkException::code">
+ <webidl> long code;</webidl>
+ <Type type="long"/>
+ </ExceptionField>
+ </Exception>
+ <Interface name="System" id="::System">
+ <webidl> interface System {
+
+ object createObject(DOMString _interface);
+
+ getter DOMString (DOMString keyName);
+ };</webidl>
+ <Operation name="createObject" id="::System::createObject">
+ <webidl> object createObject(DOMString _interface);</webidl>
+ <Type type="object"/>
+ <ArgumentList>
+ <Argument name="_interface">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation getter="getter">
+ <webidl> getter DOMString (DOMString keyName);</webidl>
+ <Type type="DOMString"/>
+ <ArgumentList>
+ <Argument name="keyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ <Interface name="TextField" id="::TextField">
+ <webidl> interface TextField {
+
+ attribute boolean _const;
+
+ attribute DOMString? _value;
+ };</webidl>
+ <Attribute name="_const" id="::TextField::_const">
+ <webidl> attribute boolean _const;</webidl>
+ <Type type="boolean"/>
+ </Attribute>
+ <Attribute name="_value" id="::TextField::_value">
+ <webidl> attribute DOMString? _value;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Foo" id="::Foo">
+ <webidl>interface Foo {
+ void op(object interface);
+};</webidl>
+ <Operation name="op" id="::Foo::op">
+ <webidl> void op(object interface);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="interface">
+ <Type type="object"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/implements.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/implements.widlprocxml
new file mode 100644
index 000000000..3d1c1ab84
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/implements.widlprocxml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl> interface Node {
+ readonly attribute unsigned short nodeType;
+ };
+
+ interface EventTarget {
+ void addEventListener(DOMString type,
+ <ref>EventListener</ref> listener,
+ boolean useCapture);
+ };
+
+ <ref>Node</ref> implements <ref>EventTarget</ref>;</webidl>
+ <Interface name="Node" id="::Node">
+ <webidl> interface Node {
+ readonly attribute unsigned short nodeType;
+ };</webidl>
+ <Attribute readonly="readonly" name="nodeType" id="::Node::nodeType">
+ <webidl> readonly attribute unsigned short nodeType;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ </Interface>
+ <Interface name="EventTarget" id="::EventTarget">
+ <webidl> interface EventTarget {
+ void addEventListener(DOMString type,
+ <ref>EventListener</ref> listener,
+ boolean useCapture);
+ };</webidl>
+ <Operation name="addEventListener" id="::EventTarget::addEventListener">
+ <webidl> void addEventListener(DOMString type,
+ <ref>EventListener</ref> listener,
+ boolean useCapture);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="type">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="listener">
+ <Type name="EventListener"/>
+ </Argument>
+ <Argument name="useCapture">
+ <Type type="boolean"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ <Implements name1="Node" name2="EventTarget">
+ <webidl> <ref>Node</ref> implements <ref>EventTarget</ref>;</webidl>
+ </Implements>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/indexed-properties.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/indexed-properties.widlprocxml
new file mode 100644
index 000000000..fb83621b6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/indexed-properties.widlprocxml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface OrderedMap {
+ readonly attribute unsigned long size;
+
+ getter any getByIndex(unsigned long index);
+ setter void setByIndex(unsigned long index, any value);
+ deleter void removeByIndex(unsigned long index);
+
+ getter any get(DOMString name);
+ setter creator void set(DOMString name, any value);
+ deleter void remove(DOMString name);
+};</webidl>
+ <Interface name="OrderedMap" id="::OrderedMap">
+ <webidl>interface OrderedMap {
+ readonly attribute unsigned long size;
+
+ getter any getByIndex(unsigned long index);
+ setter void setByIndex(unsigned long index, any value);
+ deleter void removeByIndex(unsigned long index);
+
+ getter any get(DOMString name);
+ setter creator void set(DOMString name, any value);
+ deleter void remove(DOMString name);
+};</webidl>
+ <Attribute readonly="readonly" name="size" id="::OrderedMap::size">
+ <webidl> readonly attribute unsigned long size;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation getter="getter" name="getByIndex" id="::OrderedMap::getByIndex">
+ <webidl> getter any getByIndex(unsigned long index);</webidl>
+ <Type type="any"/>
+ <ArgumentList>
+ <Argument name="index">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation setter="setter" name="setByIndex" id="::OrderedMap::setByIndex">
+ <webidl> setter void setByIndex(unsigned long index, any value);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="index">
+ <Type type="unsigned long"/>
+ </Argument>
+ <Argument name="value">
+ <Type type="any"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation deleter="deleter" name="removeByIndex" id="::OrderedMap::removeByIndex">
+ <webidl> deleter void removeByIndex(unsigned long index);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="index">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation getter="getter" name="get" id="::OrderedMap::get">
+ <webidl> getter any get(DOMString name);</webidl>
+ <Type type="any"/>
+ <ArgumentList>
+ <Argument name="name">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation setter="setter" creator="creator" name="set" id="::OrderedMap::set">
+ <webidl> setter creator void set(DOMString name, any value);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="name">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="value">
+ <Type type="any"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation deleter="deleter" name="remove" id="::OrderedMap::remove">
+ <webidl> deleter void remove(DOMString name);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="name">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/inherits-getter.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/inherits-getter.widlprocxml
new file mode 100644
index 000000000..55e7a317f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/inherits-getter.widlprocxml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Animal {
+
+ readonly attribute DOMString name;
+};
+
+interface Person : <ref>Animal</ref> {
+
+ readonly attribute unsigned short age;
+
+ inherit attribute DOMString name;
+};</webidl>
+ <Interface name="Animal" id="::Animal">
+ <webidl>interface Animal {
+
+ readonly attribute DOMString name;
+};</webidl>
+ <Attribute readonly="readonly" name="name" id="::Animal::name">
+ <webidl> readonly attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Person" id="::Person">
+ <webidl>interface Person : <ref>Animal</ref> {
+
+ readonly attribute unsigned short age;
+
+ inherit attribute DOMString name;
+};</webidl>
+ <InterfaceInheritance>
+ <Name name="Animal"/>
+ </InterfaceInheritance>
+ <Attribute readonly="readonly" name="age" id="::Person::age">
+ <webidl> readonly attribute unsigned short age;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ <Attribute inherit="inherit" name="name" id="::Person::name">
+ <webidl> inherit attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/interface-inherits.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/interface-inherits.widlprocxml
new file mode 100644
index 000000000..94f0e29df
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/interface-inherits.widlprocxml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Animal {
+ attribute DOMString name;
+};
+
+interface Human : <ref>Animal</ref> {
+ attribute <ref>Dog</ref> pet;
+};
+
+interface Dog : <ref>Animal</ref> {
+ attribute <ref>Human</ref> owner;
+};</webidl>
+ <Interface name="Animal" id="::Animal">
+ <webidl>interface Animal {
+ attribute DOMString name;
+};</webidl>
+ <Attribute name="name" id="::Animal::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Human" id="::Human">
+ <webidl>interface Human : <ref>Animal</ref> {
+ attribute <ref>Dog</ref> pet;
+};</webidl>
+ <InterfaceInheritance>
+ <Name name="Animal"/>
+ </InterfaceInheritance>
+ <Attribute name="pet" id="::Human::pet">
+ <webidl> attribute <ref>Dog</ref> pet;</webidl>
+ <Type name="Dog"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Dog" id="::Dog">
+ <webidl>interface Dog : <ref>Animal</ref> {
+ attribute <ref>Human</ref> owner;
+};</webidl>
+ <InterfaceInheritance>
+ <Name name="Animal"/>
+ </InterfaceInheritance>
+ <Attribute name="owner" id="::Dog::owner">
+ <webidl> attribute <ref>Human</ref> owner;</webidl>
+ <Type name="Human"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/iterator.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/iterator.widlprocxml
new file mode 100644
index 000000000..8ca95fbbd
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/iterator.widlprocxml
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface SessionManager {
+ <ref>Session</ref> getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ <ref>Session</ref> iterator;
+};
+
+interface Session {
+ readonly attribute DOMString username;
+};
+
+interface SessionManager2 {
+ <ref>Session2</ref> getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ <ref>Session2</ref> iterator = SessionIterator;
+};
+
+interface Session2 {
+ readonly attribute DOMString username;
+};
+
+interface SessionIterator {
+ readonly attribute unsigned long remainingSessions;
+};
+
+ interface NodeList {
+ <ref>Node</ref> iterator = NodeIterator;
+ };
+
+ interface NodeIterator {
+ <ref>Node</ref> iterator object;
+ };</webidl>
+ <Interface name="SessionManager" id="::SessionManager">
+ <webidl>interface SessionManager {
+ <ref>Session</ref> getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ <ref>Session</ref> iterator;
+};</webidl>
+ <Operation name="getSessionForUser" id="::SessionManager::getSessionForUser">
+ <webidl> <ref>Session</ref> getSessionForUser(DOMString username);</webidl>
+ <Type name="Session"/>
+ <ArgumentList>
+ <Argument name="username">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Attribute readonly="readonly" name="sessionCount" id="::SessionManager::sessionCount">
+ <webidl> readonly attribute unsigned long sessionCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Iterator>
+ <webidl> <ref>Session</ref> iterator;</webidl>
+ <Type name="Session"/>
+ </Iterator>
+ </Interface>
+ <Interface name="Session" id="::Session">
+ <webidl>interface Session {
+ readonly attribute DOMString username;
+};</webidl>
+ <Attribute readonly="readonly" name="username" id="::Session::username">
+ <webidl> readonly attribute DOMString username;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Interface name="SessionManager2" id="::SessionManager2">
+ <webidl>interface SessionManager2 {
+ <ref>Session2</ref> getSessionForUser(DOMString username);
+ readonly attribute unsigned long sessionCount;
+
+ <ref>Session2</ref> iterator = SessionIterator;
+};</webidl>
+ <Operation name="getSessionForUser" id="::SessionManager2::getSessionForUser">
+ <webidl> <ref>Session2</ref> getSessionForUser(DOMString username);</webidl>
+ <Type name="Session2"/>
+ <ArgumentList>
+ <Argument name="username">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Attribute readonly="readonly" name="sessionCount" id="::SessionManager2::sessionCount">
+ <webidl> readonly attribute unsigned long sessionCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Iterator interface="SessionIterator">
+ <webidl> <ref>Session2</ref> iterator = SessionIterator;</webidl>
+ <Type name="Session2"/>
+ </Iterator>
+ </Interface>
+ <Interface name="Session2" id="::Session2">
+ <webidl>interface Session2 {
+ readonly attribute DOMString username;
+};</webidl>
+ <Attribute readonly="readonly" name="username" id="::Session2::username">
+ <webidl> readonly attribute DOMString username;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Interface name="SessionIterator" id="::SessionIterator">
+ <webidl>interface SessionIterator {
+ readonly attribute unsigned long remainingSessions;
+};</webidl>
+ <Attribute readonly="readonly" name="remainingSessions" id="::SessionIterator::remainingSessions">
+ <webidl> readonly attribute unsigned long remainingSessions;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ </Interface>
+ <Interface name="NodeList" id="::NodeList">
+ <webidl> interface NodeList {
+ <ref>Node</ref> iterator = NodeIterator;
+ };</webidl>
+ <Iterator interface="NodeIterator">
+ <webidl> <ref>Node</ref> iterator = NodeIterator;</webidl>
+ <Type name="Node"/>
+ </Iterator>
+ </Interface>
+ <Interface name="NodeIterator" id="::NodeIterator">
+ <webidl> interface NodeIterator {
+ <ref>Node</ref> iterator object;
+ };</webidl>
+ <IteratorObject>
+ <webidl> <ref>Node</ref> iterator object;</webidl>
+ <Type name="Node"/>
+ </IteratorObject>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/module.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/module.widlprocxml
new file mode 100644
index 000000000..b575b8705
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/module.widlprocxml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <Module name="gfx" id="::gfx">
+ <webidl>module gfx {
+
+ module geom {
+ interface Shape { };
+ interface Rectangle : <ref>Shape</ref> { };
+ interface Path : <ref>Shape</ref> { };
+ };
+
+ interface GraphicsContext {
+ void fillShape(<ref>geom::Shape</ref> s);
+ void strokeShape(<ref>geom::Shape</ref> s);
+ };
+};</webidl>
+ <Module name="geom" id="::gfx::geom">
+ <webidl> module geom {
+ interface Shape { };
+ interface Rectangle : <ref>Shape</ref> { };
+ interface Path : <ref>Shape</ref> { };
+ };</webidl>
+ <Interface name="Shape" id="::gfx::geom::Shape">
+ <webidl> interface Shape { };</webidl>
+ </Interface>
+ <Interface name="Rectangle" id="::gfx::geom::Rectangle">
+ <webidl> interface Rectangle : <ref>Shape</ref> { };</webidl>
+ <InterfaceInheritance>
+ <Name name="Shape"/>
+ </InterfaceInheritance>
+ </Interface>
+ <Interface name="Path" id="::gfx::geom::Path">
+ <webidl> interface Path : <ref>Shape</ref> { };</webidl>
+ <InterfaceInheritance>
+ <Name name="Shape"/>
+ </InterfaceInheritance>
+ </Interface>
+ </Module>
+ <Interface name="GraphicsContext" id="::gfx::GraphicsContext">
+ <webidl> interface GraphicsContext {
+ void fillShape(<ref>geom::Shape</ref> s);
+ void strokeShape(<ref>geom::Shape</ref> s);
+ };</webidl>
+ <Operation name="fillShape" id="::gfx::GraphicsContext::fillShape">
+ <webidl> void fillShape(<ref>geom::Shape</ref> s);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="s">
+ <Type name="geom::Shape"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="strokeShape" id="::gfx::GraphicsContext::strokeShape">
+ <webidl> void strokeShape(<ref>geom::Shape</ref> s);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="s">
+ <Type name="geom::Shape"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ </Module>
+ <Module name="gui" id="::gui">
+ <webidl>module gui {
+
+ interface Widget { };
+
+ interface Window : <ref>Widget</ref> {
+ <ref>gfx::GraphicsContext</ref> getGraphicsContext();
+ };
+
+ interface Button : <ref>Widget</ref> { };
+};</webidl>
+ <Interface name="Widget" id="::gui::Widget">
+ <webidl> interface Widget { };</webidl>
+ </Interface>
+ <Interface name="Window" id="::gui::Window">
+ <webidl> interface Window : <ref>Widget</ref> {
+ <ref>gfx::GraphicsContext</ref> getGraphicsContext();
+ };</webidl>
+ <InterfaceInheritance>
+ <Name name="Widget"/>
+ </InterfaceInheritance>
+ <Operation name="getGraphicsContext" id="::gui::Window::getGraphicsContext">
+ <webidl> <ref>gfx::GraphicsContext</ref> getGraphicsContext();</webidl>
+ <Type name="gfx::GraphicsContext"/>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+ <Interface name="Button" id="::gui::Button">
+ <webidl> interface Button : <ref>Widget</ref> { };</webidl>
+ <InterfaceInheritance>
+ <Name name="Widget"/>
+ </InterfaceInheritance>
+ </Interface>
+ </Module>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/namedconstructor.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/namedconstructor.widlprocxml
new file mode 100644
index 000000000..9f6616128
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/namedconstructor.widlprocxml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[NamedConstructor=Audio,
+ NamedConstructor=Audio(DOMString src)]
+interface HTMLAudioElement : <ref>HTMLMediaElement</ref> {
+};</webidl>
+ <Interface name="HTMLAudioElement" id="::HTMLAudioElement">
+ <webidl>[NamedConstructor=Audio,
+ NamedConstructor=Audio(DOMString src)]
+interface HTMLAudioElement : <ref>HTMLMediaElement</ref> {
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="NamedConstructor" value="Audio">
+ <webidl>NamedConstructor</webidl>
+ </ExtendedAttribute>
+ <ExtendedAttribute name="NamedConstructor" value="Audio">
+ <webidl> NamedConstructor=Audio(DOMString src)</webidl>
+ <ArgumentList>
+ <Argument name="src">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <InterfaceInheritance>
+ <Name name="HTMLMediaElement"/>
+ </InterfaceInheritance>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/namespaceobject.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/namespaceobject.widlprocxml
new file mode 100644
index 000000000..af0cde937
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/namespaceobject.widlprocxml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <Module name="acme" id="::acme">
+ <webidl>[NamespaceObject]
+module acme {
+
+ exception DeviceException { };
+
+ module pim {
+
+ [Constructor]
+ interface Contact { };
+
+ [Constructor,
+ NamedConstructor=RecurringEvent(long freq)]
+ interface CalendarEvent { };
+ };
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="NamespaceObject"/>
+ </ExtendedAttributeList>
+ <Exception name="DeviceException" id="::acme::DeviceException">
+ <webidl> exception DeviceException { };</webidl>
+ </Exception>
+ <Module name="pim" id="::acme::pim">
+ <webidl> module pim {
+
+ [Constructor]
+ interface Contact { };
+
+ [Constructor,
+ NamedConstructor=RecurringEvent(long freq)]
+ interface CalendarEvent { };
+ };</webidl>
+ <Interface name="Contact" id="::acme::pim::Contact">
+ <webidl> [Constructor]
+ interface Contact { };</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor"/>
+ </ExtendedAttributeList>
+ </Interface>
+ <Interface name="CalendarEvent" id="::acme::pim::CalendarEvent">
+ <webidl> [Constructor,
+ NamedConstructor=RecurringEvent(long freq)]
+ interface CalendarEvent { };</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor"/>
+ <ExtendedAttribute name="NamedConstructor" value="RecurringEvent">
+ <ArgumentList>
+ <Argument name="freq">
+ <Type type="long"/>
+ </Argument>
+ </ArgumentList>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ </Interface>
+ </Module>
+ </Module>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/nointerfaceobject.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/nointerfaceobject.widlprocxml
new file mode 100644
index 000000000..f64f116b6
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/nointerfaceobject.widlprocxml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[NoInterfaceObject]
+interface Query {
+ any lookupEntry(unsigned long key);
+};</webidl>
+ <Interface name="Query" id="::Query">
+ <webidl>[NoInterfaceObject]
+interface Query {
+ any lookupEntry(unsigned long key);
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="NoInterfaceObject">
+ <webidl>NoInterfaceObject</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Operation name="lookupEntry" id="::Query::lookupEntry">
+ <webidl> any lookupEntry(unsigned long key);</webidl>
+ <Type type="any"/>
+ <ArgumentList>
+ <Argument name="key">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/nullable.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/nullable.widlprocxml
new file mode 100644
index 000000000..8739e4432
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/nullable.widlprocxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface MyConstants {
+ const boolean? ARE_WE_THERE_YET = false;
+};
+
+interface Node {
+ readonly attribute DOMString? namespaceURI;
+};</webidl>
+ <Interface name="MyConstants" id="::MyConstants">
+ <webidl>interface MyConstants {
+ const boolean? ARE_WE_THERE_YET = false;
+};</webidl>
+ <Const name="ARE_WE_THERE_YET" value="false" id="::MyConstants::ARE_WE_THERE_YET">
+ <webidl> const boolean? ARE_WE_THERE_YET = false;</webidl>
+ <Type type="boolean" nullable="nullable"/>
+ </Const>
+ </Interface>
+ <Interface name="Node" id="::Node">
+ <webidl>interface Node {
+ readonly attribute DOMString? namespaceURI;
+};</webidl>
+ <Attribute readonly="readonly" name="namespaceURI" id="::Node::namespaceURI">
+ <webidl> readonly attribute DOMString? namespaceURI;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/nullableobjects.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/nullableobjects.widlprocxml
new file mode 100644
index 000000000..22d9fdd25
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/nullableobjects.widlprocxml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface A {
+};
+interface B {
+};
+interface C {
+ void f(<ref>A</ref>? x);
+ void f(<ref>B</ref>? x);
+
+};</webidl>
+ <Interface name="A" id="::A">
+ <webidl>interface A {
+};</webidl>
+ </Interface>
+ <Interface name="B" id="::B">
+ <webidl>interface B {
+};</webidl>
+ </Interface>
+ <Interface name="C" id="::C">
+ <webidl>interface C {
+ void f(<ref>A</ref>? x);
+ void f(<ref>B</ref>? x);
+
+};</webidl>
+ <Operation name="f" id="::C::f">
+ <webidl> void f(<ref>A</ref>? x);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="x">
+ <Type name="A" nullable="nullable"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="f" id="::C::f">
+ <webidl> void f(<ref>B</ref>? x);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="x">
+ <Type name="B" nullable="nullable"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/operation-optional-arg.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/operation-optional-arg.widlprocxml
new file mode 100644
index 000000000..54aef1f87
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/operation-optional-arg.widlprocxml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface ColorCreator {
+ object createColor(float v1, float v2, float v3, optional float alpha = 3.5);
+};</webidl>
+ <Interface name="ColorCreator" id="::ColorCreator">
+ <webidl>interface ColorCreator {
+ object createColor(float v1, float v2, float v3, optional float alpha = 3.5);
+};</webidl>
+ <Operation name="createColor" id="::ColorCreator::createColor">
+ <webidl> object createColor(float v1, float v2, float v3, optional float alpha = 3.5);</webidl>
+ <Type type="object"/>
+ <ArgumentList>
+ <Argument name="v1">
+ <Type type="float"/>
+ </Argument>
+ <Argument name="v2">
+ <Type type="float"/>
+ </Argument>
+ <Argument name="v3">
+ <Type type="float"/>
+ </Argument>
+ <Argument optional="optional" name="alpha" value="3.5">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/overloading.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/overloading.widlprocxml
new file mode 100644
index 000000000..db6da7a68
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/overloading.widlprocxml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface A {
+};
+
+interface B {
+};
+
+interface C {
+ void f(<ref>A</ref> x);
+ void f(<ref>B</ref> x);
+};
+
+interface A {
+void f(DOMString a);
+void f([AllowAny] DOMString a, DOMString b, float... c);
+void f();
+void f(long a, DOMString b, optional DOMString c, float... d);
+};</webidl>
+ <Interface name="A" id="::A">
+ <webidl>interface A {
+};</webidl>
+ </Interface>
+ <Interface name="B" id="::B">
+ <webidl>interface B {
+};</webidl>
+ </Interface>
+ <Interface name="C" id="::C">
+ <webidl>interface C {
+ void f(<ref>A</ref> x);
+ void f(<ref>B</ref> x);
+};</webidl>
+ <Operation name="f" id="::C::f">
+ <webidl> void f(<ref>A</ref> x);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="x">
+ <Type name="A"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="f" id="::C::f">
+ <webidl> void f(<ref>B</ref> x);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="x">
+ <Type name="B"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ <Interface name="A" id="::A">
+ <webidl>interface A {
+void f(DOMString a);
+void f([AllowAny] DOMString a, DOMString b, float... c);
+void f();
+void f(long a, DOMString b, optional DOMString c, float... d);
+};</webidl>
+ <Operation name="f" id="::A::f">
+ <webidl> void f(DOMString a);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="a">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="f" id="::A::f">
+ <webidl> void f([AllowAny] DOMString a, DOMString b, float... c);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="a">
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="AllowAny">
+ <webidl>AllowAny</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="b">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument ellipsis="ellipsis" name="c">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="f" id="::A::f">
+ <webidl> void f();</webidl>
+ <Type type="void"/>
+ <ArgumentList/>
+ </Operation>
+ <Operation name="f" id="::A::f">
+ <webidl> void f(long a, DOMString b, optional DOMString c, float... d);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="a">
+ <Type type="long"/>
+ </Argument>
+ <Argument name="b">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument optional="optional" name="c">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument ellipsis="ellipsis" name="d">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/overridebuiltins.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/overridebuiltins.widlprocxml
new file mode 100644
index 000000000..56c92517b
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/overridebuiltins.widlprocxml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[OverrideBuiltins]
+interface StringMap2 {
+ readonly attribute unsigned long length;
+ getter DOMString lookup(DOMString key);
+};</webidl>
+ <Interface name="StringMap2" id="::StringMap2">
+ <webidl>[OverrideBuiltins]
+interface StringMap2 {
+ readonly attribute unsigned long length;
+ getter DOMString lookup(DOMString key);
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="OverrideBuiltins">
+ <webidl>OverrideBuiltins</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute readonly="readonly" name="length" id="::StringMap2::length">
+ <webidl> readonly attribute unsigned long length;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation getter="getter" name="lookup" id="::StringMap2::lookup">
+ <webidl> getter DOMString lookup(DOMString key);</webidl>
+ <Type type="DOMString"/>
+ <ArgumentList>
+ <Argument name="key">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/partial-interface.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/partial-interface.widlprocxml
new file mode 100644
index 000000000..8d7dcb4e4
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/partial-interface.widlprocxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Foo {
+ attribute DOMString bar;
+};
+
+partial interface Foo {
+ attribute DOMString quux;
+};</webidl>
+ <Interface name="Foo" id="::Foo">
+ <webidl>interface Foo {
+ attribute DOMString bar;
+};</webidl>
+ <Attribute name="bar" id="::Foo::bar">
+ <webidl> attribute DOMString bar;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Foo" partial="partial" id="::Foo">
+ <webidl>partial interface Foo {
+ attribute DOMString quux;
+};</webidl>
+ <Attribute name="quux" id="::Foo::quux">
+ <webidl> attribute DOMString quux;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/primitives.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/primitives.widlprocxml
new file mode 100644
index 000000000..46977a2d7
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/primitives.widlprocxml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Primitives {
+ attribute boolean truth;
+ attribute byte character;
+ attribute octet value;
+ attribute short number;
+ attribute unsigned short positive;
+ attribute long big;
+ attribute unsigned long bigpositive;
+ attribute long long bigbig;
+ attribute unsigned long long bigbigpositive;
+ attribute float real;
+ attribute double bigreal;
+ attribute unrestricted float realwithinfinity;
+ attribute unrestricted double bigrealwithinfinity;
+ attribute DOMString string;
+ attribute ByteString bytes;
+ attribute Date date;
+ attribute RegExp regexp;
+};</webidl>
+ <Interface name="Primitives" id="::Primitives">
+ <webidl>interface Primitives {
+ attribute boolean truth;
+ attribute byte character;
+ attribute octet value;
+ attribute short number;
+ attribute unsigned short positive;
+ attribute long big;
+ attribute unsigned long bigpositive;
+ attribute long long bigbig;
+ attribute unsigned long long bigbigpositive;
+ attribute float real;
+ attribute double bigreal;
+ attribute unrestricted float realwithinfinity;
+ attribute unrestricted double bigrealwithinfinity;
+ attribute DOMString string;
+ attribute ByteString bytes;
+ attribute Date date;
+ attribute RegExp regexp;
+};</webidl>
+ <Attribute name="truth" id="::Primitives::truth">
+ <webidl> attribute boolean truth;</webidl>
+ <Type type="boolean"/>
+ </Attribute>
+ <Attribute name="character" id="::Primitives::character">
+ <webidl> attribute byte character;</webidl>
+ <Type type="byte"/>
+ </Attribute>
+ <Attribute name="value" id="::Primitives::value">
+ <webidl> attribute octet value;</webidl>
+ <Type type="octet"/>
+ </Attribute>
+ <Attribute name="number" id="::Primitives::number">
+ <webidl> attribute short number;</webidl>
+ <Type type="short"/>
+ </Attribute>
+ <Attribute name="positive" id="::Primitives::positive">
+ <webidl> attribute unsigned short positive;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ <Attribute name="big" id="::Primitives::big">
+ <webidl> attribute long big;</webidl>
+ <Type type="long"/>
+ </Attribute>
+ <Attribute name="bigpositive" id="::Primitives::bigpositive">
+ <webidl> attribute unsigned long bigpositive;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Attribute name="bigbig" id="::Primitives::bigbig">
+ <webidl> attribute long long bigbig;</webidl>
+ <Type type="long long"/>
+ </Attribute>
+ <Attribute name="bigbigpositive" id="::Primitives::bigbigpositive">
+ <webidl> attribute unsigned long long bigbigpositive;</webidl>
+ <Type type="unsigned long long"/>
+ </Attribute>
+ <Attribute name="real" id="::Primitives::real">
+ <webidl> attribute float real;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="bigreal" id="::Primitives::bigreal">
+ <webidl> attribute double bigreal;</webidl>
+ <Type type="double"/>
+ </Attribute>
+ <Attribute name="realwithinfinity" id="::Primitives::realwithinfinity">
+ <webidl> attribute unrestricted float realwithinfinity;</webidl>
+ <Type type="unrestricted float"/>
+ </Attribute>
+ <Attribute name="bigrealwithinfinity" id="::Primitives::bigrealwithinfinity">
+ <webidl> attribute unrestricted double bigrealwithinfinity;</webidl>
+ <Type type="unrestricted double"/>
+ </Attribute>
+ <Attribute name="string" id="::Primitives::string">
+ <webidl> attribute DOMString string;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="bytes" id="::Primitives::bytes">
+ <webidl> attribute ByteString bytes;</webidl>
+ <Type type="ByteString"/>
+ </Attribute>
+ <Attribute name="date" id="::Primitives::date">
+ <webidl> attribute Date date;</webidl>
+ <Type type="Date"/>
+ </Attribute>
+ <Attribute name="regexp" id="::Primitives::regexp">
+ <webidl> attribute RegExp regexp;</webidl>
+ <Type type="RegExp"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/prototyperoot.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/prototyperoot.widlprocxml
new file mode 100644
index 000000000..2e56cd75e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/prototyperoot.widlprocxml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[PrototypeRoot]
+interface Node {
+ readonly attribute unsigned short nodeType;
+};</webidl>
+ <Interface name="Node" id="::Node">
+ <webidl>[PrototypeRoot]
+interface Node {
+ readonly attribute unsigned short nodeType;
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="PrototypeRoot">
+ <webidl>PrototypeRoot</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute readonly="readonly" name="nodeType" id="::Node::nodeType">
+ <webidl> readonly attribute unsigned short nodeType;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/putforwards.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/putforwards.widlprocxml
new file mode 100644
index 000000000..634fad55a
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/putforwards.widlprocxml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Person {
+ [PutForwards=full] readonly attribute <ref>Name</ref> name;
+ attribute unsigned short age;
+};</webidl>
+ <Interface name="Person" id="::Person">
+ <webidl>interface Person {
+ [PutForwards=full] readonly attribute <ref>Name</ref> name;
+ attribute unsigned short age;
+};</webidl>
+ <Attribute readonly="readonly" name="name" id="::Person::name">
+ <webidl> [PutForwards=full] readonly attribute <ref>Name</ref> name;</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="PutForwards" value="full">
+ <webidl>PutForwards</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type name="Name"/>
+ </Attribute>
+ <Attribute name="age" id="::Person::age">
+ <webidl> attribute unsigned short age;</webidl>
+ <Type type="unsigned short"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/reg-operations.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/reg-operations.widlprocxml
new file mode 100644
index 000000000..3b756ed68
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/reg-operations.widlprocxml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Dimensions {
+ attribute unsigned long width;
+ attribute unsigned long height;
+};
+
+exception NoPointerDevice { };
+
+interface Button {
+
+ boolean isMouseOver();
+
+ void setDimensions(<ref>Dimensions</ref> size);
+ void setDimensions(unsigned long width, unsigned long height);
+};</webidl>
+ <Interface name="Dimensions" id="::Dimensions">
+ <webidl>interface Dimensions {
+ attribute unsigned long width;
+ attribute unsigned long height;
+};</webidl>
+ <Attribute name="width" id="::Dimensions::width">
+ <webidl> attribute unsigned long width;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Attribute name="height" id="::Dimensions::height">
+ <webidl> attribute unsigned long height;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ </Interface>
+ <Exception name="NoPointerDevice" id="::NoPointerDevice">
+ <webidl>exception NoPointerDevice { };</webidl>
+ </Exception>
+ <Interface name="Button" id="::Button">
+ <webidl>interface Button {
+
+ boolean isMouseOver();
+
+ void setDimensions(<ref>Dimensions</ref> size);
+ void setDimensions(unsigned long width, unsigned long height);
+};</webidl>
+ <Operation name="isMouseOver" id="::Button::isMouseOver">
+ <webidl> boolean isMouseOver();</webidl>
+ <Type type="boolean"/>
+ <ArgumentList/>
+ </Operation>
+ <Operation name="setDimensions" id="::Button::setDimensions">
+ <webidl> void setDimensions(<ref>Dimensions</ref> size);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="size">
+ <Type name="Dimensions"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="setDimensions" id="::Button::setDimensions">
+ <webidl> void setDimensions(unsigned long width, unsigned long height);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="width">
+ <Type type="unsigned long"/>
+ </Argument>
+ <Argument name="height">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/replaceable.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/replaceable.widlprocxml
new file mode 100644
index 000000000..f97621668
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/replaceable.widlprocxml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Counter {
+ [Replaceable] readonly attribute unsigned long value;
+ void increment();
+};</webidl>
+ <Interface name="Counter" id="::Counter">
+ <webidl>interface Counter {
+ [Replaceable] readonly attribute unsigned long value;
+ void increment();
+};</webidl>
+ <Attribute readonly="readonly" name="value" id="::Counter::value">
+ <webidl> [Replaceable] readonly attribute unsigned long value;</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Replaceable">
+ <webidl>Replaceable</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation name="increment" id="::Counter::increment">
+ <webidl> void increment();</webidl>
+ <Type type="void"/>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/sequence.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/sequence.widlprocxml
new file mode 100644
index 000000000..d5f456417
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/sequence.widlprocxml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Canvas {
+ void drawPolygon(sequence&lt;float> coordinates);
+ sequence&lt;float> getInflectionPoints();
+};</webidl>
+ <Interface name="Canvas" id="::Canvas">
+ <webidl>interface Canvas {
+ void drawPolygon(sequence&lt;float> coordinates);
+ sequence&lt;float> getInflectionPoints();
+};</webidl>
+ <Operation name="drawPolygon" id="::Canvas::drawPolygon">
+ <webidl> void drawPolygon(sequence&lt;float> coordinates);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="coordinates">
+ <Type type="sequence">
+ <Type type="float"/>
+ </Type>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="getInflectionPoints" id="::Canvas::getInflectionPoints">
+ <webidl> sequence&lt;float> getInflectionPoints();</webidl>
+ <Type type="sequence">
+ <Type type="float"/>
+ </Type>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/serializer.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/serializer.widlprocxml
new file mode 100644
index 000000000..eb4219f8a
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/serializer.widlprocxml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Transaction {
+ readonly attribute <ref>Account</ref> from;
+ readonly attribute <ref>Account</ref> to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer;
+};
+
+interface Account {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer DOMString serialize();
+};
+
+interface Transaction2 {
+ readonly attribute <ref>Account2</ref> from;
+ readonly attribute <ref>Account2</ref> to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer = { from, to, amount, description };
+};
+
+interface Account2 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = number;
+};
+
+interface Account3 {
+ attribute DOMString name;
+ attribute unsigned long number;
+
+ serializer = { attribute };
+};
+
+interface Account4 {
+ getter object getItem(unsigned long index);
+ serializer = { getter };
+};
+
+interface Account5 : <ref>Account</ref> {
+ attribute DOMString secondname;
+ serializer = { inherit, secondname };
+};
+
+interface Account6 : <ref>Account</ref> {
+ attribute DOMString secondname;
+ serializer = { inherit, attribute };
+};
+
+interface Account7 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = [ name, number ];
+};
+
+interface Account8 {
+ getter object getItem(unsigned long index);
+ serializer = [ getter ];
+};</webidl>
+ <Interface name="Transaction" id="::Transaction">
+ <webidl>interface Transaction {
+ readonly attribute <ref>Account</ref> from;
+ readonly attribute <ref>Account</ref> to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer;
+};</webidl>
+ <Attribute readonly="readonly" name="from" id="::Transaction::from">
+ <webidl> readonly attribute <ref>Account</ref> from;</webidl>
+ <Type name="Account"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="to" id="::Transaction::to">
+ <webidl> readonly attribute <ref>Account</ref> to;</webidl>
+ <Type name="Account"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="amount" id="::Transaction::amount">
+ <webidl> readonly attribute float amount;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="description" id="::Transaction::description">
+ <webidl> readonly attribute DOMString description;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="number" id="::Transaction::number">
+ <webidl> readonly attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer;</webidl>
+ </Serializer>
+ </Interface>
+ <Interface name="Account" id="::Account">
+ <webidl>interface Account {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer DOMString serialize();
+};</webidl>
+ <Attribute name="name" id="::Account::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="number" id="::Account::number">
+ <webidl> attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation serializer="serializer" name="serialize" id="::Account::serialize">
+ <webidl> serializer DOMString serialize();</webidl>
+ <Type type="DOMString"/>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+ <Interface name="Transaction2" id="::Transaction2">
+ <webidl>interface Transaction2 {
+ readonly attribute <ref>Account2</ref> from;
+ readonly attribute <ref>Account2</ref> to;
+ readonly attribute float amount;
+ readonly attribute DOMString description;
+ readonly attribute unsigned long number;
+
+ serializer = { from, to, amount, description };
+};</webidl>
+ <Attribute readonly="readonly" name="from" id="::Transaction2::from">
+ <webidl> readonly attribute <ref>Account2</ref> from;</webidl>
+ <Type name="Account2"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="to" id="::Transaction2::to">
+ <webidl> readonly attribute <ref>Account2</ref> to;</webidl>
+ <Type name="Account2"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="amount" id="::Transaction2::amount">
+ <webidl> readonly attribute float amount;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="description" id="::Transaction2::description">
+ <webidl> readonly attribute DOMString description;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute readonly="readonly" name="number" id="::Transaction2::number">
+ <webidl> readonly attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer = { from, to, amount, description };</webidl>
+ <Map pattern="selection">
+ <PatternAttribute name="from"/>
+ <PatternAttribute name="to"/>
+ <PatternAttribute name="amount"/>
+ <PatternAttribute name="description"/>
+ </Map>
+ </Serializer>
+ </Interface>
+ <Interface name="Account2" id="::Account2">
+ <webidl>interface Account2 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = number;
+};</webidl>
+ <Attribute name="name" id="::Account2::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="number" id="::Account2::number">
+ <webidl> attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Serializer attribute="number">
+ <webidl> serializer = number;</webidl>
+ </Serializer>
+ </Interface>
+ <Interface name="Account3" id="::Account3">
+ <webidl>interface Account3 {
+ attribute DOMString name;
+ attribute unsigned long number;
+
+ serializer = { attribute };
+};</webidl>
+ <Attribute name="name" id="::Account3::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="number" id="::Account3::number">
+ <webidl> attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer = { attribute };</webidl>
+ <Map pattern="all"/>
+ </Serializer>
+ </Interface>
+ <Interface name="Account4" id="::Account4">
+ <webidl>interface Account4 {
+ getter object getItem(unsigned long index);
+ serializer = { getter };
+};</webidl>
+ <Operation getter="getter" name="getItem" id="::Account4::getItem">
+ <webidl> getter object getItem(unsigned long index);</webidl>
+ <Type type="object"/>
+ <ArgumentList>
+ <Argument name="index">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Serializer>
+ <webidl> serializer = { getter };</webidl>
+ <Map pattern="getter"/>
+ </Serializer>
+ </Interface>
+ <Interface name="Account5" id="::Account5">
+ <webidl>interface Account5 : <ref>Account</ref> {
+ attribute DOMString secondname;
+ serializer = { inherit, secondname };
+};</webidl>
+ <InterfaceInheritance>
+ <Name name="Account"/>
+ </InterfaceInheritance>
+ <Attribute name="secondname" id="::Account5::secondname">
+ <webidl> attribute DOMString secondname;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer = { inherit, secondname };</webidl>
+ <Map inherit="inherit" pattern="selection">
+ <PatternAttribute name="secondname"/>
+ </Map>
+ </Serializer>
+ </Interface>
+ <Interface name="Account6" id="::Account6">
+ <webidl>interface Account6 : <ref>Account</ref> {
+ attribute DOMString secondname;
+ serializer = { inherit, attribute };
+};</webidl>
+ <InterfaceInheritance>
+ <Name name="Account"/>
+ </InterfaceInheritance>
+ <Attribute name="secondname" id="::Account6::secondname">
+ <webidl> attribute DOMString secondname;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer = { inherit, attribute };</webidl>
+ <Map inherit="inherit" pattern="all"/>
+ </Serializer>
+ </Interface>
+ <Interface name="Account7" id="::Account7">
+ <webidl>interface Account7 {
+ attribute DOMString name;
+ attribute unsigned long number;
+ serializer = [ name, number ];
+};</webidl>
+ <Attribute name="name" id="::Account7::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="number" id="::Account7::number">
+ <webidl> attribute unsigned long number;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Serializer>
+ <webidl> serializer = [ name, number ];</webidl>
+ <List pattern="selection">
+ <PatternAttribute name="name"/>
+ <PatternAttribute name="number"/>
+ </List>
+ </Serializer>
+ </Interface>
+ <Interface name="Account8" id="::Account8">
+ <webidl>interface Account8 {
+ getter object getItem(unsigned long index);
+ serializer = [ getter ];
+};</webidl>
+ <Operation getter="getter" name="getItem" id="::Account8::getItem">
+ <webidl> getter object getItem(unsigned long index);</webidl>
+ <Type type="object"/>
+ <ArgumentList>
+ <Argument name="index">
+ <Type type="unsigned long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Serializer>
+ <webidl> serializer = [ getter ];</webidl>
+ <List pattern="getter"/>
+ </Serializer>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/special-omittable.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/special-omittable.widlprocxml
new file mode 100644
index 000000000..1986d190a
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/special-omittable.widlprocxml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <Interface name="Dictionary" id="::Dictionary">
+ <webidl>interface Dictionary {
+ readonly attribute unsigned long propertyCount;
+
+ omittable getter float getProperty(DOMString propertyName);
+ omittable setter void setProperty(DOMString propertyName, float propertyValue);
+};</webidl>
+ <Attribute readonly="readonly" name="propertyCount" id="::Dictionary::propertyCount">
+ <webidl> readonly attribute unsigned long propertyCount;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation omittable="omittable" getter="getter" name="getProperty" id="::Dictionary::getProperty">
+ <webidl> omittable getter float getProperty(DOMString propertyName);</webidl>
+ <Type type="float"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation omittable="omittable" setter="setter" name="setProperty" id="::Dictionary::setProperty">
+ <webidl> omittable setter void setProperty(DOMString propertyName, float propertyValue);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="propertyName">
+ <Type type="DOMString"/>
+ </Argument>
+ <Argument name="propertyValue">
+ <Type type="float"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/static.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/static.widlprocxml
new file mode 100644
index 000000000..03c14e16e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/static.widlprocxml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Point { };
+
+interface Circle {
+ attribute float cx;
+ attribute float cy;
+ attribute float radius;
+
+ static readonly attribute long triangulationCount;
+ static <ref>Point</ref> triangulate(<ref>Circle</ref> c1, <ref>Circle</ref> c2, <ref>Circle</ref> c3);
+};</webidl>
+ <Interface name="Point" id="::Point">
+ <webidl>interface Point { };</webidl>
+ </Interface>
+ <Interface name="Circle" id="::Circle">
+ <webidl>interface Circle {
+ attribute float cx;
+ attribute float cy;
+ attribute float radius;
+
+ static readonly attribute long triangulationCount;
+ static <ref>Point</ref> triangulate(<ref>Circle</ref> c1, <ref>Circle</ref> c2, <ref>Circle</ref> c3);
+};</webidl>
+ <Attribute name="cx" id="::Circle::cx">
+ <webidl> attribute float cx;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="cy" id="::Circle::cy">
+ <webidl> attribute float cy;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="radius" id="::Circle::radius">
+ <webidl> attribute float radius;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute static="static" readonly="readonly" name="triangulationCount" id="::Circle::triangulationCount">
+ <webidl> static readonly attribute long triangulationCount;</webidl>
+ <Type type="long"/>
+ </Attribute>
+ <Operation static="static" name="triangulate" id="::Circle::triangulate">
+ <webidl> static <ref>Point</ref> triangulate(<ref>Circle</ref> c1, <ref>Circle</ref> c2, <ref>Circle</ref> c3);</webidl>
+ <Type name="Point"/>
+ <ArgumentList>
+ <Argument name="c1">
+ <Type name="Circle"/>
+ </Argument>
+ <Argument name="c2">
+ <Type name="Circle"/>
+ </Argument>
+ <Argument name="c3">
+ <Type name="Circle"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/stringifier-attribute.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/stringifier-attribute.widlprocxml
new file mode 100644
index 000000000..082ce4d34
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/stringifier-attribute.widlprocxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[Constructor]
+interface Student {
+ attribute unsigned long id;
+ stringifier attribute DOMString name;
+};</webidl>
+ <Interface name="Student" id="::Student">
+ <webidl>[Constructor]
+interface Student {
+ attribute unsigned long id;
+ stringifier attribute DOMString name;
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor">
+ <webidl>Constructor</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute name="id" id="::Student::id">
+ <webidl> attribute unsigned long id;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Attribute stringifier="stringifier" name="name" id="::Student::name">
+ <webidl> stringifier attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/stringifier-custom.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/stringifier-custom.widlprocxml
new file mode 100644
index 000000000..cdab1ccfc
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/stringifier-custom.widlprocxml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>[Constructor]
+interface Student {
+ attribute unsigned long id;
+ attribute DOMString? familyName;
+ attribute DOMString givenName;
+
+ stringifier DOMString ();
+};</webidl>
+ <Interface name="Student" id="::Student">
+ <webidl>[Constructor]
+interface Student {
+ attribute unsigned long id;
+ attribute DOMString? familyName;
+ attribute DOMString givenName;
+
+ stringifier DOMString ();
+};</webidl>
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Constructor">
+ <webidl>Constructor</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Attribute name="id" id="::Student::id">
+ <webidl> attribute unsigned long id;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Attribute name="familyName" id="::Student::familyName">
+ <webidl> attribute DOMString? familyName;</webidl>
+ <Type type="DOMString" nullable="nullable"/>
+ </Attribute>
+ <Attribute name="givenName" id="::Student::givenName">
+ <webidl> attribute DOMString givenName;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Operation stringifier="stringifier">
+ <webidl> stringifier DOMString ();</webidl>
+ <Type type="DOMString"/>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/stringifier.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/stringifier.widlprocxml
new file mode 100644
index 000000000..4a18b80b7
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/stringifier.widlprocxml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface A {
+ stringifier DOMString ();
+};
+
+interface A {
+ stringifier;
+};</webidl>
+ <Interface name="A" id="::A">
+ <webidl>interface A {
+ stringifier DOMString ();
+};</webidl>
+ <Operation stringifier="stringifier">
+ <webidl> stringifier DOMString ();</webidl>
+ <Type type="DOMString"/>
+ <ArgumentList/>
+ </Operation>
+ </Interface>
+ <Interface name="A" id="::A">
+ <webidl>interface A {
+ stringifier;
+};</webidl>
+ <Stringifier>
+ <webidl> stringifier;</webidl>
+ </Stringifier>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/treatasnull.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/treatasnull.widlprocxml
new file mode 100644
index 000000000..a57ae163f
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/treatasnull.widlprocxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Dog {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatNullAs=EmptyString] DOMString breedName);
+};</webidl>
+ <Interface name="Dog" id="::Dog">
+ <webidl>interface Dog {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatNullAs=EmptyString] DOMString breedName);
+};</webidl>
+ <Attribute name="name" id="::Dog::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="owner" id="::Dog::owner">
+ <webidl> attribute DOMString owner;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Operation name="isMemberOfBreed" id="::Dog::isMemberOfBreed">
+ <webidl> boolean isMemberOfBreed([TreatNullAs=EmptyString] DOMString breedName);</webidl>
+ <Type type="boolean"/>
+ <ArgumentList>
+ <Argument name="breedName">
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="TreatNullAs" value="EmptyString">
+ <webidl>TreatNullAs</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/treatasundefined.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/treatasundefined.widlprocxml
new file mode 100644
index 000000000..17e71081d
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/treatasundefined.widlprocxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Cat {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatUndefinedAs=EmptyString] DOMString breedName);
+};</webidl>
+ <Interface name="Cat" id="::Cat">
+ <webidl>interface Cat {
+ attribute DOMString name;
+ attribute DOMString owner;
+
+ boolean isMemberOfBreed([TreatUndefinedAs=EmptyString] DOMString breedName);
+};</webidl>
+ <Attribute name="name" id="::Cat::name">
+ <webidl> attribute DOMString name;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Attribute name="owner" id="::Cat::owner">
+ <webidl> attribute DOMString owner;</webidl>
+ <Type type="DOMString"/>
+ </Attribute>
+ <Operation name="isMemberOfBreed" id="::Cat::isMemberOfBreed">
+ <webidl> boolean isMemberOfBreed([TreatUndefinedAs=EmptyString] DOMString breedName);</webidl>
+ <Type type="boolean"/>
+ <ArgumentList>
+ <Argument name="breedName">
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="TreatUndefinedAs" value="EmptyString">
+ <webidl>TreatUndefinedAs</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ <Type type="DOMString"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/typedef.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/typedef.widlprocxml
new file mode 100644
index 000000000..785f6706e
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/typedef.widlprocxml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl> interface Point {
+ attribute float x;
+ attribute float y;
+ };
+
+ typedef sequence&lt;<ref>Point</ref>> PointSequence;
+
+ interface Rect {
+ attribute <ref>Point</ref> topleft;
+ attribute <ref>Point</ref> bottomright;
+ };
+
+ interface Widget {
+
+ readonly attribute <ref>Rect</ref> bounds;
+
+ boolean pointWithinBounds(<ref>Point</ref> p);
+ boolean allPointsWithinBounds(<ref>PointSequence</ref> ps);
+ };
+
+ typedef [Clamp] octet value;</webidl>
+ <Interface name="Point" id="::Point">
+ <webidl> interface Point {
+ attribute float x;
+ attribute float y;
+ };</webidl>
+ <Attribute name="x" id="::Point::x">
+ <webidl> attribute float x;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ <Attribute name="y" id="::Point::y">
+ <webidl> attribute float y;</webidl>
+ <Type type="float"/>
+ </Attribute>
+ </Interface>
+ <Typedef name="PointSequence" id="::PointSequence">
+ <webidl> typedef sequence&lt;<ref>Point</ref>> PointSequence;</webidl>
+ <Type type="sequence">
+ <Type name="Point"/>
+ </Type>
+ </Typedef>
+ <Interface name="Rect" id="::Rect">
+ <webidl> interface Rect {
+ attribute <ref>Point</ref> topleft;
+ attribute <ref>Point</ref> bottomright;
+ };</webidl>
+ <Attribute name="topleft" id="::Rect::topleft">
+ <webidl> attribute <ref>Point</ref> topleft;</webidl>
+ <Type name="Point"/>
+ </Attribute>
+ <Attribute name="bottomright" id="::Rect::bottomright">
+ <webidl> attribute <ref>Point</ref> bottomright;</webidl>
+ <Type name="Point"/>
+ </Attribute>
+ </Interface>
+ <Interface name="Widget" id="::Widget">
+ <webidl> interface Widget {
+
+ readonly attribute <ref>Rect</ref> bounds;
+
+ boolean pointWithinBounds(<ref>Point</ref> p);
+ boolean allPointsWithinBounds(<ref>PointSequence</ref> ps);
+ };</webidl>
+ <Attribute readonly="readonly" name="bounds" id="::Widget::bounds">
+ <webidl> readonly attribute <ref>Rect</ref> bounds;</webidl>
+ <Type name="Rect"/>
+ </Attribute>
+ <Operation name="pointWithinBounds" id="::Widget::pointWithinBounds">
+ <webidl> boolean pointWithinBounds(<ref>Point</ref> p);</webidl>
+ <Type type="boolean"/>
+ <ArgumentList>
+ <Argument name="p">
+ <Type name="Point"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="allPointsWithinBounds" id="::Widget::allPointsWithinBounds">
+ <webidl> boolean allPointsWithinBounds(<ref>PointSequence</ref> ps);</webidl>
+ <Type type="boolean"/>
+ <ArgumentList>
+ <Argument name="ps">
+ <Type name="PointSequence"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+ <Typedef name="value" id="::value">
+ <webidl> typedef [Clamp] octet value;</webidl>
+ <Type type="octet">
+ <ExtendedAttributeList>
+ <ExtendedAttribute name="Clamp">
+ <webidl>Clamp</webidl>
+ </ExtendedAttribute>
+ </ExtendedAttributeList>
+ </Type>
+ </Typedef>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/typesuffixes.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/typesuffixes.widlprocxml
new file mode 100644
index 000000000..830fe62bc
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/typesuffixes.widlprocxml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Suffixes {
+ void test(sequence&lt;DOMString[]?>? foo);
+};</webidl>
+ <Interface name="Suffixes" id="::Suffixes">
+ <webidl>interface Suffixes {
+ void test(sequence&lt;DOMString[]?>? foo);
+};</webidl>
+ <Operation name="test" id="::Suffixes::test">
+ <webidl> void test(sequence&lt;DOMString[]?>? foo);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument name="foo">
+ <Type type="sequence" nullable="nullable">
+ <Type type="array" nullable="nullable">
+ <Type type="DOMString"/>
+ </Type>
+ </Type>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/uniontype.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/uniontype.widlprocxml
new file mode 100644
index 000000000..7d0880799
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/uniontype.widlprocxml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface Union {
+ attribute (float or (Date or <ref>Event</ref>) or (<ref>Node</ref> or DOMString)?) test;
+};</webidl>
+ <Interface name="Union" id="::Union">
+ <webidl>interface Union {
+ attribute (float or (Date or <ref>Event</ref>) or (<ref>Node</ref> or DOMString)?) test;
+};</webidl>
+ <Attribute name="test" id="::Union::test">
+ <webidl> attribute (float or (Date or <ref>Event</ref>) or (<ref>Node</ref> or DOMString)?) test;</webidl>
+ <Type type="union">
+ <Type type="float"/>
+ <Type type="union">
+ <Type type="Date"/>
+ <Type name="Event"/>
+ </Type>
+ <Type type="union" nullable="nullable">
+ <Type name="Node"/>
+ <Type type="DOMString"/>
+ </Type>
+ </Type>
+ </Attribute>
+ </Interface>
+</Definitions>
diff --git a/testing/web-platform/tests/WebIDL/valid/xml/variadic-operations.widlprocxml b/testing/web-platform/tests/WebIDL/valid/xml/variadic-operations.widlprocxml
new file mode 100644
index 000000000..0bc9f7844
--- /dev/null
+++ b/testing/web-platform/tests/WebIDL/valid/xml/variadic-operations.widlprocxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
+<Definitions>
+ <webidl>interface IntegerSet {
+ readonly attribute unsigned long cardinality;
+
+ void union(long... ints);
+ void intersection(long... ints);
+};</webidl>
+ <Interface name="IntegerSet" id="::IntegerSet">
+ <webidl>interface IntegerSet {
+ readonly attribute unsigned long cardinality;
+
+ void union(long... ints);
+ void intersection(long... ints);
+};</webidl>
+ <Attribute readonly="readonly" name="cardinality" id="::IntegerSet::cardinality">
+ <webidl> readonly attribute unsigned long cardinality;</webidl>
+ <Type type="unsigned long"/>
+ </Attribute>
+ <Operation name="union" id="::IntegerSet::union">
+ <webidl> void union(long... ints);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument ellipsis="ellipsis" name="ints">
+ <Type type="long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ <Operation name="intersection" id="::IntegerSet::intersection">
+ <webidl> void intersection(long... ints);</webidl>
+ <Type type="void"/>
+ <ArgumentList>
+ <Argument ellipsis="ellipsis" name="ints">
+ <Type type="long"/>
+ </Argument>
+ </ArgumentList>
+ </Operation>
+ </Interface>
+</Definitions>