/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/* Tests for bug 537013 to ensure proper tab-sequestration of find bar. */
var tabs = [];
var texts = [
"This side up.",
"The world is coming to an end. Please log off.",
"Klein bottle for sale. Inquire within.",
"To err is human; to forgive is not company policy.",
];
var HasFindClipboard = Services.clipboard.isClipboardTypeSupported(
Services.clipboard.kFindClipboard
);
function addTabWithText(aText) {
let newTab = BrowserTestUtils.addTab(
gBrowser,
"data:text/html;charset=utf-8,
" + aText + "
"
);
tabs.push(newTab);
gBrowser.selectedTab = newTab;
}
function setFindString(aString) {
gFindBar.open();
gFindBar._findField.focus();
gFindBar._findField.select();
EventUtils.sendString(aString);
is(gFindBar._findField.value, aString, "Set the field correctly!");
}
var newWindow;
function test() {
waitForExplicitFinish();
registerCleanupFunction(function () {
while (tabs.length) {
gBrowser.removeTab(tabs.pop());
}
});
texts.forEach(aText => addTabWithText(aText));
// Set up the first tab
gBrowser.selectedTab = tabs[0];
gBrowser.getFindBar().then(initialTest);
}
function initialTest() {
setFindString(texts[0]);
// Turn on highlight for testing bug 891638
gFindBar.getElement("highlight").checked = true;
// Make sure the second tab is correct, then set it up
gBrowser.selectedTab = tabs[1];
gBrowser.selectedTab.addEventListener("TabFindInitialized", continueTests1, {
once: true,
});
// Initialize the findbar
gBrowser.getFindBar();
}
function continueTests1() {
ok(true, "'TabFindInitialized' event properly dispatched!");
ok(gFindBar.hidden, "Second tab doesn't show find bar!");
gFindBar.open();
is(
gFindBar._findField.value,
texts[0],
"Second tab kept old find value for new initialization!"
);
setFindString(texts[1]);
// Confirm the first tab is still correct, ensure re-hiding works as expected
gBrowser.selectedTab = tabs[0];
ok(!gFindBar.hidden, "First tab shows find bar!");
// When the Find Clipboard is supported, this test not relevant.
if (!HasFindClipboard) {
is(gFindBar._findField.value, texts[0], "First tab persists find value!");
}
ok(
gFindBar.getElement("highlight").checked,
"Highlight button state persists!"
);
// While we're here, let's test bug 253793
gBrowser.reload();
gBrowser.addEventListener("DOMContentLoaded", continueTests2, true);
}
function continueTests2() {
gBrowser.removeEventListener("DOMContentLoaded", continueTests2, true);
ok(gFindBar.getElement("highlight").checked, "Highlight never reset!");
continueTests3();
}
function continueTests3() {
ok(gFindBar.getElement("highlight").checked, "Highlight button reset!");
gFindBar.close();
ok(gFindBar.hidden, "First tab doesn't show find bar!");
gBrowser.selectedTab = tabs[1];
ok(!gFindBar.hidden, "Second tab shows find bar!");
// Test for bug 892384
is(
gFindBar._findField.getAttribute("focused"),
"true",
"Open findbar refocused on tab change!"
);
gURLBar.focus();
gBrowser.selectedTab = tabs[0];
ok(gFindBar.hidden, "First tab doesn't show find bar!");
// Set up a third tab, no tests here
gBrowser.selectedTab = tabs[2];
gBrowser.selectedTab.addEventListener("TabFindInitialized", continueTests4, {
once: true,
});
gBrowser.getFindBar();
}
function continueTests4() {
setFindString(texts[2]);
// Now we jump to the second, then first, and then fourth
gBrowser.selectedTab = tabs[1];
// Test for bug 892384
ok(
!gFindBar._findField.hasAttribute("focused"),
"Open findbar not refocused on tab change!"
);
gBrowser.selectedTab = tabs[0];
gBrowser.selectedTab = tabs[3];
ok(gFindBar.hidden, "Fourth tab doesn't show find bar!");
is(gFindBar, gBrowser.getFindBar(), "Find bar is right one!");
gFindBar.open();
// Disabled the following assertion due to intermittent failure on OSX 10.6 Debug.
if (!HasFindClipboard) {
is(
gFindBar._findField.value,
texts[1],
"Fourth tab has second tab's find value!"
);
}
newWindow = gBrowser.replaceTabWithWindow(tabs.pop());
whenDelayedStartupFinished(newWindow, checkNewWindow);
}
// Test that findbar gets restored when a tab is moved to a new window.
function checkNewWindow() {
ok(!newWindow.gFindBar.hidden, "New window shows find bar!");
// Disabled the following assertion due to intermittent failure on OSX 10.6 Debug.
if (!HasFindClipboard) {
is(
newWindow.gFindBar._findField.value,
texts[1],
"New window find bar has correct find value!"
);
ok(
!newWindow.gFindBar.getElement("find-next").disabled,
"New window findbar has enabled buttons!"
);
}
newWindow.close();
finish();
}