Depends on D323602 Differential Revision: https://phabricator.services.mozilla.com/D323603
79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
const LINES = 800; // should be enough for any reasonable viewport on automation.
|
|
const CONTENT = (() => {
|
|
let c = "";
|
|
for (let i = 1; i <= LINES; ++i) {
|
|
c += `line ${i}\n`;
|
|
}
|
|
return c;
|
|
})();
|
|
|
|
add_task(async function () {
|
|
// First test with text with the text/html mimetype.
|
|
info("Testing text/html");
|
|
let tab = await openDocument("data:text/html," + encodeURIComponent(CONTENT));
|
|
await checkViewSource(tab);
|
|
gBrowser.removeTab(tab);
|
|
|
|
info("Testing text/plain");
|
|
tab = await openDocument("data:text/plain," + encodeURIComponent(CONTENT));
|
|
await checkViewSource(tab);
|
|
gBrowser.removeTab(tab);
|
|
});
|
|
|
|
var checkViewSource = async function (aTab) {
|
|
let browser = aTab.linkedBrowser;
|
|
await SpecialPowers.spawn(browser, [CONTENT], async function (text) {
|
|
is(content.document.body.textContent, text, "Correct content loaded");
|
|
});
|
|
|
|
// Let's cover beginning and end, forwards and backwards.
|
|
for (let lineNumber of [1, 100, 800, 100, 1]) {
|
|
info(`Going to line ${lineNumber}`);
|
|
browser.sendMessageToActor(
|
|
"ViewSource:GoToLine",
|
|
{
|
|
lineNumber,
|
|
},
|
|
"ViewSourcePage"
|
|
);
|
|
await SpecialPowers.spawn(browser, [lineNumber], async function (i) {
|
|
let selection = content.getSelection();
|
|
Assert.equal(
|
|
selection.toString().trim(),
|
|
"line " + i,
|
|
"Correct text selected"
|
|
);
|
|
|
|
// Scrolling to the selection is async.
|
|
await new Promise(r => {
|
|
content.requestAnimationFrame(() => content.requestAnimationFrame(r));
|
|
});
|
|
|
|
let foundNonEmptyRect = false;
|
|
for (let rect of selection.getRangeAt(0).getClientRects()) {
|
|
if (rect.width == 0 || rect.height == 0) {
|
|
continue;
|
|
}
|
|
info(`Testing selection rect: ${JSON.stringify(rect)}`);
|
|
info(`Current scroll position: ${content.scrollY}`);
|
|
foundNonEmptyRect = true;
|
|
Assert.greaterOrEqual(
|
|
rect.top,
|
|
0,
|
|
"Top of the selection should be in viewport (top)"
|
|
);
|
|
Assert.lessOrEqual(
|
|
rect.bottom,
|
|
content.innerHeight,
|
|
"Top of the selection should be in viewport (bottom)"
|
|
);
|
|
}
|
|
Assert.ok(foundNonEmptyRect, "Should have some non-empty rects");
|
|
});
|
|
}
|
|
};
|