<!DOCTYPE html>
<html>
<head>
<title>Document.createElement() sets custom element namespace to HTML Namespace</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="Namespace for createElement is HTML Namespace">
<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();
    var name = 'x-a';
    doc.registerElement(name);
    var customElement = doc.createElement(name);
    assert_equals(customElement.namespaceURI, HTML_NAMESPACE,
        'Custom element namespace should be HTML Namespace');
}, 'Test Document.createElement() sets custom element namespace to HTML Namespace');


test(function() {
    var doc = newHTMLDocument();
    var name = 'x-b';
    var customElement = doc.createElement(name);
    assert_equals(customElement.namespaceURI, HTML_NAMESPACE,
        'Custom element namespace should be HTML Namespace');
}, 'Test Document.createElement() sets custom element namespace to HTML Namespace ' +
    'and an element definition with matching localName, namespace, and type is not registered');


test(function() {
    var doc = newHTMLDocument();
    HTML5_ELEMENTS.forEach(function(tagName) {
        var obj = doc.createElement(tagName);
        var name = 'x-c-' + tagName;
        var proto = Object.create(obj.constructor.prototype);
        doc.registerElement(name, {
            prototype: Object.create(proto),
            extends: tagName
        });
        var customElement = doc.createElement(tagName, name);
        assert_equals(customElement.namespaceURI, HTML_NAMESPACE,
            'Custom element namespace for the element extending ' + tagName +
            ' should be HTML Namespace');
    });
}, 'Document.createElement() sets custom element namespace to HTML Namespace. ' +
    'Custom element is extending standard HTML tag');


test(function() {
    var doc = newHTMLDocument();
    HTML5_ELEMENTS.forEach(function(tagName) {
        var name = 'x-d-' + tagName;
        var customElement = doc.createElement(tagName, name);
        assert_equals(customElement.namespaceURI, HTML_NAMESPACE,
            'Custom element namespace for the element with tag name ' + tagName +
            ' and type name ' + name + ' should be HTML Namespace');
    });
}, 'Document.createElement() sets custom element namespace to HTML Namespace. ' +
    'Document.createElement() is called with standard HTML tag name and ' +
    'type without registered custom element of such type');
</script>
</body>
</html>
