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 "var Event = require('event').bindings;" |
83 "var eventBindings = requireNative('event_bindings');" | 86 "var eventBindings = requireNative('event_bindings');" |
84 "var myEvent = new event.Event('named-event');" | 87 "var myEvent = new Event('named-event');" |
85 "var cb1 = function() {};" | 88 "var cb1 = function() {};" |
86 "var cb2 = function() {};" | 89 "var cb2 = function() {};" |
87 "myEvent.addListener(cb1);" | 90 "myEvent.addListener(cb1);" |
88 "myEvent.addListener(cb2);" | 91 "myEvent.addListener(cb2);" |
89 "myEvent.removeListener(cb1);" | 92 "myEvent.removeListener(cb1);" |
90 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" | 93 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" |
91 "myEvent.removeListener(cb2);" | 94 "myEvent.removeListener(cb2);" |
92 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 95 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
93 module_system_->Require("test"); | 96 module_system_->Require("test"); |
94 } | 97 } |
95 | 98 |
96 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { | 99 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { |
97 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 100 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
98 RegisterModule("test", | 101 RegisterModule("test", |
99 "var assert = requireNative('assert');" | 102 "var assert = requireNative('assert');" |
100 "var event = require('event');" | 103 "var Event = require('event').bindings;" |
101 "var eventBindings = requireNative('event_bindings');" | 104 "var eventBindings = requireNative('event_bindings');" |
102 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 105 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
103 "var myEvent = new event.Event('named-event');" | 106 "var myEvent = new Event('named-event');" |
104 "var cb1 = function() {};" | 107 "var cb1 = function() {};" |
105 "var cb2 = function() {};" | 108 "var cb2 = function() {};" |
106 "myEvent.addListener(cb1);" | 109 "myEvent.addListener(cb1);" |
107 "myEvent.addListener(cb2);" | 110 "myEvent.addListener(cb2);" |
108 "chromeHidden.dispatchOnUnload();" | 111 "chromeHidden.dispatchOnUnload();" |
109 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 112 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
110 module_system_->Require("test"); | 113 module_system_->Require("test"); |
111 } | 114 } |
112 | 115 |
113 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { | 116 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { |
114 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 117 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
115 RegisterModule("test", | 118 RegisterModule("test", |
116 "var assert = requireNative('assert');" | 119 "var assert = requireNative('assert');" |
117 "var event = require('event');" | 120 "var Event = require('event').bindings;" |
118 "var eventBindings = requireNative('event_bindings');" | 121 "var eventBindings = requireNative('event_bindings');" |
119 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 122 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
120 "var myEvent = new event.Event('named-event');" | 123 "var myEvent = new Event('named-event');" |
121 "var cb1 = function() {};" | 124 "var cb1 = function() {};" |
122 "myEvent.addListener(cb1);" | 125 "myEvent.addListener(cb1);" |
123 "myEvent.addListener(cb1);" | 126 "myEvent.addListener(cb1);" |
124 "chromeHidden.dispatchOnUnload();" | 127 "chromeHidden.dispatchOnUnload();" |
125 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 128 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
126 module_system_->Require("test"); | 129 module_system_->Require("test"); |
127 } | 130 } |
128 | 131 |
129 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { | 132 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { |
130 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 133 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
131 RegisterModule("test", | 134 RegisterModule("test", |
132 "var event = require('event');" | 135 "var Event = require('event').bindings;" |
133 "var eventOpts = {supportsRules: true};" | 136 "var eventOpts = {supportsRules: true};" |
134 "var assert = requireNative('assert');" | 137 "var assert = requireNative('assert');" |
135 "var caught = false;" | 138 "var caught = false;" |
136 "try {" | 139 "try {" |
137 " var myEvent = new event.Event(undefined, undefined, eventOpts);" | 140 " var myEvent = new Event(undefined, undefined, eventOpts);" |
138 "} catch (e) {" | 141 "} catch (e) {" |
139 " caught = true;" | 142 " caught = true;" |
140 "}" | 143 "}" |
141 "assert.AssertTrue(caught);"); | 144 "assert.AssertTrue(caught);"); |
142 module_system_->Require("test"); | 145 module_system_->Require("test"); |
143 } | 146 } |
144 | 147 |
145 TEST_F(EventUnittest, NamedEventDispatch) { | 148 TEST_F(EventUnittest, NamedEventDispatch) { |
146 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 149 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
147 RegisterModule("test", | 150 RegisterModule("test", |
148 "var event = require('event');" | 151 "var Event = require('event').bindings;" |
149 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 152 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
150 "var assert = requireNative('assert');" | 153 "var assert = requireNative('assert');" |
151 "var e = new event.Event('myevent');" | 154 "var e = new Event('myevent');" |
152 "var called = false;" | 155 "var called = false;" |
153 "e.addListener(function() { called = true; });" | 156 "e.addListener(function() { called = true; });" |
154 "chromeHidden.Event.dispatchEvent('myevent', []);" | 157 "chromeHidden.Event.dispatchEvent('myevent', []);" |
155 "assert.AssertTrue(called);"); | 158 "assert.AssertTrue(called);"); |
156 module_system_->Require("test"); | 159 module_system_->Require("test"); |
157 } | 160 } |
158 | 161 |
159 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { | 162 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { |
160 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 163 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
161 RegisterModule("test", | 164 RegisterModule("test", |
162 "var event = require('event');" | 165 "var Event = require('event').bindings;" |
163 "var assert = requireNative('assert');" | 166 "var assert = requireNative('assert');" |
164 "var e = new event.Event('myevent');" | 167 "var e = new Event('myevent');" |
165 "var filter = [{" | 168 "var filter = [{" |
166 " url: {hostSuffix: 'google.com'}," | 169 " url: {hostSuffix: 'google.com'}," |
167 "}];" | 170 "}];" |
168 "var caught = false;" | 171 "var caught = false;" |
169 "try {" | 172 "try {" |
170 " e.addListener(function() {}, filter);" | 173 " e.addListener(function() {}, filter);" |
171 "} catch (e) {" | 174 "} catch (e) {" |
172 " caught = true;" | 175 " caught = true;" |
173 "}" | 176 "}" |
174 "assert.AssertTrue(caught);"); | 177 "assert.AssertTrue(caught);"); |
175 module_system_->Require("test"); | 178 module_system_->Require("test"); |
176 } | 179 } |
177 | 180 |
178 TEST_F(EventUnittest, FilteredEventsAttachment) { | 181 TEST_F(EventUnittest, FilteredEventsAttachment) { |
179 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 182 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
180 RegisterModule("test", | 183 RegisterModule("test", |
181 "var event = require('event');" | 184 "var Event = require('event').bindings;" |
182 "var assert = requireNative('assert');" | 185 "var assert = requireNative('assert');" |
183 "var bindings = requireNative('event_bindings');" | 186 "var bindings = requireNative('event_bindings');" |
184 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 187 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
185 "var e = new event.Event('myevent', undefined, eventOpts);" | 188 "var e = new Event('myevent', undefined, eventOpts);" |
186 "var cb = function() {};" | 189 "var cb = function() {};" |
187 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 190 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
188 "e.addListener(cb, filters);" | 191 "e.addListener(cb, filters);" |
189 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 192 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
190 "e.removeListener(cb);" | 193 "e.removeListener(cb);" |
191 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 194 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
192 module_system_->Require("test"); | 195 module_system_->Require("test"); |
193 } | 196 } |
194 | 197 |
195 TEST_F(EventUnittest, DetachFilteredEvent) { | 198 TEST_F(EventUnittest, DetachFilteredEvent) { |
196 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 199 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
197 RegisterModule("test", | 200 RegisterModule("test", |
198 "var event = require('event');" | 201 "var Event = require('event').bindings;" |
199 "var assert = requireNative('assert');" | 202 "var assert = requireNative('assert');" |
200 "var bindings = requireNative('event_bindings');" | 203 "var bindings = requireNative('event_bindings');" |
201 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 204 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
202 "var e = new event.Event('myevent', undefined, eventOpts);" | 205 "var e = new Event('myevent', undefined, eventOpts);" |
203 "var cb1 = function() {};" | 206 "var cb1 = function() {};" |
204 "var cb2 = function() {};" | 207 "var cb2 = function() {};" |
205 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 208 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
206 "e.addListener(cb1, filters);" | 209 "e.addListener(cb1, filters);" |
207 "e.addListener(cb2, filters);" | 210 "e.addListener(cb2, filters);" |
208 "e.detach_();" | 211 "e.detach_();" |
209 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 212 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
210 module_system_->Require("test"); | 213 module_system_->Require("test"); |
211 } | 214 } |
212 | 215 |
213 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { | 216 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { |
214 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 217 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
215 RegisterModule("test", | 218 RegisterModule("test", |
216 "var event = require('event');" | 219 "var Event = require('event').bindings;" |
217 "var assert = requireNative('assert');" | 220 "var assert = requireNative('assert');" |
218 "var bindings = requireNative('event_bindings');" | 221 "var bindings = requireNative('event_bindings');" |
219 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 222 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
220 "var e = new event.Event('myevent', undefined, eventOpts);" | 223 "var e = new Event('myevent', undefined, eventOpts);" |
221 "var cb = function() {};" | 224 "var cb = function() {};" |
222 "var filters = {url: [{hostSuffix: 'google.com'}]};" | 225 "var filters = {url: [{hostSuffix: 'google.com'}]};" |
223 "e.addListener(cb, filters);" | 226 "e.addListener(cb, filters);" |
224 "e.addListener(cb, filters);" | 227 "e.addListener(cb, filters);" |
225 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 228 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
226 "e.removeListener(cb);" | 229 "e.removeListener(cb);" |
227 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" | 230 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" |
228 "e.removeListener(cb);" | 231 "e.removeListener(cb);" |
229 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); | 232 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); |
230 module_system_->Require("test"); | 233 module_system_->Require("test"); |
231 } | 234 } |
232 | 235 |
233 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { | 236 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { |
234 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 237 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
235 RegisterModule("test", | 238 RegisterModule("test", |
236 "var event = require('event');" | 239 "var Event = require('event').bindings;" |
237 "var assert = requireNative('assert');" | 240 "var assert = requireNative('assert');" |
238 "var eventOpts = {supportsListeners: true, supportsFilters: true};" | 241 "var eventOpts = {supportsListeners: true, supportsFilters: true};" |
239 "var e = new event.Event('myevent', undefined, eventOpts);" | 242 "var e = new Event('myevent', undefined, eventOpts);" |
240 "var cb = function() {};" | 243 "var cb = function() {};" |
241 "var filters = {url: {hostSuffix: 'google.com'}};" | 244 "var filters = {url: {hostSuffix: 'google.com'}};" |
242 "var caught = false;" | 245 "var caught = false;" |
243 "try {" | 246 "try {" |
244 " e.addListener(cb, filters);" | 247 " e.addListener(cb, filters);" |
245 "} catch (e) {" | 248 "} catch (e) {" |
246 " caught = true;" | 249 " caught = true;" |
247 "}" | 250 "}" |
248 "assert.AssertTrue(caught);"); | 251 "assert.AssertTrue(caught);"); |
249 module_system_->Require("test"); | 252 module_system_->Require("test"); |
250 } | 253 } |
251 | 254 |
252 TEST_F(EventUnittest, MaxListeners) { | 255 TEST_F(EventUnittest, MaxListeners) { |
253 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 256 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
254 RegisterModule("test", | 257 RegisterModule("test", |
255 "var event = require('event');" | 258 "var Event = require('event').bindings;" |
256 "var assert = requireNative('assert');" | 259 "var assert = requireNative('assert');" |
257 "var eventOpts = {supportsListeners: true, maxListeners: 1};" | 260 "var eventOpts = {supportsListeners: true, maxListeners: 1};" |
258 "var e = new event.Event('myevent', undefined, eventOpts);" | 261 "var e = new Event('myevent', undefined, eventOpts);" |
259 "var cb = function() {};" | 262 "var cb = function() {};" |
260 "var caught = false;" | 263 "var caught = false;" |
261 "try {" | 264 "try {" |
262 " e.addListener(cb);" | 265 " e.addListener(cb);" |
263 "} catch (e) {" | 266 "} catch (e) {" |
264 " caught = true;" | 267 " caught = true;" |
265 "}" | 268 "}" |
266 "assert.AssertTrue(!caught);" | 269 "assert.AssertTrue(!caught);" |
267 "try {" | 270 "try {" |
268 " e.addListener(cb);" | 271 " e.addListener(cb);" |
269 "} catch (e) {" | 272 "} catch (e) {" |
270 " caught = true;" | 273 " caught = true;" |
271 "}" | 274 "}" |
272 "assert.AssertTrue(caught);"); | 275 "assert.AssertTrue(caught);"); |
273 module_system_->Require("test"); | 276 module_system_->Require("test"); |
274 } | 277 } |
275 | 278 |
276 } // namespace | 279 } // namespace |
277 } // namespace extensions | 280 } // namespace extensions |
OLD | NEW |