diff --git a/examples/rendering/sector_layout.dart b/examples/rendering/sector_layout.dart index fd56d2bfe3b..5bde7213cc9 100644 --- a/examples/rendering/sector_layout.dart +++ b/examples/rendering/sector_layout.dart @@ -166,6 +166,14 @@ class RenderSectorWithChildren extends RenderDecoratedSector with ContainerRende child = child.parentData.previousSibling; } } + + void visitChildren(RenderObjectVisitor visitor) { + RenderSector child = lastChild; + while (child != null) { + visitor(child); + child = child.parentData.previousSibling; + } + } } class RenderSectorRing extends RenderSectorWithChildren { @@ -413,6 +421,10 @@ class RenderBoxToRenderSectorAdapter extends RenderBox { child.parentData = new SectorParentData(); } + void visitChildren(RenderObjectVisitor visitor) { + visitor(_child); + } + double getMinIntrinsicWidth(BoxConstraints constraints) { if (child == null) return super.getMinIntrinsicWidth(constraints); diff --git a/packages/unit/test/examples/sector_layout_test.dart b/packages/unit/test/examples/sector_layout_test.dart new file mode 100644 index 00000000000..1f6bedb1d03 --- /dev/null +++ b/packages/unit/test/examples/sector_layout_test.dart @@ -0,0 +1,10 @@ +import 'package:test/test.dart'; +import '../rendering/layout_utils.dart'; +import '../../../../examples/rendering/sector_layout.dart'; + +void main() { + test('Sector layout can paint', () { + RenderingTester tester = new RenderingTester(root: buildSectorExample()); + tester.pumpFrame(); + }); +} diff --git a/packages/unit/test/rendering/layout_utils.dart b/packages/unit/test/rendering/layout_utils.dart index a95b60f764d..dff258d5491 100644 --- a/packages/unit/test/rendering/layout_utils.dart +++ b/packages/unit/test/rendering/layout_utils.dart @@ -7,14 +7,36 @@ class TestRenderView extends RenderView { attach(); rootConstraints = new ViewConstraints(size: _kTestViewSize); scheduleInitialLayout(); - } - - void beginFrame(double timeStamp) { - RenderObject.flushLayout(); + scheduleInitialPaint(new TransformLayer(transform: new Matrix4.identity())); } } -RenderView layout(RenderBox box, { BoxConstraints constraints }) { +enum EnginePhase { + layout, + paint, + composite +} + +class RenderingTester { + RenderingTester({ RenderBox root }) { + renderView = new TestRenderView(child: root); + } + + RenderView renderView; + + void pumpFrame({ EnginePhase phase: EnginePhase.composite }) { + RenderObject.flushLayout(); + if (phase == EnginePhase.layout) + return; + renderView.updateCompositingBits(); + RenderObject.flushPaint(); + if (phase == EnginePhase.paint) + return; + renderView.compositeFrame(); + } +} + +RenderingTester layout(RenderBox box, { BoxConstraints constraints }) { if (constraints != null) { box = new RenderPositionedBox( child: new RenderConstrainedBox( @@ -24,7 +46,7 @@ RenderView layout(RenderBox box, { BoxConstraints constraints }) { ); } - TestRenderView renderView = new TestRenderView(child: box); - renderView.beginFrame(0.0); - return renderView; + RenderingTester tester = new RenderingTester(root: box); + tester.pumpFrame(phase: EnginePhase.layout); + return tester; } diff --git a/packages/unit/test/rendering/viewport_test.dart b/packages/unit/test/rendering/viewport_test.dart index 85562aff987..a187487600c 100644 --- a/packages/unit/test/rendering/viewport_test.dart +++ b/packages/unit/test/rendering/viewport_test.dart @@ -15,16 +15,16 @@ void main() { child: size); RenderViewport viewport = new RenderViewport(child: red, scrollOffset: new Offset(0.0, -10.0)); - RenderView renderView = layout(viewport); + RenderingTester tester = layout(viewport); HitTestResult result; result = new HitTestResult(); - renderView.hitTest(result, position: new Point(15.0, 0.0)); + tester.renderView.hitTest(result, position: new Point(15.0, 0.0)); expect(result.path.first.target, equals(viewport)); result = new HitTestResult(); - renderView.hitTest(result, position: new Point(15.0, 15.0)); + tester.renderView.hitTest(result, position: new Point(15.0, 15.0)); expect(result.path.first.target, equals(size)); }); }