diff options
Diffstat (limited to 'addon-sdk/source/test/test-deprecate.js')
-rw-r--r-- | addon-sdk/source/test/test-deprecate.js | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/addon-sdk/source/test/test-deprecate.js b/addon-sdk/source/test/test-deprecate.js new file mode 100644 index 000000000..c1bd443c6 --- /dev/null +++ b/addon-sdk/source/test/test-deprecate.js @@ -0,0 +1,160 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const deprecate = require("sdk/util/deprecate"); +const { LoaderWithHookedConsole } = require("sdk/test/loader"); +const { get, set } = require("sdk/preferences/service"); +const PREFERENCE = "devtools.errorconsole.deprecation_warnings"; + +exports["test Deprecate Usage"] = function testDeprecateUsage(assert) { + set(PREFERENCE, true); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); + + function functionIsDeprecated() { + deprecate.deprecateUsage("foo"); + } + + functionIsDeprecated(); + + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); + + let msg = messages[0].msg; + + assert.ok(msg.indexOf("foo") !== -1, + "message contains the given message"); + assert.ok(msg.indexOf("functionIsDeprecated") !== -1, + "message contains name of the caller function"); + assert.ok(msg.indexOf(module.uri) !== -1, + "message contains URI of the caller module"); + + loader.unload(); +} + +exports["test Deprecate Function"] = function testDeprecateFunction(assert) { + set(PREFERENCE, true); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); + + let self = {}; + let arg1 = "foo"; + let arg2 = {}; + + function originalFunction(a1, a2) { + assert.equal(this, self); + assert.equal(a1, arg1); + assert.equal(a2, arg2); + }; + + let deprecateFunction = deprecate.deprecateFunction(originalFunction, + "bar"); + + deprecateFunction.call(self, arg1, arg2); + + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); + + let msg = messages[0].msg; + assert.ok(msg.indexOf("bar") !== -1, "message contains the given message"); + assert.ok(msg.indexOf("testDeprecateFunction") !== -1, + "message contains name of the caller function"); + assert.ok(msg.indexOf(module.uri) !== -1, + "message contains URI of the caller module"); + + loader.unload(); +} + +exports.testDeprecateEvent = function(assert, done) { + set(PREFERENCE, true); + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); + + let { on, emit } = loader.require('sdk/event/core'); + let testObj = {}; + testObj.on = deprecate.deprecateEvent(on.bind(null, testObj), 'BAD', ['fire']); + + testObj.on('fire', function() { + testObj.on('water', function() { + assert.equal(messages.length, 1, "only one error is dispatched"); + loader.unload(); + done(); + }) + assert.equal(messages.length, 1, "only one error is dispatched"); + emit(testObj, 'water'); + }); + + assert.equal(messages.length, 1, "only one error is dispatched"); + assert.equal(messages[0].type, "error", "the console message is an error"); + let msg = messages[0].msg; + assert.ok(msg.indexOf("BAD") !== -1, "message contains the given message"); + assert.ok(msg.indexOf("deprecateEvent") !== -1, + "message contains name of the caller function"); + assert.ok(msg.indexOf(module.uri) !== -1, + "message contains URI of the caller module"); + + emit(testObj, 'fire'); +} + +exports.testDeprecateSettingToggle = function (assert) { + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); + + function fn () { deprecate.deprecateUsage("foo"); } + + set(PREFERENCE, false); + fn(); + assert.equal(messages.length, 0, 'no deprecation warnings'); + + set(PREFERENCE, true); + fn(); + assert.equal(messages.length, 1, 'deprecation warnings when toggled'); + + set(PREFERENCE, false); + fn(); + assert.equal(messages.length, 1, 'no new deprecation warnings'); +}; + +exports.testDeprecateSetting = function (assert, done) { + // Set devtools.errorconsole.deprecation_warnings to false + set(PREFERENCE, false); + + let { loader, messages } = LoaderWithHookedConsole(module); + let deprecate = loader.require("sdk/util/deprecate"); + + // deprecateUsage test + function functionIsDeprecated() { + deprecate.deprecateUsage("foo"); + } + functionIsDeprecated(); + + assert.equal(messages.length, 0, + "no errors dispatched on deprecateUsage"); + + // deprecateFunction test + function originalFunction() {}; + + let deprecateFunction = deprecate.deprecateFunction(originalFunction, + "bar"); + deprecateFunction(); + + assert.equal(messages.length, 0, + "no errors dispatched on deprecateFunction"); + + // deprecateEvent + let { on, emit } = loader.require('sdk/event/core'); + let testObj = {}; + testObj.on = deprecate.deprecateEvent(on.bind(null, testObj), 'BAD', ['fire']); + + testObj.on('fire', () => { + assert.equal(messages.length, 0, + "no errors dispatched on deprecateEvent"); + done(); + }); + + emit(testObj, 'fire'); +} + +require("sdk/test").run(exports); |