<html>
<head>
<script src="inspector-test.js"></script>
<script src="debugger-test.js"></script>
<script src="resources/compiled.js"></script>

<script>

function clickButton()
{
    document.getElementById('test').click();
}

function test()
{
    InspectorTest.runDebuggerTestSuite([
        function testSetBreakpoint(next)
        {
            WebInspector.settings.sourceMapsEnabled.set(true);
            InspectorTest.reloadPage(pageReloaded);

            function pageReloaded()
            {
                InspectorTest.showScriptSource("source1.js", didShowSource);
            }

            function didShowSource(sourceFrame)
            {
                InspectorTest.addResult("Script source was shown.");
                InspectorTest.setBreakpoint(sourceFrame, 14, "", true);
                InspectorTest.waitUntilPaused(paused);
                InspectorTest.evaluateInPage("setTimeout(clickButton, 0)");
            }

            function paused(callFrames)
            {
                InspectorTest.captureStackTrace(callFrames);
                next();
            }
        }
    ]);
};

</script>

</head>

<body onload="runTest()">
<p>Tests installing compiler source map in scripts panel.</p>
</body>
</html>
