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

window.inspect = "inspect";
var clear = "clear";

function testFunction()
{
    var dir = "dir";
    debugger;
}

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

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

    function step2()
    {
        InspectorTest.evaluateInConsole("dir + clear + inspect", step3);
    }

    function step3(result)
    {
        InspectorTest.addResult("Evaluated in console in the top frame context: dir + clear + inspect = " + result);
        InspectorTest.evaluateInConsole("typeof $$", step4);
    }

    function step4(result)
    {
        InspectorTest.addResult("Evaluated in console in the top frame context: typeof $$ = " + result);
        InspectorTest.completeDebuggerTest();
    }
}

</script>
</head>

<body onload="runTest()">
<p>
Test that command line api does not mask values of scope variables while evaluating
on a call frame.
</p>

</body>
</html>
