test_extended_attributes.py (3125B)
1 import WebIDL 2 3 4 def WebIDLTest(parser, harness): 5 parser.parse( 6 """ 7 [LegacyNoInterfaceObject] 8 interface TestExtendedAttr { 9 [LegacyUnforgeable] readonly attribute byte b; 10 }; 11 """ 12 ) 13 14 parser.finish() 15 16 parser = parser.reset() 17 parser.parse( 18 """ 19 [Pref="foo.bar",Pref=flop] 20 interface TestExtendedAttr { 21 [Pref="foo.bar"] attribute byte b; 22 }; 23 """ 24 ) 25 26 parser.finish() 27 28 parser = parser.reset() 29 parser.parse( 30 """ 31 interface TestLegacyLenientThis { 32 [LegacyLenientThis] attribute byte b; 33 }; 34 """ 35 ) 36 37 results = parser.finish() 38 harness.ok( 39 results[0].members[0].hasLegacyLenientThis(), "Should have a lenient this" 40 ) 41 42 parser = parser.reset() 43 threw = False 44 try: 45 parser.parse( 46 """ 47 interface TestLegacyLenientThis2 { 48 [LegacyLenientThis=something] attribute byte b; 49 }; 50 """ 51 ) 52 parser.finish() 53 except WebIDL.WebIDLError: 54 threw = True 55 56 harness.ok(threw, "[LegacyLenientThis] must take no arguments") 57 58 parser = parser.reset() 59 parser.parse( 60 """ 61 interface TestClamp { 62 undefined testClamp([Clamp] long foo); 63 undefined testNotClamp(long foo); 64 }; 65 """ 66 ) 67 68 results = parser.finish() 69 # Pull out the first argument out of the arglist of the first (and 70 # only) signature. 71 harness.ok( 72 results[0].members[0].signatures()[0][1][0].type.hasClamp(), "Should be clamped" 73 ) 74 harness.ok( 75 not results[0].members[1].signatures()[0][1][0].type.hasClamp(), 76 "Should not be clamped", 77 ) 78 79 parser = parser.reset() 80 threw = False 81 try: 82 parser.parse( 83 """ 84 interface TestClamp2 { 85 undefined testClamp([Clamp=something] long foo); 86 }; 87 """ 88 ) 89 parser.finish() 90 except WebIDL.WebIDLError: 91 threw = True 92 93 harness.ok(threw, "[Clamp] must take no arguments") 94 95 parser = parser.reset() 96 parser.parse( 97 """ 98 interface TestEnforceRange { 99 undefined testEnforceRange([EnforceRange] long foo); 100 undefined testNotEnforceRange(long foo); 101 }; 102 """ 103 ) 104 105 results = parser.finish() 106 # Pull out the first argument out of the arglist of the first (and 107 # only) signature. 108 harness.ok( 109 results[0].members[0].signatures()[0][1][0].type.hasEnforceRange(), 110 "Should be enforceRange", 111 ) 112 harness.ok( 113 not results[0].members[1].signatures()[0][1][0].type.hasEnforceRange(), 114 "Should not be enforceRange", 115 ) 116 117 parser = parser.reset() 118 threw = False 119 try: 120 parser.parse( 121 """ 122 interface TestEnforceRange2 { 123 undefined testEnforceRange([EnforceRange=something] long foo); 124 }; 125 """ 126 ) 127 parser.finish() 128 except WebIDL.WebIDLError: 129 threw = True 130 131 harness.ok(threw, "[EnforceRange] must take no arguments")