Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /sanitizer-api/html5lib-basics.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<head>
<title>Basic setHTMLUnsafe test cases</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/html5lib-testcase-support.js"></script
</head>
<body>
<script type="html5lib-tests">
#data
Hello!
#document
| "Hello!"
#data
<p>bla
#document
| <p>
| "bla"
#data
<p id=abc def='123'>texty<!-- xxx -->textz
#document
| <p>
| def="123"
| id="abc"
| "texty"
| <!-- xxx -->
| "textz"
#data
<p>Hello <b>World</b><span>!
#document
| <p>
| "Hello "
| <b>
| "World"
| <span>
| "!"
#data
<p>A template example.<template>Hello <b>World</b></template>!
#document
| <p>
| "A template example."
| <template>
| content
| "Hello "
| <b>
| "World"
| "!"
#data
<td>Interesting parse context.</td>
#document-fragment
table
#document
| <tbody>
| <tr>
| <td>
| "Interesting parse context."
#data
<p>A rather boring parse context.
#document-fragment
p
#document
| <p>
| "A rather boring parse context."
</script>
<script>
// This runs a number of simple test cases that test setHTMLUnsafe, and
// setHTMLUnsafe vs innerHTML. This purposely doesn't include "advanced" test
// cases where the behaviours of those two methodsis supposed to differ.
//
// This sort of also doubles as unit tests for html5lib-testcase-support.js
html5lib_testcases_from_script().forEach((testcase, index) => {
test(_ => {
const context = document.createElement(testcase["document-fragment"] ?? "div");
context.setHTMLUnsafe(testcase.data);
assert_testcase(context, testcase);
}, `Testcase #${index} with .setHTMLUnsafe("${testcase.data}")`);
test(_ => {
const context_element = testcase["document-fragment"] ?? "div";
const context = document.createElement(context_element);
const context2 = document.createElement(context_element);
context.setHTMLUnsafe(testcase.data);
context2.innerHTML = testcase.data;
assert_subtree_equals(context, context2);
}, `Testcase #${index}, .innerHTML matches .setHTMLUnsafe`);
});
</script>