| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <title>MathML 'HTMLOrForeignElement` Mixin Tests</title> |
| <link rel="help" href="https://mathml-refresh.github.io/mathml-core/#dom-and-javascript"/> |
| <style> |
| mi { |
| background-color: red; |
| } |
| :focus { |
| background-color: rgb(0, 255, 0); |
| } |
| </style> |
| <meta |
| name="assert" |
| content="MathMLElements incorporate a functional HTMLOrForeignElement interface" |
| /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body tabindex="-1"> |
| <span tabindex="-1" |
| >This tests the presence and functionality of features of |
| `HTMLOrForeignElement` (currently `HTMLOrSVGElement`)</span |
| > |
| <math tabindex="-1"> |
| <mi>E</mi> |
| </math> |
| </body> |
| <script> |
| // spot check the functionality of several interfaces |
| let el = document.querySelector("mi"); |
| let mathEl = document.querySelector("math"); |
| |
| // this really belongs in |
| // https://github.com/web-platform-tests/wpt/blob/master/html/dom/elements/global-attributes/dataset.html |
| // it is here tentatively |
| test(function() { |
| var mathml = document.createElementNS( |
| "http://www.w3.org/1998/Math/MathML", |
| "math" |
| ); |
| assert_true(mathml.dataset instanceof DOMStringMap); |
| }, "MathML elements should have a .dataset"); |
| |
| // exercise some basic tests on .dataset |
| test(function() { |
| assert_equals( |
| Object.keys(el.dataset).toString(), |
| "", |
| "The .dataset property should be present" |
| ); |
| |
| el.setAttribute("data-one", "x"); |
| el.setAttribute("data-two", "y"); |
| |
| assert_equals( |
| el.dataset.one, |
| "x", |
| '.one should be "x" after setting the data-one attribute' |
| ); |
| assert_equals( |
| el.dataset.two, |
| "y", |
| '.one should be "y" after setting the data-two attribute' |
| ); |
| |
| el.dataset.one = "o"; |
| assert_equals( |
| el.getAttribute("data-one"), |
| "o", |
| 'the data-one attribute should reflect a change to dataset.one and contain "o"' |
| ); |
| }, "The dataset property should be present and be functional."); |
| |
| test(function() { |
| assert_equals(mathEl.tabIndex, -1); |
| }, "MathML elements should have a tabIndex property"); |
| |
| promise_test(function() { |
| function focus() { |
| mathEl.focus(); |
| return Promise.resolve(); |
| } |
| |
| return focus().then(() => { |
| assert_equals( |
| getComputedStyle(mathEl).backgroundColor, |
| "rgb(0, 255, 0)", |
| "MathML elements with tabindex=-1 should be programmatically focusable and apply :focus" |
| ); |
| }); |
| }, "MathML elements should work with focus predictably"); |
| |
| promise_test(function() { |
| function blur() { |
| mathEl.blur(); |
| return Promise.resolve(); |
| } |
| |
| return blur().then(() => { |
| assert_equals( |
| getComputedStyle(mathEl).backgroundColor, |
| "rgba(0, 0, 0, 0)", |
| "MathML elements with tabindex=-1 be programmatically blur() able" |
| ); |
| }); |
| }, "MathML elements should work with blur predictably"); |
| </script> |
| </html> |