<!DOCTYPE html>
<html>
    <head>
        <title>Performance test for appending inline items one at a time and setting selection</title>
        <meta charset="utf-8">
        <script src="../resources/runner.js"></script>
    </head>
    <body>
        <div id="container"></div>
        <script>
            const pangrams = [
                'Amazingly few discotheques provide jukeboxes.',
                'All questions asked by five watched experts amaze the judge.',
                'Pack my box with five dozen liquor jugs.',
                'Sphinx of black quartz, judge my vow!',
                'My faxed joke won a pager in the cable TV quiz show.'
            ];

            function addItem(container, text) {
                container.appendChild(document.createTextNode(text));
                container.appendChild(document.createElement('br'));
            }

            function test() {
                const container = document.createElement('div');
                document.body.appendChild(container);
                for (var i = 0; i < 100; i++) {
                    addItem(container, i + ') ' + pangrams[i % 5]);
                    PerfTestRunner.forceLayout();
                    getSelection().collapse(container.lastChild, 0);
                    getSelection().removeAllRanges();
                }
                document.body.removeChild(container);
            }

            PerfTestRunner.measureRunsPerSecond({
                description: 'Measures performance of appending inline ' +
                    'items one at a time and setting selection',
                run: test
            });
        </script>
    </body>
</html>
