<!DOCTYPE html>
<html>
<head>
<title>Document.createElement() must enqueue created callback for registered custom element type</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="Document.createElement() must enqueue created callback for registered custom element type">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#extensions-to-document-interface-to-instantiate">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#types-of-callbacks">
<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 proto = newHTMLElementPrototype();
    var name = 'x-a';

    doc.registerElement(name, {prototype: proto});
    var customElement = doc.createElement(name);
    assert_equals(proto.createdCallbackCalledCounter, 1,
        'Callback created should be enqueued by Document.createElement()');
}, 'Test Document.createElement() without typeExtension argument enqueues created callback');


test(function() {
    var doc = newHTMLDocument();
    var proto = newHTMLElementPrototype();
    var name = 'x-b';

    doc.registerElement(name, {prototype: proto});
    var customElement = doc.createElement(name, name);
    assert_equals(proto.createdCallbackCalledCounter, 1,
        'Callback created should be enqueued by Document.createElement()');
}, 'Test Document.createElement() with typeExtension argument enqueues created callback');


test(function() {
    var doc = newHTMLDocument();
    var proto = newHTMLElementPrototype();
    var name = 'x-c';
    var customElement = doc.createElement(name);
    assert_equals(proto.createdCallbackCalledCounter, 0,
        'Document.createElement() should not enqueue created callback ' +
        'for unresolved custom element');

    doc.registerElement(name, {prototype: proto});
    assert_equals(proto.createdCallbackCalledCounter, 1,
        'Callback created should be called after custom element is registered');
}, 'Document.createElement() should not enqueue created callback ' +
    'for unresolved custom element');


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

        assert_equals(proto.createdCallbackCalledCounter, 1,
            'Callback created should be enqueued by Document.createElement()');
    });
}, 'Test Document.createElement() enqueues created callback for custom elements ' +
    'that are extensions of HTML5 elements');
</script>
</body>
</html>
