<!DOCTYPE html>
<meta charset=utf-8>
<title>CharacterData.deleteData</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-deletedata">
<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
function testNode(create, type) {
  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 10) })
    assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 0) })
    assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 10) })
    assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 0) })
  }, type + ".deleteData() out of bounds")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(0, 2)
    assert_equals(node.data, "st")
  }, type + ".deleteData() at the start")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(2, 10)
    assert_equals(node.data, "te")
  }, type + ".deleteData() at the end")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(1, 1)
    assert_equals(node.data, "tst")
  }, type + ".deleteData() in the middle")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(2, 0)
    assert_equals(node.data, "test")

    node.deleteData(0, 0)
    assert_equals(node.data, "test")
  }, type + ".deleteData() with zero count")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(2, -1)
    assert_equals(node.data, "te")
  }, type + ".deleteData() with small negative count")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.deleteData(1, -0x100000000 + 2)
    assert_equals(node.data, "tt")
  }, type + ".deleteData() with large negative count")

  test(function() {
    var node = create()
    node.data = "This is the character data test, append more 資料，更多測試資料";

    node.deleteData(40, 5);
    assert_equals(node.data, "This is the character data test, append 資料，更多測試資料");
    node.deleteData(45, 2);
    assert_equals(node.data, "This is the character data test, append 資料，更多資料");
  }, type + ".deleteData() with non-ascii data")

  test(function() {
    var node = create()
    assert_equals(node.data, "test")

    node.data = "🌠 test 🌠 TEST"

    node.deleteData(5, 8);  // Counting UTF-16 code units
    assert_equals(node.data, "🌠 teST");
  }, type + ".deleteData() with non-BMP data")
}

testNode(function() { return document.createTextNode("test") }, "Text")
testNode(function() { return document.createComment("test") }, "Comment")
</script>
