summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/test-deprecate.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/test-deprecate.js')
-rw-r--r--addon-sdk/source/test/test-deprecate.js160
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);