106 lines
3.2 KiB
JavaScript
106 lines
3.2 KiB
JavaScript
XPCOMUtils.defineLazyModuleGetter(this, "Promise",
|
|
"resource://gre/modules/Promise.jsm");
|
|
Components.utils.import("resource://gre/modules/Timer.jsm", this);
|
|
|
|
add_task(function* test_not_found() {
|
|
info("Check correct 'Phrase not found' on new tab");
|
|
|
|
let tab = yield promiseTestPageLoad();
|
|
|
|
// Search for the first word.
|
|
yield promiseFindFinished("--- THIS SHOULD NEVER MATCH ---", false);
|
|
let findbar = gBrowser.getFindBar();
|
|
is(findbar._findStatusDesc.textContent, findbar._notFoundStr,
|
|
"Findbar status text should be 'Phrase not found'");
|
|
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
add_task(function* test_found() {
|
|
let tab = yield promiseTestPageLoad();
|
|
|
|
// Search for a string that WILL be found, with 'Highlight All' on
|
|
yield promiseFindFinished("S", true);
|
|
ok(!gBrowser.getFindBar()._findStatusDesc.textContent,
|
|
"Findbar status should be empty");
|
|
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
// Setting first findbar to case-sensitive mode should not affect
|
|
// new tab find bar.
|
|
add_task(function* test_tabwise_case_sensitive() {
|
|
let tab1 = yield promiseTestPageLoad();
|
|
let findbar1 = gBrowser.getFindBar();
|
|
|
|
let tab2 = yield promiseTestPageLoad();
|
|
let findbar2 = gBrowser.getFindBar();
|
|
|
|
// Toggle case sensitivity for first findbar
|
|
findbar1.getElement("find-case-sensitive").click();
|
|
|
|
gBrowser.selectedTab = tab1;
|
|
|
|
// Not found for first tab.
|
|
yield promiseFindFinished("S", true);
|
|
is(findbar1._findStatusDesc.textContent, findbar1._notFoundStr,
|
|
"Findbar status text should be 'Phrase not found'");
|
|
|
|
gBrowser.selectedTab = tab2;
|
|
|
|
// But it didn't affect the second findbar.
|
|
yield promiseFindFinished("S", true);
|
|
ok(!findbar2._findStatusDesc.textContent, "Findbar status should be empty");
|
|
|
|
gBrowser.removeTab(tab1);
|
|
gBrowser.removeTab(tab2);
|
|
});
|
|
|
|
function promiseTestPageLoad() {
|
|
let deferred = Promise.defer();
|
|
|
|
let tab = gBrowser.selectedTab = gBrowser.addTab("data:text/html;charset=utf-8,The letter s.");
|
|
let browser = gBrowser.selectedBrowser;
|
|
browser.addEventListener("load", function listener() {
|
|
if (browser.currentURI.spec == "about:blank")
|
|
return;
|
|
info("Page loaded: " + browser.currentURI.spec);
|
|
browser.removeEventListener("load", listener, true);
|
|
|
|
deferred.resolve(tab);
|
|
}, true);
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function promiseFindFinished(searchText, highlightOn) {
|
|
let deferred = Promise.defer();
|
|
|
|
let findbar = gBrowser.getFindBar();
|
|
findbar.startFind(findbar.FIND_NORMAL);
|
|
let highlightElement = findbar.getElement("highlight");
|
|
if (highlightElement.checked != highlightOn)
|
|
highlightElement.click();
|
|
executeSoon(() => {
|
|
findbar._findField.value = searchText;
|
|
|
|
let resultListener;
|
|
let findTimeout = setTimeout(() => foundOrTimedout(null), 2000);
|
|
let foundOrTimedout = function(aData) {
|
|
if (aData === null)
|
|
info("Result listener not called, timeout reached.");
|
|
clearTimeout(findTimeout);
|
|
findbar.browser.finder.removeResultListener(resultListener);
|
|
deferred.resolve();
|
|
}
|
|
|
|
resultListener = {
|
|
onFindResult: foundOrTimedout
|
|
};
|
|
findbar.browser.finder.addResultListener(resultListener);
|
|
findbar._find();
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|