diff options
Diffstat (limited to 'dom/bindings/parser/tests/test_unforgeable.py')
-rw-r--r-- | dom/bindings/parser/tests/test_unforgeable.py | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/dom/bindings/parser/tests/test_unforgeable.py b/dom/bindings/parser/tests/test_unforgeable.py new file mode 100644 index 000000000..3787e8c6a --- /dev/null +++ b/dom/bindings/parser/tests/test_unforgeable.py @@ -0,0 +1,253 @@ +def WebIDLTest(parser, harness): + parser.parse(""" + interface Child : Parent { + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + harness.check(len(results), 2, + "Should be able to inherit from an interface with " + "[Unforgeable] properties.") + + parser = parser.reset(); + parser.parse(""" + interface Child : Parent { + const short foo = 10; + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + harness.check(len(results), 2, + "Should be able to inherit from an interface with " + "[Unforgeable] properties even if we have a constant with " + "the same name.") + + parser = parser.reset(); + parser.parse(""" + interface Child : Parent { + static attribute short foo; + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + harness.check(len(results), 2, + "Should be able to inherit from an interface with " + "[Unforgeable] properties even if we have a static attribute " + "with the same name.") + + parser = parser.reset(); + parser.parse(""" + interface Child : Parent { + static void foo(); + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + harness.check(len(results), 2, + "Should be able to inherit from an interface with " + "[Unforgeable] properties even if we have a static operation " + "with the same name.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + void foo(); + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + except: + threw = True + harness.ok(threw, + "Should have thrown when shadowing unforgeable attribute on " + "parent with operation.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + void foo(); + }; + interface Parent { + [Unforgeable] void foo(); + }; + """) + + results = parser.finish() + except: + threw = True + harness.ok(threw, + "Should have thrown when shadowing unforgeable operation on " + "parent with operation.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + attribute short foo; + }; + interface Parent { + [Unforgeable] readonly attribute long foo; + }; + """) + + results = parser.finish() + except Exception,x: + threw = True + harness.ok(threw, + "Should have thrown when shadowing unforgeable attribute on " + "parent with attribute.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + attribute short foo; + }; + interface Parent { + [Unforgeable] void foo(); + }; + """) + + results = parser.finish() + except Exception,x: + threw = True + harness.ok(threw, + "Should have thrown when shadowing unforgeable operation on " + "parent with attribute.") + + parser = parser.reset(); + parser.parse(""" + interface Child : Parent { + }; + interface Parent {}; + interface Consequential { + [Unforgeable] readonly attribute long foo; + }; + Parent implements Consequential; + """) + + results = parser.finish() + harness.check(len(results), 4, + "Should be able to inherit from an interface with a " + "consequential interface with [Unforgeable] properties.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + void foo(); + }; + interface Parent {}; + interface Consequential { + [Unforgeable] readonly attribute long foo; + }; + Parent implements Consequential; + """) + + results = parser.finish() + except: + threw = True + + harness.ok(threw, + "Should have thrown when shadowing unforgeable attribute " + "of parent's consequential interface.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + }; + interface Parent : GrandParent {}; + interface GrandParent {}; + interface Consequential { + [Unforgeable] readonly attribute long foo; + }; + GrandParent implements Consequential; + interface ChildConsequential { + void foo(); + }; + Child implements ChildConsequential; + """) + + results = parser.finish() + except: + threw = True + + harness.ok(threw, + "Should have thrown when our consequential interface shadows unforgeable attribute " + "of ancestor's consequential interface.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface Child : Parent { + }; + interface Parent : GrandParent {}; + interface GrandParent {}; + interface Consequential { + [Unforgeable] void foo(); + }; + GrandParent implements Consequential; + interface ChildConsequential { + void foo(); + }; + Child implements ChildConsequential; + """) + + results = parser.finish() + except: + threw = True + + harness.ok(threw, + "Should have thrown when our consequential interface shadows unforgeable operation " + "of ancestor's consequential interface.") + + parser = parser.reset(); + parser.parse(""" + interface iface { + [Unforgeable] attribute long foo; + }; + """) + + results = parser.finish() + harness.check(len(results), 1, + "Should allow writable [Unforgeable] attribute.") + + parser = parser.reset(); + threw = False + try: + parser.parse(""" + interface iface { + [Unforgeable] static readonly attribute long foo; + }; + """) + + results = parser.finish() + except: + threw = True + + harness.ok(threw, "Should have thrown for static [Unforgeable] attribute.") |