blob: 72bb22c8ec6d9e3f7ee3f37068d0dad8a5e63a53 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../assert_selection.js"></script>
<script>
const kQuoteStyle = `
<style>
.quote::before { content: "\""; }
.quote::after { content: "\""; }
</style>
`;
selection_test(
[
kQuoteStyle,
'<div contenteditable>before |<span class="quote">content</span> after</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">c|ontent</span> after</div>'
],
'ltr enter quote at front');
selection_test(
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">c|ontent</span> after</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kQuoteStyle,
'<div contenteditable>before |<span class="quote">content</span> after</div>'
],
'ltr exit quote at front');
selection_test(
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">content|</span> after</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">content</span> |after</div>'
],
'ltr exit quote at back');
selection_test(
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">content</span> |after</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kQuoteStyle,
'<div contenteditable>before <span class="quote">content|</span> after</div>'
],
'ltr enter quote at back');
selection_test(
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 |<span class="quote">\u05D3\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3|\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
'rtl enter quote at front');
selection_test(
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3|\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 |<span class="quote">\u05D3\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
'rtl exit quote at front');
selection_test(
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3\u05D4\u05D5|</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3\u05D4\u05D5</span> |\u05D6\u05D7\u05D8</div>'
],
'rtl exit quote at back');
selection_test(
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3\u05D4\u05D5</span> |\u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kQuoteStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="quote">\u05D3\u05D4\u05D5|</span> \u05D6\u05D7\u05D8</div>'
],
'rtl enter quote at back');
const kBidiStyle = `
<style>
.bidi::before { content: "aפb"; }
.bidi::after { content: "aפb"; }
</style>
`;
selection_test(
[
kBidiStyle,
'<div contenteditable>before |<span class="bidi">content</span> after</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">c|ontent</span> after</div>'
],
'ltr enter bidi at front');
selection_test(
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">c|ontent</span> after</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kBidiStyle,
'<div contenteditable>before |<span class="bidi">content</span> after</div>'
],
'ltr exit bidi at front');
selection_test(
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">content|</span> after</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">content</span> |after</div>'
],
'ltr exit bidi at back');
selection_test(
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">content</span> |after</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kBidiStyle,
'<div contenteditable>before <span class="bidi">content|</span> after</div>'
],
'ltr enter bidi at back');
selection_test(
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 |<span class="bidi">\u05D3\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3|\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
'rtl enter bidi at front');
selection_test(
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3|\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 |<span class="bidi">\u05D3\u05D4\u05D5</span> \u05D6\u05D7\u05D8</div>'
],
'rtl exit bidi at front');
selection_test(
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3\u05D4\u05D5|</span> \u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'left', 'character'),
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3\u05D4\u05D5</span> |\u05D6\u05D7\u05D8</div>'
],
'rtl exit bidi at back');
selection_test(
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3\u05D4\u05D5</span> |\u05D6\u05D7\u05D8</div>'
],
selection => selection.modify('move', 'right', 'character'),
[
kBidiStyle,
'<div contenteditable dir="rtl">\u05D0\u05D1\u05D2 <span class="bidi">\u05D3\u05D4\u05D5|</span> \u05D6\u05D7\u05D8</div>'
],
'rtl enter bidi at back');
</script>