From d46e208b98d4af93d7029c3e806d443dd51fd116 Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Tue, 20 Jun 2017 18:13:28 -0700 Subject: [PATCH] Change all ocurrences of '$runtimeType#$hashCode' to use the idAndType method. (#10871) * Change all instances of '$runtimeType#$hashCode' to use the describeIdentity method. The describeIdentity method generates a shorter description with a consistent length consisting of the runtime type and the a 5 hex character long truncated version of the hash code. --- packages/flutter/lib/src/animation/animation.dart | 2 +- .../lib/src/foundation/change_notifier.dart | 3 ++- .../lib/src/foundation/tree_diagnostics_mixin.dart | 11 ++++++++++- packages/flutter/lib/src/gestures/recognizer.dart | 4 ++-- packages/flutter/lib/src/material/app_bar.dart | 2 +- packages/flutter/lib/src/material/material.dart | 2 +- packages/flutter/lib/src/rendering/box.dart | 2 +- packages/flutter/lib/src/rendering/object.dart | 4 ++-- packages/flutter/lib/src/rendering/proxy_box.dart | 2 +- packages/flutter/lib/src/rendering/semantics.dart | 2 +- .../flutter/lib/src/rendering/viewport_offset.dart | 2 +- packages/flutter/lib/src/scheduler/ticker.dart | 2 +- .../flutter/lib/src/services/asset_bundle.dart | 4 ++-- .../flutter/lib/src/services/image_provider.dart | 2 +- .../flutter/lib/src/widgets/focus_manager.dart | 4 ++-- packages/flutter/lib/src/widgets/framework.dart | 14 +++++++------- packages/flutter/lib/src/widgets/overlay.dart | 2 +- .../flutter/lib/src/widgets/scroll_activity.dart | 12 +++++------- .../flutter/lib/src/widgets/scroll_controller.dart | 2 +- packages/flutter/lib/src/widgets/sliver.dart | 2 +- .../test/foundation/service_extensions_test.dart | 6 +++--- .../foundation/tree_diagnostics_mixin_test.dart | 2 +- .../flutter/test/painting/decoration_test.dart | 2 +- packages/flutter/test/widgets/framework_test.dart | 2 +- .../test/widgets/global_keys_duplicated_test.dart | 9 +++++---- .../test/widgets/image_resolution_test.dart | 2 +- packages/flutter/test/widgets/image_test.dart | 8 ++++---- packages/flutter/test/widgets/table_test.dart | 2 +- 28 files changed, 61 insertions(+), 52 deletions(-) diff --git a/packages/flutter/lib/src/animation/animation.dart b/packages/flutter/lib/src/animation/animation.dart index 1140fe7dbf..c62749f37a 100644 --- a/packages/flutter/lib/src/animation/animation.dart +++ b/packages/flutter/lib/src/animation/animation.dart @@ -81,7 +81,7 @@ abstract class Animation extends Listenable { @override String toString() { - return '$runtimeType#$hashCode(${toStringDetails()})'; + return '${describeIdentity(this)}(${toStringDetails()})'; } /// Provides a string describing the status of this object, but not including diff --git a/packages/flutter/lib/src/foundation/change_notifier.dart b/packages/flutter/lib/src/foundation/change_notifier.dart index 06dd9ea97d..f871fb1987 100644 --- a/packages/flutter/lib/src/foundation/change_notifier.dart +++ b/packages/flutter/lib/src/foundation/change_notifier.dart @@ -7,6 +7,7 @@ import 'package:meta/meta.dart'; import 'assertions.dart'; import 'basic_types.dart'; import 'observer_list.dart'; +import 'print.dart'; /// An object that maintains a list of listeners. abstract class Listenable { @@ -185,5 +186,5 @@ class ValueNotifier extends ChangeNotifier { } @override - String toString() => '$runtimeType#$hashCode($value)'; + String toString() => '${idAndType(this)}($value)'; } diff --git a/packages/flutter/lib/src/foundation/tree_diagnostics_mixin.dart b/packages/flutter/lib/src/foundation/tree_diagnostics_mixin.dart index cb69a74f64..c279ac37fc 100644 --- a/packages/flutter/lib/src/foundation/tree_diagnostics_mixin.dart +++ b/packages/flutter/lib/src/foundation/tree_diagnostics_mixin.dart @@ -6,6 +6,15 @@ import 'package:meta/meta.dart'; import 'print.dart'; +/// Returns a 5 character long hexadecimal hash code for [object]. +String shortHash(Object object) { + return object.hashCode.toUnsigned(20).toRadixString(16).padLeft(5, '0'); +} + +/// Returns a summary of [object]'s runtime type and hash code. +String describeIdentity(Object object) => + '${object.runtimeType}#${shortHash(object)}'; + /// A mixin that helps dump string representations of trees. abstract class TreeDiagnosticsMixin { // This class is intended to be used as a mixin, and should not be @@ -20,7 +29,7 @@ abstract class TreeDiagnosticsMixin { /// * [toStringShallow], for a detailed description of the object. /// * [toStringDeep], for a description of the subtree rooted at this object. @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); /// Returns a one-line detailed description of the object. /// diff --git a/packages/flutter/lib/src/gestures/recognizer.dart b/packages/flutter/lib/src/gestures/recognizer.dart index c7073cabc9..6b545b7cdf 100644 --- a/packages/flutter/lib/src/gestures/recognizer.dart +++ b/packages/flutter/lib/src/gestures/recognizer.dart @@ -86,7 +86,7 @@ abstract class GestureRecognizer extends GestureArenaMember { } @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); } /// Base class for gesture recognizers that can only recognize one @@ -321,5 +321,5 @@ abstract class PrimaryPointerGestureRecognizer extends OneSequenceGestureRecogni } @override - String toString() => '$runtimeType#$hashCode($state)'; + String toString() => '${describeIdentity(this)}($state)'; } diff --git a/packages/flutter/lib/src/material/app_bar.dart b/packages/flutter/lib/src/material/app_bar.dart index aecefbda92..eece44cc5f 100644 --- a/packages/flutter/lib/src/material/app_bar.dart +++ b/packages/flutter/lib/src/material/app_bar.dart @@ -604,7 +604,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate { @override String toString() { - return '$runtimeType#$hashCode(topPadding: ${topPadding.toStringAsFixed(1)}, bottomHeight: ${_bottomHeight.toStringAsFixed(1)}, ...)'; + return '${describeIdentity(this)}(topPadding: ${topPadding.toStringAsFixed(1)}, bottomHeight: ${_bottomHeight.toStringAsFixed(1)}, ...)'; } } diff --git a/packages/flutter/lib/src/material/material.dart b/packages/flutter/lib/src/material/material.dart index fc92a7e142..f041b9f1a0 100644 --- a/packages/flutter/lib/src/material/material.dart +++ b/packages/flutter/lib/src/material/material.dart @@ -425,5 +425,5 @@ abstract class InkFeature { void paintFeature(Canvas canvas, Matrix4 transform); @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); } diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart index 270820fd50..fcdb7acf24 100644 --- a/packages/flutter/lib/src/rendering/box.dart +++ b/packages/flutter/lib/src/rendering/box.dart @@ -572,7 +572,7 @@ class BoxHitTestEntry extends HitTestEntry { final Offset localPosition; @override - String toString() => '${target.runtimeType}#${target.hashCode}@$localPosition'; + String toString() => '${describeIdentity(target)}@$localPosition'; } /// Parent data used by [RenderBox] and its subclasses. diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index 6e248e0600..beb3adbcc7 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -636,7 +636,7 @@ abstract class _SemanticsFragment { Iterable compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }); @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); } /// A SemanticsFragment that doesn't produce any [SemanticsNode]s when compiled. @@ -2686,7 +2686,7 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget { /// Returns a human understandable name. @override String toString() { - String header = '$runtimeType#$hashCode'; + String header = describeIdentity(this); if (_relayoutBoundary != null && _relayoutBoundary != this) { int count = 1; RenderObject target = parent; diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index 4453c870bb..38b5bb5011 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -2034,7 +2034,7 @@ abstract class CustomPainter extends Listenable { bool hitTest(Offset position) => null; @override - String toString() => '$runtimeType#$hashCode(${ _repaint?.toString() ?? "" })'; + String toString() => '${describeIdentity(this)}(${ _repaint?.toString() ?? "" })'; } /// Provides a canvas on which to draw during the paint phase. diff --git a/packages/flutter/lib/src/rendering/semantics.dart b/packages/flutter/lib/src/rendering/semantics.dart index cddd67779e..f2bdd7a9e6 100644 --- a/packages/flutter/lib/src/rendering/semantics.dart +++ b/packages/flutter/lib/src/rendering/semantics.dart @@ -781,5 +781,5 @@ class SemanticsOwner extends ChangeNotifier { } @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); } diff --git a/packages/flutter/lib/src/rendering/viewport_offset.dart b/packages/flutter/lib/src/rendering/viewport_offset.dart index 2062af0528..6b1721e256 100644 --- a/packages/flutter/lib/src/rendering/viewport_offset.dart +++ b/packages/flutter/lib/src/rendering/viewport_offset.dart @@ -170,7 +170,7 @@ abstract class ViewportOffset extends ChangeNotifier { String toString() { final List description = []; debugFillDescription(description); - return '$runtimeType#$hashCode(${description.join(", ")})'; + return '${describeIdentity(this)}(${description.join(", ")})'; } /// Add additional information to the given description for use by [toString]. diff --git a/packages/flutter/lib/src/scheduler/ticker.dart b/packages/flutter/lib/src/scheduler/ticker.dart index ff45d5203d..fce31cf165 100644 --- a/packages/flutter/lib/src/scheduler/ticker.dart +++ b/packages/flutter/lib/src/scheduler/ticker.dart @@ -419,7 +419,7 @@ class TickerFuture implements Future { } @override - String toString() => '$runtimeType#$hashCode(${ _completed == null ? "active" : _completed ? "complete" : "canceled" })'; + String toString() => '${describeIdentity(this)}(${ _completed == null ? "active" : _completed ? "complete" : "canceled" })'; } /// Exception thrown by [Ticker] objects on the [TickerFuture.orCancel] future diff --git a/packages/flutter/lib/src/services/asset_bundle.dart b/packages/flutter/lib/src/services/asset_bundle.dart index de3074c0bb..3daff2b94c 100644 --- a/packages/flutter/lib/src/services/asset_bundle.dart +++ b/packages/flutter/lib/src/services/asset_bundle.dart @@ -79,7 +79,7 @@ abstract class AssetBundle { void evict(String key) { } @override - String toString() => '$runtimeType#$hashCode()'; + String toString() => '${describeIdentity(this)}()'; } /// An [AssetBundle] that loads resources over the network. @@ -133,7 +133,7 @@ class NetworkAssetBundle extends AssetBundle { // should implement evict(). @override - String toString() => '$runtimeType#$hashCode($_baseUrl)'; + String toString() => '${describeIdentity(this)}($_baseUrl)'; } /// An [AssetBundle] that permanently caches string and structured resources diff --git a/packages/flutter/lib/src/services/image_provider.dart b/packages/flutter/lib/src/services/image_provider.dart index 6d4644fd93..1d470127b6 100644 --- a/packages/flutter/lib/src/services/image_provider.dart +++ b/packages/flutter/lib/src/services/image_provider.dart @@ -578,7 +578,7 @@ class MemoryImage extends ImageProvider { int get hashCode => hashValues(bytes.hashCode, scale); @override - String toString() => '$runtimeType(${bytes.runtimeType}#${bytes.hashCode}, scale: $scale)'; + String toString() => '$runtimeType(${describeIdentity(bytes)}, scale: $scale)'; } /// Fetches an image from an [AssetBundle], associating it with the given scale. /// diff --git a/packages/flutter/lib/src/widgets/focus_manager.dart b/packages/flutter/lib/src/widgets/focus_manager.dart index f1529079e3..a129f622c9 100644 --- a/packages/flutter/lib/src/widgets/focus_manager.dart +++ b/packages/flutter/lib/src/widgets/focus_manager.dart @@ -94,7 +94,7 @@ class FocusNode extends ChangeNotifier { } @override - String toString() => '$runtimeType#$hashCode${hasFocus ? '(FOCUSED)' : ''}'; + String toString() => '${describeIdentity(this)}${hasFocus ? '(FOCUSED)' : ''}'; } /// An interior node in the focus tree. @@ -446,7 +446,7 @@ class FocusManager { String toString() { final String status = _haveScheduledUpdate ? ' UPDATE SCHEDULED' : ''; final String indent = ' '; - return '$runtimeType#$hashCode$status\n' + return '${describeIdentity(this)}$status\n' '${indent}currentFocus: $_currentFocus\n' '${rootScope.toStringDeep(indent, indent)}'; } diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index 2a64d1adda..38ffdd6c90 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -112,7 +112,7 @@ class UniqueKey extends LocalKey { UniqueKey(); @override - String toString() => '[#$hashCode]'; + String toString() => '[#${shortHash(this)}]'; } /// A key that takes its identity from the object used as its value. @@ -142,8 +142,8 @@ class ObjectKey extends LocalKey { @override String toString() { if (runtimeType == ObjectKey) - return '[${value.runtimeType}#${value.hashCode}]'; - return '[$runtimeType ${value.runtimeType}#${value.hashCode}]'; + return '[${describeIdentity(value)}]'; + return '[$runtimeType ${describeIdentity(value)}]'; } } @@ -333,8 +333,8 @@ class LabeledGlobalKey> extends GlobalKey { String toString() { final String label = _debugLabel != null ? ' $_debugLabel' : ''; if (runtimeType == LabeledGlobalKey) - return '[GlobalKey#$hashCode$label]'; - return '[$runtimeType#$hashCode$label]'; + return '[GlobalKey#${shortHash(this)}$label]'; + return '[${describeIdentity(this)}$label]'; } } @@ -364,7 +364,7 @@ class GlobalObjectKey> extends GlobalKey { int get hashCode => identityHashCode(value); @override - String toString() => '[$runtimeType ${value.runtimeType}#${value.hashCode}]'; + String toString() => '[$runtimeType ${describeIdentity(value)}]'; } /// This class is a work-around for the "is" operator not accepting a variable value as its right operand @@ -1247,7 +1247,7 @@ abstract class State { String toString() { final List data = []; debugFillDescription(data); - return '$runtimeType#$hashCode(${data.join("; ")})'; + return '${describeIdentity(this)}(${data.join("; ")})'; } /// Add additional information to the given description for use by [toString]. diff --git a/packages/flutter/lib/src/widgets/overlay.dart b/packages/flutter/lib/src/widgets/overlay.dart index e8465c5024..54e5978afa 100644 --- a/packages/flutter/lib/src/widgets/overlay.dart +++ b/packages/flutter/lib/src/widgets/overlay.dart @@ -150,7 +150,7 @@ class OverlayEntry { } @override - String toString() => '$runtimeType#$hashCode(opaque: $opaque; maintainState: $maintainState)'; + String toString() => '${describeIdentity(this)}(opaque: $opaque; maintainState: $maintainState)'; } class _OverlayEntry extends StatefulWidget { diff --git a/packages/flutter/lib/src/widgets/scroll_activity.dart b/packages/flutter/lib/src/widgets/scroll_activity.dart index 596e6ed790..4cad08f310 100644 --- a/packages/flutter/lib/src/widgets/scroll_activity.dart +++ b/packages/flutter/lib/src/widgets/scroll_activity.dart @@ -125,7 +125,7 @@ abstract class ScrollActivity { } @override - String toString() => '$runtimeType#$hashCode'; + String toString() => describeIdentity(this); } /// A scroll activity that does nothing. @@ -282,9 +282,7 @@ class ScrollDragController implements Drag { dynamic _lastDetails; @override - String toString() { - return '$runtimeType#$hashCode'; - } + String toString() => describeIdentity(this); } /// The activity a scroll view performs when a the user drags their finger @@ -350,7 +348,7 @@ class DragScrollActivity extends ScrollActivity { @override String toString() { - return '$runtimeType#$hashCode($_controller)'; + return '${describeIdentity(this)}($_controller)'; } } @@ -441,7 +439,7 @@ class BallisticScrollActivity extends ScrollActivity { @override String toString() { - return '$runtimeType#$hashCode($_controller)'; + return '${describeIdentity(this)}($_controller)'; } } @@ -526,6 +524,6 @@ class DrivenScrollActivity extends ScrollActivity { @override String toString() { - return '$runtimeType#$hashCode($_controller)'; + return '${describeIdentity(this)}($_controller)'; } } diff --git a/packages/flutter/lib/src/widgets/scroll_controller.dart b/packages/flutter/lib/src/widgets/scroll_controller.dart index aeb1dea48a..b96c5de4e5 100644 --- a/packages/flutter/lib/src/widgets/scroll_controller.dart +++ b/packages/flutter/lib/src/widgets/scroll_controller.dart @@ -238,7 +238,7 @@ class ScrollController extends ChangeNotifier { String toString() { final List description = []; debugFillDescription(description); - return '$runtimeType#$hashCode(${description.join(", ")})'; + return '${describeIdentity(this)}(${description.join(", ")})'; } /// Add additional information to the given description for use by [toString]. diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart index b5db8f704c..f9387d518b 100644 --- a/packages/flutter/lib/src/widgets/sliver.dart +++ b/packages/flutter/lib/src/widgets/sliver.dart @@ -94,7 +94,7 @@ abstract class SliverChildDelegate { String toString() { final List description = []; debugFillDescription(description); - return '$runtimeType#$hashCode(${description.join(", ")})'; + return '${describeIdentity(this)}(${description.join(", ")})'; } /// Add additional information to the given description for use by [toString]. diff --git a/packages/flutter/test/foundation/service_extensions_test.dart b/packages/flutter/test/foundation/service_extensions_test.dart index f0bfc9b465..e5ea2fdb05 100644 --- a/packages/flutter/test/foundation/service_extensions_test.dart +++ b/packages/flutter/test/foundation/service_extensions_test.dart @@ -143,7 +143,7 @@ void main() { expect(console, [ matches( r'^' - r'RenderView#[0-9]+\n' + r'RenderView#[0-9a-f]{5}\n' r' debug mode enabled - [a-zA-Z]+\n' r' window size: Size\(2400\.0, 1800\.0\) \(in physical pixels\)\n' r' device pixel ratio: 3\.0 \(physical pixels per logical pixel\)\n' @@ -163,8 +163,8 @@ void main() { expect(console, [ matches( r'^' - r'TransformLayer#[0-9]+\n' - r' owner: RenderView#[0-9]+\n' + r'TransformLayer#[0-9a-f]{5}\n' + r' owner: RenderView#[0-9a-f]{5}\n' r' creator: RenderView\n' r' offset: Offset\(0\.0, 0\.0\)\n' r' transform:\n' diff --git a/packages/flutter/test/foundation/tree_diagnostics_mixin_test.dart b/packages/flutter/test/foundation/tree_diagnostics_mixin_test.dart index 1d4593c485..7f5a5758bf 100644 --- a/packages/flutter/test/foundation/tree_diagnostics_mixin_test.dart +++ b/packages/flutter/test/foundation/tree_diagnostics_mixin_test.dart @@ -41,7 +41,7 @@ void main() { ); final String dump = - tree.toStringDeep().replaceAll(new RegExp(r'#\d+'), '#000'); + tree.toStringDeep().replaceAll(new RegExp(r'#[0-9a-z]{5}'), '#000'); expect(dump, equals('''TestTree#000 ├─child node A: TestTree#000 │ diff --git a/packages/flutter/test/painting/decoration_test.dart b/packages/flutter/test/painting/decoration_test.dart index d1dc57381f..2e587a4506 100644 --- a/packages/flutter/test/painting/decoration_test.dart +++ b/packages/flutter/test/painting/decoration_test.dart @@ -75,7 +75,7 @@ class DelayedImageProvider extends ImageProvider { } @override - String toString() => '$runtimeType#$hashCode()'; + String toString() => '${describeIdentity(this)}}()'; } class TestImage extends ui.Image { diff --git a/packages/flutter/test/widgets/framework_test.dart b/packages/flutter/test/widgets/framework_test.dart index d8c3f6b682..e4e2ab71f3 100644 --- a/packages/flutter/test/widgets/framework_test.dart +++ b/packages/flutter/test/widgets/framework_test.dart @@ -483,7 +483,7 @@ void main() { final MultiChildRenderObjectElement element = key0.currentContext; final String dump = - element.toStringDeep().replaceAll(new RegExp(r'#\d+'), '#000'); + element.toStringDeep().replaceAll(new RegExp(r'#[0-9a-f]{5}'), '#000'); expect(dump, equals('''Column([GlobalKey#000]; renderObject: RenderFlex#000) ├Container() │└LimitedBox(maxWidth: 0.0; maxHeight: 0.0; renderObject: RenderLimitedBox#000 relayoutBoundary=up1) diff --git a/packages/flutter/test/widgets/global_keys_duplicated_test.dart b/packages/flutter/test/widgets/global_keys_duplicated_test.dart index 7d774a0ee1..1cea63b9a0 100644 --- a/packages/flutter/test/widgets/global_keys_duplicated_test.dart +++ b/packages/flutter/test/widgets/global_keys_duplicated_test.dart @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/widgets.dart'; @@ -19,7 +20,7 @@ void main() { expect(error, isFlutterError); expect(error.toString(), startsWith('Duplicate keys found.\n')); expect(error.toString(), contains('Row')); - expect(error.toString(), contains('[GlobalObjectKey int#${0.hashCode}]')); + expect(error.toString(), contains('[GlobalObjectKey ${describeIdentity(0)}]')); }); testWidgets('GlobalKey children of two nodes', (WidgetTester tester) async { @@ -32,7 +33,7 @@ void main() { expect(error.toString(), startsWith('Multiple widgets used the same GlobalKey.\n')); expect(error.toString(), contains('different widgets that both had the following description')); expect(error.toString(), contains('Container')); - expect(error.toString(), contains('[GlobalObjectKey int#${0.hashCode}]')); + expect(error.toString(), contains('[GlobalObjectKey ${describeIdentity(0)}]')); expect(error.toString(), endsWith('\nA GlobalKey can only be specified on one widget at a time in the widget tree.')); }); @@ -47,7 +48,7 @@ void main() { expect(error.toString(), isNot(contains('different widgets that both had the following description'))); expect(error.toString(), contains('Container()')); expect(error.toString(), contains('Container([<\'x\'>])')); - expect(error.toString(), contains('[GlobalObjectKey int#${0.hashCode}]')); + expect(error.toString(), contains('[GlobalObjectKey ${describeIdentity(0)}]')); expect(error.toString(), endsWith('\nA GlobalKey can only be specified on one widget at a time in the widget tree.')); }); @@ -73,7 +74,7 @@ void main() { // The following line is verifying the grammar is correct in this common case. // We should probably also verify the three other combinations that can be generated... expect(error.toString(), contains('This was determined by noticing that after the widget with the above global key was moved out of its previous parent, that previous parent never updated during this frame, meaning that it either did not update at all or updated before the widget was moved, in either case implying that it still thinks that it should have a child with that global key.')); - expect(error.toString(), contains('[GlobalObjectKey int#0]')); + expect(error.toString(), contains('[GlobalObjectKey ${describeIdentity(0)}]')); expect(error.toString(), contains('Container()')); expect(error.toString(), endsWith('\nA GlobalKey can only be specified on one widget at a time in the widget tree.')); expect(error, isFlutterError); diff --git a/packages/flutter/test/widgets/image_resolution_test.dart b/packages/flutter/test/widgets/image_resolution_test.dart index 03ee3f8b20..1048f85c09 100644 --- a/packages/flutter/test/widgets/image_resolution_test.dart +++ b/packages/flutter/test/widgets/image_resolution_test.dart @@ -77,7 +77,7 @@ class TestAssetBundle extends CachingAssetBundle { } @override - String toString() => '$runtimeType#$hashCode()'; + String toString() => '${describeIdentity(this)}()'; } class TestAssetImage extends AssetImage { diff --git a/packages/flutter/test/widgets/image_test.dart b/packages/flutter/test/widgets/image_test.dart index d513eacba1..ddc193bdef 100644 --- a/packages/flutter/test/widgets/image_test.dart +++ b/packages/flutter/test/widgets/image_test.dart @@ -294,12 +294,12 @@ void main() { final TestImageProvider imageProvider = new TestImageProvider(); await tester.pumpWidget(new Image(image: imageProvider)); final State image = tester.state/*State*/(find.byType(Image)); - expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9]+\(stream: ImageStream\(OneFrameImageStreamCompleter; unresolved; 1 listener\); pixels: null\)'))); + expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9a-f]{5}\(stream: ImageStream\(OneFrameImageStreamCompleter; unresolved; 1 listener\); pixels: null\)'))); imageProvider.complete(); await tester.pump(); - expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9]+\(stream: ImageStream\(OneFrameImageStreamCompleter; \[100×100\] @ 1\.0x; 1 listener\); pixels: \[100×100\] @ 1\.0x\)'))); + expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9a-f]{5}\(stream: ImageStream\(OneFrameImageStreamCompleter; \[100×100\] @ 1\.0x; 1 listener\); pixels: \[100×100\] @ 1\.0x\)'))); await tester.pumpWidget(new Container()); - expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9]+\(_StateLifecycle.defunct; not mounted; stream: ImageStream\(OneFrameImageStreamCompleter; \[100×100\] @ 1\.0x; 0 listeners\); pixels: \[100×100\] @ 1\.0x\)'))); + expect(image.toString(), matches(new RegExp(r'_ImageState#[0-9a-f]{5}\(_StateLifecycle.defunct; not mounted; stream: ImageStream\(OneFrameImageStreamCompleter; \[100×100\] @ 1\.0x; 0 listeners\); pixels: \[100×100\] @ 1\.0x\)'))); }); testWidgets('Image.memory control test', (WidgetTester tester) async { @@ -343,7 +343,7 @@ class TestImageProvider extends ImageProvider { } @override - String toString() => '$runtimeType#$hashCode()'; + String toString() => '${describeIdentity(this)}()'; } class TestImage extends ui.Image { diff --git a/packages/flutter/test/widgets/table_test.dart b/packages/flutter/test/widgets/table_test.dart index defb96a62e..daaf0c8b28 100644 --- a/packages/flutter/test/widgets/table_test.dart +++ b/packages/flutter/test/widgets/table_test.dart @@ -524,7 +524,7 @@ void main() { final RenderObjectElement element = key0.currentContext; final String dump = - element.toStringDeep().replaceAll(new RegExp(r'#\d+'), '#000'); + element.toStringDeep().replaceAll(new RegExp(r'#[0-9a-f]{5}'), '#000'); expect(dump, equals('''Table([GlobalKey#000]; renderObject: RenderTable#000) ├Text("A") │└RichText(renderObject: RenderParagraph#000 relayoutBoundary=up1)