diff options
Diffstat (limited to 'testing/web-platform/tests/xhr/formdata/constructor-formelement.html')
-rw-r--r-- | testing/web-platform/tests/xhr/formdata/constructor-formelement.html | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/testing/web-platform/tests/xhr/formdata/constructor-formelement.html b/testing/web-platform/tests/xhr/formdata/constructor-formelement.html new file mode 100644 index 0000000000..813e1d2a6c --- /dev/null +++ b/testing/web-platform/tests/xhr/formdata/constructor-formelement.html @@ -0,0 +1,150 @@ +<!DOCTYPE html> +<title>FormData: constructor (with form element)</title> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> +<link rel="help" href="https://xhr.spec.whatwg.org/#dom-formdata"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#constructing-form-data-set"> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<form> + <output name="do-not-submit-me-1"></output> + + <datalist> + <input type="text" name="do-not-submit-me-2" value="bad"> + <select name="do-not-submit-me-3"> + <option value="bad" selected></option> + </select> + <input type="checkbox" name="do-not-submit-me-4" checked> + </datalist> + + <input type="text" name="do-not-submit-me-5" disabled value="bad"> + <fieldset disabled> + <input type="text" name="do-not-submit-me-6" value="bad"> + </fieldset> + + <button name="do-not-submit-me-7">bad</button> + <input type="submit" name="do-not-submit-me-8" value="bad"> + <input type="reset" name="do-not-submit-me-9" value="bad"> + <input type="image" name="do-not-submit-me-10" value="bad"> + + <input type="checkbox" name="do-not-submit-me-11"> + <input type="radio" name="do-not-submit-me-12"> + + <input type="text" value="do-not-submit-me-13"> + <input type="text" name="" value="do-not-submit-me-14"> + + <object name="do-not-submit-me-15"></object> + + <select name="select-1"> + <option disabled value="do-not-submit-me-16"></option> + <option value="do-not-submit-me-17"></option> + <option disabled value="do-not-submit-me-18" selected></option> + </select> + + <select name="select-2"> + <option value="do-not-submit-me-19"></option> + <option value="submit-me-1" selected></option> + </select> + + <select name="select-3" multiple> + <option value="do-not-submit-me-20"></option> + <option value="submit-me-2" selected></option> + <option value="do-not-submit-me-21"></option> + <option value="submit-me-3" selected></option> + </select> + + <input type="checkbox" name="submit-me-4" value="checkbox-1" checked> + <input type="checkbox" name="submit-me-5" checked> + + <input type="radio" name="submit-me-6" value="radio-1" checked> + <input type="radio" name="submit-me-7" checked> + + <!-- not tested: <input type="file"> with selected files --> + + <input type="file" name="file-1"> + + <!-- not tested: <object>s that allow form submission --> + + <input type="text" name="submit-me-8" value="text-1"> + <input type="text" name="submit-me-8" value="text-2"> + <input type="search" name="submit-me-9" value="search-1"> + <input type="url" name="submit-me-10" value="url-1"> + <input type="hidden" name="submit-me-11" value="hidden-1"> + <input type="password" name="submit-me-12" value="password-1"> + <input type="number" name="submit-me-13" value="11"> + <input type="range" name="submit-me-14" value="11"> + <input type="color" name="submit-me-15" value="#123456"> + + <textarea name="submit-me-16">textarea value +with linebreaks set to LF</textarea> + + <!-- this generates two form data entries! --> + <input type="text" name="dirname-is-special" dirname="submit-me-17" value="dirname-value"> + + <input type="text" name="submit-me-21"> +</form> + +<script> +"use strict"; + +test(() => { + + const form = document.querySelector("form"); + + const input = document.createElement("input"); + input.name = "submit-me-18-\uDC01"; + input.value = "value-\uDC01"; + assert_equals(input.name, "submit-me-18-\uDC01", "input.name accepts unpaired surrogates"); + assert_equals(input.value, "value-\uDC01", "input.value accepts unpaired surrogates"); + form.appendChild(input); + + const input2 = document.createElement("input"); + input2.name = "submit-me-\r19\n"; + input2.value = "value\n\r"; + assert_equals(input2.name, "submit-me-\r19\n", "input.name accepts \\r and \\n"); + assert_equals(input2.value, "value", "input.value when type=text should not contain newlines"); + form.appendChild(input2); + + const formData = new FormData(form); + + const expected = [ + ["select-2", "submit-me-1"], + ["select-3", ["submit-me-2", "submit-me-3"]], + ["submit-me-4", "checkbox-1"], + ["submit-me-5", "on"], + ["submit-me-6", "radio-1"], + ["submit-me-7", "on"], + ["submit-me-8", ["text-1", "text-2"]], + ["submit-me-9", "search-1"], + ["submit-me-10", "url-1"], + ["submit-me-11", "hidden-1"], + ["submit-me-12", "password-1"], + ["submit-me-13", "11"], + ["submit-me-14", "11"], + ["submit-me-15", "#123456"], + ["submit-me-16", "textarea value\nwith linebreaks set to LF"], + ["dirname-is-special", "dirname-value"], + ["submit-me-17", "ltr"], + ["submit-me-18-\uFFFD", "value-\uFFFD"], + ["submit-me-\r19\n", "value"], + ["submit-me-21", ""] + ]; + + for (const t of expected) { + const field = t[0]; + const valueOrValues = t[1]; + const values = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues]; + assert_array_equals(formData.getAll(field), values, field); + } + + const fileEntry = formData.getAll("file-1"); + assert_equals(fileEntry.length, 1); + assert_equals(fileEntry[0], formData.get("file-1")); + assert_equals(fileEntry[0].constructor, File); + assert_equals(fileEntry[0].size, 0); + assert_equals(fileEntry[0].name, ""); + assert_equals(fileEntry[0].type, "application/octet-stream"); + +}, "test that FormData is correctly constructed from the form data set"); +</script> |