aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/parser/tests/test_interface.py
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/codegen/parser/tests/test_interface.py')
-rw-r--r--components/script/dom/bindings/codegen/parser/tests/test_interface.py217
1 files changed, 217 insertions, 0 deletions
diff --git a/components/script/dom/bindings/codegen/parser/tests/test_interface.py b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
index 5b07172c636..e8ed67b54b3 100644
--- a/components/script/dom/bindings/codegen/parser/tests/test_interface.py
+++ b/components/script/dom/bindings/codegen/parser/tests/test_interface.py
@@ -186,3 +186,220 @@ def WebIDLTest(parser, harness):
threw = True
harness.ok(threw, "Should not allow inheriting from an interface that is only forward declared")
+
+ parser = parser.reset()
+ parser.parse("""
+ [Constructor(long arg)]
+ interface A {
+ readonly attribute boolean x;
+ void foo();
+ };
+ [Constructor]
+ partial interface A {
+ readonly attribute boolean y;
+ void foo(long arg);
+ };
+ """);
+ results = parser.finish();
+ harness.check(len(results), 2,
+ "Should have two results with partial interface")
+ iface = results[0]
+ harness.check(len(iface.members), 3,
+ "Should have three members with partial interface")
+ harness.check(iface.members[0].identifier.name, "x",
+ "First member should be x with partial interface")
+ harness.check(iface.members[1].identifier.name, "foo",
+ "Second member should be foo with partial interface")
+ harness.check(len(iface.members[1].signatures()), 2,
+ "Should have two foo signatures with partial interface")
+ harness.check(iface.members[2].identifier.name, "y",
+ "Third member should be y with partial interface")
+ harness.check(len(iface.ctor().signatures()), 2,
+ "Should have two constructors with partial interface")
+
+ parser = parser.reset()
+ parser.parse("""
+ [Constructor]
+ partial interface A {
+ readonly attribute boolean y;
+ void foo(long arg);
+ };
+ [Constructor(long arg)]
+ interface A {
+ readonly attribute boolean x;
+ void foo();
+ };
+ """);
+ results = parser.finish();
+ harness.check(len(results), 2,
+ "Should have two results with reversed partial interface")
+ iface = results[1]
+ harness.check(len(iface.members), 3,
+ "Should have three members with reversed partial interface")
+ harness.check(iface.members[0].identifier.name, "x",
+ "First member should be x with reversed partial interface")
+ harness.check(iface.members[1].identifier.name, "foo",
+ "Second member should be foo with reversed partial interface")
+ harness.check(len(iface.members[1].signatures()), 2,
+ "Should have two foo signatures with reversed partial interface")
+ harness.check(iface.members[2].identifier.name, "y",
+ "Third member should be y with reversed partial interface")
+ harness.check(len(iface.ctor().signatures()), 2,
+ "Should have two constructors with reversed partial interface")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ readonly attribute boolean x;
+ };
+ interface A {
+ readonly attribute boolean y;
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow two non-partial interfaces with the same name")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ partial interface A {
+ readonly attribute boolean x;
+ };
+ partial interface A {
+ readonly attribute boolean y;
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Must have a non-partial interface for a given name")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ boolean x;
+ };
+ partial interface A {
+ readonly attribute boolean y;
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow a name collision between partial interface "
+ "and other object")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ boolean x;
+ };
+ interface A {
+ readonly attribute boolean y;
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow a name collision between interface "
+ "and other object")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ dictionary A {
+ boolean x;
+ };
+ interface A;
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow a name collision between external interface "
+ "and other object")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface A {
+ readonly attribute boolean x;
+ };
+ interface A;
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow a name collision between external interface "
+ "and interface")
+
+ parser = parser.reset()
+ parser.parse("""
+ interface A;
+ interface A;
+ """)
+ results = parser.finish()
+ harness.ok(len(results) == 1 and
+ isinstance(results[0], WebIDL.IDLExternalInterface),
+ "Should allow name collisions between external interface "
+ "declarations")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [SomeRandomAnnotation]
+ interface A {
+ readonly attribute boolean y;
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow unknown extended attributes on interfaces")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ interface B {};
+ [ArrayClass]
+ interface A : B {
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(threw,
+ "Should not allow [ArrayClass] on interfaces with parents")
+
+ parser = parser.reset()
+ threw = False
+ try:
+ parser.parse("""
+ [ArrayClass]
+ interface A {
+ };
+ """)
+ results = parser.finish()
+ except:
+ threw = True
+ harness.ok(not threw,
+ "Should allow [ArrayClass] on interfaces without parents")