<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>
<script>

function d()
{
    debugger;
}

function testFunction()
{
    d();
}

var test = function()
{
    InspectorTest.startDebuggerTest(step1);

    function step1()
    {
        InspectorTest.runTestFunctionAndWaitUntilPaused(step2);
    }

    function step2(callFrames)
    {
        InspectorTest.captureStackTrace(callFrames);
        InspectorTest.addResult("Stepping out...");
        InspectorTest.waitUntilResumed(InspectorTest.waitUntilPaused.bind(InspectorTest, step3));
        document.getElementById("scripts-step-out").click();
    }

    function step3(callFrames)
    {
        InspectorTest.captureStackTrace(callFrames);
        InspectorTest.completeDebuggerTest();
    }
}

</script>
</head>

<body onload="runTest()">
<p>
Tests "step out" functionality in debugger.
</p>

</body>
</html>
