File: innertext-setter.html

package info (click to toggle)
thunderbird 1%3A91.12.0-1~deb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,008,300 kB
  • sloc: cpp: 6,084,052; javascript: 4,790,441; ansic: 3,341,486; python: 862,958; asm: 366,542; xml: 204,277; java: 152,477; sh: 111,376; makefile: 21,388; perl: 15,312; yacc: 4,583; objc: 3,026; lex: 1,720; exp: 762; pascal: 635; awk: 564; sql: 453; php: 436; lisp: 432; ruby: 99; sed: 69; csh: 45
file content (88 lines) | stat: -rw-r--r-- 2,881 bytes parent folder | download | duplicates (22)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<!DOCTYPE html>
<title>innerText setter test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="container"></div>
<script>
// As of March 2017, WebKit and Blink have inconsistent results depending on
// rendered or not.  setupTest() tests a rendered case, and setupTestDetached()
// tests a not-rendered case.

function setupTest(context, plain) {
  var container = document.getElementById("container");
  // context is either a string or an element node
  if (typeof context === "string") {
    container.innerHTML = context;
  } else {
    container.innerHTML = "";
    container.appendChild(context);
  }
  var e = container.firstChild;
  while (e && e.nodeType != Node.ELEMENT_NODE) {
    e = e.nextSibling;
  }
  e.offsetWidth;
  var oldChild = e.firstChild;
  e.innerText = plain;
  return [e, oldChild];
}

function setupTestDetached(context, plain) {
  var detachedContainer = document.createElement("div");
  // context is either a string or an element node
  if (typeof context === "string") {
    detachedContainer.innerHTML = context;
  } else {
    detachedContainer.innerHTML = "";
    detachedContainer.appendChild(context);
  }
  var e = detachedContainer.firstChild;
  while (e && e.nodeType != Node.ELEMENT_NODE) {
    e = e.nextSibling;
  }
  var oldChild = e.firstChild;
  e.innerText = plain;
  return [e, oldChild];
}

function assertNewSingleTextNode(newChild, expectedText, oldChild) {
  assert_not_equals(newChild, null, "Should have a child");
  assert_equals(newChild.nodeType, Node.TEXT_NODE, "Child should be a text node");
  assert_equals(newChild.nextSibling, null, "Should have only one child");
  assert_equals(newChild.data, expectedText);
  assert_not_equals(newChild, oldChild, "Child should be a *new* text node");
}

function assertNoEmptyTextChild(parent) {
  for (var child = parent.firstChild; child; child = child.nextSibling) {
    if (child.nodeType === Node.TEXT_NODE) {
      assert_not_equals(child.data, "", "Should not have empty text nodes");
    }
  }
}

function testText(context, plain, expectedText, msg) {
  test(function(){
    var arr = setupTest(context, plain);
    assertNewSingleTextNode(arr[0].firstChild, expectedText, arr[1]);
  }, msg);
  test(function() {
    var arr = setupTestDetached(context, plain);
    assertNewSingleTextNode(arr[0].firstChild, expectedText, arr[1]);
  }, msg + ", detached");
}

function testHTML(context, plain, expectedHTML, msg) {
  test(function(){
    var e = setupTest(context, plain)[0];
    assert_equals(e.innerHTML, expectedHTML);
    assertNoEmptyTextChild(e);
  }, msg);
  test(function() {
    var e = setupTestDetached(context, plain)[0];
    assert_equals(e.innerHTML, expectedHTML);
    assertNoEmptyTextChild(e);
  }, msg + ", detached");
}
</script>
<script src="innertext-setter-tests.js"></script>