blob: d3352ce3cd5ea27647907834c45f02a5575ad75b [file] [log] [blame]
<!doctype html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../assert_selection.js"></script>
<script>
// TODO(editing-dev): Once http://crbug.com/736253 fixed, we should use
// |chrome.pointerActionSequence()| instead of |eventSender|.
function moveToMiddle(selection, target) {
assert_own_property(window, 'eventSender', 'This test requires eventSender.');
eventSender.mouseMoveTo(
selection.computeLeft(target),
selection.computeTop(target) + target.offsetHeight / 2);
}
function doDoubleClick(selection, target) {
moveToMiddle(selection, target);
eventSender.mouseDown();
eventSender.mouseUp();
eventSender.mouseDown();
eventSender.mouseUp();
}
function doShiftClick(selection, target) {
const document = selection.document;
const parent = target.parentNode;
moveToMiddle(selection, target);
eventSender.mouseDown(0, ['shiftKey']);
eventSender.mouseUp(0, ['shiftKey']);
}
function resetMouse() {
eventSender.mouseMoveTo(0, 0);
eventSender.mouseDown();
eventSender.mouseUp();
eventSender.leapForward(999);
}
function doTest1(behavior) {
assert_own_property(window, 'internals', 'This test requires internals.');
internals.settings.setEditingBehavior(behavior);
internals.settings.setSelectTrailingWhitespaceEnabled(behavior === 'win');
const kSample1 = [
'<div>',
'<span id="one">one </span>',
'<span id="two">a </span>',
'<span id="three">three </span>',
'</div>',
].join('');
assert_selection(
kSample1,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
},
[
'<div>',
'<span id="one">one </span>',
behavior === 'win'
? '<span id="two">^a |</span>'
: '<span id="two">^a| </span>',
'<span id="three">three </span>',
'</div>',
].join(''),
'2-1 double-click');
assert_selection(
kSample1,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
doShiftClick(selection, one);
},
[
'<div>',
'<span id="one">|one </span>',
'<span id="two">a^ </span>',
'<span id="three">three </span>',
'</div>',
].join(''),
'2-2 double-click, extend backward');
assert_selection(
kSample1,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
doShiftClick(selection, one);
doShiftClick(selection, three);
},
behavior === 'mac'
? [
'<div>',
'<span id="one">^one </span>',
'<span id="two">a </span>',
'<span id="three">three| </span>',
'</div>',
].join('')
: [
'<div>',
'<span id="one">one </span>',
'<span id="two">^a </span>',
'<span id="three">three| </span>',
'</div>',
].join(''),
'2-3 double-click, extend backward, extend forward');
}
function doTest2(behavior) {
assert_own_property(window, 'internals', 'This test requires internals.');
internals.settings.setEditingBehavior(behavior);
const kSample2 = [
'<div>',
'<span id="one">one </span>',
'<span id="two">two </span>',
'<span id="three">three </span>',
'</div>',
].join('');
assert_selection(
kSample2,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
},
[
'<div>',
'<span id="one">one </span>',
behavior === 'win'
? '<span id="two">^two |</span>'
: '<span id="two">^two| </span>',
'<span id="three">three </span>',
'</div>',
].join(''),
'2-1 double-click');
assert_selection(
kSample2,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
doShiftClick(selection, one);
},
[
'<div>',
'<span id="one">|one </span>',
'<span id="two">two^ </span>',
'<span id="three">three </span>',
'</div>',
].join(''),
'2-2 double-click, extend backward');
assert_selection(
kSample2,
selection => {
const one = selection.document.getElementById('one');
const two = selection.document.getElementById('two');
const three = selection.document.getElementById('three');
resetMouse();
doDoubleClick(selection, two);
doShiftClick(selection, one);
doShiftClick(selection, three);
},
behavior === 'mac'
? [
'<div>',
'<span id="one">^one </span>',
'<span id="two">two </span>',
'<span id="three">three| </span>',
'</div>',
].join('')
: [
'<div>',
'<span id="one">one </span>',
'<span id="two">^two </span>',
'<span id="three">three| </span>',
'</div>',
].join(''),
'2-3 double-click, extend backward, extend forward');
}
for (const behavior of ['android', 'mac', 'unix','win']) {
test(() => doTest1(behavior),
`${behavior}: 1 Extend by word backward then forward:`);
test(() => doTest2(behavior),
`${behavior}: 2 Extend by word backward then forward:`);
}
</script>