<!DOCTYPE html>
<html>
<head>
<title>Custom element local name is the lowercased value of the EXTENDS property, supplied to Document.registerElement()</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="Custom element local name is the lowercased value of the EXTENDS property">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#extensions-to-document-interface-to-register">
<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 name = 'x-' + tagName;
        var obj = doc.createElement(tagName);
        var proto = Object.create(obj.constructor.prototype);
        var GeneratedConstructor = doc.registerElement(name, {
            prototype: proto,
            extends: tagName
        });
        var customElement = new GeneratedConstructor();

        assert_equals(customElement.localName, tagName.toLowerCase(),
            'Custom element local name should be a lowercased value of the EXTENDS property, ' +
            'supplied to Document.registerElement()');
    });
}, 'Custom element local name is the lowercased value of the EXTENDS property, ' +
    'supplied to Document.registerElement()');
</script>
</body>
</html>
