import WebIDL def WebIDLTest(parser, harness): parser.parse( """ interface TestStringifier { stringifier; }; """ ) results = parser.finish() harness.ok( isinstance(results[0].members[0], WebIDL.IDLMethod), "Stringifer should be method", ) parser = parser.reset() threw = False try: parser.parse( """ interface TestStringifier { stringifier; stringifier; }; """ ) results = parser.finish() except WebIDL.WebIDLError: threw = True harness.ok(threw, "Should not allow two 'stringifier;'") parser = parser.reset() threw = False try: parser.parse( """ interface TestStringifier { stringifier; stringifier DOMString foo(); }; """ ) results = parser.finish() except WebIDL.WebIDLError: threw = True harness.ok(threw, "Should not allow a 'stringifier;' and a 'stringifier()'") parser = parser.reset() parser.parse( """ interface TestStringifier { stringifier attribute DOMString foo; }; """ ) results = parser.finish() harness.ok( isinstance(results[0].members[0], WebIDL.IDLAttribute), "Stringifier attribute should be an attribute", ) stringifier = results[0].members[1] harness.ok( isinstance(stringifier, WebIDL.IDLMethod), "Stringifier attribute should insert a method", ) harness.ok(stringifier.isStringifier(), "Inserted method should be a stringifier") parser = parser.reset() parser.parse( """ interface TestStringifier {}; interface mixin TestStringifierMixin { stringifier attribute DOMString foo; }; TestStringifier includes TestStringifierMixin; """ ) results = parser.finish() harness.ok( isinstance(results[0].members[0], WebIDL.IDLAttribute), "Stringifier attribute should be an attribute", ) stringifier = results[0].members[1] harness.ok( isinstance(stringifier, WebIDL.IDLMethod), "Stringifier attribute should insert a method", ) harness.ok(stringifier.isStringifier(), "Inserted method should be a stringifier") parser = parser.reset() parser.parse( """ interface TestStringifier { stringifier attribute USVString foo; }; """ ) results = parser.finish() stringifier = results[0].members[1] harness.ok( stringifier.signatures()[0][0].isUSVString(), "Stringifier attributes should allow USVString", ) parser = parser.reset() parser.parse( """ interface TestStringifier { [Throws, NeedsSubjectPrincipal] stringifier attribute USVString foo; }; """ ) results = parser.finish() stringifier = results[0].members[1] harness.ok( stringifier.getExtendedAttribute("Throws"), "Stringifier attributes should support [Throws]", ) harness.ok( stringifier.getExtendedAttribute("NeedsSubjectPrincipal"), "Stringifier attributes should support [NeedsSubjectPrincipal]", ) parser = parser.reset() parser.parse( """ interface TestStringifier { stringifier attribute UTF8String foo; }; """ ) results = parser.finish() stringifier = results[0].members[1] harness.ok( stringifier.signatures()[0][0].isUTF8String(), "Stringifier attributes should allow UTF8String", ) parser = parser.reset() threw = False try: parser.parse( """ interface TestStringifier { stringifier attribute ByteString foo; }; """ ) results = parser.finish() except WebIDL.WebIDLError: threw = True harness.ok(threw, "Should not allow ByteString") parser = parser.reset() threw = False try: parser.parse( """ interface TestStringifier { stringifier; stringifier attribute DOMString foo; }; """ ) results = parser.finish() except WebIDL.WebIDLError: threw = True harness.ok(threw, "Should not allow a 'stringifier;' and a stringifier attribute") parser = parser.reset() threw = False try: parser.parse( """ interface TestStringifier { stringifier attribute DOMString foo; stringifier attribute DOMString bar; }; """ ) results = parser.finish() except WebIDL.WebIDLError: threw = True harness.ok(threw, "Should not allow multiple stringifier attributes")