test_callback_interface.py (2978B)
1 import WebIDL 2 3 4 def WebIDLTest(parser, harness): 5 parser.parse( 6 """ 7 callback interface TestCallbackInterface { 8 attribute boolean bool; 9 }; 10 """ 11 ) 12 13 results = parser.finish() 14 15 iface = results[0] 16 17 harness.ok(iface.isCallback(), "Interface should be a callback") 18 19 parser = parser.reset() 20 threw = False 21 try: 22 parser.parse( 23 """ 24 interface TestInterface { 25 }; 26 callback interface TestCallbackInterface : TestInterface { 27 attribute boolean bool; 28 }; 29 """ 30 ) 31 parser.finish() 32 except WebIDL.WebIDLError: 33 threw = True 34 35 harness.ok(threw, "Should not allow non-callback parent of callback interface") 36 37 parser = parser.reset() 38 threw = False 39 try: 40 parser.parse( 41 """ 42 interface TestInterface : TestCallbackInterface { 43 }; 44 callback interface TestCallbackInterface { 45 attribute boolean bool; 46 }; 47 """ 48 ) 49 parser.finish() 50 except WebIDL.WebIDLError: 51 threw = True 52 53 harness.ok(threw, "Should not allow callback parent of non-callback interface") 54 55 parser = parser.reset() 56 parser.parse( 57 """ 58 callback interface TestCallbackInterface1 { 59 undefined foo(); 60 }; 61 callback interface TestCallbackInterface2 { 62 undefined foo(DOMString arg); 63 undefined foo(TestCallbackInterface1 arg); 64 }; 65 callback interface TestCallbackInterface3 { 66 undefined foo(DOMString arg); 67 undefined foo(TestCallbackInterface1 arg); 68 static undefined bar(); 69 }; 70 callback interface TestCallbackInterface4 { 71 undefined foo(DOMString arg); 72 undefined foo(TestCallbackInterface1 arg); 73 static undefined bar(); 74 const long baz = 5; 75 }; 76 callback interface TestCallbackInterface5 { 77 static attribute boolean bool; 78 undefined foo(); 79 }; 80 callback interface TestCallbackInterface6 { 81 undefined foo(DOMString arg); 82 undefined foo(TestCallbackInterface1 arg); 83 undefined bar(); 84 }; 85 callback interface TestCallbackInterface7 { 86 static attribute boolean bool; 87 }; 88 callback interface TestCallbackInterface8 { 89 attribute boolean bool; 90 }; 91 callback interface TestCallbackInterface9 : TestCallbackInterface1 { 92 undefined foo(); 93 }; 94 callback interface TestCallbackInterface10 : TestCallbackInterface1 { 95 undefined bar(); 96 }; 97 """ 98 ) 99 results = parser.finish() 100 for i, iface in enumerate(results): 101 harness.check( 102 iface.isSingleOperationInterface(), 103 i < 4, 104 "Interface %s should be a single operation interface" 105 % iface.identifier.name, 106 )