From a68b53ae91af70b57374ab981f4d605720d9032c Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Tue, 9 Jun 2015 14:07:17 -0700 Subject: [PATCH] Fix the Sky tests Instead of triggering layout synchronously during AppView construction, we now schedule the initial layout using a magic bootstrapping function. TBR=ianh@google.com Review URL: https://codereview.chromium.org/1172123003. --- sdk/lib/framework/app.dart | 2 +- sdk/lib/framework/rendering/box.dart | 2 -- sdk/lib/framework/rendering/object.dart | 8 ++++++++ tests/raw/padding_deflate.dart | 6 +++++- tests/raw/render_box.dart | 6 +++++- tests/resources/display_list.dart | 4 +++- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/sdk/lib/framework/app.dart b/sdk/lib/framework/app.dart index ce27dde895..41b8e3e435 100644 --- a/sdk/lib/framework/app.dart +++ b/sdk/lib/framework/app.dart @@ -25,7 +25,7 @@ class AppView { _renderView = new RenderView(child: root); _renderView.attach(); _renderView.rootConstraints = _viewConstraints; - _renderView.layout(_renderView.rootConstraints); + _renderView.scheduleInitialLayout(); } RenderView _renderView; diff --git a/sdk/lib/framework/rendering/box.dart b/sdk/lib/framework/rendering/box.dart index baa68a727c..93eee099a8 100644 --- a/sdk/lib/framework/rendering/box.dart +++ b/sdk/lib/framework/rendering/box.dart @@ -956,8 +956,6 @@ class RenderView extends RenderObject with RenderObjectWithChildMixin markNeedsLayout(); } - ViewConstraints get constraints => super.constraints as ViewConstraints; - void performLayout() { if (_rootConstraints.orientation != _orientation) { if (_orientation != null && child != null) diff --git a/sdk/lib/framework/rendering/object.dart b/sdk/lib/framework/rendering/object.dart index 174b3c7c91..34e3e89060 100644 --- a/sdk/lib/framework/rendering/object.dart +++ b/sdk/lib/framework/rendering/object.dart @@ -119,6 +119,14 @@ abstract class RenderObject extends AbstractNode { scheduler.ensureVisualUpdate(); } } + void scheduleInitialLayout() { + assert(attached); + assert(parent == null); + assert(_relayoutSubtreeRoot == null); + _relayoutSubtreeRoot = this; + _nodesNeedingLayout.add(this); + scheduler.ensureVisualUpdate(); + } static void flushLayout() { _debugDoingLayout = true; List dirtyNodes = _nodesNeedingLayout; diff --git a/tests/raw/padding_deflate.dart b/tests/raw/padding_deflate.dart index e1996d8764..091db772f8 100644 --- a/tests/raw/padding_deflate.dart +++ b/tests/raw/padding_deflate.dart @@ -7,6 +7,7 @@ import '../resources/third_party/unittest/unittest.dart'; import '../resources/unit.dart'; import '../resources/display_list.dart'; import 'package:sky/framework/rendering/box.dart'; +import 'package:sky/framework/rendering/object.dart'; void main() { initUnit(); @@ -22,7 +23,10 @@ void main() { child: paddingBox ); TestView renderView = new TestView(child: root); - renderView.layout(new ViewConstraints(width: sky.view.width, height: sky.view.height)); + renderView.attach(); + renderView.rootConstraints = new ViewConstraints(width: sky.view.width, height: sky.view.height); + renderView.scheduleInitialLayout(); + RenderObject.flushLayout(); expect(coloredBox.size.width, equals(sky.view.width - 20)); expect(coloredBox.size.height, equals(sky.view.height - 20)); }); diff --git a/tests/raw/render_box.dart b/tests/raw/render_box.dart index 111beb41a4..25ff3bb8d7 100644 --- a/tests/raw/render_box.dart +++ b/tests/raw/render_box.dart @@ -7,6 +7,7 @@ import '../resources/unit.dart'; import '../resources/display_list.dart'; import 'dart:sky' as sky; import 'package:sky/framework/rendering/box.dart'; +import 'package:sky/framework/rendering/object.dart'; void main() { initUnit(); @@ -18,7 +19,10 @@ void main() { ) ); TestView renderView = new TestView(child: root); - renderView.layout(new ViewConstraints(width: sky.view.width, height: sky.view.height)); + renderView.attach(); + renderView.rootConstraints = new ViewConstraints(width: sky.view.width, height: sky.view.height); + renderView.scheduleInitialLayout(); + RenderObject.flushLayout(); expect(root.size.width, equals(sky.view.width)); expect(root.size.height, equals(sky.view.height)); renderView.paintFrame(); diff --git a/tests/resources/display_list.dart b/tests/resources/display_list.dart index 7e22fdbabb..95ed3aca95 100644 --- a/tests/resources/display_list.dart +++ b/tests/resources/display_list.dart @@ -125,7 +125,9 @@ class TestApp { TestApp(RenderBox root) { _renderView = new TestView(child: root); _renderView.attach(); - _renderView.layout(new ViewConstraints(width: sky.view.width, height: sky.view.height)); + _renderView.rootConstraints = new ViewConstraints(width: sky.view.width, height: sky.view.height); + _renderView.scheduleInitialLayout(); + RenderObject.flushLayout(); _renderView.paintFrame(); print(_renderView.lastPaint); // TODO(ianh): figure out how to make this fit the unit testing framework better } -- GitLab