<!DOCTYPE html>
<html>
<head>
<title>Custom Elements: CEReactions on HTMLElement and Attr interfaces</title>
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<meta name="assert" content="webkitdropzone of HTMLElement and Attr interface must have CEReactions">
<meta name="help" content="https://dom.spec.whatwg.org/#node">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/custom-elements-helpers.js"></script>
<script src="resources/reactions.js"></script>
</head>
<body>
<div id="log"></div>
<script>

testReflectAttribute('webkitdropzone', 'webkitdropzone', 'copy', 'move', 'dropzone on HTMLElement');

testAttributeMutator(function (element, name, value) {
    element.attributes[name].value = value;
}, 'data on CharacterData');

test_with_window(function (contentWindow) {
    const element = define_custom_element_in_window(contentWindow, 'custom-element', []);

    const contentDocument = contentWindow.document;
    contentDocument.body.innerHTML = `<select><option></option></select>`;
    const option = contentDocument.querySelector('option');

    const instance = contentDocument.createElement(element.name);
    option.appendChild(instance);
    instance.textContent = 'hello';

    assert_array_equals(element.takeLog().types(), ['constructed', 'connected']);
    assert_equals(option.innerHTML, '<custom-element>hello</custom-element>');

    const select = contentDocument.querySelector('select');
    assert_equals(select.options[0], option);
    select.options.remove(option);
    assert_equals(select.options.length, 0);
    assert_array_equals(element.takeLog().types(), ['disconnected']);
}, 'remove(HTMLOptionElement) on HTMLOptionsCollection must enqueue disconnectedCallback when removing a custom element');

test_with_window(function (contentWindow) {
    const element = define_custom_element_in_window(contentWindow, 'custom-element', []);

    const contentDocument = contentWindow.document;
    contentDocument.body.innerHTML = `<select><option></option></select>`;
    const option = contentDocument.querySelector('option');

    const instance = contentDocument.createElement(element.name);
    option.appendChild(instance);
    instance.textContent = 'hello';

    assert_array_equals(element.takeLog().types(), ['constructed', 'connected']);
    assert_equals(option.innerHTML, '<custom-element>hello</custom-element>');

    const select = contentDocument.querySelector('select');
    assert_equals(select.options[0], option);
    select.remove(option);
    assert_equals(select.options.length, 0);
    assert_array_equals(element.takeLog().types(), ['disconnected']);
}, 'remove(HTMLOptionElement) on HTMLSelectElement must enqueue disconnectedCallback when removing a custom element');

</script>
</body>
</html>
