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 { |
11 | 11 |
12 class EventUnittest : public ModuleSystemTest { | 12 class EventUnittest : public ModuleSystemTest { |
13 virtual void SetUp() OVERRIDE { | 13 virtual void SetUp() OVERRIDE { |
14 ModuleSystemTest::SetUp(); | 14 ModuleSystemTest::SetUp(); |
15 module_system_->RunString("chrome = {};", "setup-chrome"); | 15 module_system_->RunString("chrome = {};", "setup-chrome"); |
16 | 16 |
17 RegisterModule("event", IDR_EVENT_BINDINGS_JS); | 17 RegisterModule("event", IDR_EVENT_BINDINGS_JS); |
18 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS); | 18 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS); |
19 RegisterModule("utils", IDR_UTILS_JS); | 19 RegisterModule("utils", IDR_UTILS_JS); |
20 RegisterModule("json_schema", IDR_JSON_SCHEMA_JS); | 20 RegisterModule("json_schema", IDR_JSON_SCHEMA_JS); |
| 21 RegisterModule("unload_event", IDR_UNLOAD_EVENT_JS); |
21 | 22 |
22 // Mock out the native handler for event_bindings. These mocks will fail if | 23 // Mock out the native handler for event_bindings. These mocks will fail if |
23 // any invariants maintained by the real event_bindings are broken. | 24 // any invariants maintained by the real event_bindings are broken. |
24 OverrideNativeHandler("event_bindings", | 25 OverrideNativeHandler("event_bindings", |
25 "var assert = requireNative('assert');" | 26 "var assert = requireNative('assert');" |
26 "var attachedListeners = exports.attachedListeners = {};" | 27 "var attachedListeners = exports.attachedListeners = {};" |
27 "var attachedFilteredListeners = " | 28 "var attachedFilteredListeners = " |
28 " exports.attachedFilteredListeners = {};" | 29 " exports.attachedFilteredListeners = {};" |
29 "var nextId = 0;" | 30 "var nextId = 0;" |
30 "var idToName = {};" | 31 "var idToName = {};" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 "var assert = requireNative('assert');" | 107 "var assert = requireNative('assert');" |
107 "require('event');" | 108 "require('event');" |
108 "var Event = requireNative('chrome').GetChrome().Event;" | 109 "var Event = requireNative('chrome').GetChrome().Event;" |
109 "var eventBindings = requireNative('event_bindings');" | 110 "var eventBindings = requireNative('event_bindings');" |
110 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 111 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
111 "var myEvent = new Event('named-event');" | 112 "var myEvent = new Event('named-event');" |
112 "var cb1 = function() {};" | 113 "var cb1 = function() {};" |
113 "var cb2 = function() {};" | 114 "var cb2 = function() {};" |
114 "myEvent.addListener(cb1);" | 115 "myEvent.addListener(cb1);" |
115 "myEvent.addListener(cb2);" | 116 "myEvent.addListener(cb2);" |
116 "chromeHidden.dispatchOnUnload();" | 117 "require('unload_event').dispatch();" |
117 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 118 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
118 module_system_->Require("test"); | 119 module_system_->Require("test"); |
119 } | 120 } |
120 | 121 |
121 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { | 122 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { |
122 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 123 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
123 RegisterModule("test", | 124 RegisterModule("test", |
124 "var assert = requireNative('assert');" | 125 "var assert = requireNative('assert');" |
125 "require('event');" | 126 "require('event');" |
126 "var Event = requireNative('chrome').GetChrome().Event;" | 127 "var Event = requireNative('chrome').GetChrome().Event;" |
127 "var eventBindings = requireNative('event_bindings');" | 128 "var eventBindings = requireNative('event_bindings');" |
128 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 129 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
129 "var myEvent = new Event('named-event');" | 130 "var myEvent = new Event('named-event');" |
130 "var cb1 = function() {};" | 131 "var cb1 = function() {};" |
131 "myEvent.addListener(cb1);" | 132 "myEvent.addListener(cb1);" |
132 "myEvent.addListener(cb1);" | 133 "myEvent.addListener(cb1);" |
133 "chromeHidden.dispatchOnUnload();" | 134 "require('unload_event').dispatch();" |
134 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); | 135 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); |
135 module_system_->Require("test"); | 136 module_system_->Require("test"); |
136 } | 137 } |
137 | 138 |
138 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { | 139 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { |
139 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 140 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
140 RegisterModule("test", | 141 RegisterModule("test", |
141 "require('event');" | 142 "require('event');" |
142 "var Event = requireNative('chrome').GetChrome().Event;" | 143 "var Event = requireNative('chrome').GetChrome().Event;" |
143 "var eventOpts = {supportsRules: true};" | 144 "var eventOpts = {supportsRules: true};" |
144 "var assert = requireNative('assert');" | 145 "var assert = requireNative('assert');" |
145 "var caught = false;" | 146 "var caught = false;" |
146 "try {" | 147 "try {" |
147 " var myEvent = new Event(undefined, undefined, eventOpts);" | 148 " var myEvent = new Event(undefined, undefined, eventOpts);" |
148 "} catch (e) {" | 149 "} catch (e) {" |
149 " caught = true;" | 150 " caught = true;" |
150 "}" | 151 "}" |
151 "assert.AssertTrue(caught);"); | 152 "assert.AssertTrue(caught);"); |
152 module_system_->Require("test"); | 153 module_system_->Require("test"); |
153 } | 154 } |
154 | 155 |
155 TEST_F(EventUnittest, NamedEventDispatch) { | 156 TEST_F(EventUnittest, NamedEventDispatch) { |
156 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 157 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
157 RegisterModule("test", | 158 RegisterModule("test", |
158 "require('event');" | 159 "var event = require('event');" |
159 "var Event = requireNative('chrome').GetChrome().Event;" | 160 "var Event = requireNative('chrome').GetChrome().Event;" |
160 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" | 161 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" |
161 "var assert = requireNative('assert');" | 162 "var assert = requireNative('assert');" |
162 "var e = new Event('myevent');" | 163 "var e = new Event('myevent');" |
163 "var called = false;" | 164 "var called = false;" |
164 "e.addListener(function() { called = true; });" | 165 "e.addListener(function() { called = true; });" |
165 "chromeHidden.Event.dispatchEvent('myevent', []);" | 166 "event.dispatchEvent('myevent', []);" |
166 "assert.AssertTrue(called);"); | 167 "assert.AssertTrue(called);"); |
167 module_system_->Require("test"); | 168 module_system_->Require("test"); |
168 } | 169 } |
169 | 170 |
170 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { | 171 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { |
171 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); | 172 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); |
172 RegisterModule("test", | 173 RegisterModule("test", |
173 "require('event');" | 174 "require('event');" |
174 "var Event = requireNative('chrome').GetChrome().Event;" | 175 "var Event = requireNative('chrome').GetChrome().Event;" |
175 "var assert = requireNative('assert');" | 176 "var assert = requireNative('assert');" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 " e.addListener(cb);" | 286 " e.addListener(cb);" |
286 "} catch (e) {" | 287 "} catch (e) {" |
287 " caught = true;" | 288 " caught = true;" |
288 "}" | 289 "}" |
289 "assert.AssertTrue(caught);"); | 290 "assert.AssertTrue(caught);"); |
290 module_system_->Require("test"); | 291 module_system_->Require("test"); |
291 } | 292 } |
292 | 293 |
293 } // namespace | 294 } // namespace |
294 } // namespace extensions | 295 } // namespace extensions |
OLD | NEW |