diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /toolkit/modules/tests/browser/browser_Deprecated.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'toolkit/modules/tests/browser/browser_Deprecated.js')
-rw-r--r-- | toolkit/modules/tests/browser/browser_Deprecated.js | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/toolkit/modules/tests/browser/browser_Deprecated.js b/toolkit/modules/tests/browser/browser_Deprecated.js new file mode 100644 index 000000000..3217bdd22 --- /dev/null +++ b/toolkit/modules/tests/browser/browser_Deprecated.js @@ -0,0 +1,157 @@ +/* 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/. */ + +var Ci = Components.interfaces; +var Cu = Components.utils; +const PREF_DEPRECATION_WARNINGS = "devtools.errorconsole.deprecation_warnings"; + +Cu.import("resource://gre/modules/Services.jsm", this); +Cu.import("resource://gre/modules/Deprecated.jsm", this); + +// Using this named functions to test deprecation and the properly logged +// callstacks. +function basicDeprecatedFunction () { + Deprecated.warning("this method is deprecated.", "http://example.com"); + return true; +} + +function deprecationFunctionBogusCallstack () { + Deprecated.warning("this method is deprecated.", "http://example.com", { + caller: {} + }); + return true; +} + +function deprecationFunctionCustomCallstack () { + // Get the nsIStackFrame that will contain the name of this function. + function getStack () { + return Components.stack; + } + Deprecated.warning("this method is deprecated.", "http://example.com", + getStack()); + return true; +} + +var tests = [ +// Test deprecation warning without passing the callstack. +{ + deprecatedFunction: basicDeprecatedFunction, + expectedObservation: function (aMessage) { + testAMessage(aMessage); + ok(aMessage.errorMessage.indexOf("basicDeprecatedFunction") > 0, + "Callstack is correctly logged."); + } +}, +// Test a reported error when URL to documentation is not passed. +{ + deprecatedFunction: function () { + Deprecated.warning("this method is deprecated."); + return true; + }, + expectedObservation: function (aMessage) { + ok(aMessage.errorMessage.indexOf("must provide a URL") > 0, + "Deprecation warning logged an empty URL argument."); + } +}, +// Test deprecation with a bogus callstack passed as an argument (it will be +// replaced with the current call stack). +{ + deprecatedFunction: deprecationFunctionBogusCallstack, + expectedObservation: function (aMessage) { + testAMessage(aMessage); + ok(aMessage.errorMessage.indexOf("deprecationFunctionBogusCallstack") > 0, + "Callstack is correctly logged."); + } +}, +// When pref is unset Deprecated.warning should not log anything. +{ + deprecatedFunction: basicDeprecatedFunction, + expectedObservation: null, + // Set pref to false. + logWarnings: false +}, +// Test deprecation with a valid custom callstack passed as an argument. +{ + deprecatedFunction: deprecationFunctionCustomCallstack, + expectedObservation: function (aMessage) { + testAMessage(aMessage); + ok(aMessage.errorMessage.indexOf("deprecationFunctionCustomCallstack") > 0, + "Callstack is correctly logged."); + }, + // Set pref to true. + logWarnings: true +}]; + +// Which test are we running now? +var idx = -1; + +function test() { + waitForExplicitFinish(); + + // Check if Deprecated is loaded. + ok(Deprecated, "Deprecated object exists"); + + nextTest(); +} + +// Test Consle Message attributes. +function testAMessage (aMessage) { + ok(aMessage.errorMessage.indexOf("DEPRECATION WARNING: " + + "this method is deprecated.") === 0, + "Deprecation is correctly logged."); + ok(aMessage.errorMessage.indexOf("http://example.com") > 0, + "URL is correctly logged."); +} + +function nextTest() { + idx++; + + if (idx == tests.length) { + finish(); + return; + } + + info("Running test #" + idx); + let test = tests[idx]; + + // Deprecation warnings will be logged only when the preference is set. + if (typeof test.logWarnings !== "undefined") { + Services.prefs.setBoolPref(PREF_DEPRECATION_WARNINGS, test.logWarnings); + } + + // Create a console listener. + let consoleListener = { + observe: function (aMessage) { + // Ignore unexpected messages. + if (!(aMessage instanceof Ci.nsIScriptError)) { + return; + } + if (aMessage.errorMessage.indexOf("DEPRECATION WARNING: ") < 0 && + aMessage.errorMessage.indexOf("must provide a URL") < 0) { + return; + } + ok(aMessage instanceof Ci.nsIScriptError, + "Deprecation log message is an instance of type nsIScriptError."); + + + if (test.expectedObservation === null) { + ok(false, "Deprecated warning not expected"); + } + else { + test.expectedObservation(aMessage); + } + + Services.console.unregisterListener(consoleListener); + executeSoon(nextTest); + } + }; + Services.console.registerListener(consoleListener); + test.deprecatedFunction(); + if (test.expectedObservation === null) { + executeSoon(function() { + Services.console.unregisterListener(consoleListener); + executeSoon(nextTest); + }); + } +} |