| import WebIDL |
| |
| |
| def WebIDLTest(parser, harness): |
| parser = parser.reset() |
| threw = False |
| try: |
| parser.parse( |
| """ |
| dictionary TestDict { |
| DOMString member; |
| }; |
| [LegacyTreatNonObjectAsNull] callback TestCallback = undefined (); |
| typedef (TestCallback or TestDict) TestUnionCallbackDict; |
| """ |
| ) |
| results = parser.finish() |
| except WebIDL.WebIDLError: |
| threw = True |
| harness.ok( |
| threw, |
| "Should not allow Dict/Callback union where callback is [LegacyTreatNonObjectAsNull]", |
| ) |
| |
| parser = parser.reset() |
| |
| threw = False |
| try: |
| parser.parse( |
| """ |
| dictionary TestDict { |
| DOMString member; |
| }; |
| [LegacyTreatNonObjectAsNull] callback TestCallback = undefined (); |
| typedef (TestDict or TestCallback) TestUnionCallbackDict; |
| """ |
| ) |
| results = parser.finish() |
| except WebIDL.WebIDLError: |
| threw = True |
| harness.ok( |
| threw, |
| "Should not allow Dict/Callback union where callback is [LegacyTreatNonObjectAsNull]", |
| ) |
| |
| parser = parser.reset() |
| |
| parser.parse( |
| """ |
| dictionary TestDict { |
| DOMString member; |
| }; |
| callback TestCallback = undefined (); |
| typedef (TestCallback or TestDict) TestUnionCallbackDict; |
| """ |
| ) |
| results = parser.finish() |
| |
| harness.ok(True, "TestUnionCallbackDict interface parsed without error") |
| harness.check(len(results), 3, "Document should have 3 types") |
| |
| myDict = results[0] |
| harness.ok(isinstance(myDict, WebIDL.IDLDictionary), "Expect an IDLDictionary") |
| |
| myCallback = results[1] |
| harness.ok(isinstance(myCallback, WebIDL.IDLCallback), "Expect an IDLCallback") |
| |
| myUnion = results[2] |
| harness.ok(isinstance(myUnion, WebIDL.IDLTypedef), "Expect a IDLTypedef") |
| harness.ok( |
| isinstance(myUnion.innerType, WebIDL.IDLUnionType), "Expect a IDLUnionType" |
| ) |
| harness.ok( |
| isinstance(myUnion.innerType.memberTypes[0], WebIDL.IDLCallbackType), |
| "Expect a IDLCallbackType", |
| ) |
| harness.ok( |
| isinstance(myUnion.innerType.memberTypes[1], WebIDL.IDLWrapperType), |
| "Expect a IDLDictionary", |
| ) |
| harness.ok( |
| (myUnion.innerType.memberTypes[0].callback == myCallback), |
| "Expect left Union member to be MyCallback", |
| ) |
| harness.ok( |
| (myUnion.innerType.memberTypes[1].inner == myDict), |
| "Expect right Union member to be MyDict", |
| ) |
| |
| parser = parser.reset() |
| |
| parser.parse( |
| """ |
| dictionary TestDict { |
| DOMString member; |
| }; |
| callback TestCallback = undefined (); |
| typedef (TestDict or TestCallback) TestUnionCallbackDict; |
| """ |
| ) |
| results = parser.finish() |
| |
| harness.ok(True, "TestUnionCallbackDict interface parsed without error") |
| harness.check(len(results), 3, "Document should have 3 types") |
| |
| myDict = results[0] |
| harness.ok(isinstance(myDict, WebIDL.IDLDictionary), "Expect an IDLDictionary") |
| |
| myCallback = results[1] |
| harness.ok(isinstance(myCallback, WebIDL.IDLCallback), "Expect an IDLCallback") |
| |
| myUnion = results[2] |
| harness.ok(isinstance(myUnion, WebIDL.IDLTypedef), "Expect a IDLTypedef") |
| harness.ok( |
| isinstance(myUnion.innerType, WebIDL.IDLUnionType), "Expect a IDLUnionType" |
| ) |
| harness.ok( |
| isinstance(myUnion.innerType.memberTypes[0], WebIDL.IDLWrapperType), |
| "Expect a IDLDictionary", |
| ) |
| harness.ok( |
| isinstance(myUnion.innerType.memberTypes[1], WebIDL.IDLCallbackType), |
| "Expect a IDLCallbackType", |
| ) |
| harness.ok( |
| (myUnion.innerType.memberTypes[0].inner == myDict), |
| "Expect right Union member to be MyDict", |
| ) |
| harness.ok( |
| (myUnion.innerType.memberTypes[1].callback == myCallback), |
| "Expect left Union member to be MyCallback", |
| ) |