| import WebIDL |
| |
| |
| def WebIDLTest(parser, harness): |
| parser.parse( |
| """ |
| callback interface TestCallbackInterface { |
| attribute boolean bool; |
| }; |
| """ |
| ) |
| |
| results = parser.finish() |
| |
| iface = results[0] |
| |
| harness.ok(iface.isCallback(), "Interface should be a callback") |
| |
| parser = parser.reset() |
| threw = False |
| try: |
| parser.parse( |
| """ |
| interface TestInterface { |
| }; |
| callback interface TestCallbackInterface : TestInterface { |
| attribute boolean bool; |
| }; |
| """ |
| ) |
| parser.finish() |
| except WebIDL.WebIDLError: |
| threw = True |
| |
| harness.ok(threw, "Should not allow non-callback parent of callback interface") |
| |
| parser = parser.reset() |
| threw = False |
| try: |
| parser.parse( |
| """ |
| interface TestInterface : TestCallbackInterface { |
| }; |
| callback interface TestCallbackInterface { |
| attribute boolean bool; |
| }; |
| """ |
| ) |
| parser.finish() |
| except WebIDL.WebIDLError: |
| threw = True |
| |
| harness.ok(threw, "Should not allow callback parent of non-callback interface") |
| |
| parser = parser.reset() |
| parser.parse( |
| """ |
| callback interface TestCallbackInterface1 { |
| undefined foo(); |
| }; |
| callback interface TestCallbackInterface2 { |
| undefined foo(DOMString arg); |
| undefined foo(TestCallbackInterface1 arg); |
| }; |
| callback interface TestCallbackInterface3 { |
| undefined foo(DOMString arg); |
| undefined foo(TestCallbackInterface1 arg); |
| static undefined bar(); |
| }; |
| callback interface TestCallbackInterface4 { |
| undefined foo(DOMString arg); |
| undefined foo(TestCallbackInterface1 arg); |
| static undefined bar(); |
| const long baz = 5; |
| }; |
| callback interface TestCallbackInterface5 { |
| static attribute boolean bool; |
| undefined foo(); |
| }; |
| callback interface TestCallbackInterface6 { |
| undefined foo(DOMString arg); |
| undefined foo(TestCallbackInterface1 arg); |
| undefined bar(); |
| }; |
| callback interface TestCallbackInterface7 { |
| static attribute boolean bool; |
| }; |
| callback interface TestCallbackInterface8 { |
| attribute boolean bool; |
| }; |
| callback interface TestCallbackInterface9 : TestCallbackInterface1 { |
| undefined foo(); |
| }; |
| callback interface TestCallbackInterface10 : TestCallbackInterface1 { |
| undefined bar(); |
| }; |
| """ |
| ) |
| results = parser.finish() |
| for i, iface in enumerate(results): |
| harness.check( |
| iface.isSingleOperationInterface(), |
| i < 4, |
| "Interface %s should be a single operation interface" |
| % iface.identifier.name, |
| ) |