<!DOCTYPE html>
<html>
<head>
<title>Document.createElement() and Document.createElementNS() create custom element of type, specified by single localName 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();
    var name = 'x-a';
    var GeneratedConstructor = doc.registerElement(name);
    var customElement = doc.createElement(name);

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


test(function() {
    var doc = newHTMLDocument();
    var name = 'x-b';
    var GeneratedConstructor = doc.registerElement(name);
    var customElement = doc.createElementNS(HTML_NAMESPACE, name);
    assert_equals(Object.getPrototypeOf(customElement), GeneratedConstructor.prototype,
        'Custom element type should be the local name of the custom element');
}, 'Test Document.createElementNS() creates custom element of type, ' +
    'specified by localName argument. Argument typeExtension is not passed');
</script>
</body>
</html>
