forked from mirrors/gecko-dev
175 lines
4.6 KiB
JavaScript
175 lines
4.6 KiB
JavaScript
/* 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/. */
|
|
|
|
const PREF_DEPRECATION_WARNINGS = "devtools.errorconsole.deprecation_warnings";
|
|
|
|
const { Deprecated } = ChromeUtils.import(
|
|
"resource://gre/modules/Deprecated.jsm"
|
|
);
|
|
|
|
// 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(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() {
|
|
Deprecated.warning("this method is deprecated.");
|
|
return true;
|
|
},
|
|
expectedObservation(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(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(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(aMessage) {
|
|
// Ignore unexpected messages.
|
|
if (!(aMessage instanceof Ci.nsIScriptError)) {
|
|
return;
|
|
}
|
|
if (
|
|
!aMessage.errorMessage.includes("DEPRECATION WARNING: ") &&
|
|
!aMessage.errorMessage.includes("must provide a URL")
|
|
) {
|
|
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);
|
|
});
|
|
}
|
|
}
|