summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html')
-rw-r--r--testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html86
1 files changed, 86 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html b/testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html
new file mode 100644
index 0000000000..f3c6f7d462
--- /dev/null
+++ b/testing/web-platform/tests/html/semantics/forms/input-change-event-properties.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test the properties of input and change events</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<fieldset id="clickable">
+ <input type="checkbox">
+ <input type="radio">
+</fieldset>
+
+<fieldset id="typeable">
+ <input type="text">
+ <input type="search">
+ <input type="tel">
+ <input type="url">
+ <input type="email">
+ <input type="password">
+ <input type="number">
+ <textarea></textarea>
+</fieldset>
+
+<select>
+ <option>1</option>
+ <option>2</option>
+</select>
+
+<!-- Not going to test the more complicated input types like date or color for now... -->
+
+<button id="click-me-to-unfocus-other-things">Clickable</button>
+
+<script>
+"use strict";
+const clickMeToUnfocusOtherThings = document.querySelector("#click-me-to-unfocus-other-things");
+
+for (const el of document.querySelector("#clickable").children) {
+ test(() => {
+ let inputEvent, changeEvent;
+ el.oninput = e => inputEvent = e;
+ el.onchange = e => changeEvent = e;
+
+ el.click();
+
+ assert_event(inputEvent, { bubbles: true, cancelable: false, composed: true });
+ assert_event(changeEvent, { bubbles: true, cancelable: false, composed: false });
+ }, `${el.outerHTML} click()`);
+}
+
+for (const el of document.querySelector("#typeable").children) {
+ promise_test(async () => {
+ let inputEvent, changeEvent;
+ el.oninput = e => inputEvent = e;
+ el.onchange = e => changeEvent = e;
+
+ await test_driver.send_keys(el, "1"); // has to be a number so <input type=number> works
+ await test_driver.click(clickMeToUnfocusOtherThings);
+
+ assert_event(inputEvent, { bubbles: true, cancelable: false, composed: true });
+ assert_event(changeEvent, { bubbles: true, cancelable: false, composed: false });
+ }, `${el.outerHTML} typing`);
+}
+
+promise_test(async () => {
+ const el = document.querySelector("select");
+
+ let inputEvent, changeEvent;
+ el.oninput = e => inputEvent = e;
+ el.onchange = e => changeEvent = e;
+
+ // TODO: this doesn't seem to work in Safari/on Macs. Or maybe Safari is legitimately failing.
+ // Someone with a Mac should investigate.
+ await test_driver.send_keys(el, "\uE015"); // down arrow key
+ await test_driver.click(clickMeToUnfocusOtherThings);
+
+ assert_event(inputEvent, { bubbles: true, cancelable: false, composed: true });
+ assert_event(changeEvent, { bubbles: true, cancelable: false, composed: false });
+}, `<select> pressing down arrow`);
+
+function assert_event(e, { bubbles, cancelable, composed }) {
+ assert_equals(e.bubbles, bubbles, `${e.type} bubbles`);
+ assert_equals(e.cancelable, cancelable, `${e.type} cancelable`);
+ assert_equals(e.composed, composed, `${e.type} composed`);
+}
+</script>