@@ -974,6 +974,147 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
974974 expect (columnA, equals (columnB));
975975 }, skip: ! WidgetInspectorService .instance.isWidgetCreationTracked ()); // [intended] Test requires --track-widget-creation flag.
976976
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+
9771118 testWidgets ('test transformDebugCreator will re-order if after stack trace' , (WidgetTester tester) async {
9781119 final bool widgetTracked = WidgetInspectorService .instance.isWidgetCreationTracked ();
9791120 await tester.pumpWidget (
@@ -3472,7 +3613,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
34723613 );
34733614
34743615 final List <Map <Object , Object ?>> rebuildEvents =
3475- service.getEventsDispatched ('Flutter.RebuiltWidgets' );
3616+ service.dispatchedEvents ('Flutter.RebuiltWidgets' );
34763617 expect (rebuildEvents, isEmpty);
34773618
34783619 expect (service.rebuildCount, equals (0 ));
@@ -3692,7 +3833,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
36923833 );
36933834
36943835 final List <Map <Object , Object ?>> repaintEvents =
3695- service.getEventsDispatched ('Flutter.RepaintWidgets' );
3836+ service.dispatchedEvents ('Flutter.RepaintWidgets' );
36963837 expect (repaintEvents, isEmpty);
36973838
36983839 expect (service.rebuildCount, equals (0 ));
@@ -4467,7 +4608,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
44674608 });
44684609
44694610 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' );
44714612 expect (flutterErrorEvents, isEmpty);
44724613
44734614 final FlutterExceptionHandler oldHandler = FlutterError .presentError;
@@ -4490,7 +4631,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
44904631 ));
44914632
44924633 // Validate that we received an error.
4493- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4634+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
44944635 expect (flutterErrorEvents, hasLength (1 ));
44954636
44964637 // Validate the error contents.
@@ -4513,7 +4654,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
45134654 ));
45144655
45154656 // Validate that the error count increased.
4516- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4657+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
45174658 expect (flutterErrorEvents, hasLength (2 ));
45184659 error = flutterErrorEvents.last;
45194660 expect (error['errorsSinceReload' ], 1 );
@@ -4541,7 +4682,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
45414682 ));
45424683
45434684 // And, validate that the error count has been reset.
4544- flutterErrorEvents = service.getEventsDispatched ('Flutter.Error' );
4685+ flutterErrorEvents = service.dispatchedEvents ('Flutter.Error' );
45454686 expect (flutterErrorEvents, hasLength (3 ));
45464687 error = flutterErrorEvents.last;
45474688 expect (error['errorsSinceReload' ], 0 );
0 commit comments