blob: 5baeef968d1fd076a7795385a04b8bfb881e0689 [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|.
const kSample = [
'<div id="first">one <span id="start">two three</span></div>',
'<div id="second">four <span id="end">five six</span></div>',
].join('');
function doTest(behavior) {
assert_own_property(window, 'eventSender', 'This test requires eventSender.');
assert_own_property(window, 'internals', 'This test requires internals.');
function doDrag(selection) {
const document = selection.document;
const start = document.getElementById('start');
const end = document.getElementById('end');
// Reset selection granularity
eventSender.leapForward(1000);
eventSender.mouseMoveTo(0, 0);
eventSender.mouseDown();
eventSender.leapForward(1000);
// Double-click select to get around eventSender bug where it won't select
// text just using single-click.
eventSender.mouseMoveTo(selection.computeLeft(start),
selection.computeTop(start));
eventSender.mouseDown();
eventSender.mouseUp();
eventSender.mouseDown();
eventSender.mouseMoveTo(selection.computeLeft(end),
selection.computeTop(end));
eventSender.mouseUp();
}
function doShiftClick(selection, target, offsetX) {
const document = selection.document;
const parent = target.parentNode;
eventSender.mouseMoveTo(selection.computeLeft(target) + offsetX,
selection.computeTop(target));
eventSender.mouseDown(0, ['shiftKey']);
eventSender.mouseUp(0, ['shiftKey']);
}
internals.settings.setEditingBehavior(behavior);
assert_selection(
kSample,
selection => doDrag(selection),
[
'<div id="first">one <span id="start">^two three</span></div>',
'<div id="second">four <span id="end">five| six</span></div>',
].join(''),
`${behavior}-1: Drag start to end`);
assert_selection(
kSample,
selection => {
const second = selection.document.getElementById('second');
doDrag(selection);
doShiftClick(selection, second, second.offsetWidth);
},
[
'<div id="first">one <span id="start">^two three</span></div>',
'<div id="second">four <span id="end">five six|</span></div>',
].join(''),
`${behavior}-2: Shift click second`);
assert_selection(
kSample,
selection => {
const end = selection.document.getElementById('end');
const second = selection.document.getElementById('second');
doDrag(selection);
doShiftClick(selection, second, second.offsetWidth);
doShiftClick(selection, end, 0);
},
[
'<div id="first">one <span id="start">^two three</span></div>',
'<div id="second">four <span id="end">five| six</span></div>',
].join(''),
`${behavior}-3: Shift click end`);
assert_selection(
kSample,
selection => {
const end = selection.document.getElementById('end');
const first = selection.document.getElementById('first');
const second = selection.document.getElementById('second');
doDrag(selection);
doShiftClick(selection, second, second.offsetWidth);
doShiftClick(selection, end, 0);
doShiftClick(selection, first, 0);
},
behavior === 'mac'
? [
'<div id="first">|one <span id="start">two three</span></div>',
'<div id="second">four <span id="end">five^ six</span></div>',
].join('')
: [
'<div id="first">|one <span id="start">two^ three</span></div>',
'<div id="second">four <span id="end">five six</span></div>',
].join(''),
`${behavior}-4: Shift click first`);
assert_selection(
kSample,
selection => {
const end = selection.document.getElementById('end');
const first = selection.document.getElementById('first');
const second = selection.document.getElementById('second');
const start = selection.document.getElementById('start');
doDrag(selection);
doShiftClick(selection, second, second.offsetWidth);
doShiftClick(selection, end, 0);
doShiftClick(selection, first, 0);
doShiftClick(selection, start, 0);
},
behavior === 'mac'
? [
'<div id="first">one <span id="start">|two three</span></div>',
'<div id="second">four <span id="end">five^ six</span></div>',
].join('')
: [
'<div id="first">one <span id="start">|two^ three</span></div>',
'<div id="second">four <span id="end">five six</span></div>',
].join(''),
`${behavior}-5: Shift click start`);
}
for (const behavior of ['mac', 'win']) {
test(() => doTest(behavior),
`${behavior}: Expand selection with Shift+Click`);
}
</script>