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

my-host {
    display: block;
    width: 100px;
    height: 25px;
    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></slot>';

    var host2 = document.getElementById('host2');
    host2.attachShadow({mode: 'open'}).innerHTML = '<slot name="foo"></slot>';

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

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

    forceLayout();

    host1.removeChild(host1.firstChild);

    forceLayout();

    host2.firstChild.slot = 'bar';

    forceLayout();

    host3.firstChild.slot = null;

    forceLayout();

    var greenBox = document.createElement('div');
    greenBox.style.backgroundColor = 'green';
    host4.insertBefore(greenBox, host4.firstChild);

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

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