<!DOCTYPE html> <meta charset="utf-8" /> <title>UI Events Test: Modifier keys combinations</title> <link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com"> <link rel="help" href="https://w3c.github.io/uievents/#idl-keyboardevent" /> <meta name="assert" content="This test checks that modifier keys combinations are properly detected in 'keydown' event."> <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> <div id="target" tabindex="0">Target</div> <script> const keys = { "Shift": '\uE008' + 'y', "Control": '\uE009' + 'y', "Alt": '\uE00A' + 'y', "Meta": '\uE03D' + 'y', }; target.focus(); for (const [key, code] of Object.entries(keys)) { promise_test(() => { return new Promise(resolve => { target.addEventListener("keydown", (event) => { if (event.key != key) resolve(event); }); test_driver.send_keys(target, code); }).then((event) => { if (event.shiftKey) { // Shift + y will send a "Y" keydown event on Chromium and Firefox, but a "y" one on WebKit. assert_true(event.key == "y" || event.key == "Y"); } else { assert_equals(event.key, "y"); } assert_equals(event.shiftKey, key === "Shift"); assert_equals(event.ctrlKey, key === "Control"); assert_equals(event.altKey, key === "Alt"); assert_equals(event.metaKey, key === "Meta"); }); }, `Check sending "${key} + y" key combination`); } </script>