blob: d48301d1b243a2461d65db500918eb5708d2283b [file] [log] [blame]
<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
function doubleClick(selection) {
const start = selection.document.querySelector('s');
const end = selection.document.querySelector('e');
eventSender.mouseMoveTo(
selection.computeLeft(start),
selection.computeTop(start) + 3);
// Double-click to select at word-granularity to workaround eventSender
// bug with selecting text at character granularity (i.e. that it just
// doesn't work).
eventSender.mouseDown();
eventSender.mouseUp();
eventSender.mouseDown();
eventSender.mouseMoveTo(
selection.computeLeft(end),
selection.computeTop(end) + 3);
eventSender.mouseUp();
}
function extend(selection, direction, unit) {
selection.modify('extend', direction, unit);
}
for (const behavior of ['android', 'mac', /*'unix', 'win'*/]) {
const steps = [
{ input: 'a <s>bc</s><br>d <e>ef</e><br>ghi' },
{
// step 1
action: selection => doubleClick(selection),
mac: 'a <s>^bc</s><br>d <e>ef|</e><br>ghi',
others: 'a <s>^bc</s><br>d <e>ef|</e><br>ghi',
},
{
// step 2
action: selection => extend(selection, 'backward', 'character'),
mac: 'a| <s>bc</s><br>d <e>ef^</e><br>ghi',
others: 'a <s>^bc</s><br>d <e>e|f</e><br>ghi',
},
{
// step 3
action: selection => extend(selection, 'forward', 'character'),
mac: 'a <s>|bc</s><br>d <e>ef^</e><br>ghi',
others: 'a <s>^bc</s><br>d <e>ef|</e><br>ghi',
},
{
// step 4
action: selection => extend(selection, 'forward', 'line'),
mac: 'a <s>bc</s><br>d <e>|ef^</e><br>ghi',
others: 'a <s>^bc</s><br>d <e>ef</e><br>ghi|',
},
{
// step 5
action: selection => extend(selection, 'backward', 'line'),
mac: 'a <s>|bc</s><br>d <e>ef^</e><br>ghi',
others: 'a <s>^bc</s><br>d <e>ef|</e><br>ghi',
},
];
for (let step = 1; step < steps.length; ++step) {
selection_test(
`<div>${steps[0].input}</div>`,
selection => {
if (!window.eventSender)
throw 'This test requires eventSender.';
if (!window.internals)
throw 'This test requires internals.';
internals.settings.setEditingBehavior(behavior);
for (let i = 1; i <= step; ++i)
steps[i].action(selection);
},
behavior === 'mac'
? `<div>${steps[step].mac}</div>`
: `<div>${steps[step].others}</div>`,
`${behavior}: step ${step} ${steps[step].action}`);
}
}
</script>