aboutsummaryrefslogtreecommitdiffstats
path: root/third_party/WebIDL/tests/test_undefined.py
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-06-24 13:38:11 +0200
committerMartin Robinson <mrobinson@igalia.com>2023-06-30 09:51:31 +0200
commit8be014ee46077e78db21c5d73058c35a4ee65fa9 (patch)
tree9bfd0bc11997381d792fd3015add8be9cd7abd70 /third_party/WebIDL/tests/test_undefined.py
parent7412e28349237055652a08a2216043d0993a3cea (diff)
downloadservo-8be014ee46077e78db21c5d73058c35a4ee65fa9.tar.gz
servo-8be014ee46077e78db21c5d73058c35a4ee65fa9.zip
Create a top-level "third_party" directory
This directory now contains third_party software that is vendored into the Servo source tree. The idea is that it would eventually hold webrender and other crates from mozilla-central as well with a standard patch management approach for each.
Diffstat (limited to 'third_party/WebIDL/tests/test_undefined.py')
-rw-r--r--third_party/WebIDL/tests/test_undefined.py246
1 files changed, 246 insertions, 0 deletions
diff --git a/third_party/WebIDL/tests/test_undefined.py b/third_party/WebIDL/tests/test_undefined.py
new file mode 100644
index 00000000000..4731ee1bcd7
--- /dev/null
+++ b/third_party/WebIDL/tests/test_undefined.py
@@ -0,0 +1,246 @@
+import WebIDL
+
+
+def WebIDLTest(parser, harness):
+ try:
+ parser.parse(
+ """
+ dictionary Dict {
+ undefined undefinedMember;
+ double bar;
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(threw, "undefined must not be used as the type of a dictionary member")
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ dictionary Dict {
+ (undefined or double) undefinedMemberOfUnionInDict;
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of a dictionary member, "
+ "whether directly or in a union",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ double bar(undefined foo);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a regular operation)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ getter double(undefined name);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a getter)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ setter undefined(DOMString name, undefined value);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a setter)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ deleter undefined (undefined name);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a deleter)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ constructor (undefined foo);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a constructor)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ callback Callback = undefined (undefined foo);
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a callback)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ async iterable(undefined name);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of an async iterable "
+ "iterator)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ static double bar(undefined foo);
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined must not be used as the type of an argument in any "
+ "circumstance (so not as the argument of a static operation)",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ const undefined FOO = undefined;
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined is not a valid type for a constant",
+ )
+
+ parser = parser.reset()
+ threw = False
+
+ try:
+ parser.parse(
+ """
+ interface Foo {
+ const any FOO = undefined;
+ };
+ """
+ )
+ results = parser.finish()
+ except:
+ threw = True
+
+ harness.ok(
+ threw,
+ "undefined is not a valid value for a constant",
+ )