<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<p id="description"></p>
<div id="divId">
<form id="form1">
    <button id=button1></button>
    <fieldset id=fieldset1><legend id=legend1></legend></fieldset>
    <input id=inputhidden type=hidden>
    <input id=commoninput type=text>
    <input id=inputcommon type=search value=searching>
    <input id=inputCOMMON type=url>
    <input id=commoninput type=email>
    <input id=inputpassword type=password>
    <input id=inputdate type=date>
    <input id=numberId name=inputcommon type=number value=123>
    <input id=inputrange type=range>
    <input id=inputcolor type=color>
    <input id=inputcheckbox type=checkbox>
    <input id=inputcommon type=radio value="inputRadioValue">
    <input id=inputfile type=file>
    <input id=inputsubmit type=submit>
    <input id=inputcommon type=image>
    <input id=commoninput type=reset>
    <input id=inputcommon type=button value=buttonValue>
    <keygen id=keygen1></keygen>
    <label id=label1></label>
    <meter id=meter1></meter>
    <object id=object1></object>
    <output id=output1></output>
    <progress id=progress1></progress>
    <select id=select1 name=inputCOmmon>
        <optgroup id=optgroup1>group1</optgroup>
        <option id=option1>option1</option>
    </select>
    <textarea id=textarea1></textarea>
</form>
</div>
<div id="console"></div>
<script>
description("This test is for RadioNodeList specified at http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#radionodelist ");
debug("");
var owner = document.getElementById('form1');

shouldBe('owner.elements.length', '23');

var elementsList = owner.elements;
var radioNodeList = elementsList.namedItem("inputcommon");
shouldBe('radioNodeList.length', '4');

shouldBe('radioNodeList[0].value', "'searching'");
shouldBe('radioNodeList[1].value', "'123'");
shouldBe('radioNodeList[2].value', "'inputRadioValue'");
shouldBe('radioNodeList[3].value', "'buttonValue'");

debug("");
debug("Changing the input value to check RadioNodeList is live view of FormCollection");
document.getElementById("numberId").value = 456;
shouldBe('radioNodeList[1].value', "'456'");

debug("");
debug("Checking value IDL attribute on the RadioNodeList");
shouldBe('radioNodeList.value', '""');
shouldBe('radioNodeList.value = "inputRadioValue"; radioNodeList[2].checked', 'true');
shouldBe('Object.prototype.toString.call(radioNodeList[2])', "'[object HTMLInputElement]'");
shouldBe('radioNodeList[2].type', "'radio'");

radioNodeList[2].checked = false;
shouldBe('radioNodeList.value', '""');
shouldBe('radioNodeList[2].checked = true; radioNodeList.value', "'inputRadioValue'");

var newElement = document.createElement("input");
newElement.setAttribute("type", "text");
newElement.setAttribute("value", "new element");
newElement.setAttribute("id", "inputcommon");

debug("");
debug("Check RadioNodeList is updated after adding a new element");
shouldBe('owner.appendChild(newElement); radioNodeList.length', '5');
shouldBe('radioNodeList[4].value', "'new element'");

debug("");
debug("Check RadioNodeList is updated after remove an element");
shouldBe('owner.removeChild(newElement); radioNodeList.length', '4');
shouldBe('radioNodeList[3].value', "'buttonValue'");

var nonSubtreeElement = document.createElement("input");
nonSubtreeElement.setAttribute("type", "text");
nonSubtreeElement.setAttribute("value", "non subtree element");
nonSubtreeElement.setAttribute("id", "inputcommon");
nonSubtreeElement.setAttribute("form", "form1");

var container = document.getElementById("divId");

debug("");
debug("Check RadioNodeList is updated after adding a new element");
shouldBe('container.appendChild(nonSubtreeElement); radioNodeList.length', '5');
shouldBe('owner.elements.length', '24');
shouldBe('radioNodeList[4].value', "'non subtree element'");

debug("");
debug("Check RadioNodeList is updated after change in id, type and checked state of an element");
shouldBe('radioNodeList.length', '5');
debug("After changing the id");
radioNodeList[4].id = "changedName";
shouldBe('radioNodeList.length', '4');

shouldBe('elementsList[13].checked = false; radioNodeList.value', '""');
shouldBe('elementsList[13].checked = true; radioNodeList.value', "'inputRadioValue'");
shouldBe('elementsList[13].type = "date"; radioNodeList.value', "''");

debug("");
debug("Check second RadioNodeList is also created properly");
var radioNodeList2 = elementsList.namedItem("commoninput");
shouldBe('radioNodeList2.length', '3');

shouldBe('radioNodeList2[0].type', "'text'");
shouldBe('radioNodeList2[1].type', "'email'");
shouldBe('radioNodeList2[2].type', "'reset'");
radioNodeList2[2].id = "idChanged";
debug("After changing the id");
shouldBe('radioNodeList2.length', '2');
debug("");

debug("Check that object element also reflects in RadioNodeList.");
document.getElementById("object1").id = "inputcommon";
shouldBe('radioNodeList.length', '5');

debug("");
debug("Check that object element does not reflect in RadioNodeList if its owner form is not present.");
var nonSubtreeObjectElement = document.createElement("object");
nonSubtreeObjectElement.setAttribute("id", "inputcommon");
shouldBe('container.appendChild(nonSubtreeObjectElement); radioNodeList.length', '5');

container.parentNode.removeChild(container);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
