mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
245 lines
8.6 KiB
JavaScript
245 lines
8.6 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/
|
|
*/
|
|
|
|
let gInitialTab, gTab1, gTab2, gTab3, gTab4;
|
|
let gInitialWindow, gSecondWindow;
|
|
let gPane1, gPane2;
|
|
let gNbox;
|
|
|
|
/**
|
|
* Tests that a debugger instance can't be opened in multiple windows at once,
|
|
* and that on such an attempt a notification is shown, which can either switch
|
|
* to the old debugger instance, or close the old instance to open a new one.
|
|
*/
|
|
|
|
function test() {
|
|
gInitialWindow = window;
|
|
gInitialTab = window.gBrowser.selectedTab;
|
|
gNbox = gInitialWindow.gBrowser.getNotificationBox(gInitialWindow.gBrowser.selectedBrowser);
|
|
|
|
testTab1_initialWindow(function() {
|
|
testTab2_secondWindow(function() {
|
|
testTab3_secondWindow(function() {
|
|
testTab4_secondWindow(function() {
|
|
lastTest(function() {
|
|
cleanup(function() {
|
|
finish();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function testTab1_initialWindow(callback) {
|
|
gTab1 = addTab(TAB1_URL, function() {
|
|
gInitialWindow.gBrowser.selectedTab = gTab1;
|
|
gNbox = gInitialWindow.gBrowser.getNotificationBox(gInitialWindow.gBrowser.selectedBrowser);
|
|
|
|
is(gNbox.getNotificationWithValue("debugger-tab-switch"), null,
|
|
"Shouldn't have a tab switch notification.");
|
|
ok(!gInitialWindow.DebuggerUI.getDebugger(),
|
|
"Shouldn't have a debugger pane for this tab yet.");
|
|
|
|
info("Toggling a debugger (1).");
|
|
|
|
gPane1 = gInitialWindow.DebuggerUI.toggleDebugger();
|
|
ok(gPane1, "toggleDebugger() should return a pane.");
|
|
is(gPane1.ownerTab, gTab1, "Incorrect tab owner.");
|
|
|
|
is(gInitialWindow.DebuggerUI.getDebugger(), gPane1,
|
|
"getDebugger() should return the same pane as toggleDebugger().");
|
|
|
|
wait_for_connect_and_resume(function dbgLoaded() {
|
|
info("First debugger has finished loading correctly.");
|
|
executeSoon(function() {
|
|
callback();
|
|
});
|
|
}, gInitialWindow);
|
|
}, gInitialWindow);
|
|
}
|
|
|
|
function testTab2_secondWindow(callback) {
|
|
gSecondWindow = addWindow();
|
|
|
|
gTab2 = addTab(TAB1_URL, function() {
|
|
gSecondWindow.gBrowser.selectedTab = gTab2;
|
|
gNbox = gSecondWindow.gBrowser.getNotificationBox(gSecondWindow.gBrowser.selectedBrowser);
|
|
|
|
is(gNbox.getNotificationWithValue("debugger-tab-switch"), null,
|
|
"Shouldn't have a tab switch notification yet.");
|
|
ok(gSecondWindow.DebuggerUI.findDebugger(),
|
|
"Should already have a debugger pane for another tab.");
|
|
|
|
gNbox.addEventListener("AlertActive", function active() {
|
|
gNbox.removeEventListener("AlertActive", active, true);
|
|
executeSoon(function() {
|
|
ok(gPane2, "toggleDebugger() should always return a pane.");
|
|
is(gPane2.ownerTab, gTab1, "Incorrect tab owner.");
|
|
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane1,
|
|
"findDebugger() should return the same pane as the first call to toggleDebugger().");
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane2,
|
|
"findDebugger() should return the same pane as the second call to toggleDebugger().");
|
|
|
|
info("Second debugger has not loaded.");
|
|
|
|
let notification = gNbox.getNotificationWithValue("debugger-tab-switch");
|
|
ok(gNbox.currentNotification, "Should have a tab switch notification.");
|
|
is(gNbox.currentNotification, notification, "Incorrect current notification.");
|
|
|
|
info("Notification will be simply closed.");
|
|
notification.close();
|
|
|
|
executeSoon(function() {
|
|
callback();
|
|
});
|
|
});
|
|
}, true);
|
|
|
|
info("Toggling a debugger (2).");
|
|
|
|
gPane2 = gSecondWindow.DebuggerUI.toggleDebugger();
|
|
}, gSecondWindow);
|
|
}
|
|
|
|
function testTab3_secondWindow(callback) {
|
|
gTab3 = addTab(TAB1_URL, function() {
|
|
gSecondWindow.gBrowser.selectedTab = gTab3;
|
|
gNbox = gSecondWindow.gBrowser.getNotificationBox(gSecondWindow.gBrowser.selectedBrowser);
|
|
|
|
is(gNbox.getNotificationWithValue("debugger-tab-switch"), null,
|
|
"Shouldn't have a tab switch notification.");
|
|
ok(gSecondWindow.DebuggerUI.findDebugger(),
|
|
"Should already have a debugger pane for another tab.");
|
|
|
|
gNbox.addEventListener("AlertActive", function active() {
|
|
gNbox.removeEventListener("AlertActive", active, true);
|
|
executeSoon(function() {
|
|
ok(gPane2, "toggleDebugger() should always return a pane.");
|
|
is(gPane2.ownerTab, gTab1, "Incorrect tab owner.");
|
|
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane1,
|
|
"findDebugger() should return the same pane as the first call to toggleDebugger().");
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane2,
|
|
"findDebugger() should return the same pane as the second call to toggleDebugger().");
|
|
|
|
info("Second debugger has not loaded.");
|
|
|
|
let notification = gNbox.getNotificationWithValue("debugger-tab-switch");
|
|
ok(gNbox.currentNotification, "Should have a tab switch notification.");
|
|
is(gNbox.currentNotification, notification, "Incorrect current notification.");
|
|
|
|
gInitialWindow.gBrowser.selectedTab = gInitialTab;
|
|
gInitialWindow.gBrowser.tabContainer.addEventListener("TabSelect", function tabSelect() {
|
|
gInitialWindow.gBrowser.tabContainer.removeEventListener("TabSelect", tabSelect, true);
|
|
executeSoon(function() {
|
|
callback();
|
|
});
|
|
}, true);
|
|
|
|
let buttonSwitch = notification.querySelectorAll("button")[0];
|
|
buttonSwitch.focus();
|
|
EventUtils.sendKey("SPACE", gSecondWindow);
|
|
info("The switch button on the notification was pressed.");
|
|
});
|
|
}, true);
|
|
|
|
info("Toggling a debugger (3).");
|
|
|
|
gPane2 = gSecondWindow.DebuggerUI.toggleDebugger();
|
|
}, gSecondWindow);
|
|
}
|
|
|
|
function testTab4_secondWindow(callback) {
|
|
is(gInitialWindow.gBrowser.selectedTab, gTab1,
|
|
"Should've switched to the first debugged tab.");
|
|
|
|
gTab4 = addTab(TAB1_URL, function() {
|
|
gSecondWindow.gBrowser.selectedTab = gTab4;
|
|
gNbox = gSecondWindow.gBrowser.getNotificationBox(gSecondWindow.gBrowser.selectedBrowser);
|
|
|
|
is(gNbox.getNotificationWithValue("debugger-tab-switch"), null,
|
|
"Shouldn't have a tab switch notification.");
|
|
ok(gSecondWindow.DebuggerUI.findDebugger(),
|
|
"Should already have a debugger pane for another tab.");
|
|
|
|
gNbox.addEventListener("AlertActive", function active() {
|
|
gNbox.removeEventListener("AlertActive", active, true);
|
|
executeSoon(function() {
|
|
ok(gPane2, "toggleDebugger() should always return a pane.");
|
|
is(gPane2.ownerTab, gTab1, "Incorrect tab owner.");
|
|
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane1,
|
|
"findDebugger() should return the same pane as the first call to toggleDebugger().");
|
|
is(gSecondWindow.DebuggerUI.findDebugger(), gPane2,
|
|
"findDebugger() should return the same pane as the second call to toggleDebugger().");
|
|
|
|
info("Second debugger has not loaded.");
|
|
|
|
let notification = gNbox.getNotificationWithValue("debugger-tab-switch");
|
|
ok(gNbox.currentNotification, "Should have a tab switch notification.");
|
|
is(gNbox.currentNotification, notification, "Incorrect current notification.");
|
|
|
|
let buttonOpen = notification.querySelectorAll("button")[1];
|
|
buttonOpen.focus();
|
|
EventUtils.sendKey("SPACE", gSecondWindow);
|
|
info("The open button on the notification was pressed.");
|
|
|
|
wait_for_connect_and_resume(function() {
|
|
callback();
|
|
}, gSecondWindow);
|
|
});
|
|
}, true);
|
|
|
|
info("Toggling a debugger (4).");
|
|
|
|
gPane2 = gSecondWindow.DebuggerUI.toggleDebugger();
|
|
}, gSecondWindow);
|
|
}
|
|
|
|
function lastTest(callback) {
|
|
is(gInitialWindow.gBrowser.selectedTab, gTab1,
|
|
"The initial window should continue having selected the first debugged tab.");
|
|
is(gSecondWindow.gBrowser.selectedTab, gTab4,
|
|
"Should currently be in the fourth tab.");
|
|
is(gSecondWindow.DebuggerUI.findDebugger().ownerTab, gTab4,
|
|
"The debugger should be open for the fourth tab.");
|
|
|
|
is(gNbox.getNotificationWithValue("debugger-tab-switch"), null,
|
|
"Shouldn't have a tab switch notification.");
|
|
|
|
info("Second debugger has loaded.");
|
|
|
|
executeSoon(function() {
|
|
callback();
|
|
});
|
|
}
|
|
|
|
function cleanup(callback)
|
|
{
|
|
gPane1 = null;
|
|
gPane2 = null;
|
|
gNbox = null;
|
|
|
|
closeDebuggerAndFinish(false, function() {
|
|
removeTab(gTab1, gInitialWindow);
|
|
removeTab(gTab2, gSecondWindow);
|
|
removeTab(gTab3, gSecondWindow);
|
|
removeTab(gTab4, gSecondWindow);
|
|
gSecondWindow.close();
|
|
gTab1 = null;
|
|
gTab2 = null;
|
|
gTab3 = null;
|
|
gTab4 = null;
|
|
gInitialWindow = null;
|
|
gSecondWindow = null;
|
|
|
|
callback();
|
|
}, gSecondWindow);
|
|
}
|