<!DOCTYPE html>
<title>innerText getter test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
.before::before { content:'abc'; }
.table { display:table; }
.itable { display:inline-table; }
.row { display:table-row; }
.cell { display:table-cell; }
.first-line-uppercase::first-line { text-transform:uppercase; }
.first-letter-uppercase::first-letter { text-transform:uppercase; }
.first-letter-float::first-letter { float:left; }
</style>
<div id="container"></div>
<svg id="svgContainer"></svg>
<script>
function testText(html, expectedPlain, msg) {
  textTextInContainer(container, html, expectedPlain, msg);
}
function testTextInSVG(html, expectedPlain, msg) {
  textTextInContainer(svgContainer, html, expectedPlain, msg);
}
function textTextInContainer(cont, html, expectedPlain, msg) {
  test(function() {
    container.innerHTML = html;
    if (cont != container) {
      while (container.firstChild) {
        cont.appendChild(container.firstChild);
      }
    }
    var e = document.getElementById('target');
    if (!e) {
      e = cont.firstChild;
    }
    var pokes = document.getElementsByClassName('poke');
    for (var i = 0; i < pokes.length; ++i) {
      pokes[i].textContent = 'abc';
    }
    ['rp', 'optgroup', 'div'].forEach(function(tag) {
      pokes = document.getElementsByClassName('poke-' + tag);
      for (var i = 0; i < pokes.length; ++i) {
        var el = document.createElement(tag);
        el.textContent = "abc";
        pokes[i].appendChild(el);
      }
    });
    var shadows = document.getElementsByClassName('shadow');
    for (var i = 0; i < shadows.length; ++i) {
      var s = shadows[i].createShadowRoot();
      s.textContent = 'abc';
    }
    while (e && e.nodeType != Node.ELEMENT_NODE) {
      e = e.nextSibling;
    }
    assert_equals(e.innerText, expectedPlain);
    cont.textContent = '';
  }, msg + ' (' + format_value(html) + ')');
}
</script>
<script src="getter-tests.js"></script>
