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