mirror of
https://github.com/servo/servo
synced 2026-05-12 18:06:32 +02:00
87 lines
2.8 KiB
HTML
87 lines
2.8 KiB
HTML
<!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>
|