Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MathML 'HTMLOrForeignElement` Mixin Tests</title>
<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
// it is here tentatively
test(function() {
var mathml = document.createElementNS(
"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>