<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
#button3, #button5 { height: 40px; }
#button4 { height: 40px; background-color: yellow; }
</style>
<script>
if (window.testRunner)
    testRunner.dumpAsText();

window.onload = function()
{
    shouldBe("document.getElementById('button1').offsetHeight", "document.getElementById('button2').offsetHeight");
    shouldEvaluateTo("document.getElementById('button3').offsetHeight", 40);
    shouldEvaluateTo("document.getElementById('button4').offsetHeight", 40);

    // Note, the expected height is the height of button 1 for the Mac ports, and 40 otherwise.
    var expectedButton5Height = (navigator.platform.indexOf("Mac") !== -1) ? document.getElementById("button1").offsetHeight : 40;
    if (document.getElementById('button5').offsetHeight == expectedButton5Height)
        testPassed("document.getElementById('button5').offsetHeight is correct for this platform.");
    else
        testFailed("document.getElementById('button5').offsetHeight is incorrect for this platform. Should be the same height as button 1 for the Mac ports and 40 otherwise.");

    if (window.testRunner) {
        var testContainer = document.getElementById("test-container");
        if (testContainer)
            document.body.removeChild(testContainer);   
    }
    debug('<br /><span class="pass">TEST COMPLETE</span>');
}
</script>
</head>
<body>
<p id="description"></p>
<div id="test-container">
    <ol>
        <li><input id="button1" type="button" value="unspecified height"/><p><strong>Expected height:</strong> height of button label font.</p></li>
        <li><button id="button2">unspecified height</button><p><strong>Expected height:</strong> height of button label font.</p></li>
        <li><button id="button3">height 40 pixels</button><p><strong>Expected height:</strong> 40 pixels.</p></li>
        <li><input id="button4" type="button" value="height 40 pixels, background yellow"/><p><strong>Expected height:</strong> 40 pixels.</p></li>
        <li><input id="button5" type="button" value="height 40 pixels (*)"/><p><strong>(*) Expected height:</strong><br/>Mac: height of button label font.<br/>Other: 40 pixels.</p></li>
    </ol>
</div>
<hr/>
<div id="console"></div>
<script>
    description("This tests that the specified height is honored (*) for &lt;input&gt; and &lt;button&gt; elements.<br/>" +
                "(*) The Mac ports ignore the specified height for &lt;input type=&quot;button&quot;&gt; elements unless a " +
                "border and/or background CSS property is also specified (see the fifth button below). Disregarding " +
                "padding, they render the button with a height equal to the height of the font used for the button label.");
</script>
</body>
</html>
