<!DOCTYPE html>
<html>
<body>
<p>Test passes if you see a single 100px by 100px green box below.</p> 
<my-host id="host1"><div style="background: red;">FAIL</div></my-host>
<my-host id="host2"><div slot="foo" style="background: red;">FAIL</div></my-host>
<my-host id="host3"></my-host>
<my-host id="host4" style="background: red;"><slot></slot></my-host>
<my-host id="host5" style="background: green;"><slot><div style="background: red;"></div></slot></my-host>
<style>

my-host {
    display: block;
    width: 100px;
    height: 20px;
    overflow: hidden;
}

my-host div {
    width: 100%;
    height: 100%;
}

</style>
<script>

function forceLayout() {
    if (window.internals)
        internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
    else
        document.querySelector('p').getBoundingClientRect();
}

try {
    var host1 = document.getElementById('host1');
    host1.attachShadow({mode: 'open'}).innerHTML = '<slot><div style="width: 100%; height: 100%; background-color: green;"></div></slot>';

    var host2 = document.getElementById('host2');
    host2.attachShadow({mode: 'open'}).innerHTML = '<slot name="foo"><div style="width: 100%; height: 100%; background-color: green;"></div></slot>';

    var host3 = document.getElementById('host3');
    host3.attachShadow({mode: 'open'}).innerHTML = '<slot>FAIL</slot>';

    forceLayout();

    host1.removeChild(host1.firstChild);
    forceLayout();

    host2.firstChild.slot = 'bar';
    forceLayout();

    var child3 = document.createElement('div');
    child3.style.backgroundColor = 'green';
    host3.appendChild(child3);
    forceLayout();

    var host4 = document.getElementById('host4');
    var child4 = document.createElement('div');
    child4.style.backgroundColor = 'green';
    host4.firstChild.appendChild(child4);

    var host5 = document.getElementById('host5');
    host5.firstChild.removeChild(host5.firstChild.firstChild);

} catch (exception) {
    document.body.appendChild(document.createTextNode(exception));
}

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