@@ -974,6 +974,147 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
974
974
expect (columnA, equals (columnB));
975
975
}, skip: ! WidgetInspectorService .instance.isWidgetCreationTracked ()); // [intended] Test requires --track-widget-creation flag.
976
976
977
+ testWidgets ('WidgetInspectorService setSelection notifiers for an Element' ,
978
+ (WidgetTester tester) async {
979
+ await tester.pumpWidget (
980
+ Directionality (
981
+ textDirection: TextDirection .ltr,
982
+ child: Stack (
983
+ children: const < Widget > [
984
+ Text ('a' ),
985
+ Text ('b' , textDirection: TextDirection .ltr),
986
+ Text ('c' , textDirection: TextDirection .ltr),
987
+ ],
988
+ ),
989
+ ),
990
+ );
991
+ final Element elementA = find.text ('a' ).evaluate ().first;
992
+
993
+ service.disposeAllGroups ();
994
+
995
+ setupDefaultPubRootDirectory (service);
996
+
997
+ // Select the widget
998
+ service.setSelection (elementA, 'my-group' );
999
+
1000
+ // ensure that developer.inspect was called on the widget
1001
+ final List <Object ?> objectsInspected = service.inspectedObjects ();
1002
+ expect (objectsInspected, equals (< Element > [elementA]));
1003
+
1004
+ // ensure that a navigate event was sent for the element
1005
+ final List <Map <Object , Object ?>> navigateEventsPosted
1006
+ = service.dispatchedEvents ('navigate' , stream: 'ToolEvent' ,);
1007
+ expect (navigateEventsPosted.length, equals (1 ));
1008
+ final Map <Object ,Object ?> event = navigateEventsPosted[0 ];
1009
+ final String file = event['fileUri' ]! as String ;
1010
+ final int line = event['line' ]! as int ;
1011
+ final int column = event['column' ]! as int ;
1012
+ expect (file, endsWith ('widget_inspector_test.dart' ));
1013
+ // We don't hardcode the actual lines the widgets are created on as that
1014
+ // would make this test fragile.
1015
+ expect (line, isNotNull);
1016
+ // Column numbers are more stable than line numbers.
1017
+ expect (column, equals (15 ));
1018
+ },
1019
+ skip: ! WidgetInspectorService .instance.isWidgetCreationTracked (), // [intended] Test requires --track-widget-creation flag.
1020
+ );
1021
+
1022
+ testWidgets (
1023
+ 'WidgetInspectorService setSelection notifiers for a RenderObject' ,
1024
+ (WidgetTester tester) async {
1025
+ await tester.pumpWidget (
1026
+ Directionality (
1027
+ textDirection: TextDirection .ltr,
1028
+ child: Stack (
1029
+ children: const < Widget > [
1030
+ Text ('a' ),
1031
+ Text ('b' , textDirection: TextDirection .ltr),
1032
+ Text ('c' , textDirection: TextDirection .ltr),
1033
+ ],
1034
+ ),
1035
+ ),
1036
+ );
1037
+ final Element elementA = find.text ('a' ).evaluate ().first;
1038
+
1039
+ service.disposeAllGroups ();
1040
+
1041
+ setupDefaultPubRootDirectory (service);
1042
+
1043
+ // Select the render object for the widget.
1044
+ service.setSelection (elementA.renderObject, 'my-group' );
1045
+
1046
+ // ensure that developer.inspect was called on the widget
1047
+ final List <Object ?> objectsInspected = service.inspectedObjects ();
1048
+ expect (objectsInspected, equals (< RenderObject ? > [elementA.renderObject]));
1049
+
1050
+ // ensure that a navigate event was sent for the renderObject
1051
+ final List <Map <Object , Object ?>> navigateEventsPosted
1052
+ = service.dispatchedEvents ('navigate' , stream: 'ToolEvent' ,);
1053
+ expect (navigateEventsPosted.length, equals (1 ));
1054
+ final Map <Object ,Object ?> event = navigateEventsPosted[0 ];
1055
+ final String file = event['fileUri' ]! as String ;
1056
+ final int line = event['line' ]! as int ;
1057
+ final int column = event['column' ]! as int ;
1058
+ expect (file, endsWith ('widget_inspector_test.dart' ));
1059
+ // We don't hardcode the actual lines the widgets are created on as that
1060
+ // would make this test fragile.
1061
+ expect (line, isNotNull);
1062
+ // Column numbers are more stable than line numbers.
1063
+ expect (column, equals (17 ));
1064
+ },
1065
+ skip: ! WidgetInspectorService .instance.isWidgetCreationTracked (), // [intended] Test requires --track-widget-creation flag.
1066
+ );
1067
+
1068
+ testWidgets (
1069
+ 'WidgetInspector selectButton inspection for tap' ,
1070
+ (WidgetTester tester) async {
1071
+ final GlobalKey selectButtonKey = GlobalKey ();
1072
+ final GlobalKey inspectorKey = GlobalKey ();
1073
+ setupDefaultPubRootDirectory (service);
1074
+
1075
+ Widget selectButtonBuilder (BuildContext context, VoidCallback onPressed) {
1076
+ return Material (child: ElevatedButton (onPressed: onPressed, key: selectButtonKey, child: null ));
1077
+ }
1078
+
1079
+ await tester.pumpWidget (
1080
+ Directionality (
1081
+ textDirection: TextDirection .ltr,
1082
+ child: WidgetInspector (
1083
+ key: inspectorKey,
1084
+ selectButtonBuilder: selectButtonBuilder,
1085
+ child: const Text ('Child 1' ),
1086
+ ),
1087
+ ),
1088
+ );
1089
+ final Finder child = find.text ('Child 1' );
1090
+ final Element childElement = child.evaluate ().first;
1091
+
1092
+ await tester.tap (child, warnIfMissed: false );
1093
+
1094
+ await tester.pump ();
1095
+
1096
+ // ensure that developer.inspect was called on the widget
1097
+ final List <Object ?> objectsInspected = service.inspectedObjects ();
1098
+ expect (objectsInspected, equals (< RenderObject ? > [childElement.renderObject]));
1099
+
1100
+ // ensure that a navigate event was sent for the renderObject
1101
+ final List <Map <Object , Object ?>> navigateEventsPosted
1102
+ = service.dispatchedEvents ('navigate' , stream: 'ToolEvent' ,);
1103
+ expect (navigateEventsPosted.length, equals (1 ));
1104
+ final Map <Object ,Object ?> event = navigateEventsPosted[0 ];
1105
+ final String file = event['fileUri' ]! as String ;
1106
+ final int line = event['line' ]! as int ;
1107
+ final int column = event['column' ]! as int ;
1108
+ expect (file, endsWith ('widget_inspector_test.dart' ));
1109
+ // We don't hardcode the actual lines the widgets are created on as that
1110
+ // would make this test fragile.
1111
+ expect (line, isNotNull);
1112
+ // Column numbers are more stable than line numbers.
1113
+ expect (column, equals (28 ));
1114
+ },
1115
+ skip: ! WidgetInspectorService .instance.isWidgetCreationTracked () // [intended] Test requires --track-widget-creation flag.
1116
+ );
1117
+
977
1118
testWidgets ('test transformDebugCreator will re-order if after stack trace' , (WidgetTester tester) async {
978
1119
final bool widgetTracked = WidgetInspectorService .instance.isWidgetCreationTracked ();
979
1120
await tester.pumpWidget (
@@ -3472,7 +3613,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
3472
3613
);
3473
3614
3474
3615
final List <Map <Object , Object ?>> rebuildEvents =
3475
- service.getEventsDispatched ('Flutter.RebuiltWidgets' );
3616
+ service.dispatchedEvents ('Flutter.RebuiltWidgets' );
3476
3617
expect (rebuildEvents, isEmpty);
3477
3618
3478
3619
expect (service.rebuildCount, equals (0 ));
@@ -3692,7 +3833,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
3692
3833
);
3693
3834
3694
3835
final List <Map <Object , Object ?>> repaintEvents =
3695
- service.getEventsDispatched ('Flutter.RepaintWidgets' );
3836
+ service.dispatchedEvents ('Flutter.RepaintWidgets' );
3696
3837
expect (repaintEvents, isEmpty);
3697
3838
3698
3839
expect (service.rebuildCount, equals (0 ));
@@ -4467,7 +4608,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
4467
4608
});
4468
4609
4469
4610
test ('ext.flutter.inspector.structuredErrors' , () async {
4470
- List <Map <Object , Object ?>> flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4611
+ List <Map <Object , Object ?>> flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
4471
4612
expect (flutterErrorEvents, isEmpty);
4472
4613
4473
4614
final FlutterExceptionHandler oldHandler = FlutterError .presentError;
@@ -4490,7 +4631,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
4490
4631
));
4491
4632
4492
4633
// Validate that we received an error.
4493
- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4634
+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
4494
4635
expect (flutterErrorEvents, hasLength (1 ));
4495
4636
4496
4637
// Validate the error contents.
@@ -4513,7 +4654,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
4513
4654
));
4514
4655
4515
4656
// Validate that the error count increased.
4516
- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4657
+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
4517
4658
expect (flutterErrorEvents, hasLength (2 ));
4518
4659
error = flutterErrorEvents.last;
4519
4660
expect (error['errorsSinceReload' ], 1 );
@@ -4541,7 +4682,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
4541
4682
));
4542
4683
4543
4684
// And, validate that the error count has been reset.
4544
- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4685
+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
4545
4686
expect (flutterErrorEvents, hasLength (3 ));
4546
4687
error = flutterErrorEvents.last;
4547
4688
expect (error['errorsSinceReload' ], 0 );
0 commit comments