blob: 997cfbd5211ba2216bc6e06daa444d2573ff9af7 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<body>
<script>
/************************************************************************
* Helper functions!
*/
function createFrame(markup) {
var i = document.createElement('iframe');
i.srcdoc = markup;
return i;
}
function appendAndWaitForLoad(test, frame) {
return new Promise((resolve, reject) => {
frame.onload = test.step_func(_ => {
frame.onload = null;
resolve();
});
document.body.appendChild(frame);
});
}
function assert_select(test, frame, value) {
var select = frame.contentDocument.querySelector('select');
assert_equals(select.value, value, 'select');
}
function assert_element_innerText(test, frame, name, value) {
var el = frame.contentDocument.querySelector(name);
if (value === null || value === undefined)
assert_equals(el, null, name);
else
assert_equals(el.innerText, value, name);
}
/************************************************************************
* The actual tests!
*/
var tests = [
// <input>, <keygen>, and <textarea> close <select>, so <plaintext> works.
];
var elementsToIgnore = [
"iframe",
"noembed",
"noframes",
"noscript",
"plaintext",
"style",
"xmp",
];
elementsToIgnore.forEach(el => {
tests.push(
{
markup: `<form><select><option><${el}>1<element></element>`,
select: "1",
innerText: null,
name: el
}, {
markup: `<form><select><option>1<${el}>2<element></element>`,
select: "12",
innerText: null,
name: el
}, {
markup: `<form><select><option>1<${el}>2<element></element>3`,
select: "123",
innerText: null,
name: el
});
if (el != "iframe") {
tests.push(
{
markup: `<form><select><option>1<input><${el}>2<element></element>`,
select: "1",
innerText: "2<element></element>",
name: el
}, {
markup: `<form><select><option>1<keygen><${el}>2<element></element>`,
select: "1",
innerText: "2<element></element>",
name: el
}, {
markup: `<form><select><option>1<textarea></textarea><${el}>2<element></element>`,
select: "1",
innerText: "2<element></element>",
name: el
});
}
});
tests.forEach(test => {
async_test(t => {
var i = createFrame(test.markup);
appendAndWaitForLoad(t, i)
.then(t.step_func_done(_ => {
assert_select(t, i, test.select);
assert_element_innerText(t, i, test.name, test.innerText);
}));
}, test.markup);
});
</script>