<!doctype html>
<meta charset="utf-8">
<title>tHead tests</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<table id="t">
<caption id="tcaption"></caption><thead id="thead1"></thead><thead id="thead2"></thead><thead id="thead3"></thead><tbody id="tbody1"></tbody><tbody id="tbody2"></tbody><tfoot id="tfoot"></tfoot>
</table>
<table>
<thead id="t2thead">
<td>
<table id="t2">
</table>
</table>
<script>
test(function() {
    var t = document.getElementById("t");
    var thead1 = document.getElementById("thead1");

    assert_equals(t.tHead, thead1);

    var thead2 = document.getElementById("thead2");
    t.tHead = null;

    assert_equals(t.tHead, thead2);

    var thead3 = document.getElementById("thead3");
    t.deleteTHead();

    assert_equals(t.tHead, thead3);

    var thead = t.createTHead();
    assert_equals(t.tHead, thead);
    assert_equals(thead, thead3);

    t.deleteTHead();
    assert_equals(t.tHead, null);

    var tcaption = document.getElementById("tcaption");
    var tbody1 = document.getElementById("tbody1");

    thead = t.createTHead();
    assert_equals(t.tHead, thead);

    assert_equals(t.tHead.previousSibling, tcaption);
    assert_equals(t.tHead.nextSibling, tbody1);

    assert_throws(new TypeError(), function(){
        t.tHead = document.createElement("div");
    });

    assert_throws("HierarchyRequestError", function(){
        t.tHead = document.createElement("tbody");
    });

});

test(function() {
    var t2 = document.getElementById("t2");
    var t2thead = document.getElementById("t2thead");

    assert_throws("HierarchyRequestError", function() {
        t2.tHead = t2thead;
    });
});

test(function () {
    var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
    var thead = table.createTHead();

    assert_equals(table.tHead, thead);
    assert_equals(thead.prefix, null);
});
</script>
