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

function C()
{
}

C.prototype = {
    m: function() { }
}

function testFunction()
{
    var o = new C();
    var d = document.documentElement;
    debugger;
}

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

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

    function step2(callFrames)
    {
        var sections = WebInspector.inspectorView.currentPanel().sidebarPanes.scopechain._sections;
        var localScope = sections[0].propertiesTreeOutline;
        var properties = [
            localScope, ["o", "__proto__", "__proto__"],
            localScope, ["d", "__proto__", "__proto__", "__proto__", "__proto__", "__proto__"]
        ];
        InspectorTest.expandProperties(properties, step3);
    }

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

</script>
</head>

<body onload="runTest()">
<p>
Tests that object's __proto__ property is present in object properties section when
script is paused on a breakpoint.<a href="https://bugs.webkit.org/show_bug.cgi?id=41214">Bug 41214</a>
</p>

</body>
</html>
