OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/test/base/module_system_test.h" | 5 #include "chrome/test/base/module_system_test.h" |
6 | 6 |
7 #include "extensions/common/extension_urls.h" | 7 #include "extensions/common/extension_urls.h" |
8 #include "grit/extensions_renderer_resources.h" | 8 #include "grit/extensions_renderer_resources.h" |
9 | 9 |
10 namespace extensions { | 10 namespace extensions { |
11 namespace { | 11 namespace { |
12 | 12 |
13 class EventUnittest : public ModuleSystemTest { | 13 class EventUnittest : public ModuleSystemTest { |
14 virtual void SetUp() OVERRIDE { | 14 virtual void SetUp() OVERRIDE { |
15 ModuleSystemTest::SetUp(); | 15 ModuleSystemTest::SetUp(); |
16 | 16 |
17 RegisterModule(kEventBindings, IDR_EVENT_BINDINGS_JS); | 17 env_.RegisterModule(kEventBindings, IDR_EVENT_BINDINGS_JS); |
18 RegisterModule("json_schema", IDR_JSON_SCHEMA_JS); | 18 env_.RegisterModule("json_schema", IDR_JSON_SCHEMA_JS); |
19 RegisterModule(kSchemaUtils, IDR_SCHEMA_UTILS_JS); | 19 env_.RegisterModule(kSchemaUtils, IDR_SCHEMA_UTILS_JS); |
20 RegisterModule("uncaught_exception_handler", | 20 env_.RegisterModule("uncaught_exception_handler", |
21 IDR_UNCAUGHT_EXCEPTION_HANDLER_JS); | 21 IDR_UNCAUGHT_EXCEPTION_HANDLER_JS); |
22 RegisterModule("unload_event", IDR_UNLOAD_EVENT_JS); | 22 env_.RegisterModule("unload_event", IDR_UNLOAD_EVENT_JS); |
23 RegisterModule("utils", IDR_UTILS_JS); | 23 env_.RegisterModule("utils", IDR_UTILS_JS); |
24 | 24 |
25 // Mock out the native handler for event_bindings. These mocks will fail if | 25 // Mock out the native handler for event_bindings. These mocks will fail if |
26 // any invariants maintained by the real event_bindings are broken. | 26 // any invariants maintained by the real event_bindings are broken. |
27 OverrideNativeHandler("event_natives", | 27 env_.OverrideNativeHandler( |
| 28 "event_natives", |
28 "var assert = requireNative('assert');" | 29 "var assert = requireNative('assert');" |
29 "var attachedListeners = exports.attachedListeners = {};" | 30 "var attachedListeners = exports.attachedListeners = {};" |
30 "var attachedFilteredListeners = " | 31 "var attachedFilteredListeners = " |
31 " exports.attachedFilteredListeners = {};" | 32 " exports.attachedFilteredListeners = {};" |
32 "var nextId = 0;" | 33 "var nextId = 0;" |
33 "var idToName = {};" | 34 "var idToName = {};" |
34 | |
35 "exports.AttachEvent = function(eventName) {" | 35 "exports.AttachEvent = function(eventName) {" |
36 " assert.AssertFalse(!!attachedListeners[eventName]);" | 36 " assert.AssertFalse(!!attachedListeners[eventName]);" |
37 " attachedListeners[eventName] = 1;" | 37 " attachedListeners[eventName] = 1;" |
38 "};" | 38 "};" |
39 | |
40 "exports.DetachEvent = function(eventName) {" | 39 "exports.DetachEvent = function(eventName) {" |
41 " assert.AssertTrue(!!attachedListeners[eventName]);" | 40 " assert.AssertTrue(!!attachedListeners[eventName]);" |
42 " delete attachedListeners[eventName];" | 41 " delete attachedListeners[eventName];" |
43 "};" | 42 "};" |
44 | |
45 "exports.IsEventAttached = function(eventName) {" | 43 "exports.IsEventAttached = function(eventName) {" |
46 " return !!attachedListeners[eventName];" | 44 " return !!attachedListeners[eventName];" |
47 "};" | 45 "};" |
48 | |
49 "exports.AttachFilteredEvent = function(name, filters) {" | 46 "exports.AttachFilteredEvent = function(name, filters) {" |
50 " var id = nextId++;" | 47 " var id = nextId++;" |
51 " idToName[id] = name;" | 48 " idToName[id] = name;" |
52 " attachedFilteredListeners[name] =" | 49 " attachedFilteredListeners[name] =" |
53 " attachedFilteredListeners[name] || [];" | 50 " attachedFilteredListeners[name] || [];" |
54 " attachedFilteredListeners[name][id] = filters;" | 51 " attachedFilteredListeners[name][id] = filters;" |
55 " return id;" | 52 " return id;" |
56 "};" | 53 "};" |
57 | |
58 "exports.DetachFilteredEvent = function(id, manual) {" | 54 "exports.DetachFilteredEvent = function(id, manual) {" |
59 " var i = attachedFilteredListeners[idToName[id]].indexOf(id);" | 55 " var i = attachedFilteredListeners[idToName[id]].indexOf(id);" |
60 " attachedFilteredListeners[idToName[id]].splice(i, 1);" | 56 " attachedFilteredListeners[idToName[id]].splice(i, 1);" |
61 "};" | 57 "};" |
62 | |
63 "exports.HasFilteredListener = function(name) {" | 58 "exports.HasFilteredListener = function(name) {" |
64 " return attachedFilteredListeners[name].length;" | 59 " return attachedFilteredListeners[name].length;" |
65 "};"); | 60 "};"); |
66 OverrideNativeHandler("sendRequest", | 61 env_.OverrideNativeHandler("sendRequest", |
67 "exports.sendRequest = function() {};"); | 62 "exports.sendRequest = function() {};"); |
68 OverrideNativeHandler("apiDefinitions", | 63 env_.OverrideNativeHandler( |
| 64 "apiDefinitions", |
69 "exports.GetExtensionAPIDefinitionsForTest = function() {};"); | 65 "exports.GetExtensionAPIDefinitionsForTest = function() {};"); |
70 OverrideNativeHandler("logging", | 66 env_.OverrideNativeHandler("logging", "exports.DCHECK = function() {};"); |
71 "exports.DCHECK = function() {};"); | 67 env_.OverrideNativeHandler("schema_registry", |
72 OverrideNativeHandler("schema_registry", | 68 "exports.GetSchema = function() {};"); |
73 "exports.GetSchema = function() {};"); | |
74 } | 69 } |
75 }; | 70 }; |
76 | 71 |
77 TEST_F(EventUnittest, TestNothing) { | 72 TEST_F(EventUnittest, TestNothing) { |
78 ExpectNoAssertionsMade(); | 73 ExpectNoAssertionsMade(); |
79 } | 74 } |
80 | 75 |
81 TEST_F(EventUnittest, AddRemoveTwoListeners) { | 76 TEST_F(EventUnittest, AddRemoveTwoListeners) { |
82 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 77 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
83 context_->module_system()); | 78 env_.RegisterModule( |
84 RegisterModule("test", | 79 "test", |
85 "var assert = requireNative('assert');" | 80 "var assert = requireNative('assert');" |
86 "var Event = require('event_bindings').Event;" | 81 "var Event = require('event_bindings').Event;" |
87 "var eventNatives = requireNative('event_natives');" | 82 "var eventNatives = requireNative('event_natives');" |
88 "var myEvent = new Event('named-event');" | 83 "var myEvent = new Event('named-event');" |
89 "var cb1 = function() {};" | 84 "var cb1 = function() {};" |
90 "var cb2 = function() {};" | 85 "var cb2 = function() {};" |
91 "myEvent.addListener(cb1);" | 86 "myEvent.addListener(cb1);" |
92 "myEvent.addListener(cb2);" | 87 "myEvent.addListener(cb2);" |
93 "myEvent.removeListener(cb1);" | 88 "myEvent.removeListener(cb1);" |
94 "assert.AssertTrue(!!eventNatives.attachedListeners['named-event']);" | 89 "assert.AssertTrue(!!eventNatives.attachedListeners['named-event']);" |
95 "myEvent.removeListener(cb2);" | 90 "myEvent.removeListener(cb2);" |
96 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); | 91 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); |
97 context_->module_system()->Require("test"); | 92 env_.module_system()->Require("test"); |
98 } | 93 } |
99 | 94 |
100 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { | 95 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { |
101 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 96 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
102 context_->module_system()); | 97 env_.RegisterModule( |
103 RegisterModule("test", | 98 "test", |
104 "var assert = requireNative('assert');" | 99 "var assert = requireNative('assert');" |
105 "var Event = require('event_bindings').Event;" | 100 "var Event = require('event_bindings').Event;" |
106 "var eventNatives = requireNative('event_natives');" | 101 "var eventNatives = requireNative('event_natives');" |
107 "var myEvent = new Event('named-event');" | 102 "var myEvent = new Event('named-event');" |
108 "var cb1 = function() {};" | 103 "var cb1 = function() {};" |
109 "var cb2 = function() {};" | 104 "var cb2 = function() {};" |
110 "myEvent.addListener(cb1);" | 105 "myEvent.addListener(cb1);" |
111 "myEvent.addListener(cb2);" | 106 "myEvent.addListener(cb2);" |
112 "require('unload_event').dispatch();" | 107 "require('unload_event').dispatch();" |
113 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); | 108 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); |
114 context_->module_system()->Require("test"); | 109 env_.module_system()->Require("test"); |
115 } | 110 } |
116 | 111 |
117 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { | 112 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { |
118 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 113 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
119 context_->module_system()); | 114 env_.RegisterModule( |
120 RegisterModule("test", | 115 "test", |
121 "var assert = requireNative('assert');" | 116 "var assert = requireNative('assert');" |
122 "var Event = require('event_bindings').Event;" | 117 "var Event = require('event_bindings').Event;" |
123 "var eventNatives = requireNative('event_natives');" | 118 "var eventNatives = requireNative('event_natives');" |
124 "var myEvent = new Event('named-event');" | 119 "var myEvent = new Event('named-event');" |
125 "var cb1 = function() {};" | 120 "var cb1 = function() {};" |
126 "myEvent.addListener(cb1);" | 121 "myEvent.addListener(cb1);" |
127 "myEvent.addListener(cb1);" | 122 "myEvent.addListener(cb1);" |
128 "require('unload_event').dispatch();" | 123 "require('unload_event').dispatch();" |
129 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); | 124 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);"); |
130 context_->module_system()->Require("test"); | 125 env_.module_system()->Require("test"); |
131 } | 126 } |
132 | 127 |
133 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { | 128 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { |
134 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 129 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
135 context_->module_system()); | 130 env_.RegisterModule( |
136 RegisterModule("test", | 131 "test", |
137 "var Event = require('event_bindings').Event;" | 132 "var Event = require('event_bindings').Event;" |
138 "var eventOpts = {supportsRules: true};" | 133 "var eventOpts = {supportsRules: true};" |
139 "var assert = requireNative('assert');" | 134 "var assert = requireNative('assert');" |
140 "var caught = false;" | 135 "var caught = false;" |
141 "try {" | 136 "try {" |
142 " var myEvent = new Event(undefined, undefined, eventOpts);" | 137 " var myEvent = new Event(undefined, undefined, eventOpts);" |
143 "} catch (e) {" | 138 "} catch (e) {" |
144 " caught = true;" | 139 " caught = true;" |
145 "}" | 140 "}" |
146 "assert.AssertTrue(caught);"); | 141 "assert.AssertTrue(caught);"); |
147 context_->module_system()->Require("test"); | 142 env_.module_system()->Require("test"); |
148 } | 143 } |
149 | 144 |
150 TEST_F(EventUnittest, NamedEventDispatch) { | 145 TEST_F(EventUnittest, NamedEventDispatch) { |
151 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 146 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
152 context_->module_system()); | 147 env_.RegisterModule( |
153 RegisterModule("test", | 148 "test", |
154 "var Event = require('event_bindings').Event;" | 149 "var Event = require('event_bindings').Event;" |
155 "var dispatchEvent = require('event_bindings').dispatchEvent;" | 150 "var dispatchEvent = require('event_bindings').dispatchEvent;" |
156 "var assert = requireNative('assert');" | 151 "var assert = requireNative('assert');" |
157 "var e = new Event('myevent');" | 152 "var e = new Event('myevent');" |
158 "var called = false;" | 153 "var called = false;" |
159 "e.addListener(function() { called = true; });" | 154 "e.addListener(function() { called = true; });" |
160 "dispatchEvent('myevent', []);" | 155 "dispatchEvent('myevent', []);" |
161 "assert.AssertTrue(called);"); | 156 "assert.AssertTrue(called);"); |
162 context_->module_system()->Require("test"); | 157 env_.module_system()->Require("test"); |
163 } | 158 } |
164 | 159 |
165 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { | 160 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { |
166 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 161 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
167 context_->module_system()); | 162 env_.RegisterModule("test", |
168 RegisterModule("test", | 163 "var Event = require('event_bindings').Event;" |
169 "var Event = require('event_bindings').Event;" | 164 "var assert = requireNative('assert');" |
170 "var assert = requireNative('assert');" | 165 "var e = new Event('myevent');" |
171 "var e = new Event('myevent');" | 166 "var filter = [{" |
172 "var filter = [{" | 167 " url: {hostSuffix: 'google.com'}," |
173 " url: {hostSuffix: 'google.com'}," | 168 "}];" |
174 "}];" | 169 "var caught = false;" |
175 "var caught = false;" | 170 "try {" |
176 "try {" | 171 " e.addListener(function() {}, filter);" |
177 " e.addListener(function() {}, filter);" | 172 "} catch (e) {" |
178 "} catch (e) {" | 173 " caught = true;" |
179 " caught = true;" | 174 "}" |
180 "}" | 175 "assert.AssertTrue(caught);"); |
181 "assert.AssertTrue(caught);"); | 176 env_.module_system()->Require("test"); |
182 context_->module_system()->Require("test"); | |
183 } | 177 } |
184 | 178 |
185 TEST_F(EventUnittest, FilteredEventsAttachment) { | 179 TEST_F(EventUnittest, FilteredEventsAttachment) { |
186 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 180 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
187 context_->module_system()); | 181 env_.RegisterModule( |
188 RegisterModule("test", | 182 "test", |
189 "var Event = require('event_bindings').Event;" | 183 "var Event = require('event_bindings').Event;" |
190 "var assert = requireNative('assert');" | 184 "var assert = requireNative('assert');" |
191 "var bindings = requireNative('event_natives');" | 185 "var bindings = requireNative('event_natives');" |
192 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 186 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
193 "var e = new Event('myevent', undefined, eventOpts);" | 187 "var e = new Event('myevent', undefined, eventOpts);" |
194 "var cb = function() {};" | 188 "var cb = function() {};" |
195 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 189 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
196 "e.addListener(cb, filters);" | 190 "e.addListener(cb, filters);" |
197 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 191 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
198 "e.removeListener(cb);" | 192 "e.removeListener(cb);" |
199 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 193 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
200 context_->module_system()->Require("test"); | 194 env_.module_system()->Require("test"); |
201 } | 195 } |
202 | 196 |
203 TEST_F(EventUnittest, DetachFilteredEvent) { | 197 TEST_F(EventUnittest, DetachFilteredEvent) { |
204 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 198 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
205 context_->module_system()); | 199 env_.RegisterModule( |
206 RegisterModule("test", | 200 "test", |
207 "var Event = require('event_bindings').Event;" | 201 "var Event = require('event_bindings').Event;" |
208 "var assert = requireNative('assert');" | 202 "var assert = requireNative('assert');" |
209 "var bindings = requireNative('event_natives');" | 203 "var bindings = requireNative('event_natives');" |
210 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 204 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
211 "var e = new Event('myevent', undefined, eventOpts);" | 205 "var e = new Event('myevent', undefined, eventOpts);" |
212 "var cb1 = function() {};" | 206 "var cb1 = function() {};" |
213 "var cb2 = function() {};" | 207 "var cb2 = function() {};" |
214 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 208 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
215 "e.addListener(cb1, filters);" | 209 "e.addListener(cb1, filters);" |
216 "e.addListener(cb2, filters);" | 210 "e.addListener(cb2, filters);" |
217 "privates(e).impl.detach_();" | 211 "privates(e).impl.detach_();" |
218 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 212 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
219 context_->module_system()->Require("test"); | 213 env_.module_system()->Require("test"); |
220 } | 214 } |
221 | 215 |
222 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { | 216 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { |
223 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 217 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
224 context_->module_system()); | 218 env_.RegisterModule( |
225 RegisterModule("test", | 219 "test", |
226 "var Event = require('event_bindings').Event;" | 220 "var Event = require('event_bindings').Event;" |
227 "var assert = requireNative('assert');" | 221 "var assert = requireNative('assert');" |
228 "var bindings = requireNative('event_natives');" | 222 "var bindings = requireNative('event_natives');" |
229 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 223 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
230 "var e = new Event('myevent', undefined, eventOpts);" | 224 "var e = new Event('myevent', undefined, eventOpts);" |
231 "var cb = function() {};" | 225 "var cb = function() {};" |
232 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 226 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
233 "e.addListener(cb, filters);" | 227 "e.addListener(cb, filters);" |
234 "e.addListener(cb, filters);" | 228 "e.addListener(cb, filters);" |
235 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 229 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
236 "e.removeListener(cb);" | 230 "e.removeListener(cb);" |
237 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 231 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
238 "e.removeListener(cb);" | 232 "e.removeListener(cb);" |
239 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 233 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
240 context_->module_system()->Require("test"); | 234 env_.module_system()->Require("test"); |
241 } | 235 } |
242 | 236 |
243 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { | 237 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { |
244 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 238 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
245 context_->module_system()); | 239 env_.RegisterModule( |
246 RegisterModule("test", | 240 "test", |
247 "var Event = require('event_bindings').Event;" | 241 "var Event = require('event_bindings').Event;" |
248 "var assert = requireNative('assert');" | 242 "var assert = requireNative('assert');" |
249 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 243 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
250 "var e = new Event('myevent', undefined, eventOpts);" | 244 "var e = new Event('myevent', undefined, eventOpts);" |
251 "var cb = function() {};" | 245 "var cb = function() {};" |
252 "var filters = {url: {hostSuffix: 'google.com'}};" | 246 "var filters = {url: {hostSuffix: 'google.com'}};" |
253 "var caught = false;" | 247 "var caught = false;" |
254 "try {" | 248 "try {" |
255 " e.addListener(cb, filters);" | 249 " e.addListener(cb, filters);" |
256 "} catch (e) {" | 250 "} catch (e) {" |
257 " caught = true;" | 251 " caught = true;" |
258 "}" | 252 "}" |
259 "assert.AssertTrue(caught);"); | 253 "assert.AssertTrue(caught);"); |
260 context_->module_system()->Require("test"); | 254 env_.module_system()->Require("test"); |
261 } | 255 } |
262 | 256 |
263 TEST_F(EventUnittest, MaxListeners) { | 257 TEST_F(EventUnittest, MaxListeners) { |
264 ModuleSystem::NativesEnabledScope natives_enabled_scope( | 258 ModuleSystem::NativesEnabledScope natives_enabled_scope(env_.module_system()); |
265 context_->module_system()); | 259 env_.RegisterModule( |
266 RegisterModule("test", | 260 "test", |
267 "var Event = require('event_bindings').Event;" | 261 "var Event = require('event_bindings').Event;" |
268 "var assert = requireNative('assert');" | 262 "var assert = requireNative('assert');" |
269 "var eventOpts = {supportsListeners: true, maxListeners: 1};" | 263 "var eventOpts = {supportsListeners: true, maxListeners: 1};" |
270 "var e = new Event('myevent', undefined, eventOpts);" | 264 "var e = new Event('myevent', undefined, eventOpts);" |
271 "var cb = function() {};" | 265 "var cb = function() {};" |
272 "var caught = false;" | 266 "var caught = false;" |
273 "try {" | 267 "try {" |
274 " e.addListener(cb);" | 268 " e.addListener(cb);" |
275 "} catch (e) {" | 269 "} catch (e) {" |
276 " caught = true;" | 270 " caught = true;" |
277 "}" | 271 "}" |
278 "assert.AssertTrue(!caught);" | 272 "assert.AssertTrue(!caught);" |
279 "try {" | 273 "try {" |
280 " e.addListener(cb);" | 274 " e.addListener(cb);" |
281 "} catch (e) {" | 275 "} catch (e) {" |
282 " caught = true;" | 276 " caught = true;" |
283 "}" | 277 "}" |
284 "assert.AssertTrue(caught);"); | 278 "assert.AssertTrue(caught);"); |
285 context_->module_system()->Require("test"); | 279 env_.module_system()->Require("test"); |
286 } | 280 } |
287 | 281 |
288 } // namespace | 282 } // namespace |
289 } // namespace extensions | 283 } // namespace extensions |
OLD | NEW |