<!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="../../imported/w3c/web-platform-tests/custom-elements/resources/custom-elements-helpers.js"></script>
<script src="../../imported/w3c/web-platform-tests/custom-elements/reactions/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>
