Create an enum for widget inspector service extensions for use by tools (#111405)

This commit is contained in:
Kenzie Davisson 2022-09-13 09:53:24 -07:00 committed by GitHub
parent 2d5e181b73
commit 4356d3b676
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 744 additions and 188 deletions

View file

@ -94,3 +94,369 @@ enum WidgetsServiceExtensions {
/// registered.
debugAllowBanner,
}
/// Service extension constants for the Widget Inspector.
///
/// These constants will be used when registering service extensions in the
/// framework, and they will also be used by tools and services that call these
/// service extensions.
///
/// The String value for each of these extension names should be accessed by
/// calling the `.name` property on the enum value.
enum WidgetInspectorServiceExtensions {
/// Name of service extension that, when called, will determine whether
/// [FlutterError] messages will be presented using a structured format.
///
/// See also:
///
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
/// * [WidgetInspectorService._reportStructuredError], which is the error
/// reporter that will be used when this service extension is enabled.
structuredErrors,
/// Name of service extension that, when called, will change the value of
/// [WidgetsApp.debugShowWidgetInspectorOverride], which controls whether the
/// on-device widget inspector is visible.
///
/// See also:
/// * [WidgetsApp.debugShowWidgetInspectorOverride], which is the flag that
/// this service extension exposes.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
show,
/// Name of service extension that, when called, changes the value of
/// [WidgetInspectorService._trackRebuildDirtyWidgets], which determines
/// whether a callback is invoked for every dirty [Widget] built each frame.
///
/// This service extension is only supported if
/// [WidgetInspectorService._widgetCreationTracked] is true.
///
/// See also:
///
/// * [debugOnRebuildDirtyWidget], which is the nullable callback that is
/// called for every dirty widget built per frame
/// * [WidgetInspectorService._onRebuildWidget], which is the callback we
/// assign to [debugOnRebuildDirtyWidget] when this service extension is set
/// to true.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
trackRebuildDirtyWidgets,
/// Name of service extension that, when called, changes the value of
/// [WidgetInspectorService._trackRepaintWidgets], which determines whether
/// a callback is invoked for every [RenderObject] painted each frame.
///
/// This service extension is only supported if
/// [WidgetInspectorService._widgetCreationTracked] is true.
///
/// See also:
///
/// * [debugOnProfilePaint], which is the nullable callback that is called for
/// every dirty widget built per frame
/// * [WidgetInspectorService._onPaint], which is the callback we
/// assign to [debugOnRebuildDirtyWidget] when this service extension is set
/// to true.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
trackRepaintWidgets,
/// Name of service extension that, when called, will clear all
/// [WidgetInspectorService] object references in all groups.
///
/// See also:
///
/// * [WidgetInspectorService.disposeAllGroups], the method that this service
/// extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
disposeAllGroups,
/// Name of service extension that, when called, will clear all
/// [WidgetInspectorService] object references in a group.
///
/// See also:
///
/// * [WidgetInspectorService.disposeGroup], the method that this service
/// extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
disposeGroup,
/// Name of service extension that, when called, returns whether it is
/// appropriate to display the Widget tree in the inspector, which is only
/// true after the application has rendered its first frame.
///
/// See also:
///
/// * [WidgetInspectorService.isWidgetTreeReady], the method that this service
/// extension calls.
/// * [WidgetsBinding.debugDidSendFirstFrameEvent], which stores the
/// value of whether the first frame has been rendered.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
isWidgetTreeReady,
/// Name of service extension that, when called, will remove the object with
/// the specified `id` from the specified object group.
///
/// See also:
///
/// * [WidgetInspectorService.disposeId], the method that this service
/// extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
disposeId,
/// Name of service extension that, when called, will set the list of
/// directories that should be considered part of the local project for the
/// Widget inspector summary tree.
///
/// See also:
///
/// * [WidgetInspectorService.addPubRootDirectories], which should be used in
/// place of this method to add directories.
/// * [WidgetInspectorService.removePubRootDirectories], which should be used
/// in place of this method to remove directories.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
@Deprecated(
'Use addPubRootDirectories instead. '
'This feature was deprecated after v3.1.0-9.0.pre.',
)
setPubRootDirectories,
/// Name of service extension that, when called, will add a list of
/// directories that should be considered part of the local project for the
/// Widget inspector summary tree.
///
/// See also:
///
/// * [WidgetInspectorService.addPubRootDirectories], the method that this
/// service extension calls.
/// * [WidgetInspectorService.removePubRootDirectories], which should be used
/// to remove directories.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
addPubRootDirectories,
/// Name of service extension that, when called, will remove a list of
/// directories that should no longer be considered part of the local project
/// for the Widget inspector summary tree.
///
/// See also:
///
/// * [WidgetInspectorService.removePubRootDirectories], the method that this
/// service extension calls.
/// * [WidgetInspectorService.addPubRootDirectories], which should be used
/// to add directories.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
removePubRootDirectories,
/// Name of service extension that, when called, will set the
/// [WidgetInspector] selection to the object matching the specified id and
/// will return whether the selection was changed.
///
/// See also:
///
/// * [WidgetInspectorService.setSelectionById], the method that this service
/// extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
setSelectionById,
/// Name of service extension that, when called, will retrieve the chain of
/// [DiagnosticsNode] instances form the root of the tree to the [Element] or
/// [RenderObject] matching the specified id, passed as an argument.
///
/// See also:
///
/// * [WidgetInspectorService._getParentChain], the method that this service
/// extension calls.
/// * [WidgetInspectorService.getParentChain], which returns a json encoded
/// String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getParentChain,
/// Name of service extension that, when called, will return the properties
/// for the [DiagnosticsNode] object matching the specified id, passed as an
/// argument.
///
/// See also:
///
/// * [WidgetInspectorService._getProperties], the method that this service
/// extension calls.
/// * [WidgetInspectorService.getProperties], which returns a json encoded
/// String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getProperties,
/// Name of service extension that, when called, will return the children
/// for the [DiagnosticsNode] object matching the specified id, passed as an
/// argument.
///
/// See also:
///
/// * [WidgetInspectorService._getChildren], the method that this service
/// extension calls.
/// * [WidgetInspectorService.getChildren], which returns a json encoded
/// String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getChildren,
/// Name of service extension that, when called, will return the children
/// created by user code for the [DiagnosticsNode] object matching the
/// specified id, passed as an argument.
///
/// See also:
///
/// * [WidgetInspectorService._getChildrenSummaryTree], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getChildrenSummaryTree], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getChildrenSummaryTree,
/// Name of service extension that, when called, will return all children and
/// their properties for the [DiagnosticsNode] object matching the specified
/// id, passed as an argument.
///
/// See also:
///
/// * [WidgetInspectorService._getChildrenDetailsSubtree], the method that
/// this service extension calls.
/// * [WidgetInspectorService.getChildrenDetailsSubtree], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getChildrenDetailsSubtree,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the root [Element].
///
/// See also:
///
/// * [WidgetInspectorService._getRootWidget], the method that this service
/// extension calls.
/// * [WidgetInspectorService.getRootWidget], which returns a json encoded
/// String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getRootWidget,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the root [RenderObject].
///
/// See also:
///
/// * [WidgetInspectorService._getRootRenderObject], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getRootRenderObject], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getRootRenderObject,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the root [Element] of the summary tree, which
/// only includes [Element]s that were created by user code.
///
/// See also:
///
/// * [WidgetInspectorService._getRootWidgetSummaryTree], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getRootWidgetSummaryTree], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getRootWidgetSummaryTree,
/// Name of service extension that, when called, will return the details
/// subtree, which includes properties, rooted at the [DiagnosticsNode] object
/// matching the specified id and the having a size matching the specified
/// subtree depth, both passed as arguments.
///
/// See also:
///
/// * [WidgetInspectorService.getDetailsSubtree], the method that this service
/// extension calls.
/// * [WidgetInspectorService.getDetailsSubtree], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getDetailsSubtree,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the currently selected [RenderObject].
///
/// See also:
///
/// * [WidgetInspectorService._getSelectedRenderObject], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getSelectedRenderObject], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getSelectedRenderObject,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the currently selected [Element].
///
/// See also:
///
/// * [WidgetInspectorService._getSelectedWidget], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getSelectedWidget], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getSelectedWidget,
/// Name of service extension that, when called, will return the
/// [DiagnosticsNode] data for the currently selected [Element] in the summary
/// tree, which only includes [Element]s created in user code.
///
/// If the selected [Element] does not exist in the summary tree, the first
/// ancestor in the summary tree for the currently selected [Element] will be
/// returned.
///
/// See also:
///
/// * [WidgetInspectorService._getSelectedSummaryWidget], the method that this
/// service extension calls.
/// * [WidgetInspectorService.getSelectedSummaryWidget], which returns a json
/// encoded String representation of this data.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
getSelectedSummaryWidget,
/// Name of service extension that, when called, will return whether [Widget]
/// creation locations are available.
///
/// See also:
///
/// * [WidgetInspectorService.isWidgetCreationTracked], the method that this
/// service extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
isWidgetCreationTracked,
/// Name of service extension that, when called, will return a base64 encoded
/// image of the [RenderObject] or [Element] matching the specified 'id`,
/// passed as an argument, and sized at the specified 'width' and 'height'
/// values, also passed as arguments.
///
/// See also:
///
/// * [WidgetInspectorService.screenshot], the method that this service
/// extension calls.
/// * [WidgetInspectorService.initServiceExtensions], where the service
/// extension is registered.
screenshot,
}

View file

@ -29,6 +29,7 @@ import 'binding.dart';
import 'debug.dart';
import 'framework.dart';
import 'gesture_detector.dart';
import 'service_extensions.dart';
/// Signature for the builder callback used by
/// [WidgetInspector.selectButtonBuilder].
@ -1007,7 +1008,7 @@ mixin WidgetInspectorService {
SchedulerBinding.instance.addPersistentFrameCallback(_onFrameStart);
_registerBoolServiceExtension(
name: 'structuredErrors',
name: WidgetInspectorServiceExtensions.structuredErrors.name,
getter: () async => FlutterError.presentError == _reportStructuredError,
setter: (bool value) {
FlutterError.presentError = value ? _reportStructuredError : defaultExceptionHandler;
@ -1016,7 +1017,7 @@ mixin WidgetInspectorService {
);
_registerBoolServiceExtension(
name: 'show',
name: WidgetInspectorServiceExtensions.show.name,
getter: () async => WidgetsApp.debugShowWidgetInspectorOverride,
setter: (bool value) {
if (WidgetsApp.debugShowWidgetInspectorOverride == value) {
@ -1031,7 +1032,7 @@ mixin WidgetInspectorService {
// Service extensions that are only supported if widget creation locations
// are tracked.
_registerBoolServiceExtension(
name: 'trackRebuildDirtyWidgets',
name: WidgetInspectorServiceExtensions.trackRebuildDirtyWidgets.name,
getter: () async => _trackRebuildDirtyWidgets,
setter: (bool value) async {
if (value == _trackRebuildDirtyWidgets) {
@ -1054,7 +1055,7 @@ mixin WidgetInspectorService {
);
_registerBoolServiceExtension(
name: 'trackRepaintWidgets',
name: WidgetInspectorServiceExtensions.trackRepaintWidgets.name,
getter: () async => _trackRepaintWidgets,
setter: (bool value) async {
if (value == _trackRepaintWidgets) {
@ -1081,92 +1082,92 @@ mixin WidgetInspectorService {
}
_registerSignalServiceExtension(
name: 'disposeAllGroups',
name: WidgetInspectorServiceExtensions.disposeAllGroups.name,
callback: () async {
disposeAllGroups();
return null;
},
);
_registerObjectGroupServiceExtension(
name: 'disposeGroup',
name: WidgetInspectorServiceExtensions.disposeGroup.name,
callback: (String name) async {
disposeGroup(name);
return null;
},
);
_registerSignalServiceExtension(
name: 'isWidgetTreeReady',
name: WidgetInspectorServiceExtensions.isWidgetTreeReady.name,
callback: isWidgetTreeReady,
);
_registerServiceExtensionWithArg(
name: 'disposeId',
name: WidgetInspectorServiceExtensions.disposeId.name,
callback: (String? objectId, String objectGroup) async {
disposeId(objectId, objectGroup);
return null;
},
);
_registerServiceExtensionVarArgs(
name: 'setPubRootDirectories',
name: WidgetInspectorServiceExtensions.setPubRootDirectories.name,
callback: (List<String> args) async {
setPubRootDirectories(args);
return null;
},
);
_registerServiceExtensionVarArgs(
name: 'addPubRootDirectories',
name: WidgetInspectorServiceExtensions.addPubRootDirectories.name,
callback: (List<String> args) async {
addPubRootDirectories(args);
return null;
},
);
_registerServiceExtensionVarArgs(
name: 'removePubRootDirectories',
name: WidgetInspectorServiceExtensions.removePubRootDirectories.name,
callback: (List<String> args) async {
removePubRootDirectories(args);
return null;
},
);
_registerServiceExtensionWithArg(
name: 'setSelectionById',
name: WidgetInspectorServiceExtensions.setSelectionById.name,
callback: setSelectionById,
);
_registerServiceExtensionWithArg(
name: 'getParentChain',
name: WidgetInspectorServiceExtensions.getParentChain.name,
callback: _getParentChain,
);
_registerServiceExtensionWithArg(
name: 'getProperties',
name: WidgetInspectorServiceExtensions.getProperties.name,
callback: _getProperties,
);
_registerServiceExtensionWithArg(
name: 'getChildren',
name: WidgetInspectorServiceExtensions.getChildren.name,
callback: _getChildren,
);
_registerServiceExtensionWithArg(
name: 'getChildrenSummaryTree',
name: WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
callback: _getChildrenSummaryTree,
);
_registerServiceExtensionWithArg(
name: 'getChildrenDetailsSubtree',
name: WidgetInspectorServiceExtensions.getChildrenDetailsSubtree.name,
callback: _getChildrenDetailsSubtree,
);
_registerObjectGroupServiceExtension(
name: 'getRootWidget',
name: WidgetInspectorServiceExtensions.getRootWidget.name,
callback: _getRootWidget,
);
_registerObjectGroupServiceExtension(
name: 'getRootRenderObject',
name: WidgetInspectorServiceExtensions.getRootRenderObject.name,
callback: _getRootRenderObject,
);
_registerObjectGroupServiceExtension(
name: 'getRootWidgetSummaryTree',
name: WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name,
callback: _getRootWidgetSummaryTree,
);
registerServiceExtension(
name: 'getDetailsSubtree',
name: WidgetInspectorServiceExtensions.getDetailsSubtree.name,
callback: (Map<String, String> parameters) async {
assert(parameters.containsKey('objectGroup'));
final String? subtreeDepth = parameters['subtreeDepth'];
@ -1180,24 +1181,24 @@ mixin WidgetInspectorService {
},
);
_registerServiceExtensionWithArg(
name: 'getSelectedRenderObject',
name: WidgetInspectorServiceExtensions.getSelectedRenderObject.name,
callback: _getSelectedRenderObject,
);
_registerServiceExtensionWithArg(
name: 'getSelectedWidget',
name: WidgetInspectorServiceExtensions.getSelectedWidget.name,
callback: _getSelectedWidget,
);
_registerServiceExtensionWithArg(
name: 'getSelectedSummaryWidget',
name: WidgetInspectorServiceExtensions.getSelectedSummaryWidget.name,
callback: _getSelectedSummaryWidget,
);
_registerSignalServiceExtension(
name: 'isWidgetCreationTracked',
name: WidgetInspectorServiceExtensions.isWidgetCreationTracked.name,
callback: isWidgetCreationTracked,
);
registerServiceExtension(
name: 'screenshot',
name: WidgetInspectorServiceExtensions.screenshot.name,
callback: (Map<String, String> parameters) async {
assert(parameters.containsKey('id'));
assert(parameters.containsKey('width'));

View file

@ -1782,10 +1782,19 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final String? aId = service.toId(a, group1);
expect(service.toId(a, group2), equals(aId));
expect(service.toId(a, group3), equals(aId));
await service.testExtension('disposeGroup', <String, String>{'objectGroup': group1});
await service.testExtension('disposeGroup', <String, String>{'objectGroup': group2});
await service.testExtension(
WidgetInspectorServiceExtensions.disposeGroup.name,
<String, String>{'objectGroup': group1},
);
await service.testExtension(
WidgetInspectorServiceExtensions.disposeGroup.name,
<String, String>{'objectGroup': group2},
);
expect(service.toObject(aId), equals(a));
await service.testExtension('disposeGroup', <String, String>{'objectGroup': group3});
await service.testExtension(
WidgetInspectorServiceExtensions.disposeGroup.name,
<String, String>{'objectGroup': group3},
);
expect(() => service.toObject(aId), throwsFlutterError);
});
@ -1797,11 +1806,20 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final String aId = service.toId(a, group1)!;
final String bId = service.toId(b, group1)!;
expect(service.toId(a, group2), equals(aId));
await service.testExtension('disposeId', <String, String>{'arg': bId, 'objectGroup': group1});
await service.testExtension(
WidgetInspectorServiceExtensions.disposeId.name,
<String, String>{'arg': bId, 'objectGroup': group1},
);
expect(() => service.toObject(bId), throwsFlutterError);
await service.testExtension('disposeId', <String, String>{'arg': aId, 'objectGroup': group1});
await service.testExtension(
WidgetInspectorServiceExtensions.disposeId.name,
<String, String>{'arg': aId, 'objectGroup': group1},
);
expect(service.toObject(aId), equals(a));
await service.testExtension('disposeId', <String, String>{'arg': aId, 'objectGroup': group2});
await service.testExtension(
WidgetInspectorServiceExtensions.disposeId.name,
<String, String>{'arg': aId, 'objectGroup': group2},
);
expect(() => service.toObject(aId), throwsFlutterError);
});
@ -1842,7 +1860,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(selectionChangedCount, equals(2));
expect(service.selection.current, equals(elementB.renderObject));
await service.testExtension('setSelectionById', <String, String>{'arg': service.toId(elementA, 'my-group')!, 'objectGroup': 'my-group'});
await service.testExtension(
WidgetInspectorServiceExtensions.setSelectionById.name,
<String, String>{'arg': service.toId(elementA, 'my-group')!, 'objectGroup': 'my-group'},
);
expect(selectionChangedCount, equals(3));
expect(service.selection.currentElement, equals(elementA));
expect(service.selection.current, equals(elementA.renderObject));
@ -1870,7 +1891,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementB = find.text('b').evaluate().first;
final String bId = service.toId(elementB, group)!;
final Object? jsonList = await service.testExtension('getParentChain', <String, String>{'arg': bId, 'objectGroup': group});
final Object? jsonList = await service.testExtension(
WidgetInspectorServiceExtensions.getParentChain.name,
<String, String>{'arg': bId, 'objectGroup': group},
);
expect(jsonList, isList);
final List<Object?> chainElements = jsonList! as List<Object?>;
final List<Element> expectedChain = elementB.debugGetDiagnosticChain().reversed.toList();
@ -1910,7 +1934,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final DiagnosticsNode diagnostic = const Text('a', textDirection: TextDirection.ltr).toDiagnosticsNode();
const String group = 'group';
final String id = service.toId(diagnostic, group)!;
final List<Object?> propertiesJson = (await service.testExtension('getProperties', <String, String>{'arg': id, 'objectGroup': group}))! as List<Object?>;
final List<Object?> propertiesJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getProperties.name,
<String, String>{'arg': id, 'objectGroup': group},
))! as List<Object?>;
final List<DiagnosticsNode> properties = diagnostic.getProperties();
expect(properties, isNotEmpty);
expect(propertiesJson.length, equals(properties.length));
@ -1938,7 +1965,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
);
final DiagnosticsNode diagnostic = find.byType(Stack).evaluate().first.toDiagnosticsNode();
final String id = service.toId(diagnostic, group)!;
final List<Object?> propertiesJson = (await service.testExtension('getChildren', <String, String>{'arg': id, 'objectGroup': group}))! as List<Object?>;
final List<Object?> propertiesJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildren.name,
<String, String>{'arg': id, 'objectGroup': group},
))! as List<Object?>;
final List<DiagnosticsNode> children = diagnostic.getChildren();
expect(children.length, equals(3));
expect(propertiesJson.length, equals(children.length));
@ -1966,7 +1996,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
);
final DiagnosticsNode diagnostic = find.byType(Stack).evaluate().first.toDiagnosticsNode();
final String id = service.toId(diagnostic, group)!;
final List<Object?> childrenJson = (await service.testExtension('getChildrenDetailsSubtree', <String, String>{'arg': id, 'objectGroup': group}))! as List<Object?>;
final List<Object?> childrenJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildrenDetailsSubtree.name,
<String, String>{'arg': id, 'objectGroup': group},
))! as List<Object?>;
final List<DiagnosticsNode> children = diagnostic.getChildren();
expect(children.length, equals(3));
expect(childrenJson.length, equals(children.length));
@ -2002,7 +2035,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
);
final DiagnosticsNode diagnostic = find.byType(Stack).evaluate().first.toDiagnosticsNode();
final String id = service.toId(diagnostic, group)!;
final Map<String, Object?> subtreeJson = (await service.testExtension('getDetailsSubtree', <String, String>{'arg': id, 'objectGroup': group}))! as Map<String, Object?>;
final Map<String, Object?> subtreeJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getDetailsSubtree.name,
<String, String>{'arg': id, 'objectGroup': group},
))! as Map<String, Object?>;
expect(subtreeJson['objectId'], equals(id));
final List<Object?> childrenJson = subtreeJson['children']! as List<Object?>;
final List<DiagnosticsNode> children = diagnostic.getChildren();
@ -2026,7 +2062,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
}
final Map<String, Object?> deepSubtreeJson = (await service.testExtension(
'getDetailsSubtree',
WidgetInspectorServiceExtensions.getDetailsSubtree.name,
<String, String>{'arg': id, 'objectGroup': group, 'subtreeDepth': '3'},
))! as Map<String, Object?>;
final List<Object?> deepChildrenJson = deepSubtreeJson['children']! as List<Object?>;
@ -2048,7 +2084,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final DiagnosticsNode diagnostic = a.toDiagnosticsNode();
final String id = service.toId(diagnostic, group)!;
final Map<String, Object?> subtreeJson = (await service.testExtension('getDetailsSubtree', <String, String>{'arg': id, 'objectGroup': group}))! as Map<String, Object?>;
final Map<String, Object?> subtreeJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getDetailsSubtree.name,
<String, String>{'arg': id, 'objectGroup': group},
))! as Map<String, Object?>;
expect(subtreeJson['objectId'], equals(id));
expect(subtreeJson, contains('children'));
final List<Object?> propertiesJson = subtreeJson['properties']! as List<Object?>;
@ -2092,10 +2131,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.disposeAllGroups();
service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group');
final Map<String, dynamic> jsonA = (await service.testExtension('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, dynamic>;
final Map<String, dynamic> jsonA = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, dynamic>;
service.resetPubRootDirectories();
Map<String, Object?> rootJson = (await service.testExtension('getRootWidgetSummaryTree', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
Map<String, Object?> rootJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name,
<String, String>{'objectGroup': group},
))! as Map<String, Object?>;
// We haven't yet properly specified which directories are summary tree
// directories so we get an empty tree other than the root that is always
// included.
@ -2114,16 +2159,25 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
rootJson = (await service.testExtension('getRootWidgetSummaryTree', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
rootJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getRootWidgetSummaryTree.name,
<String, String>{'objectGroup': group},
))! as Map<String, Object?>;
childrenJson = rootJson['children']! as List<Object?>;
// The tree of nodes returned contains all widgets created directly by the
// test.
childrenJson = rootJson['children']! as List<Object?>;
expect(childrenJson.length, equals(1));
List<Object?> alternateChildrenJson = (await service.testExtension('getChildrenSummaryTree', <String, String>{'arg': rootJson['objectId']! as String, 'objectGroup': group}))! as List<Object?>;
List<Object?> alternateChildrenJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
<String, String>{'arg': rootJson['objectId']! as String, 'objectGroup': group},
))! as List<Object?>;
expect(alternateChildrenJson.length, equals(1));
Map<String, Object?> childJson = childrenJson[0]! as Map<String, Object?>;
Map<String, Object?> alternateChildJson = alternateChildrenJson[0]! as Map<String, Object?>;
@ -2132,7 +2186,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(alternateChildJson['valueId'], equals(childJson['valueId']));
childrenJson = childJson['children']! as List<Object?>;
alternateChildrenJson = (await service.testExtension('getChildrenSummaryTree', <String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group}))! as List<Object?>;
alternateChildrenJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
<String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group},
))! as List<Object?>;
expect(alternateChildrenJson.length, equals(1));
expect(childrenJson.length, equals(1));
alternateChildJson = alternateChildrenJson[0]! as Map<String, Object?>;
@ -2143,7 +2200,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
childrenJson = childJson['children']! as List<Object?>;
childrenJson = childJson['children']! as List<Object?>;
alternateChildrenJson = (await service.testExtension('getChildrenSummaryTree', <String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group}))! as List<Object?>;
alternateChildrenJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
<String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group},
))! as List<Object?>;
expect(alternateChildrenJson.length, equals(3));
expect(childrenJson.length, equals(3));
alternateChildJson = alternateChildrenJson[2]! as Map<String, Object?>;
@ -2151,7 +2211,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(childJson['description'], startsWith('Text'));
expect(alternateChildJson['description'], startsWith('Text'));
expect(alternateChildJson['valueId'], equals(childJson['valueId']));
alternateChildrenJson = (await service.testExtension('getChildrenSummaryTree', <String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group}))! as List<Object?>;
alternateChildrenJson = (await service.testExtension(
WidgetInspectorServiceExtensions.getChildrenSummaryTree.name,
<String, String>{'arg': childJson['objectId']! as String, 'objectGroup': group},
))! as List<Object?>;
expect(alternateChildrenJson.length , equals(0));
// Tests are failing when this typo is fixed.
expect(childJson['chidlren'], isNull);
@ -2181,11 +2244,17 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.disposeAllGroups();
service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group');
final Map<String, Object?> jsonA = (await service.testExtension('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
final Map<String, Object?> jsonA = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
service.setSelection(richTextDiagnostic.value, 'my-group');
service.resetPubRootDirectories();
Map<String, Object?>? summarySelection = await service.testExtension('getSelectedSummaryWidget', <String, String>{'objectGroup': group}) as Map<String, Object?>?;
Map<String, Object?>? summarySelection = await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedSummaryWidget.name,
<String, String>{'objectGroup': group},
) as Map<String, Object?>?;
// No summary selection because we haven't set the pub root directories
// yet to indicate what directories are in the summary tree.
expect(summarySelection, isNull);
@ -2199,9 +2268,15 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
summarySelection = (await service.testExtension('getSelectedSummaryWidget', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
summarySelection = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedSummaryWidget.name,
<String, String>{'objectGroup': group},
))! as Map<String, Object?>;
expect(summarySelection['valueId'], isNotNull);
// We got the Text element instead of the selected RichText element
// because only the RichText element is part of the summary tree.
@ -2209,7 +2284,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Verify tha the regular getSelectedWidget method still returns
// the RichText object not the Text element.
final Map<String, Object?> regularSelection = (await service.testExtension('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
final Map<String, Object?> regularSelection = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
expect(service.toObject(regularSelection['valueId']! as String), richTextDiagnostic.value);
}, skip: !WidgetInspectorService.instance.isWidgetCreationTracked()); // [intended] Test requires --track-widget-creation flag.
@ -2232,7 +2310,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.disposeAllGroups();
service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group');
final Map<String, Object?> jsonA = (await service.testExtension('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
final Map<String, Object?> jsonA = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
final Map<String, Object?> creationLocationA = jsonA['creationLocation']! as Map<String, Object?>;
expect(creationLocationA, isNotNull);
final String fileA = creationLocationA['file']! as String;
@ -2240,7 +2321,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final int columnA = creationLocationA['column']! as int;
service.setSelection(elementB, 'my-group');
final Map<String, Object?> jsonB = (await service.testExtension('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
final Map<String, Object?> jsonB = (await service.testExtension(
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
final Map<String, Object?> creationLocationB = jsonB['creationLocation']! as Map<String, Object?>;
expect(creationLocationB, isNotNull);
final String fileB = creationLocationB['file']! as String;
@ -2289,12 +2373,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2322,12 +2406,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': '/invalid/$pubRootTest'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2355,12 +2439,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': 'file://$pubRootTest'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2388,12 +2472,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': '$pubRootTest/different'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2420,14 +2504,17 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
await service.testExtension('addPubRootDirectories', <String, String>{
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '/unrelated/$pubRootTest',
'arg1': 'file://$pubRootTest',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2484,12 +2571,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.resetPubRootDirectories();
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootFramework},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2497,7 +2584,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2505,13 +2592,13 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.resetPubRootDirectories();
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootFramework, 'arg1': pubRootTest},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2519,7 +2606,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(richText, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2565,12 +2652,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest, 'isolateId': '34'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2596,13 +2683,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
await service.testExtension('addPubRootDirectories', <String, String>{
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '/invalid/$pubRootTest',
'isolateId': '34'
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2629,12 +2719,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': 'file://$pubRootTest', 'isolateId': '34'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2660,13 +2750,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
await service.testExtension('addPubRootDirectories', <String, String>{
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '$pubRootTest/different',
'isolateId': '34'
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2692,15 +2785,18 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
await service.testExtension('addPubRootDirectories', <String, String>{
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '/unrelated/$pubRootTest',
'isolateId': '34',
'arg1': 'file://$pubRootTest',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2746,7 +2842,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'arg1': 'file://$pubRootTest',
@ -2756,14 +2852,14 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
await service.testExtension(
'removePubRootDirectories',
WidgetInspectorServiceExtensions.removePubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
},
@ -2771,7 +2867,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2796,13 +2892,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '$pubRootTest/different',
'arg1': '/unrelated/$pubRootTest',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
@ -2827,12 +2926,13 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0':'file://$pubRootTest'
});
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0':'file://$pubRootTest'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2857,15 +2957,17 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': pubRootTest,
});
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest',
});
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': '/invalid/$pubRootTest'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2889,24 +2991,28 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'arg1': '/invalid/$pubRootTest',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
service.testExtension('removePubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest',
});
service.testExtension(
WidgetInspectorServiceExtensions.removePubRootDirectories.name,
<String, String>{'arg0': '/invalid/$pubRootTest'},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2937,11 +3043,14 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
.evaluate()
.first;
service.setSelection(richText, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{ 'arg0': pubRootTest });
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{ 'arg0': pubRootTest },
);
final Map<String, Object?> jsonObject =
(await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
expect(jsonObject, isNot(contains('createdByLocalProject')));
@ -2961,10 +3070,13 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final String pubRootFramework =
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.resetPubRootDirectories();
service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootFramework});
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootFramework},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2972,22 +3084,24 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
);
service.resetPubRootDirectories();
service
.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootFramework,
'arg1': pubRootTest
});
'arg1': pubRootTest,
},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -2995,7 +3109,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(richText, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
@ -3034,7 +3148,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
await service.testExtension(
'addPubRootDirectories',
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'arg1': 'file://$pubRootTest',
@ -3045,14 +3159,14 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
await service.testExtension(
'removePubRootDirectories',
WidgetInspectorServiceExtensions.removePubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'isolateId': '34',
@ -3061,7 +3175,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
isNot(contains('createdByLocalProject')),
@ -3086,13 +3200,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '$pubRootTest/different',
'arg1': '/unrelated/$pubRootTest',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
isNot(contains('createdByLocalProject')),
@ -3117,13 +3234,16 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0':'file://$pubRootTest',
'isolateId': '34',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
@ -3148,17 +3268,23 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'isolateId': '34',
});
service.testExtension('addPubRootDirectories', <String, String>{
},
);
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': '/invalid/$pubRootTest',
'isolateId': '34',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
@ -3182,27 +3308,39 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{
'arg0': pubRootTest,
'arg1': '/invalid/$pubRootTest',
'isolateId': '34',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{
'objectGroup': 'my-group',
'isolateId': '34',
},
),
contains('createdByLocalProject'),
);
service.testExtension('removePubRootDirectories', <String, String>{
service.testExtension(
WidgetInspectorServiceExtensions.removePubRootDirectories.name,
<String, String>{
'arg0': '/invalid/$pubRootTest',
'isolateId': '34',
});
},
);
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{
'objectGroup': 'my-group',
'isolateId': '34',
},
),
contains('createdByLocalProject'),
);
@ -3221,7 +3359,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(clockDemoElement, 'my-group');
final Map<String, Object?> jsonObject = (await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
final Map<String, Object?> creationLocation = jsonObject['creationLocation']! as Map<String, Object?>;
@ -3233,7 +3371,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
final List<Map<Object, Object?>> rebuildEvents =
service.getEventsDispatched('Flutter.RebuiltWidgets');
@ -3241,7 +3382,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(service.rebuildCount, equals(0));
expect(
await service.testBoolExtension('trackRebuildDirtyWidgets', <String, String>{'enabled': 'true'}),
await service.testBoolExtension(
WidgetInspectorServiceExtensions.trackRebuildDirtyWidgets.name,
<String, String>{'enabled': 'true'},
),
equals('true'),
);
expect(service.rebuildCount, equals(1));
@ -3412,7 +3556,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Turn off rebuild counts.
expect(
await service.testBoolExtension('trackRebuildDirtyWidgets', <String, String>{'enabled': 'false'}),
await service.testBoolExtension(
WidgetInspectorServiceExtensions.trackRebuildDirtyWidgets.name,
<String, String>{'enabled': 'false'},
),
equals('false'),
);
@ -3431,7 +3578,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(clockDemoElement, 'my-group');
final Map<String, Object?> jsonObject = (await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
final Map<String, Object?> creationLocation =
@ -3444,7 +3591,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
await service.testExtension(
WidgetInspectorServiceExtensions.addPubRootDirectories.name,
<String, String>{'arg0': pubRootTest},
);
final List<Map<Object, Object?>> repaintEvents =
service.getEventsDispatched('Flutter.RepaintWidgets');
@ -3452,7 +3602,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(service.rebuildCount, equals(0));
expect(
await service.testBoolExtension('trackRepaintWidgets', <String, String>{'enabled': 'true'}),
await service.testBoolExtension(
WidgetInspectorServiceExtensions.trackRepaintWidgets.name,
<String, String>{'enabled': 'true'},
),
equals('true'),
);
// Unlike trackRebuildDirtyWidgets, trackRepaintWidgets doesn't force a full
@ -3526,7 +3679,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Turn off rebuild counts.
expect(
await service.testBoolExtension('trackRepaintWidgets', <String, String>{'enabled': 'false'}),
await service.testBoolExtension(
WidgetInspectorServiceExtensions.trackRepaintWidgets.name,
<String, String>{'enabled': 'false'},
),
equals('false'),
);
@ -3542,27 +3698,57 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.rebuildCount = 0;
expect(extensionChangedEvents, isEmpty);
expect(await service.testBoolExtension('show', <String, String>{'enabled': 'true'}), equals('true'));
expect(
await service.testBoolExtension(
WidgetInspectorServiceExtensions.show.name,
<String, String>{'enabled': 'true'},
),
equals('true'),
);
expect(extensionChangedEvents.length, equals(1));
extensionChangedEvent = extensionChangedEvents.last;
expect(extensionChangedEvent['extension'], equals('ext.flutter.inspector.show'));
expect(extensionChangedEvent['value'], isTrue);
expect(service.rebuildCount, equals(1));
expect(await service.testBoolExtension('show', <String, String>{}), equals('true'));
expect(
await service.testBoolExtension(
WidgetInspectorServiceExtensions.show.name,
<String, String>{},
),
equals('true'),
);
expect(WidgetsApp.debugShowWidgetInspectorOverride, isTrue);
expect(extensionChangedEvents.length, equals(1));
expect(await service.testBoolExtension('show', <String, String>{'enabled': 'true'}), equals('true'));
expect(
await service.testBoolExtension(
WidgetInspectorServiceExtensions.show.name,
<String, String>{'enabled': 'true'},
),
equals('true'),
);
expect(extensionChangedEvents.length, equals(2));
extensionChangedEvent = extensionChangedEvents.last;
expect(extensionChangedEvent['extension'], equals('ext.flutter.inspector.show'));
expect(extensionChangedEvent['value'], isTrue);
expect(service.rebuildCount, equals(1));
expect(await service.testBoolExtension('show', <String, String>{'enabled': 'false'}), equals('false'));
expect(
await service.testBoolExtension(
WidgetInspectorServiceExtensions.show.name,
<String, String>{'enabled': 'false'},
),
equals('false'),
);
expect(extensionChangedEvents.length, equals(3));
extensionChangedEvent = extensionChangedEvents.last;
expect(extensionChangedEvent['extension'], equals('ext.flutter.inspector.show'));
expect(extensionChangedEvent['value'], isFalse);
expect(await service.testBoolExtension('show', <String, String>{}), equals('false'));
expect(
await service.testBoolExtension(
WidgetInspectorServiceExtensions.show.name,
<String, String>{},
),
equals('false'),
);
expect(extensionChangedEvents.length, equals(3));
expect(service.rebuildCount, equals(2));
expect(WidgetsApp.debugShowWidgetInspectorOverride, isFalse);
@ -3815,7 +4001,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Verify we get the same image if we go through the service extension
// instead of invoking the screenshot method directly.
final Future<Object?> base64ScreenshotFuture = service.testExtension(
'screenshot',
WidgetInspectorServiceExtensions.screenshot.name,
<String, String>{
'id': service.toId(clipRect, 'group')!,
'width': '100.0',
@ -3882,7 +4068,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
try {
// Enable structured errors.
expect(
await service.testBoolExtension('structuredErrors', <String, String>{'enabled': 'true'}),
await service.testBoolExtension(
WidgetInspectorServiceExtensions.structuredErrors.name,
<String, String>{'enabled': 'true'},
),
equals('true'),
);
@ -4175,7 +4364,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Figure out the pubRootDirectory
final Map<String, Object?> jsonObject = (await service.testExtension(
'getSelectedWidget',
WidgetInspectorServiceExtensions.getSelectedWidget.name,
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
final Map<String, Object?> creationLocation = jsonObject['creationLocation']! as Map<String, Object?>;