diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html b/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html new file mode 100644 index 0000000000..0f0fd4ede0 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/form-submission-0/form-submission-algorithm.html @@ -0,0 +1,165 @@ +<!DOCTYPE html> +<link rel="help" href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#form-submission-algorithm"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="./resources/targetted-form.js"></script> +<body> +<script> +test(() => { + let form = populateForm('<input name=n10 value=v10>'); + let counter = 0; + form.addEventListener('formdata', e => { + ++counter; + form.submit(); + }); + form.submit(); + assert_equals(counter, 1); + new FormData(form); + assert_equals(counter, 2); +}, 'If constructing entry list flag of form is true, then return'); + +test(() => { + let form = populateForm('<input><input type=submit>'); + let submitter1 = form.querySelector('input[type=submit]'); + let valid = form.elements[0]; + let counter = 0; + valid.oninvalid = () => { + ++counter; + }; + form.onsubmit = () => { + valid.required = true; + submitter1.dispatchEvent(new MouseEvent("click")); + }; + submitter1.dispatchEvent(new MouseEvent("click")); + assert_equals(counter, 0); +}, "If firing submission events flag of form is true, then return"); + +test(() => { + let form = populateForm('<input required><input type=submit><button type=submit></button>'); + let submitter1 = form.querySelector('input[type=submit]'); + let submitter2 = form.querySelector('button[type=submit]'); + let invalid = form.querySelector('[required]'); + let counter = 0; + invalid.oninvalid = () => { + ++counter; + // Needs to click different one because click() has reentrancy protection. + submitter2.click(); + }; + submitter1.click(); + assert_equals(counter, 1); +}, "If form's firing submission events is true, then return; 'invalid' event"); + +promise_test(async () => { + let form = populateForm('<input type=submit name=n value=i><button type=submit name=n value=b>'); + let submitter1 = form.querySelector('input[type=submit]'); + let submitter2 = form.querySelector('button[type=submit]'); + let iframe = form.previousSibling; + form.onsubmit = () => { + // Needs to click different one because click() has reentrancy protection. + submitter2.click(); + }; + submitter1.click(); + // We actually submit the form in order to check which 'click()' submits it. + await loadPromise(iframe); + assert_not_equals(iframe.contentWindow.location.search.indexOf('n=i'), -1); +}, "If form's firing submission events is true, then return; 'submit' event"); + +promise_test(async () => { + let form = populateForm('<button type=submit></button><input name=n1 value=submit type=submit>'); + let iframe = form.previousSibling; + let submitter = form.querySelector('input[type=submit]'); + let event; + form.addEventListener('submit', e => { event = e; }); + submitter.click(); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, submitter); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; clicking a submit button'); + +promise_test(async () => { + let form = populateForm('<input type=image name=n1>'); + let iframe = form.previousSibling; + let submitter = form.querySelector('input[type=image]'); + let event; + form.addEventListener('submit', e => { event = e; }); + submitter.click(); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, submitter); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; clicking an image button'); + +promise_test(async () => { + let form = populateForm(''); + let iframe = form.previousSibling; + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, null); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit()'); + +promise_test(async () => { + let form = populateForm(''); + let iframe = form.previousSibling; + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(null); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, null); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit(null)'); + +promise_test(async () => { + let form = populateForm('<input type=submit><button type=submit></button>'); + let iframe = form.previousSibling; + let submitter = form.querySelector('button'); + let event; + form.addEventListener('submit', e => { event = e; }); + form.requestSubmit(submitter); + await loadPromise(iframe); + assert_true(event.bubbles); + assert_true(event.cancelable); + assert_equals(event.submitter, submitter); + assert_true(event instanceof SubmitEvent); +}, 'firing an event named submit; form.requestSubmit(submitter)'); + +promise_test(async () => { + let form = populateForm('<input name=n1 value=v1>'); + form.onformdata = (e) => { e.target.remove(); }; + let wasLoaded = false; + let iframe = form.previousSibling; + // Request to load '/common/dummy.xhtml', and immediately submit the form to + // the same frame. If the form submission is aborted, the first request + // will be completed. + iframe.addEventListener("load", () => { + // This may be complicated by loads of the initial about:blank; + // we need to ignore them and only look at a load that isn't about:blank. + if (iframe.contentWindow.location == "about:blank") { return; } + wasLoaded = true; + }); + iframe.src = '/common/dummy.xhtml'; + assert_false(wasLoaded, 'Make sure the first loading is ongoing.'); + form.submit(); + await loadPromise(iframe); + assert_true(iframe.contentWindow.location.search.indexOf('n1=v1') == -1); +}, 'Cannot navigate (after constructing the entry list)'); + +promise_test(async () => { + let form = populateForm('<input type=submit>'); + let iframe = form.previousSibling; + let event; + form.submit(); + await loadPromise(iframe); + assert_true(iframe.contentWindow.location.href.includes("?")); +}, 'Submission URL should always have a non-null query part'); +</script> +</body> |