gecko/browser/devtools/debugger/test/browser_dbg_reload-same-script.js

216 lines
5.7 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests if the same script is shown after a page is reloaded.
*/
const TAB_URL = EXAMPLE_URL + "browser_dbg_script-switching.html";
let gPane = null;
let gTab = null;
let gDebuggee = null;
let gDebugger = null;
let gView = null;
function test()
{
let step = 0;
let expectedScript = "";
let expectedScriptShown = false;
let scriptShownUrl = null;
let resumed = false;
let testStarted = false;
debug_tab_pane(TAB_URL, function(aTab, aDebuggee, aPane) {
gTab = aTab;
gDebuggee = aDebuggee;
gPane = aPane;
gDebugger = gPane.contentWindow;
gView = gDebugger.DebuggerView;
resumed = true;
startTest();
});
function onScriptShown(aEvent)
{
expectedScriptShown = aEvent.detail.url.indexOf("-01.js") != -1;
scriptShownUrl = aEvent.detail.url;
startTest();
}
function onUlteriorScriptShown(aEvent)
{
ok(expectedScript,
"The expected script to show up should have been specified.");
info("The expected script for this ScriptShown event is: " + expectedScript);
info("The current script for this ScriptShown event is: " + aEvent.detail.url);
expectedScriptShown = aEvent.detail.url.indexOf(expectedScript) != -1;
scriptShownUrl = aEvent.detail.url;
testScriptShown();
}
window.addEventListener("Debugger:SourceShown", onScriptShown);
function startTest()
{
if (expectedScriptShown && resumed && !testStarted) {
window.removeEventListener("Debugger:SourceShown", onScriptShown);
window.addEventListener("Debugger:SourceShown", onUlteriorScriptShown);
testStarted = true;
Services.tm.currentThread.dispatch({ run: performTest }, 0);
}
}
function finishTest()
{
if (expectedScriptShown && resumed && testStarted) {
window.removeEventListener("Debugger:SourceShown", onUlteriorScriptShown);
closeDebuggerAndFinish();
}
}
function performTest()
{
testCurrentScript("-01.js", step);
expectedScript = "-01.js";
performAction(reloadPage);
}
function testScriptShown()
{
if (!expectedScriptShown) {
return;
}
step++;
if (step === 1) {
testCurrentScript("-01.js", step, true);
expectedScript = "-01.js";
performAction(reloadPage);
}
else if (step === 2) {
testCurrentScript("-01.js", step, true);
expectedScript = "-02.js";
performAction(switchScript, 1);
}
else if (step === 3) {
testCurrentScript("-02.js", step);
expectedScript = "-02.js";
performAction(reloadPage);
}
else if (step === 4) {
testCurrentScript("-02.js", step, true);
expectedScript = "-01.js";
performAction(switchScript, 0);
}
else if (step === 5) {
testCurrentScript("-01.js", step);
expectedScript = "-01.js";
performAction(reloadPage);
}
else if (step === 6) {
testCurrentScript("-01.js", step, true);
expectedScript = "-01.js";
performAction(reloadPage);
}
else if (step === 7) {
testCurrentScript("-01.js", step, true);
expectedScript = "-01.js";
performAction(reloadPage);
}
else if (step === 8) {
testCurrentScript("-01.js", step, true);
expectedScript = "-02.js";
performAction(switchScript, 1);
}
else if (step === 9) {
testCurrentScript("-02.js", step);
expectedScript = "-02.js";
performAction(reloadPage);
}
else if (step === 10) {
testCurrentScript("-02.js", step, true);
expectedScript = "-02.js";
performAction(reloadPage);
}
else if (step === 11) {
testCurrentScript("-02.js", step, true);
expectedScript = "-02.js";
performAction(reloadPage);
}
else if (step === 12) {
testCurrentScript("-02.js", step, true);
expectedScript = "-01.js";
performAction(switchScript, 0);
}
else if (step === 13) {
testCurrentScript("-01.js", step);
finishTest();
}
}
function testCurrentScript(part, step, isAfterReload)
{
info("Currently preferred script: " + gView.Sources.preferredValue);
info("Currently selected script: " + gView.Sources.selectedValue);
if (step < 1) {
is(gView.Sources.preferredValue, null,
"The preferred script url should be initially null");
}
else if (isAfterReload) {
isnot(gView.Sources.preferredValue.indexOf(part), -1,
"The preferred script url wasn't set correctly. (" + step + ")");
}
isnot(gView.Sources.selectedValue.indexOf(part), -1,
"The selected script isn't the correct one. (" + step + ")");
is(gView.Sources.selectedValue, scriptShownUrl,
"The shown script is not the the correct one. (" + step + ")");
}
function performAction(callback, data)
{
// Poll every few milliseconds until the scripts are retrieved.
let count = 0;
let intervalID = window.setInterval(function() {
dump("count: " + count + " ");
if (++count > 50) {
ok(false, "Timed out while polling for the scripts.");
closeDebuggerAndFinish();
}
if (gView.Sources.values.length !== 2) {
return;
}
info("Available scripts: " + gView.Sources.values);
// We got all the scripts, it's safe to callback.
window.clearInterval(intervalID);
callback(data);
}, 100);
}
function switchScript(index)
{
gView.Sources.selectedValue = gView.Sources.values[index];
}
function reloadPage()
{
gDebuggee.location.reload();
}
registerCleanupFunction(function() {
removeTab(gTab);
gPane = null;
gTab = null;
gDebuggee = null;
gDebugger = null;
gView = null;
});
}