<!doctype html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="resources/test-view.js"></script>
<script>
function test()
{
    InspectorTest.redirectRequestAnimationFrame();

    let suite = InspectorTest.createSyncSuite("View.SynchronousLayout");

    suite.addTestCase({
        name: "View.updateLayout",
        test() {
            let view1 = new WI.TestView;
            WI.View.rootView().addSubview(view1);
            InspectorTest.log("Update layout for attached view.");
            view1.updateLayout();
            InspectorTest.expectEqual(view1.initialLayoutCount, 1, "View should do an initial layout.");
            InspectorTest.expectEqual(view1.layoutCount, 1, "View should update its layout once.");
            InspectorTest.expectFalse(view1.layoutPending, "View should not have a pending layout.");

            let view2 = new WI.TestView;
            InspectorTest.log("Update layout for detached view.");
            view2.updateLayout();
            InspectorTest.expectEqual(view2.initialLayoutCount, 1, "View should do an initial layout.");
            InspectorTest.expectEqual(view2.layoutCount, 1, "View should update its layout once.");
            InspectorTest.expectFalse(view2.layoutPending, "View should not have a pending layout.");

            return true;
        }
    });

    suite.addTestCase({
        name: "View.updateLayout.propogateToSubviews",
        test() {
            let parent = new WI.TestView;
            let child = new WI.TestView;

            WI.View.rootView().addSubview(parent);
            parent.addSubview(child);

            InspectorTest.log("Update parent view layout.");
            parent.updateLayout();
            InspectorTest.expectEqual(child.initialLayoutCount, 1, "Child view should do an initial layout.");
            InspectorTest.expectEqual(child.layoutCount, 1, "Child view should update its layout once.");

            return true;
        }
    });

    suite.addTestCase({
        name: "View.updateLayoutIfNeeded",
        test() {
            let view1 = new WI.TestView;
            view1.updateLayoutIfNeeded();
            InspectorTest.expectEqual(view1.layoutCount, 1, "View should update if an initial layout never happened.");

            let view2 = new WI.TestView;
            view2.needsLayout();
            view2.updateLayoutIfNeeded();
            InspectorTest.expectEqual(view2.layoutCount, 1, "View should update if a layout is pending.");

            let view3 = new WI.TestView;
            view3.updateLayout();
            view3.updateLayoutIfNeeded();
            InspectorTest.expectEqual(view3.layoutCount, 1, "View should not update if no layout is pending.");

            return true;
        }
    });

    suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
    <p>Testing synchronous View layout operations: updateLayout, updateLayoutIfNeeded.</p>
</body>
</html>
