mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 05:08:36 +02:00
Automatic changes by ESLint, except for manual corrections for .xml files. Differential Revision: https://phabricator.services.mozilla.com/D4439 --HG-- extra : moz-landing-system : lando
350 lines
11 KiB
JavaScript
350 lines
11 KiB
JavaScript
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
|
"use strict";
|
|
|
|
const kIteratorTimeout = Services.prefs.getIntPref("findbar.iteratorTimeout");
|
|
const kPrefHighlightAll = "findbar.highlightAll";
|
|
const kPrefModalHighlight = "findbar.modalHighlight";
|
|
|
|
add_task(async function setup() {
|
|
await SpecialPowers.pushPrefEnv({ set: [
|
|
[kPrefHighlightAll, true],
|
|
[kPrefModalHighlight, true],
|
|
]});
|
|
});
|
|
|
|
// Test the results of modal highlighting, which is on by default.
|
|
add_task(async function testModalResults() {
|
|
let tests = new Map([
|
|
["Roland", {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 1],
|
|
animationCalls: [1, 2],
|
|
}],
|
|
["their law might propagate their kind", {
|
|
rectCount: 2,
|
|
insertCalls: [5, 6],
|
|
removeCalls: [4, 5],
|
|
// eslint-disable-next-line object-shorthand
|
|
extraTest: function(maskNode, outlineNode, rects) {
|
|
Assert.equal(outlineNode.getElementsByTagName("div").length, 2,
|
|
"There should be multiple rects drawn");
|
|
},
|
|
}],
|
|
["ro", {
|
|
rectCount: 41,
|
|
insertCalls: [1, 4],
|
|
removeCalls: [0, 2],
|
|
}],
|
|
["new", {
|
|
rectCount: 2,
|
|
insertCalls: [1, 4],
|
|
removeCalls: [0, 2],
|
|
}],
|
|
["o", {
|
|
rectCount: 492,
|
|
insertCalls: [1, 4],
|
|
removeCalls: [0, 2],
|
|
}],
|
|
]);
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
for (let [word, expectedResult] of tests) {
|
|
await promiseOpenFindbar(findbar);
|
|
Assert.ok(!findbar.hidden, "Findbar should be open now.");
|
|
|
|
let timeout = kIteratorTimeout;
|
|
if (word.length == 1)
|
|
timeout *= 4;
|
|
else if (word.length == 2)
|
|
timeout *= 2;
|
|
await new Promise(resolve => setTimeout(resolve, timeout));
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult,
|
|
expectedResult.extraTest);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
}
|
|
});
|
|
});
|
|
|
|
// Test if runtime switching of highlight modes between modal and non-modal works
|
|
// as expected.
|
|
add_task(async function testModalSwitching() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
Assert.ok(!findbar.hidden, "Findbar should be open now.");
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 1],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
await SpecialPowers.pushPrefEnv({ "set": [[ kPrefModalHighlight, false ]] });
|
|
|
|
expectedResult = {
|
|
rectCount: 0,
|
|
insertCalls: [0, 0],
|
|
removeCalls: [0, 0],
|
|
};
|
|
promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
findbar.clear();
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
});
|
|
|
|
await SpecialPowers.pushPrefEnv({ "set": [[ kPrefModalHighlight, true ]] });
|
|
});
|
|
|
|
// Test if highlighting a dark page is detected properly.
|
|
add_task(async function testDarkPageDetection() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [1, 3],
|
|
removeCalls: [0, 1],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult, function(node) {
|
|
Assert.ok(node.style.background.startsWith("rgba(0, 0, 0"),
|
|
"White HTML page should have a black background color set for the mask");
|
|
});
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
});
|
|
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 1],
|
|
};
|
|
|
|
await ContentTask.spawn(browser, null, async function() {
|
|
let dwu = content.windowUtils;
|
|
let uri = "data:text/css;charset=utf-8," + encodeURIComponent(`
|
|
body {
|
|
background: maroon radial-gradient(circle, #a01010 0%, #800000 80%) center center / cover no-repeat;
|
|
color: white;
|
|
}`);
|
|
try {
|
|
dwu.loadSheetUsingURIString(uri, dwu.USER_SHEET);
|
|
} catch (e) {}
|
|
});
|
|
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult, node => {
|
|
Assert.ok(node.style.background.startsWith("rgba(255, 255, 255"),
|
|
"Dark HTML page should have a white background color set for the mask");
|
|
});
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
});
|
|
});
|
|
|
|
add_task(async function testHighlightAllToggle() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 1],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
// We now know we have multiple rectangles highlighted, so it's a good time
|
|
// to flip the pref.
|
|
expectedResult = {
|
|
rectCount: 0,
|
|
insertCalls: [0, 1],
|
|
removeCalls: [1, 2],
|
|
};
|
|
promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await SpecialPowers.pushPrefEnv({ "set": [[ kPrefHighlightAll, false ]] });
|
|
await promise;
|
|
|
|
// For posterity, let's switch back.
|
|
expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [1, 3],
|
|
removeCalls: [0, 1],
|
|
};
|
|
promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await SpecialPowers.pushPrefEnv({ "set": [[ kPrefHighlightAll, true ]] });
|
|
await promise;
|
|
});
|
|
});
|
|
|
|
add_task(async function testXMLDocument() {
|
|
let url = "data:text/xml;charset=utf-8," + encodeURIComponent(`<?xml version="1.0"?>
|
|
<result>
|
|
<Title>Example</Title>
|
|
<Error>Error</Error>
|
|
</result>`);
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Example";
|
|
let expectedResult = {
|
|
rectCount: 0,
|
|
insertCalls: [1, 4],
|
|
removeCalls: [0, 1],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
});
|
|
});
|
|
|
|
add_task(async function testHideOnLocationChange() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
|
|
let browser = tab.linkedBrowser;
|
|
let findbar = await gBrowser.getFindBar();
|
|
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 1],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
// Now we try to navigate away! (Using the same page)
|
|
promise = promiseTestHighlighterOutput(browser, word, {
|
|
rectCount: 0,
|
|
insertCalls: [0, 0],
|
|
removeCalls: [1, 2],
|
|
});
|
|
await BrowserTestUtils.loadURI(browser, url);
|
|
await promise;
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function testHideOnClear() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 2],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
|
|
await new Promise(resolve => setTimeout(resolve, kIteratorTimeout));
|
|
promise = promiseTestHighlighterOutput(browser, "", {
|
|
rectCount: 0,
|
|
insertCalls: [0, 0],
|
|
removeCalls: [1, 2],
|
|
});
|
|
findbar.clear();
|
|
await promise;
|
|
|
|
findbar.close(true);
|
|
});
|
|
});
|
|
|
|
add_task(async function testRectsAndTexts() {
|
|
let url = "data:text/html;charset=utf-8," +
|
|
encodeURIComponent("<div style=\"width: 150px; border: 1px solid black\">" +
|
|
"Here are a lot of words Please use find to highlight some words that wrap" +
|
|
" across a line boundary and see what happens.</div>");
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
let word = "words please use find to";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 2],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult, (maskNode, outlineNode) => {
|
|
let boxes = outlineNode.getElementsByTagName("span");
|
|
Assert.equal(boxes.length, 2, "There should be two outline boxes containing text");
|
|
Assert.equal(boxes[0].textContent.trim(), "words", "First text should match");
|
|
Assert.equal(boxes[1].textContent.trim(), "Please use find to", "Second word should match");
|
|
});
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
});
|
|
});
|
|
|
|
add_task(async function testTooLargeToggle() {
|
|
let url = kFixtureBaseURL + "file_FinderSample.html";
|
|
await BrowserTestUtils.withNewTab(url, async function(browser) {
|
|
let findbar = await gBrowser.getFindBar();
|
|
await promiseOpenFindbar(findbar);
|
|
|
|
await ContentTask.spawn(browser, null, async function() {
|
|
let dwu = content.windowUtils;
|
|
let uri = "data:text/css;charset=utf-8," + encodeURIComponent(`
|
|
body {
|
|
min-height: 1234567px;
|
|
}`);
|
|
try {
|
|
dwu.loadSheetUsingURIString(uri, dwu.USER_SHEET);
|
|
} catch (e) {}
|
|
});
|
|
|
|
let word = "Roland";
|
|
let expectedResult = {
|
|
rectCount: 2,
|
|
insertCalls: [2, 4],
|
|
removeCalls: [0, 2],
|
|
// No animations should be triggered when the page is too large.
|
|
animationCalls: [0, 0],
|
|
};
|
|
let promise = promiseTestHighlighterOutput(browser, word, expectedResult);
|
|
await promiseEnterStringIntoFindField(findbar, word);
|
|
await promise;
|
|
});
|
|
});
|