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

<script>

function testFunction()
{
    var array = [2, 5, 7];
    var sum = 0;
    array.forEach(function(key)
    {
        sum += array[key];
    });
    return sum;
}

function test()
{
    InspectorTest.runDebuggerTestSuite([
        function testSetBreakpoint(next)
        {
            InspectorTest.showScriptSource("pause-in-internal-script.html", didShowScriptSource);

            function didShowScriptSource(sourceFrame)
            {
                InspectorTest.addResult("Script source was shown.");
                InspectorTest.setBreakpoint(sourceFrame, 13, "", true);
                InspectorTest.runTestFunctionAndWaitUntilPaused(didPause);
            }

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

</script>

</head>

<body onload="runTest()">
<p>Tests that internal scripts unknown to front-end are processed correctly when appear in debugger call frames.
<a href="https://bugs.webkit.org/show_bug.cgi?id=64995">Bug 64995</a>
</p>

</body>
</html>
