<head>
<script>
function test()
{
    if (window.layoutTestController)
        layoutTestController.dumpAsText();
    var select = document.getElementById('select');
    select.options[1] = new Option("Replacement Option 1", "Replacement Option 1");
    var length = select.options.length;
    for (var i = 0; i < length; ++i) {
        var message = "options[" + i + "] is " + select.options[i].innerHTML;
        var paragraph = document.createElement('div');
        paragraph.appendChild(document.createTextNode(message));
        document.getElementById('console').appendChild(paragraph);
    }
    var message = "selected index is " + select.selectedIndex;
    var paragraph = document.createElement('p');
    paragraph.appendChild(document.createTextNode(message));
    document.getElementById('console').appendChild(paragraph);
}
</script>
</head>
<body onload="test();">
<p>This tests replacing an option using JavaScript. If successful, the options should be "Replacement Option 0", "Option 1", and "Option 2", and selected index should be 0.<form>
<form>
<select id="select">
<option>Option 0</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
</form>
<p id="console"></p>
</body>
