diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.js')
-rw-r--r-- | testing/web-platform/tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.js b/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.js new file mode 100644 index 0000000000..7df128515c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-data-set-empty-file.window.js @@ -0,0 +1,99 @@ +test(t => { + const form = document.body.appendChild(document.createElement("form")), + input = form.appendChild(document.createElement("input")); + input.type = "file"; + input.name = "hi"; + t.add_cleanup(() => { + document.body.removeChild(form); + }); + const fd = new FormData(form), + value = fd.get(input.name); + assert_true(value instanceof File, "value is a File"); + assert_equals(value.name, "", "name"); + assert_equals(value.type, "application/octet-stream", "type"); + assert_equals(value.size, 0, "expected value to be an empty File"); +}, "Empty <input type=file> is still added to the form's entry list"); + +async_test((t) => { + const form = document.body.appendChild(document.createElement("form")), + input = form.appendChild(document.createElement("input")), + target = document.createElement("iframe"); + target.name = "target1"; + document.body.appendChild(target); + form.method = "POST"; + form.action = "/fetch/api/resources/echo-content.py"; + form.enctype = "application/x-www-form-urlencoded"; + form.target = target.name; + input.type = "file"; + input.name = "hi"; + t.add_cleanup(() => { + document.body.removeChild(form); + document.body.removeChild(target); + }); + + target.addEventListener("load", t.step_func_done(() => { + assert_equals(target.contentDocument.body.textContent, "hi="); + })); + form.submit(); +}, "Empty <input type=file> shows up in the urlencoded serialization"); + +async_test((t) => { + const form = document.body.appendChild(document.createElement("form")), + input = form.appendChild(document.createElement("input")), + target = document.createElement("iframe"); + target.name = "target2"; + document.body.appendChild(target); + form.method = "POST"; + form.action = "/fetch/api/resources/echo-content.py"; + form.enctype = "multipart/form-data"; + form.target = target.name; + input.type = "file"; + input.name = "hi"; + t.add_cleanup(() => { + document.body.removeChild(form); + document.body.removeChild(target); + }); + + target.addEventListener("load", t.step_func_done(() => { + // We use \n rather than \r\n because newlines get normalized as a result + // of HTML parsing. + const found = target.contentDocument.body.textContent; + const boundary = found.split("\n")[0]; + const expected = [ + boundary, + 'Content-Disposition: form-data; name="hi"; filename=""', + "Content-Type: application/octet-stream", + "", + "", + boundary + "--", + "", + ].join("\n"); + assert_equals(found, expected); + })); + form.submit(); +}, "Empty <input type=file> shows up in the multipart/form-data serialization"); + +async_test((t) => { + const form = document.body.appendChild(document.createElement("form")), + input = form.appendChild(document.createElement("input")), + target = document.createElement("iframe"); + target.name = "target3"; + document.body.appendChild(target); + form.method = "POST"; + form.action = "/fetch/api/resources/echo-content.py"; + form.enctype = "text/plain"; + form.target = target.name; + input.type = "file"; + input.name = "hi"; + t.add_cleanup(() => { + document.body.removeChild(form); + document.body.removeChild(target); + }); + + target.addEventListener("load", t.step_func_done(() => { + // The actual result is "hi=\r\n"; the newline gets normalized as a side + // effect of the HTML parsing. + assert_equals(target.contentDocument.body.textContent, "hi=\n"); + })); + form.submit(); +}, "Empty <input type=file> shows up in the text/plain serialization"); |