<!DOCTYPE html>
<html>
<head>
<title>Document.createElement() and Document.createElementNS() create custom element of type, specified by typeExtension argument</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="Let TYPE be typeExtension, or localName if typeExtension is not present">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#extensions-to-document-interface-to-instantiate">
<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>
test(function() {
    var doc = newHTMLDocument();
    HTML5_ELEMENTS.forEach(function(tagName) {
        var obj = doc.createElement(tagName);
        var name = 'x-a-' + tagName;
        var proto = Object.create(obj.constructor.prototype);
        var GeneratedConstructor = doc.registerElement(name, {prototype: proto, extends: tagName});
        var customElement = doc.createElement(tagName, name);

        assert_equals(Object.getPrototypeOf(customElement), GeneratedConstructor.prototype,
            'Custom element type should be ' + name);
    });
}, 'Test Document.createElement() creates custom element of type, ' +
    'specified by typeExtension argument');


test(function() {
    var doc = newHTMLDocument();
    HTML5_ELEMENTS.forEach(function(tagName) {
        var obj = doc.createElement(tagName);
        var name = 'x-b-' + tagName;
        var proto = Object.create(obj.constructor.prototype);
        var GeneratedConstructor = doc.registerElement(name, {prototype: proto, extends: tagName});
        var customElement = doc.createElementNS(HTML_NAMESPACE, tagName, name);

        assert_equals(Object.getPrototypeOf(customElement), GeneratedConstructor.prototype,
            'Custom element type should be ' + name);
    });
}, 'Test Document.createElementNS() creates custom element of type, ' +
    'specified by typeExtension argument');
</script>
</body>
</html>
