gecko/browser/devtools/debugger/test/browser_dbg_propertyview-01.js

166 lines
6.3 KiB
JavaScript

/* vim:set ts=2 sw=2 sts=2 et: */
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
var gPane = null;
var gTab = null;
var gDebuggee = null;
var gDebugger = null;
function test() {
debug_tab_pane(STACK_URL, function(aTab, aDebuggee, aPane) {
gTab = aTab;
gDebuggee = aDebuggee;
gPane = aPane;
gDebugger = gPane.contentWindow;
testSimpleCall();
});
}
function testSimpleCall() {
gDebugger.DebuggerController.activeThread.addOneTimeListener("framesadded", function() {
Services.tm.currentThread.dispatch({ run: function() {
testlabelshortening();
}}, 0);
});
gDebuggee.simpleCall();
}
function testlabelshortening() {
gDebugger.DebuggerController.activeThread.resume(function() {
let sv = gDebugger.SourceUtils;
let vs = gDebugger.DebuggerView.Sources;
let ss = gDebugger.DebuggerController.SourceScripts;
vs.empty();
vs._container.removeEventListener("select", vs._onScriptsChange, false);
is(sv.trimUrlQuery("a/b/c.d?test=1&random=4#reference"), "a/b/c.d",
"Trimming the url query isn't done properly.");
let ellipsis = Services.prefs.getComplexValue("intl.ellipsis", Ci.nsIPrefLocalizedString);
let nanana = new Array(20).join(NaN);
let superLargeLabel = new Array(100).join("Beer can in Jamaican sounds like Bacon!");
let trimmedLargeLabel = sv.trimUrlLength(superLargeLabel, 1234);
is(trimmedLargeLabel.length, 1235,
"Trimming large labels isn't done properly.");
ok(trimmedLargeLabel.endsWith(ellipsis),
"Trimming large labels should add an ellipsis at the end.");
let urls = [
{ href: "http://some.address.com/random/", leaf: "subrandom/" },
{ href: "http://some.address.com/random/", leaf: "suprandom/?a=1" },
{ href: "http://some.address.com/random/", leaf: "?a=1" },
{ href: "https://another.address.org/random/subrandom/", leaf: "page.html" },
{ href: "ftp://interesting.address.org/random/", leaf: "script.js" },
{ href: "ftp://interesting.address.com/random/", leaf: "script.js" },
{ href: "ftp://interesting.address.com/random/", leaf: "x/script.js" },
{ href: "ftp://interesting.address.com/random/", leaf: "x/y/script.js?a=1" },
{ href: "ftp://interesting.address.com/random/x/", leaf: "y/script.js?a=1&b=2", dupe: true },
{ href: "ftp://interesting.address.com/random/x/y/", leaf: "script.js?a=1&b=2&c=3", dupe: true },
{ href: "ftp://interesting.address.com/random/", leaf: "x/y/script.js?a=2", dupe: true },
{ href: "ftp://interesting.address.com/random/x/", leaf: "y/script.js?a=2&b=3", dupe: true },
{ href: "ftp://interesting.address.com/random/x/y/", leaf: "script.js?a=2&b=3&c=4", dupe: true },
{ href: "file://random/", leaf: "script_t1.js&a=1&b=2&c=3" },
{ href: "file://random/", leaf: "script_t2_1.js#id" },
{ href: "file://random/", leaf: "script_t2_2.js?a" },
{ href: "file://random/", leaf: "script_t2_3.js&b" },
{ href: "resource://random/", leaf: "script_t3_1.js#id?a=1&b=2" },
{ href: "resource://random/", leaf: "script_t3_2.js?a=1&b=2#id" },
{ href: "resource://random/", leaf: "script_t3_3.js&a=1&b=2#id" },
{ href: nanana, leaf: "Batman!" + "{trim me, now and forevermore}" }
];
urls.forEach(function(url) {
executeSoon(function() {
let loc = url.href + url.leaf;
vs.push(sv.getSourceLabel(loc, url.href), loc, { forced: true });
});
});
executeSoon(function() {
info("Script labels:");
info(vs.labels.toSource());
info("Script locations:");
info(vs.values.toSource());
urls.forEach(function(url) {
let loc = url.href + url.leaf;
if (url.dupe) {
ok(!vs.containsValue(loc), "Shouldn't contain script: " + loc);
} else {
ok(vs.containsValue(loc), "Should contain script: " + loc);
}
});
ok(vs.containsLabel("random/subrandom/"),
"Script (0) label is incorrect.");
ok(vs.containsLabel("random/suprandom/?a=1"),
"Script (1) label is incorrect.");
ok(vs.containsLabel("random/?a=1"),
"Script (2) label is incorrect.");
ok(vs.containsLabel("page.html"),
"Script (3) label is incorrect.");
ok(vs.containsLabel("script.js"),
"Script (4) label is incorrect.");
ok(vs.containsLabel("random/script.js"),
"Script (5) label is incorrect.");
ok(vs.containsLabel("random/x/script.js"),
"Script (6) label is incorrect.");
ok(vs.containsLabel("script.js?a=1"),
"Script (7) label is incorrect.");
ok(vs.containsLabel("script_t1.js"),
"Script (8) label is incorrect.");
ok(vs.containsLabel("script_t2_1.js"),
"Script (9) label is incorrect.");
ok(vs.containsLabel("script_t2_2.js"),
"Script (10) label is incorrect.");
ok(vs.containsLabel("script_t2_3.js"),
"Script (11) label is incorrect.");
ok(vs.containsLabel("script_t3_1.js"),
"Script (12) label is incorrect.");
ok(vs.containsLabel("script_t3_2.js"),
"Script (13) label is incorrect.");
ok(vs.containsLabel("script_t3_3.js"),
"Script (14) label is incorrect.");
ok(vs.containsLabel(nanana + "Batman!" + ellipsis),
"Script (15) label is incorrect.");
is(vs._container.itemCount, urls.filter(function(url) !url.dupe).length,
"Didn't get the correct number of scripts in the list.");
is(vs.getItemByValue("http://some.address.com/random/subrandom/").label, "random/subrandom/",
"Scripts.getItemByValue isn't functioning properly (0).");
is(vs.getItemByValue("http://some.address.com/random/suprandom/?a=1").label, "random/suprandom/?a=1",
"Scripts.getItemByValue isn't functioning properly (1).");
is(vs.getItemByLabel("random/subrandom/").value, "http://some.address.com/random/subrandom/",
"Scripts.getItemByLabel isn't functioning properly (0).");
is(vs.getItemByLabel("random/suprandom/?a=1").value, "http://some.address.com/random/suprandom/?a=1",
"Scripts.getItemByLabel isn't functioning properly (1).");
closeDebuggerAndFinish();
});
});
}
registerCleanupFunction(function() {
removeTab(gTab);
gPane = null;
gTab = null;
gDebuggee = null;
gDebugger = null;
});