Bug 610203: Add tests for handleURLBarCommand, r=gavin

This commit is contained in:
Margaret Leibovic 2011-10-06 09:52:10 -07:00
parent 0747c80b9c
commit 4aed6acf01
3 changed files with 191 additions and 0 deletions

View File

@ -181,6 +181,7 @@ _BROWSER_FILES = \
browser_getshortcutoruri.js \
browser_hide_removing.js \
browser_overflowScroll.js \
browser_locationBarCommand.js \
browser_locationBarExternalLoad.js \
browser_pageInfo.js \
browser_page_style_menu.js \

View File

@ -4,6 +4,7 @@
function test() {
waitForExplicitFinish();
gBrowser.selectedTab = gBrowser.addTab();
gBrowser.selectedBrowser.addEventListener("load", function () {
gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
@ -26,6 +27,7 @@ function testBackButton() {
ok(true, "history menu opened");
event.target.hidePopup();
gBrowser.removeTab(gBrowser.selectedTab);
finish();
}, false);

View File

@ -0,0 +1,188 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
const TEST_VALUE = "example.com";
const START_VALUE = "example.org";
let gFocusManager = Cc["@mozilla.org/focus-manager;1"].
getService(Ci.nsIFocusManager);
function test() {
waitForExplicitFinish();
runAltLeftClickTest();
}
// Monkey patch saveURL to avoid dealing with file save code paths
var oldSaveURL = saveURL;
saveURL = function() {
ok(true, "SaveURL was called");
is(gURLBar.value, "", "Urlbar reverted to original value");
saveURL = oldSaveURL;
runShiftLeftClickTest();
}
function runAltLeftClickTest() {
info("Running test: Alt left click");
triggerCommand(true, { altKey: true });
}
function runShiftLeftClickTest() {
let listener = new WindowListener("chrome://browser/content/browser.xul", function(aWindow) {
Services.wm.removeListener(listener);
addPageShowListener(aWindow.gBrowser, function() {
info("URL should be loaded in a new window");
is(gURLBar.value, "", "Urlbar reverted to original value");
is(gFocusManager.focusedElement, null, "There should be no focused element");
is(gFocusManager.focusedWindow, aWindow.gBrowser.contentWindow, "Content window should be focused");
is(aWindow.gURLBar.value, TEST_VALUE, "New URL is loaded in new window");
aWindow.close();
runNextTest();
});
});
Services.wm.addListener(listener);
info("Running test: Shift left click");
triggerCommand(true, { shiftKey: true });
}
function runNextTest() {
let test = gTests.shift();
if (!test) {
finish();
return;
}
info("Running test: " + test.desc);
// Tab will be blank if test.startValue is null
let tab = gBrowser.selectedTab = gBrowser.addTab(test.startValue);
addPageShowListener(gBrowser, function() {
triggerCommand(test.click, test.event);
test.check(tab);
// Clean up
while (gBrowser.tabs.length > 1)
gBrowser.removeTab(gBrowser.selectedTab)
runNextTest();
});
}
let gTests = [
{ desc: "Right click on go button",
click: true,
event: { button: 2 },
check: function(aTab) {
// Right click should do nothing (context menu will be shown)
is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
ok(gURLBar.focused, "Urlbar is still focused after click");
}
},
{ desc: "Left click on go button",
click: true,
event: {},
check: checkCurrent
},
{ desc: "Ctrl/Cmd left click on go button",
click: true,
event: { accelKey: true },
check: checkNewTab
},
{ desc: "Shift+Ctrl/Cmd left click on go button",
click: true,
event: { accelKey: true, shiftKey: true },
check: function(aTab) {
info("URL should be loaded in a new background tab");
is(gURLBar.value, "", "Urlbar reverted to original value");
ok(!gURLBar.focused, "Urlbar is no longer focused after urlbar command");
is(gBrowser.selectedTab, aTab, "Focus did not change to the new tab");
// Select the new background tab
gBrowser.selectedTab = gBrowser.selectedTab.nextSibling;
is(gURLBar.value, TEST_VALUE, "New URL is loaded in new tab");
}
},
{ desc: "Simple return keypress",
event: {},
check: checkCurrent
},
{ desc: "Alt+Return keypress in a blank tab",
event: { altKey: true },
check: checkCurrent
},
{ desc: "Alt+Return keypress in a dirty tab",
event: { altKey: true },
check: checkNewTab,
startValue: START_VALUE
},
{ desc: "Ctrl/Cmd+Return keypress",
event: { accelKey: true },
check: checkCurrent
}
]
let gGoButton = document.getElementById("urlbar-go-button");
function triggerCommand(aClick, aEvent) {
gURLBar.value = TEST_VALUE;
gURLBar.focus();
if (aClick)
EventUtils.synthesizeMouseAtCenter(gGoButton, aEvent);
else
EventUtils.synthesizeKey("VK_RETURN", aEvent);
}
/* Checks that the URL was loaded in the current tab */
function checkCurrent(aTab) {
info("URL should be loaded in the current tab");
is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
is(gFocusManager.focusedElement, null, "There should be no focused element");
is(gFocusManager.focusedWindow, gBrowser.contentWindow, "Content window should be focused");
is(gBrowser.selectedTab, aTab, "New URL was loaded in the current tab");
}
/* Checks that the URL was loaded in a new focused tab */
function checkNewTab(aTab) {
info("URL should be loaded in a new focused tab");
is(gURLBar.value, TEST_VALUE, "Urlbar still has the value we entered");
is(gFocusManager.focusedElement, null, "There should be no focused element");
is(gFocusManager.focusedWindow, gBrowser.contentWindow, "Content window should be focused");
isnot(gBrowser.selectedTab, aTab, "New URL was loaded in a new tab");
}
function addPageShowListener(aBrowser, aFunc) {
aBrowser.selectedBrowser.addEventListener("pageshow", function loadListener() {
aBrowser.selectedBrowser.removeEventListener("pageshow", loadListener, false);
aFunc();
});
}
function WindowListener(aURL, aCallback) {
this.callback = aCallback;
this.url = aURL;
}
WindowListener.prototype = {
onOpenWindow: function(aXULWindow) {
var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIDOMWindow);
var self = this;
domwindow.addEventListener("load", function() {
domwindow.removeEventListener("load", arguments.callee, false);
if (domwindow.document.location.href != self.url)
return;
// Allow other window load listeners to execute before passing to callback
executeSoon(function() {
self.callback(domwindow);
});
}, false);
},
onCloseWindow: function(aXULWindow) {},
onWindowTitleChange: function(aXULWindow, aNewTitle) {}
}