| Index: third_party/WebKit/LayoutTests/custom-elements/spec/selectors/pseudo-class-defined.html
|
| diff --git a/third_party/WebKit/LayoutTests/custom-elements/spec/selectors/pseudo-class-defined.html b/third_party/WebKit/LayoutTests/custom-elements/spec/selectors/pseudo-class-defined.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a248f121b1ae9c9f8e2dc78ff829c16b4af62cdc
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/custom-elements/spec/selectors/pseudo-class-defined.html
|
| @@ -0,0 +1,68 @@
|
| +<!DOCTYPE html>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +<iframe id="iframe"></iframe>
|
| +<script>
|
| +const testList = [
|
| + { tagName: 'div', defined: true },
|
| + { tagName: 'a-a', defined: false },
|
| + { tagName: 'font-face', defined: true },
|
| +];
|
| +
|
| +// Setup iframe to test the parser.
|
| +const neither = 'rgb(255, 0, 0)';
|
| +const defined = 'rgb(255, 165, 0)';
|
| +const not_defined = 'rgb(0, 0, 255)';
|
| +iframe.srcdoc = `<style>
|
| + * { color:${neither}; }
|
| + :defined { color:${defined}; }
|
| + :not(:defined) { color:${not_defined}; }
|
| +</style>`
|
| + + testList.map(d => `<${d.tagName}></${d.tagName}>`).join('');
|
| +setup({ explicit_done: true });
|
| +iframe.onload = () => {
|
| + const doc = iframe.contentDocument;
|
| + const doc_without_browsing_context = doc.implementation.createHTMLDocument();
|
| + for (const data of testList) {
|
| + // Test elements inserted by parser.
|
| + test_defined(data.defined, doc.getElementsByTagName(data.tagName)[0], `<${data.tagName}>`);
|
| +
|
| + // Test DOM createElement() methods.
|
| + test_defined_for_createElement(data.defined, doc, data.tagName);
|
| +
|
| + // Documents without browsing context should be "uncustomized"; i.e., "defined".
|
| + test_defined_for_createElement(true, doc_without_browsing_context, data.tagName, 'Without browsing context: ');
|
| + }
|
| +
|
| + done();
|
| +};
|
| +
|
| +function test_defined_for_createElement(defined, doc, tagName, description = '') {
|
| + // Test document.createElement().
|
| + let element = doc.createElement(tagName);
|
| + doc.body.appendChild(element);
|
| + test_defined(defined, element, `${description}createElement("${tagName}")`);
|
| +
|
| + // Test document.createElementNS().
|
| + element = doc.createElementNS('http://www.w3.org/1999/xhtml', tagName);
|
| + doc.body.appendChild(element);
|
| + test_defined(defined, element, `${description}createElementNS("http://www.w3.org/1999/xhtml", "${tagName}")`);
|
| +
|
| + // If the element namespace is not HTML, it should be "uncustomized"; i.e., "defined".
|
| + element = doc.createElementNS('http://www.w3.org/2000/svg', tagName);
|
| + doc.body.appendChild(element);
|
| + test_defined(true, element, `${description}createElementNS("http://www.w3.org/2000/svg", "${tagName}")`);
|
| +}
|
| +
|
| +function test_defined(expected, element, description) {
|
| + test(() => {
|
| + assert_equals(element.matches(':defined'), expected, 'matches(":defined")');
|
| + assert_equals(element.matches(':not(:defined)'), !expected, 'matches(":not(:defined")');
|
| + const view = element.ownerDocument.defaultView;
|
| + if (!view)
|
| + return;
|
| + const style = view.getComputedStyle(element);
|
| + assert_equals(style.color, expected ? defined : not_defined, 'getComputedStyle');
|
| + }, `${description} should ${expected ? 'be' : 'not be'} :defined`);
|
| +}
|
| +</script>
|
|
|