<!DOCTYPE html>
<!--
Distributed under both the W3C Test Suite License [1] and the W3C
3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
policies and contribution forms [3].

[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
[3] http://www.w3.org/2004/10/27-testcases
-->
<html>
<head>
<title>Shadow DOM Test: HTML elements can host shadow trees</title>
<link rel="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<link rel="author" title="Mikhail Fursov" href="mailto:mfursov@unipro.ru">
<link rel="author" title="Yuta Kitamura" href="mailto:yutak@google.com">
<link rel="help" href="http://www.w3.org/TR/2013/WD-shadow-dom-20130514/#partial-element-methods">
<meta name="assert" content="All HTML elements must be able to host shadow trees.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../../testcommon.js"></script>
<link rel="stylesheet" href="/resources/testharness.css">
</head>
<body>
<div id="log"></div>
<script>
// These elements does not support creating shadow root.
// instead, NotSupportedError should be thrown.
// http://w3c.github.io/webcomponents/spec/shadow/#widl-Element-createShadowRoot-ShadowRoot-ShadowRootInit-shadowRootInitDict
var BLACK_LISTED_ELEMENTS = [
    "button",
    "details",
    "input",
    "marquee",
    "meter",
    "progress",
    "select",
    "textarea",
    "keygen"
];

function testElement(elementName) {
    var doc = document.implementation.createHTMLDocument('Test');
    var element = doc.createElement(elementName);
    doc.body.appendChild(element);

    var shadowRoot = element.createShadowRoot();
    assert_equals(shadowRoot.ownerDocument, doc);
}

var testParameters = HTML5_ELEMENT_NAMES.filter(function(name) {
    return BLACK_LISTED_ELEMENTS.indexOf(name) == -1;
}).map(function (name) {
    return [
        'Checks whether an element "' + name + '" can create a shadow root.',
        name
    ];
});
generate_tests(testElement, testParameters);
</script>
</body>
</html>
