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