File: modify.tentative.html

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (60 lines) | stat: -rw-r--r-- 1,887 bytes parent folder | download | duplicates (21)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<!DOCTYPE html>
<meta charset="utf-8">
<title>Selection#modify bidi tests</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>

<div id="container">
  <div title="LTR text">Hello World</div>
  <div title="RTL text">مرحبا عالم</div>
  <div title="RTL+LTR text">مرحبا عالم Hello World</div>
  <div title="LTR+RTL text">Hello World مرحبا عالم</div>
  <div title="LTR+RTL+LTR text">Hello World مرحبا عالم Hello World</div>
  <div title="RTL+LTR+RTL text">مرحبا عالم Hello World مرحبا عالم</div>
</div>

<script>
/**
 * @param {"ltr" | "rtl"} bidi
 * @param {"left" | "right"} direction
 * @param {number} length
 */
function getExpectedOffset(bidi, direction, length) {
  const isLtr = bidi === "ltr";
  const toLeft = direction === "left";
  return isLtr === toLeft ? 0 : length;
}

function runTest(div, direction, bidi, postfix = "") {
  test(() => {
    div.dir = bidi;

    selection.collapse(div);
    selection.modify("extend", direction, "lineboundary");

    const offset = getExpectedOffset(
      bidi, direction,
      div.childNodes[0].textContent.length
    );

    assert_equals(selection.focusOffset, offset);
  }, `${div.title} with ${direction} direction in ${bidi} context${postfix}`);
}

const selection = getSelection();
for (const bidi of ["ltr", "rtl"]) {
  for (const direction of ["left", "right"]) {
    for (const div of container.children) {
      runTest(div, direction, bidi)
    }
  }
}

// Gecko treats morphed LTR contexts differently from native LTR context
// @see https://searchfox.org/mozilla-central/rev/35d927df97900a57ecb562ad13909e392440b0fb/dom/base/Document.h#981-987
for (const direction of ["left", "right"]) {
  for (const div of container.children) {
    runTest(div, direction, "ltr", " (which was previously rtl)")
  }
}
</script>