1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/test/test-deprecate.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,160 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +'use strict'; 1.9 + 1.10 +const deprecate = require("sdk/util/deprecate"); 1.11 +const { LoaderWithHookedConsole } = require("sdk/test/loader"); 1.12 +const { get, set } = require("sdk/preferences/service"); 1.13 +const PREFERENCE = "devtools.errorconsole.deprecation_warnings"; 1.14 + 1.15 +exports["test Deprecate Usage"] = function testDeprecateUsage(assert) { 1.16 + set(PREFERENCE, true); 1.17 + let { loader, messages } = LoaderWithHookedConsole(module); 1.18 + let deprecate = loader.require("sdk/util/deprecate"); 1.19 + 1.20 + function functionIsDeprecated() { 1.21 + deprecate.deprecateUsage("foo"); 1.22 + } 1.23 + 1.24 + functionIsDeprecated(); 1.25 + 1.26 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.27 + assert.equal(messages[0].type, "error", "the console message is an error"); 1.28 + 1.29 + let msg = messages[0].msg; 1.30 + 1.31 + assert.ok(msg.indexOf("foo") !== -1, 1.32 + "message contains the given message"); 1.33 + assert.ok(msg.indexOf("functionIsDeprecated") !== -1, 1.34 + "message contains name of the caller function"); 1.35 + assert.ok(msg.indexOf(module.uri) !== -1, 1.36 + "message contains URI of the caller module"); 1.37 + 1.38 + loader.unload(); 1.39 +} 1.40 + 1.41 +exports["test Deprecate Function"] = function testDeprecateFunction(assert) { 1.42 + set(PREFERENCE, true); 1.43 + let { loader, messages } = LoaderWithHookedConsole(module); 1.44 + let deprecate = loader.require("sdk/util/deprecate"); 1.45 + 1.46 + let self = {}; 1.47 + let arg1 = "foo"; 1.48 + let arg2 = {}; 1.49 + 1.50 + function originalFunction(a1, a2) { 1.51 + assert.equal(this, self); 1.52 + assert.equal(a1, arg1); 1.53 + assert.equal(a2, arg2); 1.54 + }; 1.55 + 1.56 + let deprecateFunction = deprecate.deprecateFunction(originalFunction, 1.57 + "bar"); 1.58 + 1.59 + deprecateFunction.call(self, arg1, arg2); 1.60 + 1.61 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.62 + assert.equal(messages[0].type, "error", "the console message is an error"); 1.63 + 1.64 + let msg = messages[0].msg; 1.65 + assert.ok(msg.indexOf("bar") !== -1, "message contains the given message"); 1.66 + assert.ok(msg.indexOf("testDeprecateFunction") !== -1, 1.67 + "message contains name of the caller function"); 1.68 + assert.ok(msg.indexOf(module.uri) !== -1, 1.69 + "message contains URI of the caller module"); 1.70 + 1.71 + loader.unload(); 1.72 +} 1.73 + 1.74 +exports.testDeprecateEvent = function(assert, done) { 1.75 + set(PREFERENCE, true); 1.76 + let { loader, messages } = LoaderWithHookedConsole(module); 1.77 + let deprecate = loader.require("sdk/util/deprecate"); 1.78 + 1.79 + let { on, emit } = loader.require('sdk/event/core'); 1.80 + let testObj = {}; 1.81 + testObj.on = deprecate.deprecateEvent(on.bind(null, testObj), 'BAD', ['fire']); 1.82 + 1.83 + testObj.on('fire', function() { 1.84 + testObj.on('water', function() { 1.85 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.86 + loader.unload(); 1.87 + done(); 1.88 + }) 1.89 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.90 + emit(testObj, 'water'); 1.91 + }); 1.92 + assert.equal(messages.length, 1, "only one error is dispatched"); 1.93 + assert.equal(messages[0].type, "error", "the console message is an error"); 1.94 + let msg = messages[0].msg; 1.95 + assert.ok(msg.indexOf("BAD") !== -1, "message contains the given message"); 1.96 + assert.ok(msg.indexOf("deprecateEvent") !== -1, 1.97 + "message contains name of the caller function"); 1.98 + assert.ok(msg.indexOf(module.uri) !== -1, 1.99 + "message contains URI of the caller module"); 1.100 + 1.101 + emit(testObj, 'fire'); 1.102 +} 1.103 + 1.104 +exports.testDeprecateSettingToggle = function (assert, done) { 1.105 + let { loader, messages } = LoaderWithHookedConsole(module); 1.106 + let deprecate = loader.require("sdk/util/deprecate"); 1.107 + 1.108 + function fn () { deprecate.deprecateUsage("foo"); } 1.109 + 1.110 + set(PREFERENCE, false); 1.111 + fn(); 1.112 + assert.equal(messages.length, 0, 'no deprecation warnings'); 1.113 + 1.114 + set(PREFERENCE, true); 1.115 + fn(); 1.116 + assert.equal(messages.length, 1, 'deprecation warnings when toggled'); 1.117 + 1.118 + set(PREFERENCE, false); 1.119 + fn(); 1.120 + assert.equal(messages.length, 1, 'no new deprecation warnings'); 1.121 + done(); 1.122 +}; 1.123 + 1.124 +exports.testDeprecateSetting = function (assert, done) { 1.125 + // Set devtools.errorconsole.deprecation_warnings to false 1.126 + set(PREFERENCE, false); 1.127 + 1.128 + let { loader, messages } = LoaderWithHookedConsole(module); 1.129 + let deprecate = loader.require("sdk/util/deprecate"); 1.130 + 1.131 + // deprecateUsage test 1.132 + function functionIsDeprecated() { 1.133 + deprecate.deprecateUsage("foo"); 1.134 + } 1.135 + functionIsDeprecated(); 1.136 + 1.137 + assert.equal(messages.length, 0, 1.138 + "no errors dispatched on deprecateUsage"); 1.139 + 1.140 + // deprecateFunction test 1.141 + function originalFunction() {}; 1.142 + 1.143 + let deprecateFunction = deprecate.deprecateFunction(originalFunction, 1.144 + "bar"); 1.145 + deprecateFunction(); 1.146 + 1.147 + assert.equal(messages.length, 0, 1.148 + "no errors dispatched on deprecateFunction"); 1.149 + 1.150 + // deprecateEvent 1.151 + let { on, emit } = loader.require('sdk/event/core'); 1.152 + let testObj = {}; 1.153 + testObj.on = deprecate.deprecateEvent(on.bind(null, testObj), 'BAD', ['fire']); 1.154 + 1.155 + testObj.on('fire', () => { 1.156 + assert.equal(messages.length, 0, 1.157 + "no errors dispatched on deprecateEvent"); 1.158 + done(); 1.159 + }); 1.160 + 1.161 + emit(testObj, 'fire'); 1.162 +} 1.163 +require("test").run(exports);