Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: chrome/renderer/extensions/event_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698