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

var globalVar = { b: 1 };

function slave(x)
{
    var y = 20;
    debugger;
}

function testFunction()
{
    var localObject = { a: 300 };
    slave(4000);
}

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

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

    function step2(callFrames)
    {
        InspectorTest.evaluateInConsole("x + y + globalVar.b", step3.bind(null, callFrames));
    }

    function step3(callFrames, result)
    {
        InspectorTest.addResult("Evaluated script on the top frame: " + result);
        var pane = WebInspector.panels.scripts.sidebarPanes.callstack;
        pane._placardSelected(pane.placards[1]);
        InspectorTest.runAfterPendingDispatches(step4);
    }

    function step4()
    {
        InspectorTest.evaluateInConsole("localObject.a + globalVar.b", step5);
    }

    function step5(result)
    {
        InspectorTest.addResult("Evaluated script on the calling frame: " + result);
        InspectorTest.completeDebuggerTest();
    }
}

</script>
</head>

<body onload="runTest()">
<p>
Tests that evaluation in console works fine when script is paused. It also checks that
stack and global variables are accessible from the console.
</p>

</body>
</html>
