<script>

var createNewElement = function (tag, id, text) {
    var result = document.createElement(tag);
    result.setAttribute('id',id);
    result.innerHTML = text;
    return result;
};

var runTests = function () {
    document.getElementById("dt1").insertBefore(createNewElement("summary", "new1", "new 1"), document.getElementById("summary1"));

    if (!window.testRunner || !window.eventSender)
        return;
    eventSender.mouseMoveTo(2, 2);
    eventSender.mouseDown();
    eventSender.mouseUp();
};

</script>

<body style="margin: 0px" onload="runTests()">
    <details id="dt1">
        <summary id="summary1">summary</summary>
    </details>
</body>
