| <!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.createAsyncSuite("View.AsynchronousLayout"); |
| |
| suite.addTestCase({ |
| name: "View.automaticLayout", |
| test(resolve, reject) { |
| let view = new WI.TestView; |
| WI.View.rootView().addSubview(view); |
| InspectorTest.expectThat(view.layoutPending, "View should have a pending layout once it is attached."); |
| |
| view.evaluateAfterLayout(() => { |
| InspectorTest.log("Layout complete."); |
| InspectorTest.expectEqual(view.initialLayoutCount, 1, "View should do an initial layout."); |
| InspectorTest.expectEqual(view.layoutCount, 1, "View should update its layout."); |
| InspectorTest.expectFalse(view.layoutPending, "View should not have a pending layout."); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "View.automaticLayout.cancelled", |
| test(resolve, reject) { |
| let view = new WI.TestView; |
| |
| WI.View.rootView().addSubview(view); |
| InspectorTest.expectThat(view.layoutPending, "View should have a pending layout once it is attached."); |
| |
| WI.View.rootView().removeSubview(view); |
| InspectorTest.expectFalse(view.layoutPending, "View should not have a pending layout once it is detached."); |
| resolve(); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "View.needsLayout", |
| test(resolve, reject) { |
| let view = new WI.TestView; |
| WI.View.rootView().addSubview(view); |
| |
| InspectorTest.log("Flush pending layouts, then schedule an update."); |
| view.updateLayout(); |
| view.needsLayout(); |
| InspectorTest.expectThat(view.layoutPending, "View should have a pending layout."); |
| |
| view.evaluateAfterLayout(() => { |
| InspectorTest.log("Layout complete."); |
| InspectorTest.expectEqual(view.layoutCount, 2, "View should update its layout."); |
| InspectorTest.expectFalse(view.layoutPending, "View should not have a pending layout."); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "View.needsLayout.propogateToSubview", |
| test(resolve, reject) { |
| let parent = new WI.TestView; |
| let child = new WI.TestView; |
| WI.View.rootView().addSubview(parent); |
| parent.addSubview(child); |
| InspectorTest.log("Schedule parent view update."); |
| parent.needsLayout(); |
| |
| child.evaluateAfterLayout(() => { |
| InspectorTest.log("Layout complete."); |
| InspectorTest.expectEqual(child.initialLayoutCount, 1, "Chlid view should do an initial layout."); |
| InspectorTest.expectEqual(child.layoutCount, 1, "Child view should update its layout."); |
| resolve(); |
| }); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "View.cancelLayout", |
| test(resolve, reject) { |
| let view = new WI.TestView; |
| WI.View.rootView().addSubview(view); |
| |
| InspectorTest.log("Cancel automatic layout."); |
| view.cancelLayout(); |
| InspectorTest.expectFalse(view.layoutPending, "View should not have a pending layout."); |
| |
| InspectorTest.log("Cancel scheduled layout."); |
| view.needsLayout(); |
| view.cancelLayout(); |
| InspectorTest.expectFalse(view.layoutPending, "View should not have a pending layout."); |
| resolve(); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing asynchronous View layout operations: needsLayout, cancelLayout.</p> |
| </body> |
| </html> |