mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-22 00:16:15 -04:00
page up/down: add test coverage
This commit is contained in:
parent
af6a699db4
commit
db26ea218c
2 changed files with 113 additions and 0 deletions
|
@ -236,3 +236,64 @@ helper.clearPad = async () => {
|
|||
await helper.waitForPromise(helper.padIsEmpty);
|
||||
await helper.waitForPromise(() => helper.commits.length > commitsBefore);
|
||||
};
|
||||
|
||||
/**
|
||||
* Scrolls up in the editor
|
||||
* TODO: is `getSelection` always defined?
|
||||
*/
|
||||
helper.pageUp = async () => {
|
||||
// the caret is in this node
|
||||
const caretNode = helper.padInner$.document.getSelection().anchorNode;
|
||||
const event = new helper.padInner$.Event(helper.evtType);
|
||||
event.which = 33;
|
||||
helper.padInner$('#innerdocbody').trigger(event);
|
||||
|
||||
// return as soon as the selection has changed
|
||||
await helper.waitForPromise(() => helper.padInner$.document.getSelection().anchorNode !== caretNode);
|
||||
};
|
||||
|
||||
/**
|
||||
* Scrolls down in the editor
|
||||
* TODO: is `getSelection` always defined?
|
||||
*/
|
||||
helper.pageDown = async () => {
|
||||
// the caret is in this node
|
||||
const caretNode = helper.padInner$.document.getSelection().anchorNode;
|
||||
const event = new helper.padInner$.Event(helper.evtType);
|
||||
event.which = 34;
|
||||
helper.padInner$('#innerdocbody').trigger(event);
|
||||
|
||||
// return as soon as the selection has changed
|
||||
await helper.waitForPromise(() => helper.padInner$.document.getSelection().anchorNode !== caretNode);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the line number where the caret is currently in
|
||||
*
|
||||
* @returns {number} line number
|
||||
*/
|
||||
helper.caretLineNumber = () => {
|
||||
if (helper.padInner$.document.getSelection()) {
|
||||
let caretNode = helper.padInner$.document.getSelection().anchorNode;;
|
||||
let bodyElement = helper.padInner$('body')[0];
|
||||
|
||||
// a text node does not have a classList method
|
||||
if (caretNode.nodeType === 3) {
|
||||
caretNode = caretNode.parentNode;
|
||||
}
|
||||
|
||||
// find the ace-line that contains the caret
|
||||
while (!caretNode.classList.contains('ace-line') && caretNode !== bodyElement ) {
|
||||
caretNode = caretNode.parentNode;
|
||||
|
||||
// a text node does not have a classList method
|
||||
if (caretNode.nodeType === 3) {
|
||||
caretNode = caretNode.parentNode;
|
||||
}
|
||||
}
|
||||
|
||||
// find the index of that line in the array of all lines
|
||||
const lines = helper.linesDiv().map((line) => line[0]);
|
||||
return lines.indexOf(caretNode) + 1;
|
||||
}
|
||||
};
|
||||
|
|
52
tests/frontend/specs/pageupdown.js
Normal file
52
tests/frontend/specs/pageupdown.js
Normal file
|
@ -0,0 +1,52 @@
|
|||
'use strict';
|
||||
|
||||
describe('Page Up/Down', function () {
|
||||
beforeEach(function (cb) {
|
||||
helper.newPad({
|
||||
cb: async () => {
|
||||
await helper.clearPad();
|
||||
// 200 lines
|
||||
await helper.edit(
|
||||
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' +
|
||||
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' +
|
||||
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' +
|
||||
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n' +
|
||||
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n');
|
||||
cb()
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// scrolls up 3 times
|
||||
it('scrolls up on key stroke', async function(){
|
||||
let currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageUp();
|
||||
await helper.waitForPromise(() => currentLineNumber > helper.caretLineNumber());
|
||||
|
||||
currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageUp();
|
||||
await helper.waitForPromise(() => currentLineNumber > helper.caretLineNumber());
|
||||
|
||||
currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageUp();
|
||||
await helper.waitForPromise(() => currentLineNumber > helper.caretLineNumber());
|
||||
})
|
||||
|
||||
// scrolls down 3 times
|
||||
it('scrolls down on key stroke', async function(){
|
||||
// this places the caret in the first line
|
||||
await helper.edit('Line 1', 1);
|
||||
|
||||
let currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageDown();
|
||||
await helper.waitForPromise(() => currentLineNumber < helper.caretLineNumber());
|
||||
|
||||
currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageDown();
|
||||
await helper.waitForPromise(() => currentLineNumber < helper.caretLineNumber());
|
||||
|
||||
currentLineNumber = helper.caretLineNumber();
|
||||
helper.pageDown();
|
||||
await helper.waitForPromise(() => currentLineNumber < helper.caretLineNumber());
|
||||
})
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue