chromium/third_party/blink/web_tests/dom/mutation-event-tests/fast/forms/select/select-set-length-with-mutation-reparent.html

<!DOCTYPE html>
<html>
<head>
<script src="../../../../../resources/js-test.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('Tests that setting .length on an HTMLSelectElement works in the presence of mutation event listeners that reparent options');

var sel = document.createElement('select');
document.body.appendChild(sel);
var otherSel = document.createElement('select');
document.body.appendChild(otherSel);

function onRemove(e) {
    if (e.target.nextSibling != null) {
        // remove listener temporarily to avoid lots of nesting
        sel.removeEventListener('DOMNodeRemoved', onRemove, false);
        var n = e.target.nextSibling;
        n.parentNode.removeChild(n);
        otherSel.appendChild(n);
        sel.addEventListener('DOMNodeRemoved', onRemove, false);
    }
}

sel.addEventListener('DOMNodeRemoved', onRemove, false);
sel.addEventListener('DOMNodeInserted', function() {}, false);

sel.length = 200;
shouldBe('sel.length', '200');
shouldBe('otherSel.length', '0');

sel.length = 100;
shouldBe('sel.length', '100');
shouldBe('otherSel.length', '0');

sel.length = 180;
shouldBe('sel.length', '180');
shouldBe('otherSel.length', '0');
</script>
</body>
</html>