<!DOCTYPE html>
<meta charset=utf-8>
<title>DocumentType.append</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-append">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

function test_append_on_Document() {

    var node = document.implementation.createDocument(null, null);
    test(function() {
        var parent = node.cloneNode();
        parent.append();
        assert_array_equals(parent.childNodes, []);
    }, 'Document.append() without any argument, on a Document having no child.');

    test(function() {
        var parent = node.cloneNode();
        var x = document.createElement('x');
        parent.append(x);
        assert_array_equals(parent.childNodes, [x]);
    }, 'Document.append() with only one element as an argument, on a Document having no child.');

    test(function() {
        var parent = node.cloneNode();
        var x = document.createElement('x');
        var y = document.createElement('y');
        parent.appendChild(x);
        assert_throws('HierarchyRequestError', function() { parent.append(y); });
        assert_array_equals(parent.childNodes, [x]);
    }, 'Document.append() with only one element as an argument, on a Document having one child.');

    test(function() {
        var parent = node.cloneNode();
        assert_throws('HierarchyRequestError', function() { parent.append('text'); });
        assert_array_equals(parent.childNodes, []);
    }, 'Document.append() with text as an argument, on a Document having no child.');

    test(function() {
        var parent = node.cloneNode();
        var x = document.createElement('x');
        var y = document.createElement('y');
        assert_throws('HierarchyRequestError', function() { parent.append(x, y); });
        assert_array_equals(parent.childNodes, []);
    }, 'Document.append() with two elements as the argument, on a Document having no child.');

}

test_append_on_Document();

</script>
</html>
