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