<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>

description("Tests ChildNode.after((Node or DOMString)...)");
function test(t, createChild)
{
    type = t;
    debug("<b>Test " + type + ".after((Node or DOMString)...).</b>");
    
    debug("Test with no arguments.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    child.after();
    shouldBe("parent.childNodes.length", "1");
    debug("");

    debug("Test with a single element.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    d1 = document.createElement("div");
    child.after(d1);
    shouldBe("parent.childNodes.length", "2");
    shouldBe("child.nextSibling", "d1");
    debug("");

    debug("Test with a single string.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    child.after('hello');
    shouldBe("parent.childNodes.length", "2");
    shouldBe("child.nextSibling.data", "'hello'");
    debug("");

    debug("Test with a both strings and elements.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    d1 = document.createElement("div");
    child.after('hello', d1);
    shouldBe("parent.childNodes.length", "3");
    shouldBe("child.nextSibling.data", "'hello'");
    shouldBeType("parent.childNodes[1]", "Text");
    shouldBe("parent.childNodes[1].data", "'hello'");
    shouldBeType("parent.childNodes[2]", "Element");
    shouldBe("parent.childNodes[2]", "d1");
    debug("");

    debug("Test conversion to string");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    child.after(null, undefined, 7);
    shouldBe("parent.childNodes.length", "4");
    shouldBeType("parent.childNodes[0]", type);
    shouldBe("parent.childNodes[0]", "child");
    shouldBeType("parent.childNodes[1]", "Text");
    shouldBe("parent.childNodes[1].data", "'null'");
    shouldBeType("parent.childNodes[2]", "Text");
    shouldBe("parent.childNodes[2].data", "'undefined'");
    shouldBeType("parent.childNodes[3]", "Text");
    shouldBe("parent.childNodes[3].data", "'7'");
    debug("");

    debug("Test a child without a parent.");
    child = createChild();
    d1 = document.createElement("div");
    child.after(d1);
    shouldBeNull("child.nextSibling");
    debug("");

    debug("Test when there the next sibling is not a viable next sibling.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    d1 = document.createElement("div");
    parent.appendChild(d1);
    d2 = document.createElement("div");
    parent.appendChild(d2);
    child.after("hello", d1, "world");
    shouldBe("parent.childNodes.length", "5");
    shouldBeType("parent.childNodes[0]", type);
    shouldBe("parent.childNodes[0]", "child");
    shouldBeType("parent.childNodes[1]", "Text");
    shouldBe("parent.childNodes[1].data", "'hello'");
    shouldBeType("parent.childNodes[2]", "Element");
    shouldBe("parent.childNodes[2]", "d1");
    shouldBeType("parent.childNodes[3]", "Text");
    shouldBe("parent.childNodes[3].data", "'world'");
    shouldBeType("parent.childNodes[4]", "Element");
    shouldBe("parent.childNodes[4]", "d2");
    debug("");

    debug("Test when there is no viable next sibling.");
    parent = document.createElement('div');
    child = createChild();
    parent.appendChild(child);
    d1 = document.createElement("div");
    parent.appendChild(d1);
    d2 = document.createElement("div");
    parent.appendChild(d2);
    child.after("hello", d1, "world", d2);
    shouldBe("parent.childNodes.length", "5");
    shouldBeType("parent.childNodes[0]", type);
    shouldBe("parent.childNodes[0]", "child");
    shouldBeType("parent.childNodes[1]", "Text");
    shouldBe("parent.childNodes[1].data", "'hello'");
    shouldBeType("parent.childNodes[2]", "Element");
    shouldBe("parent.childNodes[2]", "d1");
    shouldBeType("parent.childNodes[3]", "Text");
    shouldBe("parent.childNodes[3].data", "'world'");
    shouldBeType("parent.childNodes[4]", "Element");
    shouldBe("parent.childNodes[4]", "d2");

    debug("");
}

test("Element", function() { return document.createElement("div"); });
test("Text", function() { return document.createTextNode("text node text"); });
test("Comment", function() { return document.createComment("comment text"); });

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
