blob: bf4b99894da3251a394760f03d7b06b7e52b291f [file] [log] [blame]
<!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>