| 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 |