| Index: LayoutTests/imported/web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html
|
| diff --git a/LayoutTests/imported/web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html b/LayoutTests/imported/web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..003f94e88ccd9ed6cafe13100c95f8214b9ab0f1
|
| --- /dev/null
|
| +++ b/LayoutTests/imported/web-platform-tests/html/semantics/forms/the-form-element/form-nameditem.html
|
| @@ -0,0 +1,239 @@
|
| +<!doctype html>
|
| +<meta charset=utf-8>
|
| +<title>Form named getter</title>
|
| +<script src="../../../../../../resources/testharness.js"></script>
|
| +<script src="../../../../../../resources/testharnessreport.js"></script>
|
| +<div id=log></div>
|
| +<!-- XXX Nothing tests id attributes yet. -->
|
| +<!-- XXX Keygen. -->
|
| +<!-- XXX We also need tests for moving inputs and forms in the DOM. -->
|
| +<form>
|
| +<input type=button name=button>
|
| +<input type=radio name=radio value=x>
|
| +<input type=radio name=radio value=y>
|
| +<input type=radio name=radio value=z>
|
| +</form>
|
| +
|
| +<form>
|
| +<button name=l1></button>
|
| +<fieldset name=l2></fieldset>
|
| +<input type=hidden name=l3>
|
| +<input type=text name=l4>
|
| +<input type=search name=l5>
|
| +<input type=tel name=l6>
|
| +<input type=url name=l7>
|
| +<input type=email name=l8>
|
| +<input type=password name=l9>
|
| +<input type=datetime name=l10>
|
| +<input type=date name=l11>
|
| +<input type=month name=l12>
|
| +<input type=week name=l13>
|
| +<input type=time name=l14>
|
| +<input type=datetime-local name=l15>
|
| +<input type=number name=l16>
|
| +<input type=range name=l17>
|
| +<input type=color name=l18>
|
| +<input type=checkbox name=l19>
|
| +<input type=radio name=l20>
|
| +<input type=file name=l21>
|
| +<input type=submit name=l22>
|
| +<input type=image name=l23>
|
| +<input type=reset name=l24>
|
| +<input type=button name=l25>
|
| +<input type=foo name=l26>
|
| +<input name=l27>
|
| +<object name=l28></object>
|
| +<output name=l29></output>
|
| +<select name=l30></select>
|
| +<textarea name=l31></textarea>
|
| +</form>
|
| +
|
| +<form>
|
| +<!-- EventTarget -->
|
| +<input type=radio name=addEventListener>
|
| +<input type=radio name=removeEventListener>
|
| +<input type=radio name=dispatchEvent>
|
| +
|
| +<!-- Node -->
|
| +<input type=radio name=nodeType>
|
| +<input type=radio name=nodeName>
|
| +<input type=radio name=ownerDocument>
|
| +
|
| +<!-- Element -->
|
| +<input type=radio name=namespaceURI>
|
| +<input type=radio name=prefix>
|
| +<input type=radio name=localName>
|
| +
|
| +<!-- HTMLElement -->
|
| +<input type=radio name=title>
|
| +<input type=radio name=lang>
|
| +<input type=radio name=dir>
|
| +
|
| +<!-- HTMLFormElement -->
|
| +<input type=radio name=acceptCharset>
|
| +<input type=radio name=action>
|
| +<input type=radio name=autocomplete>
|
| +<input type=radio name=enctype>
|
| +<input type=radio name=encoding>
|
| +<input type=radio name=method>
|
| +<input type=radio name=name>
|
| +<input type=radio name=noValidate>
|
| +<input type=radio name=target>
|
| +<input type=radio name=elements>
|
| +<input type=radio name=length>
|
| +<input type=radio name=submit>
|
| +<input type=radio name=reset>
|
| +<input type=radio name=checkValidity>
|
| +</form>
|
| +
|
| +<img name=x>
|
| +<form></form><!-- no child nodes -->
|
| +<img name=y>
|
| +<form><!-- a child node --></form>
|
| +<img name=z>
|
| +
|
| +<input form=a name=b>
|
| +<form id=a></form>
|
| +<input form=c name=d>
|
| +<input form=c name=d>
|
| +<form id=c></form>
|
| +<script>
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + assert_equals(form.item, undefined)
|
| + assert_false("item" in form)
|
| +}, "Forms should not have an item method")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + assert_equals(form.namedItem, undefined)
|
| + assert_false("namedItem" in form)
|
| +}, "Forms should not have a namedItem method")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + var button = document.getElementsByTagName("input")[0]
|
| + assert_equals(button.type, "button")
|
| + assert_equals(form.button, button)
|
| + assert_equals(form.button.length, undefined)
|
| +}, "Name for a single element should work")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + assert_equals(form.radio.item(-1), null)
|
| + assert_array_equals([0, 1, 2].map(function(i) {
|
| + return form.radio.item(i).value
|
| + }), ["x", "y", "z"])
|
| + assert_equals(form.radio.item(3), null)
|
| +}, "Calling item() on the NodeList returned from the named getter should work")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + assert_equals(form.radio.length, 3)
|
| + assert_equals(form.radio[-1], undefined)
|
| + assert_array_equals([0, 1, 2].map(function(i) {
|
| + return form.radio[i].value
|
| + }), ["x", "y", "z"])
|
| + assert_equals(form.radio[3], undefined)
|
| +}, "Indexed getter on the NodeList returned from the named getter should work")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[0]
|
| + var indices = [-1, 0, 1, 2, 3]
|
| + indices.forEach(function(i) {
|
| + assert_throws(new TypeError(), function() {
|
| + form.radio(i)
|
| + })
|
| + })
|
| +}, "Invoking a legacycaller on the NodeList returned from the named getter " +
|
| + "should not work")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[1]
|
| + for (var i = 1; i <= 31; ++i) {
|
| + if (i == 23) {
|
| + // input type=image
|
| + assert_equals(form["l" + i], undefined)
|
| + } else {
|
| + assert_equals(form["l" + i], form.children[i - 1])
|
| + }
|
| + }
|
| +}, "All listed elements except input type=image should be present in the form")
|
| +
|
| +test(function() {
|
| + var names = [
|
| + // EventTarget
|
| + "addEventListener", "removeEventListener", "dispatchEvent",
|
| + // Node
|
| + "nodeType", "nodeName", "ownerDocument",
|
| + // Element
|
| + "namespaceURI", "prefix", "localName",
|
| + // HTMLElement
|
| + "title", "lang", "dir",
|
| + // HTMLFormElement
|
| + "acceptCharset", "action", "autocomplete", "enctype", "encoding", "method",
|
| + "name", "noValidate", "target", "elements", "length", "submit", "reset",
|
| + "checkValidity"
|
| + ]
|
| + var form = document.getElementsByTagName("form")[2]
|
| + names.forEach(function(name, i) {
|
| + assert_equals(form[name], form.children[i])
|
| + })
|
| +}, "Named elements should override builtins")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[3]
|
| + assert_equals(form.x, undefined, "x should not be associated with the form")
|
| + assert_equals(form.y, undefined, "y should not be associated with the form")
|
| + assert_equals(form.z, undefined, "z should not be associated with the form")
|
| + assert_equals(form[0], undefined, "The form should not have supported property indices")
|
| + assert_equals(form.length, 0)
|
| +}, "Named items outside the form should not be returned (no children)")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[4]
|
| + assert_equals(form.x, undefined, "x should not be associated with the form")
|
| + assert_equals(form.y, undefined, "y should not be associated with the form")
|
| + assert_equals(form.z, undefined, "z should not be associated with the form")
|
| + assert_equals(form[0], undefined, "The form should not have supported property indices")
|
| + assert_equals(form.length, 0)
|
| +}, "Named items outside the form should not be returned (one child)")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[5]
|
| + assert_equals(form.id, "a")
|
| +
|
| + var input = document.getElementsByName("b")[0]
|
| + assert_equals(input.localName, "input")
|
| + assert_equals(input.getAttribute("form"), "a")
|
| +
|
| + assert_equals(form.b, input);
|
| +}, "The form attribute should be taken into account for named getters (single element)")
|
| +
|
| +test(function() {
|
| + var form = document.getElementsByTagName("form")[6]
|
| + assert_equals(form.id, "c")
|
| +
|
| + var input1 = document.getElementsByName("d")[0]
|
| + assert_equals(input1.localName, "input")
|
| + assert_equals(input1.getAttribute("form"), "c")
|
| +
|
| + var input2 = document.getElementsByName("d")[1]
|
| + assert_equals(input2.localName, "input")
|
| + assert_equals(input2.getAttribute("form"), "c")
|
| +
|
| + assert_true(form.d instanceof NodeList, "form.d should be a NodeList")
|
| + assert_array_equals(form.d, [input1, input2])
|
| +}, "The form attribute should be taken into account for named getters (multiple elements)")
|
| +
|
| +test(function() {
|
| + var f = document.body.appendChild(document.createElement("form"))
|
| + f.id = "f"
|
| + var g = f.appendChild(document.createElement("form"))
|
| + g.id = "g"
|
| + var input = g.appendChild(document.createElement("input"))
|
| + input.name = "x"
|
| + assert_equals(f.x, undefined)
|
| + assert_equals(g.x, input)
|
| +}, "Input should only be a named property on the innermost form that contains it")
|
| +</script>
|
|
|