| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <div id="container"> |
| <form id="testForm"> |
| Radio button array: |
| <input type="radio" name="type1" value="value1"> |
| <input type="radio" name="type1" value="value2"> |
| <input type="radio" name="type2" value="value4"> |
| <input type="radio" name="type2" value="value5"> |
| <br> |
| Single checkbox: |
| <input type="checkbox" name="chkbox" value="chkboxvalue"> |
| <br> |
| </form> |
| <div id="external-elements"> |
| <input type="radio" form="testForm" name="type1" value="value3"> |
| <input type="radio" form="testForm" name="type2" value="value6"> |
| </div> |
| </div> |
| <div id="console"></div> |
| <script> |
| |
| description("RadioNodeList should be rooted at form itself if detached from dom tree"); |
| debug(""); |
| var owner = document.getElementById('testForm'); |
| var radioNodeList1 = owner.elements['type1']; |
| var radioNodeList2 = owner.elements['type2']; |
| var container = document.getElementById('container'); |
| |
| function testRadioNodeList(expectedNumberOfItems) { |
| shouldBe('radioNodeList1.length', expectedNumberOfItems + ''); |
| shouldBe('radioNodeList2.length', expectedNumberOfItems + ''); |
| |
| shouldBe('radioNodeList1[0].value', "'value1'"); |
| shouldBe('radioNodeList1[1].value', "'value2'"); |
| if (expectedNumberOfItems == 3) |
| shouldBe('radioNodeList1[2].value', "'value3'"); |
| shouldBe('radioNodeList2[0].value', "'value4'"); |
| shouldBe('radioNodeList2[1].value', "'value5'"); |
| if (expectedNumberOfItems == 3) |
| shouldBe('radioNodeList2[2].value', "'value6'"); |
| } |
| |
| debug("form in dom tree"); |
| testRadioNodeList(3); |
| |
| debug("Check RadioNodeList.value"); |
| shouldBe('radioNodeList1.value', '""'); |
| shouldBe('radioNodeList2.value', '""'); |
| shouldBe('radioNodeList1[2].checked = true; radioNodeList1.value', "'value3'"); |
| |
| container.removeChild(owner); |
| |
| debug(""); |
| debug("form detached from dom tree"); |
| testRadioNodeList(2); |
| |
| debug("Check RadioNodeList.value"); |
| shouldBe('radioNodeList1[1].checked = true; radioNodeList1.value', "'value2'"); |
| |
| container.appendChild(owner); |
| var externalElements = document.getElementById('external-elements'); |
| externalElements.parentNode.removeChild(externalElements); |
| container.appendChild(externalElements); |
| |
| debug(""); |
| debug("form again added to dom tree"); |
| testRadioNodeList(3); |
| |
| container.parentNode.removeChild(container); |
| |
| debug(""); |
| debug("form's ancestor detached from dom tree"); |
| testRadioNodeList(2); |
| |
| debug("Check RadioNodeList.value"); |
| shouldBe('radioNodeList1[1].checked = true; radioNodeList1.value', "'value2'"); |
| |
| document.body.appendChild(container); |
| |
| debug(""); |
| debug("form again added to dom tree"); |
| testRadioNodeList(3); |
| |
| container.parentNode.removeChild(container); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |