From 302138145647a230598a83c74e6b8a51329148f4 Mon Sep 17 00:00:00 2001 From: Kris Giesing Date: Fri, 9 Oct 2015 11:14:15 -0700 Subject: [PATCH 1/6] Add hold and sweep semantics to gesture arena --- packages/flutter/lib/src/gestures/arena.dart | 27 +++++++++++++++++++ .../flutter/lib/src/rendering/binding.dart | 2 ++ 2 files changed, 29 insertions(+) diff --git a/packages/flutter/lib/src/gestures/arena.dart b/packages/flutter/lib/src/gestures/arena.dart index 17e70da4ec..d9fee7f63e 100644 --- a/packages/flutter/lib/src/gestures/arena.dart +++ b/packages/flutter/lib/src/gestures/arena.dart @@ -45,6 +45,7 @@ class GestureArenaEntry { class _GestureArenaState { final List members = new List(); bool isOpen = true; + bool isHeld = false; void add(GestureArenaMember member) { assert(isOpen); @@ -72,6 +73,32 @@ class GestureArena { _tryToResolveArena(key, state); } + /// Force resolution on this arena, giving the win to the first member + void sweep(Object key) { + _GestureArenaState state = _arenas[key]; + if (state == null) + return; // This arena either never existed or has been resolved. + assert(!state.isOpen); + if (state.isHeld) + return; // This arena is being held for a long-lived member + if (!state.members.isEmpty) { + // First member wins + state.members.first.acceptGesture(key); + // Give all the other members the bad news + for (int i = 1; i < state.members.length; i++) + state.members[i].rejectGesture(key); + } + _arenas.remove(key); + } + + /// Prevent the arena from being swept + void hold(Object key) { + _GestureArenaState state = _arenas[key]; + if (state == null) + return; // This arena either never existed or has been resolved. + state.isHeld = true; + } + void _tryToResolveArena(Object key, _GestureArenaState state) { assert(_arenas[key] == state); assert(!state.isOpen); diff --git a/packages/flutter/lib/src/rendering/binding.dart b/packages/flutter/lib/src/rendering/binding.dart index 7de8a4ebe7..bbc9c6cc87 100644 --- a/packages/flutter/lib/src/rendering/binding.dart +++ b/packages/flutter/lib/src/rendering/binding.dart @@ -167,6 +167,8 @@ class FlutterBinding extends HitTestTarget { pointerRouter.route(event); if (event.type == 'pointerdown') GestureArena.instance.close(event.pointer); + else if (event.type == 'pointerup') + GestureArena.instance.sweep(event.pointer); } } } From e8a0ea359382f675ce9d49bd36237cc387018ad4 Mon Sep 17 00:00:00 2001 From: Kris Giesing Date: Wed, 14 Oct 2015 17:03:26 -0700 Subject: [PATCH 2/6] Add release semantics, add test --- packages/flutter/lib/src/gestures/arena.dart | 19 +- packages/unit/test/gestures/arena_test.dart | 172 +++++++++++++++++++ 2 files changed, 189 insertions(+), 2 deletions(-) diff --git a/packages/flutter/lib/src/gestures/arena.dart b/packages/flutter/lib/src/gestures/arena.dart index d9fee7f63e..184a314ac2 100644 --- a/packages/flutter/lib/src/gestures/arena.dart +++ b/packages/flutter/lib/src/gestures/arena.dart @@ -46,6 +46,7 @@ class _GestureArenaState { final List members = new List(); bool isOpen = true; bool isHeld = false; + bool hasPendingSweep = false; void add(GestureArenaMember member) { assert(isOpen); @@ -79,8 +80,11 @@ class GestureArena { if (state == null) return; // This arena either never existed or has been resolved. assert(!state.isOpen); - if (state.isHeld) + if (state.isHeld) { + state.hasPendingSweep = true; return; // This arena is being held for a long-lived member + } + _arenas.remove(key); if (!state.members.isEmpty) { // First member wins state.members.first.acceptGesture(key); @@ -88,7 +92,6 @@ class GestureArena { for (int i = 1; i < state.members.length; i++) state.members[i].rejectGesture(key); } - _arenas.remove(key); } /// Prevent the arena from being swept @@ -99,6 +102,18 @@ class GestureArena { state.isHeld = true; } + /// Release a hold, allowing the arena to be swept + /// If a sweep was attempted on a held arena, the sweep will be done + /// on release + void release(Object key) { + _GestureArenaState state = _arenas[key]; + if (state == null) + return; // This arena either never existed or has been resolved. + state.isHeld = false; + if (state.hasPendingSweep) + sweep(key); + } + void _tryToResolveArena(Object key, _GestureArenaState state) { assert(_arenas[key] == state); assert(!state.isOpen); diff --git a/packages/unit/test/gestures/arena_test.dart b/packages/unit/test/gestures/arena_test.dart index ccc861b50a..4f0d062fd6 100644 --- a/packages/unit/test/gestures/arena_test.dart +++ b/packages/unit/test/gestures/arena_test.dart @@ -66,4 +66,176 @@ void main() { expect(secondAcceptRan, isFalse); expect(secondRejectRan, isTrue); }); + + test('Should win by sweep', () { + GestureArena arena = new GestureArena(); + + int primaryKey = 4; + bool firstAcceptRan = false; + bool firstRejectRan = false; + bool secondAcceptRan = false; + bool secondRejectRan = false; + + TestGestureArenaMember first = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + firstAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + firstRejectRan = true; + } + ); + + TestGestureArenaMember second = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + secondAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + secondRejectRan = true; + } + ); + + arena.add(primaryKey, first); + arena.add(primaryKey, second); + arena.close(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.sweep(primaryKey); + + expect(firstAcceptRan, isTrue); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isTrue); + }); + + test('Should win on release after hold sweep release', () { + GestureArena arena = new GestureArena(); + + int primaryKey = 4; + bool firstAcceptRan = false; + bool firstRejectRan = false; + bool secondAcceptRan = false; + bool secondRejectRan = false; + + TestGestureArenaMember first = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + firstAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + firstRejectRan = true; + } + ); + + TestGestureArenaMember second = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + secondAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + secondRejectRan = true; + } + ); + + arena.add(primaryKey, first); + arena.add(primaryKey, second); + arena.close(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.hold(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.sweep(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.release(primaryKey); + + expect(firstAcceptRan, isTrue); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isTrue); + }); + + test('Should win on sweep after hold release sweep', () { + GestureArena arena = new GestureArena(); + + int primaryKey = 4; + bool firstAcceptRan = false; + bool firstRejectRan = false; + bool secondAcceptRan = false; + bool secondRejectRan = false; + + TestGestureArenaMember first = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + firstAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + firstRejectRan = true; + } + ); + + TestGestureArenaMember second = new TestGestureArenaMember( + onAcceptGesture: (int key) { + expect(key, equals(primaryKey)); + secondAcceptRan = true; + }, + onRejectGesture: (int key) { + expect(key, equals(primaryKey)); + secondRejectRan = true; + } + ); + + arena.add(primaryKey, first); + arena.add(primaryKey, second); + arena.close(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.hold(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.release(primaryKey); + + expect(firstAcceptRan, isFalse); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isFalse); + + arena.sweep(primaryKey); + + expect(firstAcceptRan, isTrue); + expect(firstRejectRan, isFalse); + expect(secondAcceptRan, isFalse); + expect(secondRejectRan, isTrue); + }); } From 79ec74541abf253f42c0118433d04850f41bed5a Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Thu, 15 Oct 2015 10:20:26 -0700 Subject: [PATCH 3/6] Improves sprite physics debug drawing --- packages/flutter_sprites/lib/src/physics_debug.dart | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/flutter_sprites/lib/src/physics_debug.dart b/packages/flutter_sprites/lib/src/physics_debug.dart index cc3bc0c618..30f877c929 100644 --- a/packages/flutter_sprites/lib/src/physics_debug.dart +++ b/packages/flutter_sprites/lib/src/physics_debug.dart @@ -4,14 +4,22 @@ class _PhysicsDebugDraw extends box2d.DebugDraw { _PhysicsDebugDraw( box2d.ViewportTransform transform, this.physicsNode - ) : super(transform); + ) : super(transform) { + appendFlags( + box2d.DebugDraw.JOINT_BIT | + box2d.DebugDraw.CENTER_OF_MASS_BIT | + box2d.DebugDraw.WIREFRAME_DRAWING_BIT + ); + } PhysicsNode physicsNode; PaintingCanvas canvas; void drawSegment(Vector2 p1, Vector2 p2, box2d.Color3i color) { - Paint paint = new Paint()..color = _toColor(color); + Paint paint = new Paint() + ..color = _toColor(color) + ..strokeWidth = 1.0; canvas.drawLine(_toPoint(p1), _toPoint(p2), paint); } @@ -33,7 +41,6 @@ class _PhysicsDebugDraw extends box2d.DebugDraw { } void drawCircle(Vector2 center, num radius, box2d.Color3i color, [Vector2 axis]) { - print("drawCircle: $center"); Paint paint = new Paint() ..color = _toColor(color) ..setStyle(ui.PaintingStyle.stroke) From 5b72a2fdaf490128aec7bf2b879cbc43df616481 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 13 Oct 2015 16:04:12 -0700 Subject: [PATCH 4/6] Fix warnings seen when running skyanalyzer in strong mode --- examples/rendering/sector_layout.dart | 1 - .../lib/src/material/scrollbar_painter.dart | 1 - .../unit/test/engine/insert_before_test.dart | 6 +- .../unit/test/engine/replace_child_test.dart | 36 +++---- .../unit/test/gestures/long_press_test.dart | 6 +- .../unit/test/gestures/show_press_test.dart | 4 +- packages/unit/test/rendering/box_test.dart | 4 +- packages/unit/test/rendering/flex_test.dart | 12 ++- packages/unit/test/rendering/grid_test.dart | 6 +- packages/unit/test/rendering/stack_test.dart | 2 +- packages/unit/test/widget/block_test.dart | 4 +- packages/unit/test/widget/center_test.dart | 2 +- .../unit/test/widget/coordinates_test.dart | 2 +- .../unit/test/widget/date_picker_test.dart | 2 +- .../unit/test/widget/dismissable_test.dart | 18 ++-- packages/unit/test/widget/draggable_test.dart | 4 +- packages/unit/test/widget/drawer_test.dart | 4 +- .../unit/test/widget/duplicate_key_test.dart | 4 +- packages/unit/test/widget/flex_test.dart | 4 +- packages/unit/test/widget/focus_test.dart | 2 +- .../widget/homogeneous_viewport_test.dart | 2 +- packages/unit/test/widget/input_test.dart | 2 +- .../unit/test/widget/mixed_viewport_test.dart | 2 +- .../unit/test/widget/multichild_test.dart | 93 ++++++++++--------- .../unit/test/widget/parent_data_test.dart | 56 +++++------ .../test/widget/progress_indicator_test.dart | 4 +- .../widget/render_object_widget_test.dart | 12 +-- .../unit/test/widget/reparent_state_test.dart | 6 +- .../unit/test/widget/set_state_3_test.dart | 2 +- .../unit/test/widget/shader_mask_test.dart | 4 +- .../unit/test/widget/size_observer_test.dart | 10 +- packages/unit/test/widget/snack_bar_test.dart | 2 +- .../unit/test/widget/snap_scrolling_test.dart | 2 +- packages/unit/test/widget/stack_test.dart | 77 ++++++++------- .../test/widget/stateful_component_test.dart | 2 +- packages/unit/test/widget/syncing_test.dart | 8 +- packages/unit/test/widget/test_widgets.dart | 2 +- packages/unit/test/widget/transform_test.dart | 6 +- packages/unit/test/widget/widget_tester.dart | 9 +- 39 files changed, 219 insertions(+), 206 deletions(-) diff --git a/examples/rendering/sector_layout.dart b/examples/rendering/sector_layout.dart index ac3fc4699e..a6fc547357 100644 --- a/examples/rendering/sector_layout.dart +++ b/examples/rendering/sector_layout.dart @@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; import 'package:flutter/rendering.dart'; import 'lib/sector_layout.dart'; diff --git a/packages/flutter/lib/src/material/scrollbar_painter.dart b/packages/flutter/lib/src/material/scrollbar_painter.dart index 16b2175553..cd839f43f0 100644 --- a/packages/flutter/lib/src/material/scrollbar_painter.dart +++ b/packages/flutter/lib/src/material/scrollbar_painter.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'dart:async'; -import 'dart:ui' as ui; import 'package:flutter/animation.dart'; import 'package:flutter/rendering.dart'; diff --git a/packages/unit/test/engine/insert_before_test.dart b/packages/unit/test/engine/insert_before_test.dart index 4af3b4bbb3..ffd94ef7c1 100644 --- a/packages/unit/test/engine/insert_before_test.dart +++ b/packages/unit/test/engine/insert_before_test.dart @@ -6,15 +6,15 @@ void main() { Document document = new Document(); test("should throw with invalid arguments", () { - var parent = document.createElement("div"); - var child = document.createElement("div"); + Element parent = document.createElement("div"); + Element child = document.createElement("div"); parent.appendChild(child); // TODO(eseidel): This should throw! // expect(() { // parent.insertBefore([parent]); // }, throws); expect(() { - child.insertBefore([parent]); + child.insertBefore([parent]); }, throws); }); diff --git a/packages/unit/test/engine/replace_child_test.dart b/packages/unit/test/engine/replace_child_test.dart index ba40e156e0..42dfce4718 100644 --- a/packages/unit/test/engine/replace_child_test.dart +++ b/packages/unit/test/engine/replace_child_test.dart @@ -5,36 +5,36 @@ import 'package:test/test.dart'; import 'dom_utils.dart'; void main() { - var document = new Document(); + Document document = new Document(); test("should replace elements", () { - var parent = document.createElement("div"); - var oldChild = parent.appendChild(document.createElement("div")); - var newChild = document.createElement("div"); - oldChild.replaceWith([newChild]); + Element parent = document.createElement("div"); + Element oldChild = parent.appendChild(document.createElement("div")); + Element newChild = document.createElement("div"); + oldChild.replaceWith([newChild]); expect(oldChild.parentNode, isNull); expect(newChild.parentNode, equals(parent)); }); test("should replace text", () { - var parent = document.createElement("div"); - var oldChild = parent.appendChild(document.createText(" it's a text ")); - var newChild = document.createElement("div"); - oldChild.replaceWith([newChild]); + Element parent = document.createElement("div"); + Node oldChild = parent.appendChild(document.createText(" it's a text ")); + Element newChild = document.createElement("div"); + oldChild.replaceWith([newChild]); expect(oldChild.parentNode, isNull); expect(newChild.parentNode, equals(parent)); }); test("should replace children with a fragment", () { - var fragment = document.createDocumentFragment(); - var child1 = fragment.appendChild(document.createElement("div")); - var child2 = fragment.appendChild(document.createText(" text ")); - var child3 = fragment.appendChild(document.createText(" ")); - var child4 = fragment.appendChild(document.createElement("div")); - var parent = document.createElement("div"); - var oldChild = parent.appendChild(document.createElement("div")); - var lastChild = parent.appendChild(document.createElement("div")); - oldChild.replaceWith([fragment]); + DocumentFragment fragment = document.createDocumentFragment(); + Element child1 = fragment.appendChild(document.createElement("div")); + Node child2 = fragment.appendChild(document.createText(" text ")); + Node child3 = fragment.appendChild(document.createText(" ")); + Element child4 = fragment.appendChild(document.createElement("div")); + Element parent = document.createElement("div"); + Element oldChild = parent.appendChild(document.createElement("div")); + Element lastChild = parent.appendChild(document.createElement("div")); + oldChild.replaceWith([fragment]); expect(child1.parentNode, equals(parent)); expect(child2.parentNode, equals(parent)); expect(child3.parentNode, equals(parent)); diff --git a/packages/unit/test/gestures/long_press_test.dart b/packages/unit/test/gestures/long_press_test.dart index 133901f9fc..ce95e3ab27 100644 --- a/packages/unit/test/gestures/long_press_test.dart +++ b/packages/unit/test/gestures/long_press_test.dart @@ -26,7 +26,7 @@ void main() { longPressRecognized = true; }; - new FakeAsync().run((async) { + new FakeAsync().run((FakeAsync async) { longPress.addPointer(down); GestureArena.instance.close(5); expect(longPressRecognized, isFalse); @@ -50,7 +50,7 @@ void main() { longPressRecognized = true; }; - new FakeAsync().run((async) { + new FakeAsync().run((FakeAsync async) { longPress.addPointer(down); GestureArena.instance.close(5); expect(longPressRecognized, isFalse); @@ -82,7 +82,7 @@ void main() { longPressRecognized = true; }; - new FakeAsync().run((async) { + new FakeAsync().run((FakeAsync async) { showPress.addPointer(down); longPress.addPointer(down); GestureArena.instance.close(5); diff --git a/packages/unit/test/gestures/show_press_test.dart b/packages/unit/test/gestures/show_press_test.dart index d5e5dd5e9f..1206fbf52f 100644 --- a/packages/unit/test/gestures/show_press_test.dart +++ b/packages/unit/test/gestures/show_press_test.dart @@ -26,7 +26,7 @@ void main() { showPressRecognized = true; }; - new FakeAsync().run((async) { + new FakeAsync().run((FakeAsync async) { showPress.addPointer(down); GestureArena.instance.close(5); expect(showPressRecognized, isFalse); @@ -48,7 +48,7 @@ void main() { showPressRecognized = true; }; - new FakeAsync().run((async) { + new FakeAsync().run((FakeAsync async) { showPress.addPointer(down); GestureArena.instance.close(5); expect(showPressRecognized, isFalse); diff --git a/packages/unit/test/rendering/box_test.dart b/packages/unit/test/rendering/box_test.dart index 878237fbb1..680ede0236 100644 --- a/packages/unit/test/rendering/box_test.dart +++ b/packages/unit/test/rendering/box_test.dart @@ -11,7 +11,7 @@ void main() { backgroundColor: const Color(0xFF00FF00), gradient: new RadialGradient( center: Point.origin, radius: 500.0, - colors: [Colors.yellow[500], Colors.blue[500]]), + colors: [Colors.yellow[500], Colors.blue[500]]), boxShadow: shadows[3]) ); layout(root); @@ -34,7 +34,7 @@ void main() { child: inner ); RenderBox flex = new RenderFlex( - children: [padding], + children: [padding], direction: FlexDirection.vertical, alignItems: FlexAlignItems.stretch ); diff --git a/packages/unit/test/rendering/flex_test.dart b/packages/unit/test/rendering/flex_test.dart index 4ce08a1233..0d223c9aac 100644 --- a/packages/unit/test/rendering/flex_test.dart +++ b/packages/unit/test/rendering/flex_test.dart @@ -6,7 +6,7 @@ import 'rendering_tester.dart'; void main() { test('Overconstrained flex', () { RenderDecoratedBox box = new RenderDecoratedBox(decoration: new BoxDecoration()); - RenderFlex flex = new RenderFlex(children: [ box ]); + RenderFlex flex = new RenderFlex(children: [box]); layout(flex, constraints: const BoxConstraints( minWidth: 200.0, maxWidth: 100.0, minHeight: 200.0, maxHeight: 100.0) ); @@ -24,7 +24,7 @@ void main() { test('Parent data', () { RenderDecoratedBox box1 = new RenderDecoratedBox(decoration: new BoxDecoration()); RenderDecoratedBox box2 = new RenderDecoratedBox(decoration: new BoxDecoration()); - RenderFlex flex = new RenderFlex(children: [ box1, box2 ]); + RenderFlex flex = new RenderFlex(children: [box1, box2]); layout(flex, constraints: const BoxConstraints( minWidth: 0.0, maxWidth: 100.0, minHeight: 0.0, maxHeight: 100.0) ); @@ -33,7 +33,8 @@ void main() { expect(box2.size.width, equals(0.0)); expect(box2.size.height, equals(0.0)); - box2.parentData.flex = 1; + final FlexParentData box2ParentData = box2.parentData; + box2ParentData.flex = 1; flex.markNeedsLayout(); pumpFrame(); expect(box1.size.width, equals(0.0)); @@ -47,8 +48,9 @@ void main() { RenderDecoratedBox box2 = new RenderDecoratedBox(decoration: new BoxDecoration()); RenderFlex flex = new RenderFlex(); flex.setupParentData(box2); - box2.parentData.flex = 2; - flex.addAll([box1, box2]); + final FlexParentData box2ParentData = box2.parentData; + box2ParentData.flex = 2; + flex.addAll([box1, box2]); layout(flex, constraints: const BoxConstraints( minWidth: 0.0, maxWidth: 100.0, minHeight: 0.0, maxHeight: 100.0) ); diff --git a/packages/unit/test/rendering/grid_test.dart b/packages/unit/test/rendering/grid_test.dart index 60852a2e8a..8646ba3068 100644 --- a/packages/unit/test/rendering/grid_test.dart +++ b/packages/unit/test/rendering/grid_test.dart @@ -5,7 +5,7 @@ import 'rendering_tester.dart'; void main() { test('Basic grid layout test', () { - List children = [ + List children = [ new RenderDecoratedBox(decoration: new BoxDecoration()), new RenderDecoratedBox(decoration: new BoxDecoration()), new RenderDecoratedBox(decoration: new BoxDecoration()), @@ -15,7 +15,7 @@ void main() { RenderGrid grid = new RenderGrid(children: children, maxChildExtent: 100.0); layout(grid, constraints: const BoxConstraints(maxWidth: 200.0)); - children.forEach((child) { + children.forEach((RenderBox child) { expect(child.size.width, equals(100.0), reason: "child width"); expect(child.size.height, equals(100.0), reason: "child height"); }); @@ -29,7 +29,7 @@ void main() { pumpFrame(); - children.forEach((child) { + children.forEach((RenderBox child) { expect(child.size.width, equals(50.0), reason: "child width"); expect(child.size.height, equals(50.0), reason: "child height"); }); diff --git a/packages/unit/test/rendering/stack_test.dart b/packages/unit/test/rendering/stack_test.dart index 8a2fb726d6..8fc40a5611 100644 --- a/packages/unit/test/rendering/stack_test.dart +++ b/packages/unit/test/rendering/stack_test.dart @@ -19,7 +19,7 @@ void main() { backgroundColor: const Color(0xFFFF0000) )); - RenderBox stack = new RenderStack(children: [red, green]); + RenderBox stack = new RenderStack(children: [red, green]); (green.parentData as StackParentData) ..top = 0.0 ..right = 0.0 diff --git a/packages/unit/test/widget/block_test.dart b/packages/unit/test/widget/block_test.dart index 141313ea2b..b0722d9c83 100644 --- a/packages/unit/test/widget/block_test.dart +++ b/packages/unit/test/widget/block_test.dart @@ -10,7 +10,7 @@ void main() { test('Cannot scroll a non-overflowing block', () { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Block([ + new Block([ new Container( height: 200.0, // less than 600, the height of the test area child: new Text('Hello') @@ -37,7 +37,7 @@ void main() { test('Can scroll an overflowing block', () { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Block([ + new Block([ new Container( height: 2000.0, // more than 600, the height of the test area child: new Text('Hello') diff --git a/packages/unit/test/widget/center_test.dart b/packages/unit/test/widget/center_test.dart index 340e08de9f..ee21e6b499 100644 --- a/packages/unit/test/widget/center_test.dart +++ b/packages/unit/test/widget/center_test.dart @@ -6,7 +6,7 @@ import 'widget_tester.dart'; void main() { test('Can be placed in an infinte box', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new Block([new Center()])); + tester.pumpWidget(new Block([new Center()])); }); }); } diff --git a/packages/unit/test/widget/coordinates_test.dart b/packages/unit/test/widget/coordinates_test.dart index e6ee66bb9f..3bd3808555 100644 --- a/packages/unit/test/widget/coordinates_test.dart +++ b/packages/unit/test/widget/coordinates_test.dart @@ -11,7 +11,7 @@ void main() { Key keyB = new GlobalKey(); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 100.0, left: 100.0, diff --git a/packages/unit/test/widget/date_picker_test.dart b/packages/unit/test/widget/date_picker_test.dart index d0c00eee67..0fdbdc49bb 100644 --- a/packages/unit/test/widget/date_picker_test.dart +++ b/packages/unit/test/widget/date_picker_test.dart @@ -8,7 +8,7 @@ void main() { testWidgets((WidgetTester tester) { DateTime currentValue; - Widget widget = new Block([ + Widget widget = new Block([ new DatePicker( selectedDate: new DateTime.utc(2015, 6, 9, 7, 12), firstDate: new DateTime.utc(2013), diff --git a/packages/unit/test/widget/dismissable_test.dart b/packages/unit/test/widget/dismissable_test.dart index b9a7b5f3cc..3c717f225b 100644 --- a/packages/unit/test/widget/dismissable_test.dart +++ b/packages/unit/test/widget/dismissable_test.dart @@ -8,7 +8,7 @@ import 'widget_tester.dart'; const double itemExtent = 100.0; ScrollDirection scrollDirection = ScrollDirection.vertical; DismissDirection dismissDirection = DismissDirection.horizontal; -List dismissedItems = []; +List dismissedItems = []; void handleOnResized(item) { expect(dismissedItems.contains(item), isFalse); @@ -117,7 +117,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.vertical; dismissDirection = DismissDirection.horizontal; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -136,7 +136,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.horizontal; dismissDirection = DismissDirection.vertical; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -155,7 +155,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.vertical; dismissDirection = DismissDirection.left; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -174,7 +174,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.vertical; dismissDirection = DismissDirection.right; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -193,7 +193,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.horizontal; dismissDirection = DismissDirection.up; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -212,7 +212,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.horizontal; dismissDirection = DismissDirection.down; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); expect(dismissedItems, isEmpty); @@ -233,7 +233,7 @@ void main() { testWidgets((WidgetTester tester) { scrollDirection = ScrollDirection.horizontal; dismissDirection = DismissDirection.down; - dismissedItems = []; + dismissedItems = []; tester.pumpWidget(widgetBuilder()); Element itemElement = tester.findText('0'); @@ -261,7 +261,7 @@ void main() { child: new Container( width: 100.0, height: 1000.0, - child: new Column([ + child: new Column([ new Test1215DismissableComponent('1'), new Test1215DismissableComponent('2') ]) diff --git a/packages/unit/test/widget/draggable_test.dart b/packages/unit/test/widget/draggable_test.dart index fc7ad01093..9b30893052 100644 --- a/packages/unit/test/widget/draggable_test.dart +++ b/packages/unit/test/widget/draggable_test.dart @@ -12,8 +12,8 @@ void main() { List accepted = []; tester.pumpWidget(new Navigator( - routes: { - '/': (RouteArguments args) { return new Column([ + routes: { + '/': (RouteArguments args) { return new Column([ new Draggable( navigator: args.navigator, data: 1, diff --git a/packages/unit/test/widget/drawer_test.dart b/packages/unit/test/widget/drawer_test.dart index 9cbea0686e..631ae43ef9 100644 --- a/packages/unit/test/widget/drawer_test.dart +++ b/packages/unit/test/widget/drawer_test.dart @@ -11,7 +11,7 @@ void main() { NavigatorState navigator; tester.pumpWidget( new MaterialApp( - routes: { + routes: { '/': (RouteArguments args) { navigator = args.navigator; new Container(); @@ -40,7 +40,7 @@ void main() { tester.pumpWidget(new Container()); // throw away the old App and its Navigator tester.pumpWidget( new MaterialApp( - routes: { + routes: { '/': (RouteArguments args) { navigator = args.navigator; new Container(); diff --git a/packages/unit/test/widget/duplicate_key_test.dart b/packages/unit/test/widget/duplicate_key_test.dart index ff9f59d167..9040b6aee7 100644 --- a/packages/unit/test/widget/duplicate_key_test.dart +++ b/packages/unit/test/widget/duplicate_key_test.dart @@ -8,7 +8,7 @@ class Item { GlobalKey key2 = new GlobalKey(); String toString() => "Item($key1, $key2)"; } -List items = [new Item(), new Item()]; +List items = [new Item(), new Item()]; class StatefulLeaf extends StatefulComponent { StatefulLeaf({ GlobalKey key }) : super(key: key); @@ -34,7 +34,7 @@ class KeyedWrapper extends StatelessComponent { } Widget builder() { - return new Column([ + return new Column([ new KeyedWrapper(items[1].key1, items[1].key2), new KeyedWrapper(items[0].key1, items[0].key2) ]); diff --git a/packages/unit/test/widget/flex_test.dart b/packages/unit/test/widget/flex_test.dart index a1e58afcc4..87d354834e 100644 --- a/packages/unit/test/widget/flex_test.dart +++ b/packages/unit/test/widget/flex_test.dart @@ -12,11 +12,11 @@ void main() { decoration: const BoxDecoration( backgroundColor: const Color(0xFF00FF00) ), - child: new Stack([ + child: new Stack([ new Positioned( top: 10.0, left: 10.0, - child: new Column([ + child: new Column([ new GestureDetector( onTap: () { didReceiveTap = true; diff --git a/packages/unit/test/widget/focus_test.dart b/packages/unit/test/widget/focus_test.dart index b4c0427732..d270564a1f 100644 --- a/packages/unit/test/widget/focus_test.dart +++ b/packages/unit/test/widget/focus_test.dart @@ -23,7 +23,7 @@ void main() { GlobalKey keyB = new GlobalKey(); tester.pumpWidget( new Focus( - child: new Column([ + child: new Column([ // reverse these when you fix https://github.com/flutter/engine/issues/1495 new TestFocusable('b', 'B FOCUSED', keyB), new TestFocusable('a', 'A FOCUSED', keyA), diff --git a/packages/unit/test/widget/homogeneous_viewport_test.dart b/packages/unit/test/widget/homogeneous_viewport_test.dart index 87131c23ac..3f96271e90 100644 --- a/packages/unit/test/widget/homogeneous_viewport_test.dart +++ b/packages/unit/test/widget/homogeneous_viewport_test.dart @@ -36,7 +36,7 @@ void main() { tester.pumpWidget(builder()); - StatefulComponentElement element = tester.findElement((element) => element.widget is FlipComponent); + StatefulComponentElement element = tester.findElement((Element element) => element.widget is FlipComponent); FlipComponentState testComponent = element.state; expect(callbackTracker, equals([0, 1, 2, 3, 4, 5])); diff --git a/packages/unit/test/widget/input_test.dart b/packages/unit/test/widget/input_test.dart index 3aedb0f36d..ec3d58db7c 100644 --- a/packages/unit/test/widget/input_test.dart +++ b/packages/unit/test/widget/input_test.dart @@ -37,7 +37,7 @@ void main() { child: new Input( key: inputKey, placeholder: 'Placeholder', - onChanged: (value) { inputValue = value; } + onChanged: (String value) { inputValue = value; } ) ); } diff --git a/packages/unit/test/widget/mixed_viewport_test.dart b/packages/unit/test/widget/mixed_viewport_test.dart index 59037ef753..f5532a8528 100644 --- a/packages/unit/test/widget/mixed_viewport_test.dart +++ b/packages/unit/test/widget/mixed_viewport_test.dart @@ -31,7 +31,7 @@ void main() { tester.pumpWidget(builder()); - StatefulComponentElement element = tester.findElement((element) => element.widget is FlipComponent); + StatefulComponentElement element = tester.findElement((Element element) => element.widget is FlipComponent); FlipComponentState testComponent = element.state; expect(callbackTracker, equals([0, 1, 2, 3, 4, 5])); diff --git a/packages/unit/test/widget/multichild_test.dart b/packages/unit/test/widget/multichild_test.dart index 6db41dc6b3..e2f7b3428d 100644 --- a/packages/unit/test/widget/multichild_test.dart +++ b/packages/unit/test/widget/multichild_test.dart @@ -7,7 +7,7 @@ import 'widget_tester.dart'; void checkTree(WidgetTester tester, List expectedDecorations) { MultiChildRenderObjectElement element = - tester.findElement((element) => element is MultiChildRenderObjectElement); + tester.findElement((Element element) => element is MultiChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderStack, isTrue); RenderStack renderObject = element.renderObject; @@ -17,7 +17,8 @@ void checkTree(WidgetTester tester, List expectedDecorations) { expect(child is RenderDecoratedBox, isTrue); RenderDecoratedBox decoratedBox = child; expect(decoratedBox.decoration, equals(decoration)); - child = decoratedBox.parentData.nextSibling; + final StackParentData decoratedBoxParentData = decoratedBox.parentData; + child = decoratedBoxParentData.nextSibling; } expect(child, isNull); } catch (e) { @@ -31,67 +32,67 @@ void main() { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new DecoratedBox(decoration: kBoxDecorationB), new DecoratedBox(decoration: kBoxDecorationC), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new DecoratedBox(decoration: kBoxDecorationC), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new DecoratedBox(key: new Key('b'), decoration: kBoxDecorationB), new DecoratedBox(decoration: kBoxDecorationC), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(key: new Key('b'), decoration: kBoxDecorationB), new DecoratedBox(decoration: kBoxDecorationC), new DecoratedBox(key: new Key('a'), decoration: kBoxDecorationA), ]) ); - checkTree(tester, [kBoxDecorationB, kBoxDecorationC, kBoxDecorationA]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationC, kBoxDecorationA]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(key: new Key('a'), decoration: kBoxDecorationA), new DecoratedBox(decoration: kBoxDecorationC), new DecoratedBox(key: new Key('b'), decoration: kBoxDecorationB), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationC, kBoxDecorationB]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationC, kBoxDecorationB]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationC), ]) ); - checkTree(tester, [kBoxDecorationC]); + checkTree(tester, [kBoxDecorationC]); tester.pumpWidget( - new Stack([]) + new Stack([]) ); - checkTree(tester, []); + checkTree(tester, []); }); }); @@ -100,17 +101,17 @@ void main() { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new DecoratedBox(decoration: kBoxDecorationB), new DecoratedBox(decoration: kBoxDecorationC), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new Container( child: new DecoratedBox(decoration: kBoxDecorationB) @@ -119,10 +120,10 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new Container( child: new Container( @@ -133,10 +134,10 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new Container( child: new Container( child: new DecoratedBox(decoration: kBoxDecorationB) @@ -149,10 +150,10 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationB, kBoxDecorationA, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationA, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new Container( child: new DecoratedBox(decoration: kBoxDecorationB) ), @@ -163,10 +164,10 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationB, kBoxDecorationA, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationA, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new Container( key: new Key('b'), child: new DecoratedBox(decoration: kBoxDecorationB) @@ -178,10 +179,10 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationB, kBoxDecorationA]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationA]); tester.pumpWidget( - new Stack([ + new Stack([ new Container( key: new Key('a'), child: new DecoratedBox(decoration: kBoxDecorationA) @@ -193,29 +194,29 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB]); tester.pumpWidget( - new Stack([ ]) + new Stack([]) ); - checkTree(tester, []); + checkTree(tester, []); }); }); test('MultiChildRenderObjectElement with stateful components', () { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new DecoratedBox(decoration: kBoxDecorationB), ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationB]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationB]); tester.pumpWidget( - new Stack([ + new Stack([ new FlipComponent( left: new DecoratedBox(decoration: kBoxDecorationA), right: new DecoratedBox(decoration: kBoxDecorationB) @@ -224,15 +225,15 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationA, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationA, kBoxDecorationC]); flipStatefulComponent(tester); tester.pump(); - checkTree(tester, [kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationC]); tester.pumpWidget( - new Stack([ + new Stack([ new FlipComponent( left: new DecoratedBox(decoration: kBoxDecorationA), right: new DecoratedBox(decoration: kBoxDecorationB) @@ -240,15 +241,15 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationB]); + checkTree(tester, [kBoxDecorationB]); flipStatefulComponent(tester); tester.pump(); - checkTree(tester, [kBoxDecorationA]); + checkTree(tester, [kBoxDecorationA]); tester.pumpWidget( - new Stack([ + new Stack([ new FlipComponent( key: new Key('flip'), left: new DecoratedBox(decoration: kBoxDecorationA), @@ -258,7 +259,7 @@ void main() { ); tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(key: new Key('c'), decoration: kBoxDecorationC), new FlipComponent( key: new Key('flip'), @@ -268,15 +269,15 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationC, kBoxDecorationA]); + checkTree(tester, [kBoxDecorationC, kBoxDecorationA]); flipStatefulComponent(tester); tester.pump(); - checkTree(tester, [kBoxDecorationC, kBoxDecorationB]); + checkTree(tester, [kBoxDecorationC, kBoxDecorationB]); tester.pumpWidget( - new Stack([ + new Stack([ new FlipComponent( key: new Key('flip'), left: new DecoratedBox(decoration: kBoxDecorationA), @@ -286,7 +287,7 @@ void main() { ]) ); - checkTree(tester, [kBoxDecorationB, kBoxDecorationC]); + checkTree(tester, [kBoxDecorationB, kBoxDecorationC]); }); }); } diff --git a/packages/unit/test/widget/parent_data_test.dart b/packages/unit/test/widget/parent_data_test.dart index 2d692d0956..bc5eb2e922 100644 --- a/packages/unit/test/widget/parent_data_test.dart +++ b/packages/unit/test/widget/parent_data_test.dart @@ -16,7 +16,7 @@ class TestParentData { void checkTree(WidgetTester tester, List expectedParentData) { MultiChildRenderObjectElement element = - tester.findElement((element) => element is MultiChildRenderObjectElement); + tester.findElement((Element element) => element is MultiChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderStack, isTrue); RenderStack renderObject = element.renderObject; @@ -31,7 +31,7 @@ void checkTree(WidgetTester tester, List expectedParentData) { expect(parentData.right, equals(expected.right)); expect(parentData.bottom, equals(expected.bottom)); expect(parentData.left, equals(expected.left)); - child = decoratedBox.parentData.nextSibling; + child = (decoratedBox.parentData as StackParentData).nextSibling; } expect(child, isNull); } catch (e) { @@ -61,7 +61,7 @@ void main() { testWidgets((WidgetTester tester) { tester.pumpWidget( - new Stack([ + new Stack([ new DecoratedBox(decoration: kBoxDecorationA), new Positioned( top: 10.0, @@ -72,14 +72,14 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ kNonPositioned, new TestParentData(top: 10.0, left: 10.0), kNonPositioned, ]); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( bottom: 5.0, right: 7.0, @@ -94,7 +94,7 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(bottom: 5.0, right: 7.0), new TestParentData(top: 10.0, left: 10.0), kNonPositioned, @@ -105,7 +105,7 @@ void main() { DecoratedBox kDecoratedBoxC = new DecoratedBox(decoration: kBoxDecorationC); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( bottom: 5.0, right: 7.0, @@ -120,14 +120,14 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(bottom: 5.0, right: 7.0), new TestParentData(top: 10.0, left: 10.0), kNonPositioned, ]); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( bottom: 6.0, right: 8.0, @@ -142,14 +142,14 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(bottom: 6.0, right: 8.0), new TestParentData(left: 10.0, right: 10.0), kNonPositioned, ]); tester.pumpWidget( - new Stack([ + new Stack([ kDecoratedBoxA, new Positioned( left: 11.0, @@ -160,14 +160,14 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ kNonPositioned, new TestParentData(left: 11.0, right: 12.0), kNonPositioned, ]); tester.pumpWidget( - new Stack([ + new Stack([ kDecoratedBoxA, new Positioned( right: 10.0, @@ -182,14 +182,14 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ kNonPositioned, new TestParentData(right: 10.0), new TestParentData(top: 8.0), ]); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( right: 10.0, child: new FlipComponent(left: kDecoratedBoxA, right: kDecoratedBoxB) @@ -197,19 +197,19 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(right: 10.0), ]); flipStatefulComponent(tester); tester.pump(); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(right: 10.0), ]); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 7.0, child: new FlipComponent(left: kDecoratedBoxA, right: kDecoratedBoxB) @@ -217,22 +217,22 @@ void main() { ]) ); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(top: 7.0), ]); flipStatefulComponent(tester); tester.pump(); - checkTree(tester, [ + checkTree(tester, [ new TestParentData(top: 7.0), ]); tester.pumpWidget( - new Stack([]) + new Stack([]) ); - checkTree(tester, []); + checkTree(tester, []); }); }); @@ -241,7 +241,7 @@ void main() { expect(cachedException, isNull); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 5.0, bottom: 8.0, @@ -257,14 +257,14 @@ void main() { expect(cachedException, isNotNull); cachedException = null; - tester.pumpWidget(new Stack([])); + tester.pumpWidget(new Stack([])); - checkTree(tester, []); + checkTree(tester, []); expect(cachedException, isNull); tester.pumpWidget( new Container( - child: new Flex([ + child: new Flex([ new Positioned( top: 6.0, left: 7.0, @@ -278,10 +278,10 @@ void main() { cachedException = null; tester.pumpWidget( - new Stack([]) + new Stack([]) ); - checkTree(tester, []); + checkTree(tester, []); }); }); } diff --git a/packages/unit/test/widget/progress_indicator_test.dart b/packages/unit/test/widget/progress_indicator_test.dart index de3541b24d..9a5c971f8f 100644 --- a/packages/unit/test/widget/progress_indicator_test.dart +++ b/packages/unit/test/widget/progress_indicator_test.dart @@ -8,11 +8,11 @@ import 'widget_tester.dart'; void main() { test('LinearProgressIndicator changes when its value changes', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new Block([new LinearProgressIndicator(value: 0.0)])); + tester.pumpWidget(new Block([new LinearProgressIndicator(value: 0.0)])); List layers1 = tester.layers; - tester.pumpWidget(new Block([new LinearProgressIndicator(value: 0.5)])); + tester.pumpWidget(new Block([new LinearProgressIndicator(value: 0.5)])); List layers2 = tester.layers; expect(layers1, isNot(equals(layers2))); diff --git a/packages/unit/test/widget/render_object_widget_test.dart b/packages/unit/test/widget/render_object_widget_test.dart index 76088a6998..61e8944952 100644 --- a/packages/unit/test/widget/render_object_widget_test.dart +++ b/packages/unit/test/widget/render_object_widget_test.dart @@ -19,7 +19,7 @@ void main() { testWidgets((WidgetTester tester) { tester.pumpWidget(new DecoratedBox(decoration: kBoxDecorationA)); OneChildRenderObjectElement element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderDecoratedBox, isTrue); RenderDecoratedBox renderObject = element.renderObject; @@ -27,7 +27,7 @@ void main() { expect(renderObject.position, equals(BoxDecorationPosition.background)); tester.pumpWidget(new DecoratedBox(decoration: kBoxDecorationB)); - element = tester.findElement((element) => element is OneChildRenderObjectElement); + element = tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderDecoratedBox, isTrue); renderObject = element.renderObject; @@ -41,7 +41,7 @@ void main() { void checkFullTree() { OneChildRenderObjectElement element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderDecoratedBox, isTrue); RenderDecoratedBox renderObject = element.renderObject; @@ -57,7 +57,7 @@ void main() { void childBareTree() { OneChildRenderObjectElement element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderDecoratedBox, isTrue); RenderDecoratedBox renderObject = element.renderObject; @@ -136,7 +136,7 @@ void main() { )); OneChildRenderObjectElement element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element.renderObject is RenderDecoratedBox, isTrue); RenderDecoratedBox parent = element.renderObject; expect(parent.child is RenderDecoratedBox, isTrue); @@ -152,7 +152,7 @@ void main() { )); element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element.renderObject is RenderDecoratedBox, isTrue); expect(element.renderObject, equals(parent)); expect(parent.child, isNull); diff --git a/packages/unit/test/widget/reparent_state_test.dart b/packages/unit/test/widget/reparent_state_test.dart index 804837f8f8..cf3cbc17e8 100644 --- a/packages/unit/test/widget/reparent_state_test.dart +++ b/packages/unit/test/widget/reparent_state_test.dart @@ -33,7 +33,7 @@ void main() { StateMarker grandchild = new StateMarker(); tester.pumpWidget( - new Stack([ + new Stack([ new Container( child: new StateMarker(key: left) ), @@ -55,7 +55,7 @@ void main() { StateMarker newGrandchild = new StateMarker(); tester.pumpWidget( - new Stack([ + new Stack([ new Container( child: new StateMarker( key: right, @@ -101,7 +101,7 @@ void main() { (key.currentState as StateMarkerState).marker = "marked"; tester.pumpWidget(new ScrollableList( - items: [0], + items: [0], itemExtent: 100.0, itemBuilder: (BuildContext context, int item) { return new Container( diff --git a/packages/unit/test/widget/set_state_3_test.dart b/packages/unit/test/widget/set_state_3_test.dart index cfc2e3fc93..fcf2372fdf 100644 --- a/packages/unit/test/widget/set_state_3_test.dart +++ b/packages/unit/test/widget/set_state_3_test.dart @@ -27,7 +27,7 @@ class ChangerState extends State { void test() { setState(() { _state = true; }); } - Widget build(BuildContext) => _state ? new Wrapper(config.child) : config.child; + Widget build(BuildContext context) => _state ? new Wrapper(config.child) : config.child; } class Wrapper extends StatelessComponent { diff --git a/packages/unit/test/widget/shader_mask_test.dart b/packages/unit/test/widget/shader_mask_test.dart index aa465abaa5..22c0360c71 100644 --- a/packages/unit/test/widget/shader_mask_test.dart +++ b/packages/unit/test/widget/shader_mask_test.dart @@ -10,8 +10,8 @@ ui.Shader createShader(Rect bounds) { return new LinearGradient( begin: Point.origin, end: new Point(0.0, bounds.height), - colors: [const Color(0x00FFFFFF), const Color(0xFFFFFFFF)], - stops: [0.1, 0.35] + colors: [const Color(0x00FFFFFF), const Color(0xFFFFFFFF)], + stops: [0.1, 0.35] ) .createShader(); } diff --git a/packages/unit/test/widget/size_observer_test.dart b/packages/unit/test/widget/size_observer_test.dart index 95f9e44eeb..1eae694bdf 100644 --- a/packages/unit/test/widget/size_observer_test.dart +++ b/packages/unit/test/widget/size_observer_test.dart @@ -8,10 +8,10 @@ import 'widget_tester.dart'; void main() { test('SizeObserver notices zero size', () { testWidgets((WidgetTester tester) { - List results = []; + List results = []; tester.pumpWidget(new Center( child: new SizeObserver( - callback: (size) { results.add(size); }, + callback: (Size size) { results.add(size); }, child: new Container(width:0.0, height:0.0) ) )); @@ -20,7 +20,7 @@ void main() { expect(results, equals([Size.zero])); tester.pumpWidget(new Center( child: new SizeObserver( - callback: (size) { results.add(size); }, + callback: (Size size) { results.add(size); }, child: new Container(width:100.0, height:0.0) ) )); @@ -29,7 +29,7 @@ void main() { expect(results, equals([Size.zero, const Size(100.0, 0.0)])); tester.pumpWidget(new Center( child: new SizeObserver( - callback: (size) { results.add(size); }, + callback: (Size size) { results.add(size); }, child: new Container(width:0.0, height:0.0) ) )); @@ -38,7 +38,7 @@ void main() { expect(results, equals([Size.zero, const Size(100.0, 0.0), Size.zero])); tester.pumpWidget(new Center( child: new SizeObserver( - callback: (size) { results.add(size); }, + callback: (Size size) { results.add(size); }, child: new Container(width:0.0, height:0.0) ) )); diff --git a/packages/unit/test/widget/snack_bar_test.dart b/packages/unit/test/widget/snack_bar_test.dart index 1c3fb697fe..606a5b1628 100644 --- a/packages/unit/test/widget/snack_bar_test.dart +++ b/packages/unit/test/widget/snack_bar_test.dart @@ -11,7 +11,7 @@ void main() { Key tapTarget = new Key('tap-target'); tester.pumpWidget(new MaterialApp( - routes: { + routes: { '/': (RouteArguments args) { return new GestureDetector( onTap: () { diff --git a/packages/unit/test/widget/snap_scrolling_test.dart b/packages/unit/test/widget/snap_scrolling_test.dart index 9a193b4259..b55bfe4da1 100644 --- a/packages/unit/test/widget/snap_scrolling_test.dart +++ b/packages/unit/test/widget/snap_scrolling_test.dart @@ -35,7 +35,7 @@ Widget buildFrame() { key: scrollableListKey, snapOffsetCallback: snapOffsetCallback, scrollDirection: scrollDirection, - items: [0, 1, 2, 3, 4, 5, 7, 8, 9], + items: [0, 1, 2, 3, 4, 5, 7, 8, 9], itemBuilder: buildItem, itemExtent: itemExtent ) diff --git a/packages/unit/test/widget/stack_test.dart b/packages/unit/test/widget/stack_test.dart index 6bf00668b1..9d64024334 100644 --- a/packages/unit/test/widget/stack_test.dart +++ b/packages/unit/test/widget/stack_test.dart @@ -1,3 +1,4 @@ +import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; import 'package:test/test.dart'; @@ -6,13 +7,13 @@ import 'widget_tester.dart'; void main() { test('Can construct an empty Stack', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new Stack([])); + tester.pumpWidget(new Stack([])); }); }); test('Can construct an empty Centered Stack', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new Center(child: new Stack([]))); + tester.pumpWidget(new Center(child: new Stack([]))); }); }); @@ -21,7 +22,7 @@ void main() { Key key = new Key('container'); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( left: 10.0, child: new Container( @@ -33,14 +34,18 @@ void main() { ]) ); - Element container = tester.findElementByKey(key); - expect(container.renderObject.parentData.top, isNull); - expect(container.renderObject.parentData.right, isNull); - expect(container.renderObject.parentData.bottom, isNull); - expect(container.renderObject.parentData.left, equals(10.0)); + Element container; + StackParentData parentData; + + container = tester.findElementByKey(key); + parentData = container.renderObject.parentData; + expect(parentData.top, isNull); + expect(parentData.right, isNull); + expect(parentData.bottom, isNull); + expect(parentData.left, equals(10.0)); tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( right: 10.0, child: new Container( @@ -53,10 +58,11 @@ void main() { ); container = tester.findElementByKey(key); - expect(container.renderObject.parentData.top, isNull); - expect(container.renderObject.parentData.right, equals(10.0)); - expect(container.renderObject.parentData.bottom, isNull); - expect(container.renderObject.parentData.left, isNull); + parentData = container.renderObject.parentData; + expect(parentData.top, isNull); + expect(parentData.right, equals(10.0)); + expect(parentData.bottom, isNull); + expect(parentData.left, isNull); }); }); @@ -65,21 +71,24 @@ void main() { Key key = new Key('container'); Container container = new Container(key: key, width: 10.0, height: 10.0); - tester.pumpWidget(new Stack([ new Positioned(left: 10.0, child: container) ])); + tester.pumpWidget(new Stack([ new Positioned(left: 10.0, child: container) ])); Element containerElement = tester.findElementByKey(key); - expect(containerElement.renderObject.parentData.top, isNull); - expect(containerElement.renderObject.parentData.right, isNull); - expect(containerElement.renderObject.parentData.bottom, isNull); - expect(containerElement.renderObject.parentData.left, equals(10.0)); + StackParentData parentData; + parentData = containerElement.renderObject.parentData; + expect(parentData.top, isNull); + expect(parentData.right, isNull); + expect(parentData.bottom, isNull); + expect(parentData.left, equals(10.0)); - tester.pumpWidget(new Stack([ container ])); + tester.pumpWidget(new Stack([ container ])); containerElement = tester.findElementByKey(key); - expect(containerElement.renderObject.parentData.top, isNull); - expect(containerElement.renderObject.parentData.right, isNull); - expect(containerElement.renderObject.parentData.bottom, isNull); - expect(containerElement.renderObject.parentData.left, isNull); + parentData = containerElement.renderObject.parentData; + expect(parentData.top, isNull); + expect(parentData.right, isNull); + expect(parentData.bottom, isNull); + expect(parentData.left, isNull); }); }); @@ -90,7 +99,7 @@ void main() { tester.pumpWidget( new Center( - child: new Stack([ + child: new Stack([ new Container(key: child0Key, width: 20.0, height: 20.0), new Container(key: child1Key, width: 10.0, height: 10.0) ], @@ -101,22 +110,24 @@ void main() { ); Element child0 = tester.findElementByKey(child0Key); - expect(child0.renderObject.parentData.position, equals(const Point(0.0, 0.0))); + final StackParentData child0RenderObjectParentData = child0.renderObject.parentData; + expect(child0RenderObjectParentData.position, equals(const Point(0.0, 0.0))); Element child1 = tester.findElementByKey(child1Key); - expect(child1.renderObject.parentData.position, equals(const Point(5.0, 5.0))); + final StackParentData child1RenderObjectParentData = child1.renderObject.parentData; + expect(child1RenderObjectParentData.position, equals(const Point(5.0, 5.0))); }); }); test('Can construct an empty IndexedStack', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new IndexedStack([])); + tester.pumpWidget(new IndexedStack([])); }); }); test('Can construct an empty Centered IndexedStack', () { testWidgets((WidgetTester tester) { - tester.pumpWidget(new Center(child: new IndexedStack([]))); + tester.pumpWidget(new Center(child: new IndexedStack([]))); }); }); @@ -126,9 +137,9 @@ void main() { List itemsPainted; Widget buildFrame(int index) { - itemsPainted = []; - List items = new List.generate(itemCount, (i) { - return new CustomPaint(child: new Text('$i'), callback: (_0, _1) { itemsPainted.add(i); }); + itemsPainted = []; + List items = new List.generate(itemCount, (i) { + return new CustomPaint(child: new Text('$i'), callback: (_, __) { itemsPainted.add(i); }); }); return new Center(child: new IndexedStack(items, index: index)); } @@ -154,8 +165,8 @@ void main() { List itemsTapped; Widget buildFrame(int index) { - itemsTapped = []; - List items = new List.generate(itemCount, (i) { + itemsTapped = []; + List items = new List.generate(itemCount, (i) { return new GestureDetector(child: new Text('$i'), onTap: () { itemsTapped.add(i); }); }); return new Center(child: new IndexedStack(items, key: key, index: index)); diff --git a/packages/unit/test/widget/stateful_component_test.dart b/packages/unit/test/widget/stateful_component_test.dart index 7e7f620a90..c545744d64 100644 --- a/packages/unit/test/widget/stateful_component_test.dart +++ b/packages/unit/test/widget/stateful_component_test.dart @@ -11,7 +11,7 @@ void main() { void checkTree(BoxDecoration expectedDecoration) { OneChildRenderObjectElement element = - tester.findElement((element) => element is OneChildRenderObjectElement); + tester.findElement((Element element) => element is OneChildRenderObjectElement); expect(element, isNotNull); expect(element.renderObject is RenderDecoratedBox, isTrue); RenderDecoratedBox renderObject = element.renderObject; diff --git a/packages/unit/test/widget/syncing_test.dart b/packages/unit/test/widget/syncing_test.dart index bf6bf8ecb9..77afd31e4a 100644 --- a/packages/unit/test/widget/syncing_test.dart +++ b/packages/unit/test/widget/syncing_test.dart @@ -112,13 +112,13 @@ void main() { testWidgets((WidgetTester tester) { Widget a = new TestWidget(persistentState: 0x61, syncedState: 0x41, child: new Text('apple')); Widget b = new TestWidget(persistentState: 0x62, syncedState: 0x42, child: new Text('banana')); - tester.pumpWidget(new Column([])); + tester.pumpWidget(new Column([])); GlobalKey keyA = new GlobalKey(); GlobalKey keyB = new GlobalKey(); tester.pumpWidget( - new Column([ + new Column([ new Container( key: keyA, child: a @@ -143,7 +143,7 @@ void main() { expect(second.syncedState, equals(0x42)); tester.pumpWidget( - new Column([ + new Column([ new Container( key: keyA, child: a @@ -170,7 +170,7 @@ void main() { // since they are both "old" nodes, they shouldn't sync with each other even though they look alike tester.pumpWidget( - new Column([ + new Column([ new Container( key: keyA, child: b diff --git a/packages/unit/test/widget/test_widgets.dart b/packages/unit/test/widget/test_widgets.dart index f132925cac..2dff9da0b9 100644 --- a/packages/unit/test/widget/test_widgets.dart +++ b/packages/unit/test/widget/test_widgets.dart @@ -49,7 +49,7 @@ class TestBuildCounter extends StatelessComponent { void flipStatefulComponent(WidgetTester tester) { StatefulComponentElement stateElement = - tester.findElement((element) => element is StatefulComponentElement); + tester.findElement((Element element) => element is StatefulComponentElement); expect(stateElement, isNotNull); expect(stateElement.state is FlipComponentState, isTrue); FlipComponentState state = stateElement.state; diff --git a/packages/unit/test/widget/transform_test.dart b/packages/unit/test/widget/transform_test.dart index efa44cdf45..03c0eef907 100644 --- a/packages/unit/test/widget/transform_test.dart +++ b/packages/unit/test/widget/transform_test.dart @@ -8,7 +8,7 @@ void main() { testWidgets((WidgetTester tester) { bool didReceiveTap = false; tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 100.0, left: 100.0, @@ -53,7 +53,7 @@ void main() { testWidgets((WidgetTester tester) { bool didReceiveTap = false; tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 100.0, left: 100.0, @@ -98,7 +98,7 @@ void main() { testWidgets((WidgetTester tester) { bool didReceiveTap = false; tester.pumpWidget( - new Stack([ + new Stack([ new Positioned( top: 100.0, left: 100.0, diff --git a/packages/unit/test/widget/widget_tester.dart b/packages/unit/test/widget/widget_tester.dart index dbc599a5e8..e215572f17 100644 --- a/packages/unit/test/widget/widget_tester.dart +++ b/packages/unit/test/widget/widget_tester.dart @@ -24,11 +24,12 @@ class RootComponentState extends State { Widget build(BuildContext context) => child; } +typedef Point SizeToPointFunction(Size size); + class WidgetTester { WidgetTester._(FakeAsync async) : async = async, - clock = async.getClock(new DateTime.utc(2015, 1, 1)) { - } + clock = async.getClock(new DateTime.utc(2015, 1, 1)); final FakeAsync async; final Clock clock; @@ -46,7 +47,7 @@ class WidgetTester { } List _layers(Layer layer) { - List result = [layer]; + List result = [layer]; if (layer is ContainerLayer) { ContainerLayer root = layer; Layer child = root.firstChild; @@ -124,7 +125,7 @@ class WidgetTester { return _getElementPoint(element, (Size size) => size.bottomRight(Point.origin)); } - Point _getElementPoint(Element element, Function sizeToPoint) { + Point _getElementPoint(Element element, SizeToPointFunction sizeToPoint) { assert(element != null); RenderBox box = element.renderObject as RenderBox; assert(box != null); From 1f40d96fbfaea4ca90af3cd7f170293fbca1011c Mon Sep 17 00:00:00 2001 From: Hixie Date: Thu, 15 Oct 2015 11:07:46 -0700 Subject: [PATCH 5/6] Improve debugging output Teach dumpRenderTree() to draw actual trees. Make the TextStyle output terser so it doesn't overflow the output. Make debugDumpApp() say what mode we're in (checked vs release). Hide lifecycle state from release mode dumps (since it's checked-only state). --- examples/stocks/lib/main.dart | 1 + examples/stocks/lib/stock_home.dart | 2 +- .../flutter/lib/src/painting/text_style.dart | 140 +++++++++++++++--- .../flutter/lib/src/rendering/object.dart | 35 +++-- .../flutter/lib/src/rendering/proxy_box.dart | 3 +- packages/flutter/lib/src/widgets/binding.dart | 3 + .../flutter/lib/src/widgets/framework.dart | 11 +- 7 files changed, 160 insertions(+), 35 deletions(-) diff --git a/examples/stocks/lib/main.dart b/examples/stocks/lib/main.dart index 314a3b57a5..61e7d5d4d9 100644 --- a/examples/stocks/lib/main.dart +++ b/examples/stocks/lib/main.dart @@ -11,6 +11,7 @@ import 'dart:ui' as ui; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; +import 'package:flutter/rendering.dart'; import 'stock_data.dart'; diff --git a/examples/stocks/lib/stock_home.dart b/examples/stocks/lib/stock_home.dart index 0d18aec008..33d9cdd5de 100644 --- a/examples/stocks/lib/stock_home.dart +++ b/examples/stocks/lib/stock_home.dart @@ -112,7 +112,7 @@ class StockHomeState extends State { ), new DrawerItem( icon: 'device/dvr', - onPressed: () { debugDumpApp(); }, + onPressed: () { debugDumpApp(); debugDumpRenderTree(); }, child: new Text('Dump App to Console') ), new DrawerDivider(), diff --git a/packages/flutter/lib/src/painting/text_style.dart b/packages/flutter/lib/src/painting/text_style.dart index 9ca3de29a9..cf241df700 100644 --- a/packages/flutter/lib/src/painting/text_style.dart +++ b/packages/flutter/lib/src/painting/text_style.dart @@ -252,25 +252,131 @@ class TextStyle { List result = []; if (color != null) result.add('${prefix}color: $color'); - // TODO(hansmuller): escape the fontFamily string. if (fontFamily != null) - result.add('${prefix}fontFamily: "$fontFamily"'); + result.add('${prefix}family: "$fontFamily"'); if (fontSize != null) - result.add('${prefix}fontSize: $fontSize'); - if (fontWeight != null) - result.add('${prefix}fontWeight: $fontWeight'); - if (fontStyle != null) - result.add('${prefix}fontStyle: $fontStyle'); - if (textAlign != null) - result.add('${prefix}textAlign: $textAlign'); - if (textBaseline != null) - result.add('${prefix}textBaseline: $textBaseline'); - if (decoration != null) - result.add('${prefix}decoration: $decoration'); - if (decorationColor != null) - result.add('${prefix}decorationColor: $decorationColor'); - if (decorationStyle != null) - result.add('${prefix}decorationStyle: $decorationStyle'); + result.add('${prefix}size: $fontSize'); + if (fontWeight != null) { + switch (fontWeight) { + case FontWeight.w100: + result.add('${prefix}weight: 100'); + break; + case FontWeight.w200: + result.add('${prefix}weight: 200'); + break; + case FontWeight.w300: + result.add('${prefix}weight: 300'); + break; + case FontWeight.w400: + result.add('${prefix}weight: 400'); + break; + case FontWeight.w500: + result.add('${prefix}weight: 500'); + break; + case FontWeight.w600: + result.add('${prefix}weight: 600'); + break; + case FontWeight.w700: + result.add('${prefix}weight: 700'); + break; + case FontWeight.w800: + result.add('${prefix}weight: 800'); + break; + case FontWeight.w900: + result.add('${prefix}weight: 900'); + break; + } + } + if (fontStyle != null) { + switch (fontStyle) { + case FontStyle.normal: + result.add('${prefix}style: normal'); + break; + case FontStyle.italic: + result.add('${prefix}style: italic'); + break; + } + } + if (textAlign != null) { + switch (textAlign) { + case TextAlign.left: + result.add('${prefix}align: left'); + break; + case TextAlign.right: + result.add('${prefix}align: right'); + break; + case TextAlign.center: + result.add('${prefix}align: center'); + break; + } + } + if (textBaseline != null) { + switch (textBaseline) { + case TextBaseline.alphabetic: + result.add('${prefix}baseline: alphabetic'); + break; + case TextBaseline.ideographic: + result.add('${prefix}baseline: ideographic'); + break; + } + } + if (decoration != null || decorationColor != null || decorationStyle != null) { + String decorationDescription = '${prefix}decoration: '; + bool haveDecorationDescription = false; + if (decorationStyle != null) { + switch (decorationStyle) { + case TextDecorationStyle.solid: + decorationDescription += 'solid'; + break; + case TextDecorationStyle.double: + decorationDescription += 'double'; + break; + case TextDecorationStyle.dotted: + decorationDescription += 'dotted'; + break; + case TextDecorationStyle.dashed: + decorationDescription += 'dashed'; + break; + case TextDecorationStyle.wavy: + decorationDescription += 'wavy'; + break; + } + haveDecorationDescription = true; + } + if (decorationColor != null) { + if (haveDecorationDescription) + decorationDescription += ' '; + decorationDescription += '$decorationColor'; + haveDecorationDescription = true; + } + if (decoration != null) { + if (haveDecorationDescription) + decorationDescription += ' '; + bool multipleDecorations = false; + for (TextDecoration value in decoration) { + if (multipleDecorations) + decorationDescription += '+'; + switch (value) { + case TextDecoration.none: + decorationDescription += 'none'; + break; + case TextDecoration.underline: + decorationDescription += 'underline'; + break; + case TextDecoration.overline: + decorationDescription += 'overline'; + break; + case TextDecoration.lineThrough: + decorationDescription += 'line-through'; + break; + } + multipleDecorations = true; + } + haveDecorationDescription = true; + } + assert(haveDecorationDescription); + result.add(decorationDescription); + } if (result.isEmpty) return '$prefix'; return result.join('\n'); diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index 606d4fb988..be74fec813 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -1139,11 +1139,18 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { /// Returns a description of the tree rooted at this node. /// If the prefix argument is provided, then every line in the output /// will be prefixed by that string. - String toStringDeep([String prefix = '']) { + String toStringDeep([String prefixLineOne = '', String prefixOtherLines = '']) { RenderObject debugPreviousActiveLayout = _debugActiveLayout; _debugActiveLayout = null; - prefix += ' '; - String result = '$this\n${debugDescribeSettings(prefix)}${debugDescribeChildren(prefix)}'; + String result = '$prefixLineOne$this\n'; + final String childrenDescription = debugDescribeChildren(prefixOtherLines); + final String settingsPrefix = childrenDescription != '' ? '$prefixOtherLines \u2502 ' : '$prefixOtherLines '; + result += debugDescribeSettings(settingsPrefix); + if (childrenDescription != '') + result += '$prefixOtherLines \u2502\n'; + else + result += '$prefixOtherLines\n'; + result += childrenDescription; _debugActiveLayout = debugPreviousActiveLayout; return result; } @@ -1198,7 +1205,7 @@ abstract class RenderObjectWithChildMixin implem } String debugDescribeChildren(String prefix) { if (child != null) - return '${prefix}child: ${child.toStringDeep(prefix)}'; + return '${child.toStringDeep("$prefix \u2514\u2500child: ", "$prefix ")}'; return ''; } } @@ -1442,13 +1449,19 @@ abstract class ContainerRenderObjectMixin '$runtimeType($x, $y)'; } /// Applies a transformation before painting its child @@ -1016,7 +1017,7 @@ class RenderTransform extends RenderProxyBox { String debugDescribeSettings(String prefix) { List result = _transform.toString().split('\n').map((String s) => '$prefix $s\n').toList(); result.removeLast(); - return '${super.debugDescribeSettings(prefix)}${prefix}transform matrix:\n${result.join()}\n${prefix}origin: $origin\n'; + return '${super.debugDescribeSettings(prefix)}${prefix}transform matrix:\n${result.join()}\n${prefix}origin: $origin\nalignment: $alignment\n'; } } diff --git a/packages/flutter/lib/src/widgets/binding.dart b/packages/flutter/lib/src/widgets/binding.dart index c73678c52e..8ceeb73244 100644 --- a/packages/flutter/lib/src/widgets/binding.dart +++ b/packages/flutter/lib/src/widgets/binding.dart @@ -92,6 +92,9 @@ void runApp(Widget app) { void debugDumpApp() { assert(WidgetFlutterBinding.instance != null); assert(WidgetFlutterBinding.instance.renderViewElement != null); + String mode = 'RELEASE MODE'; + assert(() { mode = 'CHECKED MODE'; return true; }); + print('${WidgetFlutterBinding.instance.runtimeType} - $mode'); WidgetFlutterBinding.instance.renderViewElement.toStringDeep().split('\n').forEach(print); } diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index 5ff36a3ab8..1cfd022b49 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -394,8 +394,11 @@ abstract class State { void debugFillDescription(List description) { description.add('$hashCode'); - if (_debugLifecycleState != _StateLifecycle.ready) - description.add('$_debugLifecycleState'); + assert(() { + if (_debugLifecycleState != _StateLifecycle.ready) + description.add('$_debugLifecycleState'); + return true; + }); if (_config == null) description.add('no config'); if (_element == null) @@ -829,9 +832,7 @@ abstract class Element implements BuildContext { String toStringDeep([String prefixLineOne = '', String prefixOtherLines = '']) { String result = '$prefixLineOne$this\n'; List children = []; - visitChildren((Element child) { - children.add(child); - }); + visitChildren(children.add); if (children.length > 0) { Element last = children.removeLast(); for (Element child in children) From f164289203f3641f76b4911aae2e3ee9d6222ecf Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Thu, 15 Oct 2015 13:46:24 -0700 Subject: [PATCH 6/6] Fixes SpriteBox to work better with native points --- packages/flutter_sprites/lib/src/sprite_box.dart | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/flutter_sprites/lib/src/sprite_box.dart b/packages/flutter_sprites/lib/src/sprite_box.dart index f2bc2f4db5..356b48b1d9 100644 --- a/packages/flutter_sprites/lib/src/sprite_box.dart +++ b/packages/flutter_sprites/lib/src/sprite_box.dart @@ -32,8 +32,10 @@ class SpriteBox extends RenderBox { if (value == _rootNode) return; // Ensure that the root node has a size - assert(value.size.width > 0); - assert(value.size.height > 0); + assert(_transformMode == SpriteBoxTransformMode.nativePoints + || value.size.width > 0); + assert(_transformMode == SpriteBoxTransformMode.nativePoints + || value.size.height > 0); // Remove sprite box references if (_rootNode != null) _removeSpriteBoxReference(_rootNode); @@ -101,11 +103,11 @@ class SpriteBox extends RenderBox { assert(rootNode != null); assert(rootNode._spriteBox == null); - // Setup root node - this.rootNode = rootNode; - // Setup transform mode this.transformMode = mode; + + // Setup root node + this.rootNode = rootNode; } void _removeSpriteBoxReference(Node node) { @@ -310,6 +312,8 @@ class SpriteBox extends RenderBox { rootNode.size = new Size(systemWidth, systemHeight); break; case SpriteBoxTransformMode.nativePoints: + systemWidth = size.width; + systemHeight = size.height; break; default: assert(false);