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 "grit/renderer_resources.h" | 7 #include "grit/renderer_resources.h" |
8 | 8 |
9 namespace extensions { | 9 namespace extensions { |
10 namespace { | 10 namespace { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 " var i = attachedFilteredListeners[idToName[id]].indexOf(id);" | 55 " var i = attachedFilteredListeners[idToName[id]].indexOf(id);" |
56 " attachedFilteredListeners[idToName[id]].splice(i, 1);" | 56 " attachedFilteredListeners[idToName[id]].splice(i, 1);" |
57 "};" | 57 "};" |
58 | 58 |
59 "exports.HasFilteredListener = function(name) {" | 59 "exports.HasFilteredListener = function(name) {" |
60 " return attachedFilteredListeners[name].length;" | 60 " return attachedFilteredListeners[name].length;" |
61 "};"); | 61 "};"); |
62 OverrideNativeHandler("chrome_hidden", | 62 OverrideNativeHandler("chrome_hidden", |
63 "var chromeHidden = {};" | 63 "var chromeHidden = {};" |
64 "exports.GetChromeHidden = function() { return chromeHidden; };"); | 64 "exports.GetChromeHidden = function() { return chromeHidden; };"); |
| 65 OverrideNativeHandler("chrome", |
| 66 "var chrome = {};" |
| 67 "exports.GetChrome = function() { return chrome; };"); |
65 OverrideNativeHandler("sendRequest", | 68 OverrideNativeHandler("sendRequest", |
66 "exports.sendRequest = function() {};"); | 69 "exports.sendRequest = function() {};"); |
67 OverrideNativeHandler("apiDefinitions", | 70 OverrideNativeHandler("apiDefinitions", |
68 "exports.GetExtensionAPIDefinition = function() {};"); | 71 "exports.GetExtensionAPIDefinition = function() {};"); |
69 OverrideNativeHandler("logging", | 72 OverrideNativeHandler("logging", |
70 "exports.DCHECK = function() {};"); | 73 "exports.DCHECK = function() {};"); |
71 } | 74 } |
72 }; | 75 }; |
73 | 76 |
74 TEST_F(EventUnittest, TestNothing) { | 77 TEST_F(EventUnittest, TestNothing) { |
75 ExpectNoAssertionsMade(); | 78 ExpectNoAssertionsMade(); |
76 } | 79 } |
77 | 80 |
78 TEST_F(EventUnittest, AddRemoveTwoListeners) { | 81 TEST_F(EventUnittest, AddRemoveTwoListeners) { |
79 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 82 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
80 RegisterModule("test", | 83 RegisterModule("test", |
81 "var assert = requireNative('assert');" | 84 "var assert = requireNative('assert');" |
82 "var event = require('event');" | 85 "require('event');" |
| 86 "var Event = requireNative('chrome').GetChrome().Event;" |
83 "var eventBindings = requireNative('event_bindings');" | 87 "var eventBindings = requireNative('event_bindings');" |
84 "var myEvent = new event.Event('named-event');" | 88 "var myEvent = new Event('named-event');" |
85 "var cb1 = function() {};" | 89 "var cb1 = function() {};" |
86 "var cb2 = function() {};" | 90 "var cb2 = function() {};" |
87 "myEvent.addListener(cb1);" | 91 "myEvent.addListener(cb1);" |
88 "myEvent.addListener(cb2);" | 92 "myEvent.addListener(cb2);" |
89 "myEvent.removeListener(cb1);" | 93 "myEvent.removeListener(cb1);" |
90 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" | 94 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" |
91 "myEvent.removeListener(cb2);" | 95 "myEvent.removeListener(cb2);" |
92 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 96 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
93 module_system_->Require("test"); | 97 module_system_->Require("test"); |
94 } | 98 } |
95 | 99 |
96 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { | 100 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { |
97 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 101 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
98 RegisterModule("test", | 102 RegisterModule("test", |
99 "var assert = requireNative('assert');" | 103 "var assert = requireNative('assert');" |
100 "var event = require('event');" | 104 "require('event');" |
| 105 "var Event = requireNative('chrome').GetChrome().Event;" |
101 "var eventBindings = requireNative('event_bindings');" | 106 "var eventBindings = requireNative('event_bindings');" |
102 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 107 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
103 "var myEvent = new event.Event('named-event');" | 108 "var myEvent = new Event('named-event');" |
104 "var cb1 = function() {};" | 109 "var cb1 = function() {};" |
105 "var cb2 = function() {};" | 110 "var cb2 = function() {};" |
106 "myEvent.addListener(cb1);" | 111 "myEvent.addListener(cb1);" |
107 "myEvent.addListener(cb2);" | 112 "myEvent.addListener(cb2);" |
108 "chromeHidden.dispatchOnUnload();" | 113 "chromeHidden.dispatchOnUnload();" |
109 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 114 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
110 module_system_->Require("test"); | 115 module_system_->Require("test"); |
111 } | 116 } |
112 | 117 |
113 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { | 118 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { |
114 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 119 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
115 RegisterModule("test", | 120 RegisterModule("test", |
116 "var assert = requireNative('assert');" | 121 "var assert = requireNative('assert');" |
117 "var event = require('event');" | 122 "require('event');" |
| 123 "var Event = requireNative('chrome').GetChrome().Event;" |
118 "var eventBindings = requireNative('event_bindings');" | 124 "var eventBindings = requireNative('event_bindings');" |
119 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 125 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
120 "var myEvent = new event.Event('named-event');" | 126 "var myEvent = new Event('named-event');" |
121 "var cb1 = function() {};" | 127 "var cb1 = function() {};" |
122 "myEvent.addListener(cb1);" | 128 "myEvent.addListener(cb1);" |
123 "myEvent.addListener(cb1);" | 129 "myEvent.addListener(cb1);" |
124 "chromeHidden.dispatchOnUnload();" | 130 "chromeHidden.dispatchOnUnload();" |
125 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 131 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
126 module_system_->Require("test"); | 132 module_system_->Require("test"); |
127 } | 133 } |
128 | 134 |
129 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { | 135 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { |
130 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 136 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
131 RegisterModule("test", | 137 RegisterModule("test", |
132 "var event = require('event');" | 138 "require('event');" |
| 139 "var Event = requireNative('chrome').GetChrome().Event;" |
133 "var eventOpts = {supportsRules: true};" | 140 "var eventOpts = {supportsRules: true};" |
134 "var assert = requireNative('assert');" | 141 "var assert = requireNative('assert');" |
135 "var caught = false;" | 142 "var caught = false;" |
136 "try {" | 143 "try {" |
137 " var myEvent = new event.Event(undefined, undefined, eventOpts);" | 144 " var myEvent = new Event(undefined, undefined, eventOpts);" |
138 "} catch (e) {" | 145 "} catch (e) {" |
139 " caught = true;" | 146 " caught = true;" |
140 "}" | 147 "}" |
141 "assert.AssertTrue(caught);"); | 148 "assert.AssertTrue(caught);"); |
142 module_system_->Require("test"); | 149 module_system_->Require("test"); |
143 } | 150 } |
144 | 151 |
145 TEST_F(EventUnittest, NamedEventDispatch) { | 152 TEST_F(EventUnittest, NamedEventDispatch) { |
146 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 153 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
147 RegisterModule("test", | 154 RegisterModule("test", |
148 "var event = require('event');" | 155 "require('event');" |
| 156 "var Event = requireNative('chrome').GetChrome().Event;" |
149 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 157 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
150 "var assert = requireNative('assert');" | 158 "var assert = requireNative('assert');" |
151 "var e = new event.Event('myevent');" | 159 "var e = new Event('myevent');" |
152 "var called = false;" | 160 "var called = false;" |
153 "e.addListener(function() { called = true; });" | 161 "e.addListener(function() { called = true; });" |
154 "chromeHidden.Event.dispatchEvent('myevent', []);" | 162 "chromeHidden.Event.dispatchEvent('myevent', []);" |
155 "assert.AssertTrue(called);"); | 163 "assert.AssertTrue(called);"); |
156 module_system_->Require("test"); | 164 module_system_->Require("test"); |
157 } | 165 } |
158 | 166 |
159 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { | 167 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { |
160 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 168 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
161 RegisterModule("test", | 169 RegisterModule("test", |
162 "var event = require('event');" | 170 "require('event');" |
| 171 "var Event = requireNative('chrome').GetChrome().Event;" |
163 "var assert = requireNative('assert');" | 172 "var assert = requireNative('assert');" |
164 "var e = new event.Event('myevent');" | 173 "var e = new Event('myevent');" |
165 "var filter = [{" | 174 "var filter = [{" |
166 " url: {hostSuffix: 'google.com'}," | 175 " url: {hostSuffix: 'google.com'}," |
167 "}];" | 176 "}];" |
168 "var caught = false;" | 177 "var caught = false;" |
169 "try {" | 178 "try {" |
170 " e.addListener(function() {}, filter);" | 179 " e.addListener(function() {}, filter);" |
171 "} catch (e) {" | 180 "} catch (e) {" |
172 " caught = true;" | 181 " caught = true;" |
173 "}" | 182 "}" |
174 "assert.AssertTrue(caught);"); | 183 "assert.AssertTrue(caught);"); |
175 module_system_->Require("test"); | 184 module_system_->Require("test"); |
176 } | 185 } |
177 | 186 |
178 TEST_F(EventUnittest, FilteredEventsAttachment) { | 187 TEST_F(EventUnittest, FilteredEventsAttachment) { |
179 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 188 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
180 RegisterModule("test", | 189 RegisterModule("test", |
181 "var event = require('event');" | 190 "require('event');" |
| 191 "var Event = requireNative('chrome').GetChrome().Event;" |
182 "var assert = requireNative('assert');" | 192 "var assert = requireNative('assert');" |
183 "var bindings = requireNative('event_bindings');" | 193 "var bindings = requireNative('event_bindings');" |
184 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 194 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
185 "var e = new event.Event('myevent', undefined, eventOpts);" | 195 "var e = new Event('myevent', undefined, eventOpts);" |
186 "var cb = function() {};" | 196 "var cb = function() {};" |
187 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 197 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
188 "e.addListener(cb, filters);" | 198 "e.addListener(cb, filters);" |
189 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 199 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
190 "e.removeListener(cb);" | 200 "e.removeListener(cb);" |
191 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 201 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
192 module_system_->Require("test"); | 202 module_system_->Require("test"); |
193 } | 203 } |
194 | 204 |
195 TEST_F(EventUnittest, DetachFilteredEvent) { | 205 TEST_F(EventUnittest, DetachFilteredEvent) { |
196 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 206 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
197 RegisterModule("test", | 207 RegisterModule("test", |
198 "var event = require('event');" | 208 "require('event');" |
| 209 "var Event = requireNative('chrome').GetChrome().Event;" |
199 "var assert = requireNative('assert');" | 210 "var assert = requireNative('assert');" |
200 "var bindings = requireNative('event_bindings');" | 211 "var bindings = requireNative('event_bindings');" |
201 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 212 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
202 "var e = new event.Event('myevent', undefined, eventOpts);" | 213 "var e = new Event('myevent', undefined, eventOpts);" |
203 "var cb1 = function() {};" | 214 "var cb1 = function() {};" |
204 "var cb2 = function() {};" | 215 "var cb2 = function() {};" |
205 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 216 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
206 "e.addListener(cb1, filters);" | 217 "e.addListener(cb1, filters);" |
207 "e.addListener(cb2, filters);" | 218 "e.addListener(cb2, filters);" |
208 "e.detach_();" | 219 "e.detach_();" |
209 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 220 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
210 module_system_->Require("test"); | 221 module_system_->Require("test"); |
211 } | 222 } |
212 | 223 |
213 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { | 224 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { |
214 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 225 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
215 RegisterModule("test", | 226 RegisterModule("test", |
216 "var event = require('event');" | 227 "require('event');" |
| 228 "var Event = requireNative('chrome').GetChrome().Event;" |
217 "var assert = requireNative('assert');" | 229 "var assert = requireNative('assert');" |
218 "var bindings = requireNative('event_bindings');" | 230 "var bindings = requireNative('event_bindings');" |
219 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 231 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
220 "var e = new event.Event('myevent', undefined, eventOpts);" | 232 "var e = new Event('myevent', undefined, eventOpts);" |
221 "var cb = function() {};" | 233 "var cb = function() {};" |
222 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 234 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
223 "e.addListener(cb, filters);" | 235 "e.addListener(cb, filters);" |
224 "e.addListener(cb, filters);" | 236 "e.addListener(cb, filters);" |
225 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 237 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
226 "e.removeListener(cb);" | 238 "e.removeListener(cb);" |
227 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 239 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
228 "e.removeListener(cb);" | 240 "e.removeListener(cb);" |
229 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 241 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
230 module_system_->Require("test"); | 242 module_system_->Require("test"); |
231 } | 243 } |
232 | 244 |
233 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { | 245 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { |
234 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 246 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
235 RegisterModule("test", | 247 RegisterModule("test", |
236 "var event = require('event');" | 248 "require('event');" |
| 249 "var Event = requireNative('chrome').GetChrome().Event;" |
237 "var assert = requireNative('assert');" | 250 "var assert = requireNative('assert');" |
238 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 251 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
239 "var e = new event.Event('myevent', undefined, eventOpts);" | 252 "var e = new Event('myevent', undefined, eventOpts);" |
240 "var cb = function() {};" | 253 "var cb = function() {};" |
241 "var filters = {url: {hostSuffix: 'google.com'}};" | 254 "var filters = {url: {hostSuffix: 'google.com'}};" |
242 "var caught = false;" | 255 "var caught = false;" |
243 "try {" | 256 "try {" |
244 " e.addListener(cb, filters);" | 257 " e.addListener(cb, filters);" |
245 "} catch (e) {" | 258 "} catch (e) {" |
246 " caught = true;" | 259 " caught = true;" |
247 "}" | 260 "}" |
248 "assert.AssertTrue(caught);"); | 261 "assert.AssertTrue(caught);"); |
249 module_system_->Require("test"); | 262 module_system_->Require("test"); |
250 } | 263 } |
251 | 264 |
252 TEST_F(EventUnittest, MaxListeners) { | 265 TEST_F(EventUnittest, MaxListeners) { |
253 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 266 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
254 RegisterModule("test", | 267 RegisterModule("test", |
255 "var event = require('event');" | 268 "require('event');" |
| 269 "var Event = requireNative('chrome').GetChrome().Event;" |
256 "var assert = requireNative('assert');" | 270 "var assert = requireNative('assert');" |
257 "var eventOpts = {supportsListeners: true, maxListeners: 1};" | 271 "var eventOpts = {supportsListeners: true, maxListeners: 1};" |
258 "var e = new event.Event('myevent', undefined, eventOpts);" | 272 "var e = new Event('myevent', undefined, eventOpts);" |
259 "var cb = function() {};" | 273 "var cb = function() {};" |
260 "var caught = false;" | 274 "var caught = false;" |
261 "try {" | 275 "try {" |
262 " e.addListener(cb);" | 276 " e.addListener(cb);" |
263 "} catch (e) {" | 277 "} catch (e) {" |
264 " caught = true;" | 278 " caught = true;" |
265 "}" | 279 "}" |
266 "assert.AssertTrue(!caught);" | 280 "assert.AssertTrue(!caught);" |
267 "try {" | 281 "try {" |
268 " e.addListener(cb);" | 282 " e.addListener(cb);" |
269 "} catch (e) {" | 283 "} catch (e) {" |
270 " caught = true;" | 284 " caught = true;" |
271 "}" | 285 "}" |
272 "assert.AssertTrue(caught);"); | 286 "assert.AssertTrue(caught);"); |
273 module_system_->Require("test"); | 287 module_system_->Require("test"); |
274 } | 288 } |
275 | 289 |
276 } // namespace | 290 } // namespace |
277 } // namespace extensions | 291 } // namespace extensions |
OLD | NEW |