Unverified Commit 76f056ac authored by Daniel Chevalier's avatar Daniel Chevalier Committed by GitHub

Improve pub root directory interface (#106567)

The pubRoot directory interface is being changed to promote adding and removing directories
parent 0b6e0e2a
...@@ -748,6 +748,12 @@ mixin WidgetInspectorService { ...@@ -748,6 +748,12 @@ mixin WidgetInspectorService {
final Map<Object, String> _objectToId = Map<Object, String>.identity(); final Map<Object, String> _objectToId = Map<Object, String>.identity();
int _nextId = 0; int _nextId = 0;
/// the pubRootDirectories that are currently configured for the widget inspector.
///
/// This is for testing use only.
@visibleForTesting
@protected
List<String>? get pubRootDirectories => _pubRootDirectories == null ? const <String>[] : List<String>.from(_pubRootDirectories!);
List<String>? _pubRootDirectories; List<String>? _pubRootDirectories;
/// Memoization for [_isLocalCreationLocation]. /// Memoization for [_isLocalCreationLocation].
final HashMap<String, bool> _isLocalCreationCache = HashMap<String, bool>(); final HashMap<String, bool> _isLocalCreationCache = HashMap<String, bool>();
...@@ -1106,6 +1112,20 @@ mixin WidgetInspectorService { ...@@ -1106,6 +1112,20 @@ mixin WidgetInspectorService {
return null; return null;
}, },
); );
_registerServiceExtensionVarArgs(
name: 'addPubRootDirectories',
callback: (List<String> args) async {
addPubRootDirectories(args);
return null;
},
);
_registerServiceExtensionVarArgs(
name: 'removePubRootDirectories',
callback: (List<String> args) async {
removePubRootDirectories(args);
return null;
},
);
_registerServiceExtensionWithArg( _registerServiceExtensionWithArg(
name: 'setSelectionById', name: 'setSelectionById',
callback: setSelectionById, callback: setSelectionById,
...@@ -1233,7 +1253,7 @@ mixin WidgetInspectorService { ...@@ -1233,7 +1253,7 @@ mixin WidgetInspectorService {
void resetAllState() { void resetAllState() {
disposeAllGroups(); disposeAllGroups();
selection.clear(); selection.clear();
setPubRootDirectories(<String>[]); resetPubRootDirectories();
} }
/// Free all references to objects in a group. /// Free all references to objects in a group.
...@@ -1355,12 +1375,66 @@ mixin WidgetInspectorService { ...@@ -1355,12 +1375,66 @@ mixin WidgetInspectorService {
/// project. /// project.
/// ///
/// The local project directories are used to distinguish widgets created by /// The local project directories are used to distinguish widgets created by
/// the local project over widgets created from inside the framework. /// the local project from widgets created from inside the framework
/// or other packages.
@protected @protected
@Deprecated(
'Use addPubRootDirectories instead. '
'This feature was deprecated after v3.1.0-9.0.pre.',
)
void setPubRootDirectories(List<String> pubRootDirectories) { void setPubRootDirectories(List<String> pubRootDirectories) {
_pubRootDirectories = pubRootDirectories addPubRootDirectories(pubRootDirectories);
.map<String>((String directory) => Uri.parse(directory).path) }
.toList();
/// Resets the list of directories, that should be considered part of the
/// local project, to the value passed in [pubRootDirectories].
///
/// The local project directories are used to distinguish widgets created by
/// the local project from widgets created from inside the framework
/// or other packages.
@visibleForTesting
@protected
void resetPubRootDirectories() {
_pubRootDirectories = <String>[];
_isLocalCreationCache.clear();
}
/// Add a list of directories that should be considered part of the local
/// project.
///
/// The local project directories are used to distinguish widgets created by
/// the local project from widgets created from inside the framework
/// or other packages.
@protected
void addPubRootDirectories(List<String> pubRootDirectories) {
pubRootDirectories = pubRootDirectories.map<String>((String directory) => Uri.parse(directory).path).toList();
final Set<String> directorySet = Set<String>.from(pubRootDirectories);
if(_pubRootDirectories != null) {
directorySet.addAll(_pubRootDirectories!);
}
_pubRootDirectories = directorySet.toList();
_isLocalCreationCache.clear();
}
/// Remove a list of directories that should no longer be considered part
/// of the local project.
///
/// The local project directories are used to distinguish widgets created by
/// the local project from widgets created from inside the framework
/// or other packages.
@protected
void removePubRootDirectories(List<String> pubRootDirectories) {
if (_pubRootDirectories == null) {
return;
}
pubRootDirectories = pubRootDirectories.map<String>((String directory) => Uri.parse(directory).path).toList();
final Set<String> directorySet = Set<String>.from(_pubRootDirectories!);
directorySet.removeAll(pubRootDirectories);
_pubRootDirectories = directorySet.toList();
_isLocalCreationCache.clear(); _isLocalCreationCache.clear();
} }
......
...@@ -176,7 +176,7 @@ void main() { ...@@ -176,7 +176,7 @@ void main() {
// framework, excluding any that are for the widget inspector // framework, excluding any that are for the widget inspector
// (see widget_inspector_test.dart for tests of the ext.flutter.inspector // (see widget_inspector_test.dart for tests of the ext.flutter.inspector
// service extensions). // service extensions).
const int serviceExtensionCount = 36; const int serviceExtensionCount = 38;
expect(binding.extensions.length, serviceExtensionCount + widgetInspectorExtensionCount - disabledExtensions); expect(binding.extensions.length, serviceExtensionCount + widgetInspectorExtensionCount - disabledExtensions);
......
...@@ -947,7 +947,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -947,7 +947,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementB = find.text('b').evaluate().first; final Element elementB = find.text('b').evaluate().first;
service.disposeAllGroups(); service.disposeAllGroups();
service.setPubRootDirectories(<String>[]); service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
final Map<String, Object?> jsonA = json.decode(service.getSelectedWidget(null, 'my-group')) as Map<String, Object?>; final Map<String, Object?> jsonA = json.decode(service.getSelectedWidget(null, 'my-group')) as Map<String, Object?>;
final Map<String, Object?> creationLocationA = jsonA['creationLocation']! as Map<String, Object?>; final Map<String, Object?> creationLocationA = jsonA['creationLocation']! as Map<String, Object?>;
...@@ -1009,7 +1009,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1009,7 +1009,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.setPubRootDirectories(<String>[pubRootTest]); service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[pubRootTest]);
} }
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder(); final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
builder.add(StringProperty('dummy1', 'value')); builder.add(StringProperty('dummy1', 'value'));
...@@ -1071,7 +1072,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1071,7 +1072,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.setPubRootDirectories(<String>[pubRootTest]); service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[pubRootTest]);
} }
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder(); final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
builder.add(StringProperty('dummy1', 'value')); builder.add(StringProperty('dummy1', 'value'));
...@@ -1201,10 +1203,97 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1201,10 +1203,97 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
expect(nodes[3].runtimeType, StringProperty); expect(nodes[3].runtimeType, StringProperty);
}, skip: !WidgetInspectorService.instance.isWidgetCreationTracked()); // [intended] Test requires --track-widget-creation flag. }, skip: !WidgetInspectorService.instance.isWidgetCreationTracked()); // [intended] Test requires --track-widget-creation flag.
// TODO(CoderDake): Clean up pubRootDirectory tests https://github.com/flutter/flutter/issues/107186
group('pubRootDirectory', () {
const String directoryA = '/a/b/c';
const String directoryB = '/d/e/f';
const String directoryC = '/g/h/i';
setUp(() {
service.resetPubRootDirectories();
});
group('addPubRootDirectories', () {
test('can add multiple directories', () {
const List<String> directories = <String>[directoryA, directoryB];
service.addPubRootDirectories(directories);
expect(service.pubRootDirectories, unorderedEquals(directories));
});
test('can add multiple directories seperately', () {
service.addPubRootDirectories(<String>[directoryA]);
service.addPubRootDirectories(<String>[directoryB]);
service.addPubRootDirectories(<String>[]);
expect(service.pubRootDirectories, unorderedEquals(<String>[
directoryA,
directoryB,
]));
});
test('handles duplicates', () {
const List<String> directories = <String>[
directoryA,
'file://$directoryA',
directoryB,
directoryB
];
service.addPubRootDirectories(directories);
expect(service.pubRootDirectories, unorderedEquals(<String>[
directoryA,
directoryB,
]));
});
});
group('removePubRootDirectories', () {
setUp(() {
service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[directoryA, directoryB, directoryC]);
});
test('removes multiple directories', () {
service.removePubRootDirectories(<String>[directoryA, directoryB,]);
expect(service.pubRootDirectories, equals(<String>[directoryC]));
});
test('removes multiple directories seperately', () {
service.removePubRootDirectories(<String>[directoryA]);
service.removePubRootDirectories(<String>[directoryB]);
service.removePubRootDirectories(<String>[]);
expect(service.pubRootDirectories, equals(<String>[directoryC]));
});
test('handles duplicates', () {
service.removePubRootDirectories(<String>[
'file://$directoryA',
directoryA,
directoryB,
directoryB,
]);
expect(service.pubRootDirectories, equals(<String>[directoryC]));
});
test("does nothing if the directories doesn't exist ", () {
service.removePubRootDirectories(<String>['/x/y/z']);
expect(service.pubRootDirectories, unorderedEquals(<String>[
directoryA,
directoryB,
directoryC,
]));
});
});
});
group( group(
'WidgetInspectorService', 'WidgetInspectorService',
() { () {
group('setPubRootDirectories', () {
late final String pubRootTest; late final String pubRootTest;
setUpAll(() { setUpAll(() {
...@@ -1213,9 +1302,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1213,9 +1302,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
setUp(() { setUp(() {
service.disposeAllGroups(); service.disposeAllGroups();
service.setPubRootDirectories(<String>[]); service.resetPubRootDirectories();
}); });
group('addPubRootDirectories', () {
testWidgets( testWidgets(
'does not have createdByLocalProject when there are no pubRootDirectories', 'does not have createdByLocalProject when there are no pubRootDirectories',
(WidgetTester tester) async { (WidgetTester tester) async {
...@@ -1262,7 +1352,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1262,7 +1352,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
await tester.pumpWidget(widget); await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setPubRootDirectories(<String>[pubRootTest]); service.addPubRootDirectories(<String>[pubRootTest]);
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
expect( expect(
...@@ -1289,7 +1379,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1289,7 +1379,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
service.setPubRootDirectories(<String>['/invalid/$pubRootTest']); service.addPubRootDirectories(<String>['/invalid/$pubRootTest']);
expect( expect(
json.decode(service.getSelectedWidget(null, 'my-group')), json.decode(service.getSelectedWidget(null, 'my-group')),
isNot(contains('createdByLocalProject')), isNot(contains('createdByLocalProject')),
...@@ -1314,7 +1404,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1314,7 +1404,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
service.setPubRootDirectories(<String>['file://$pubRootTest']); service.addPubRootDirectories(<String>['file://$pubRootTest']);
expect( expect(
json.decode(service.getSelectedWidget(null, 'my-group')), json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'), contains('createdByLocalProject'),
...@@ -1339,7 +1429,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1339,7 +1429,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
service.setPubRootDirectories(<String>['$pubRootTest/different']); service.addPubRootDirectories(<String>['$pubRootTest/different']);
expect( expect(
json.decode(service.getSelectedWidget(null, 'my-group')), json.decode(service.getSelectedWidget(null, 'my-group')),
isNot(contains('createdByLocalProject')), isNot(contains('createdByLocalProject')),
...@@ -1364,7 +1454,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1364,7 +1454,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
service.setPubRootDirectories(<String>[ service.addPubRootDirectories(<String>[
'/invalid/$pubRootTest', '/invalid/$pubRootTest',
pubRootTest, pubRootTest,
]); ]);
...@@ -1398,7 +1488,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1398,7 +1488,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
.evaluate() .evaluate()
.first; .first;
service.setSelection(richText, 'my-group'); service.setSelection(richText, 'my-group');
service.setPubRootDirectories(<String>[pubRootTest]); service.addPubRootDirectories(<String>[pubRootTest]);
final Map<String, Object?> jsonObject = final Map<String, Object?> jsonObject =
json.decode(service.getSelectedWidget(null, 'my-group')) json.decode(service.getSelectedWidget(null, 'my-group'))
...@@ -1419,7 +1509,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1419,7 +1509,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip off /src/widgets/text.dart. // Strip off /src/widgets/text.dart.
final String pubRootFramework = final String pubRootFramework =
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}'; '/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.setPubRootDirectories(<String>[pubRootFramework]); service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[pubRootFramework]);
expect( expect(
json.decode(service.getSelectedWidget(null, 'my-group')), json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'), contains('createdByLocalProject'),
...@@ -1445,6 +1536,240 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1445,6 +1536,240 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
}, },
); );
}); });
group('createdByLocalProject', () {
setUp(() {
service.resetPubRootDirectories();
});
testWidgets(
'reacts to add and removing pubRootDirectories',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.addPubRootDirectories(<String>[
pubRootTest,
'file://$pubRootTest',
'/unrelated/$pubRootTest',
]);
service.setSelection(elementA, 'my-group');
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
service.removePubRootDirectories(<String>[pubRootTest]);
service.setSelection(elementA, 'my-group');
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'does not match when the package directory does not match',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.addPubRootDirectories(<String>[
'$pubRootTest/different',
'/unrelated/$pubRootTest',
]);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'has createdByLocalProject when the pubRootDirectory is prefixed with file://',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.addPubRootDirectories(<String>['file://$pubRootTest']);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle consecutive calls to add',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.addPubRootDirectories(<String>[
pubRootTest,
]);
service.addPubRootDirectories(<String>[
'/invalid/$pubRootTest',
]);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle removing an unrelated pubRootDirectory',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.addPubRootDirectories(<String>[
pubRootTest,
'/invalid/$pubRootTest',
]);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
service.removePubRootDirectories(<String>[
'/invalid/$pubRootTest',
]);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle parent widget being part of a separate package',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
final Element richText = find
.descendant(
of: find.text('a'),
matching: find.byType(RichText),
)
.evaluate()
.first;
service.setSelection(richText, 'my-group');
service.addPubRootDirectories(<String>[pubRootTest]);
final Map<String, Object?> jsonObject =
json.decode(service.getSelectedWidget(null, 'my-group'))
as Map<String, Object?>;
expect(jsonObject, isNot(contains('createdByLocalProject')));
final Map<String, Object?> creationLocation =
jsonObject['creationLocation']! as Map<String, Object?>;
expect(creationLocation, isNotNull);
// This RichText widget is created by the build method of the Text widget
// thus the creation location is in text.dart not basic.dart
final List<String> pathSegmentsFramework =
Uri.parse(creationLocation['file']! as String).pathSegments;
expect(
pathSegmentsFramework.join('/'),
endsWith('/flutter/lib/src/widgets/text.dart'),
);
// Strip off /src/widgets/text.dart.
final String pubRootFramework =
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[pubRootFramework]);
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
service.setSelection(elementA, 'my-group');
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
isNot(contains('createdByLocalProject')),
);
service.resetPubRootDirectories();
service
.addPubRootDirectories(<String>[pubRootFramework, pubRootTest]);
service.setSelection(elementA, 'my-group');
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
service.setSelection(richText, 'my-group');
expect(
json.decode(service.getSelectedWidget(null, 'my-group')),
contains('createdByLocalProject'),
);
},
);
});
}, },
skip: !WidgetInspectorService.instance.isWidgetCreationTracked(), // [intended] Test requires --track-widget-creation flag. skip: !WidgetInspectorService.instance.isWidgetCreationTracked(), // [intended] Test requires --track-widget-creation flag.
); );
...@@ -1765,11 +2090,11 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1765,11 +2090,11 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.disposeAllGroups(); service.disposeAllGroups();
await service.testExtension('setPubRootDirectories', <String, String>{}); service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group'); 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('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, dynamic>;
await service.testExtension('setPubRootDirectories', <String, String>{}); 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('getRootWidgetSummaryTree', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
// We haven't yet properly specified which directories are summary tree // 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 // directories so we get an empty tree other than the root that is always
...@@ -1788,7 +2113,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1788,7 +2113,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
await service.testExtension('setPubRootDirectories', <String, String>{'arg0': pubRootTest}); service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
rootJson = (await service.testExtension('getRootWidgetSummaryTree', <String, String>{'objectGroup': group}))! as Map<String, Object?>; rootJson = (await service.testExtension('getRootWidgetSummaryTree', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
childrenJson = rootJson['children']! as List<Object?>; childrenJson = rootJson['children']! as List<Object?>;
...@@ -1853,12 +2179,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1853,12 +2179,12 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final DiagnosticsNode richTextDiagnostic = children.first; final DiagnosticsNode richTextDiagnostic = children.first;
service.disposeAllGroups(); service.disposeAllGroups();
await service.testExtension('setPubRootDirectories', <String, String>{}); service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group'); 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('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
service.setSelection(richTextDiagnostic.value, 'my-group'); service.setSelection(richTextDiagnostic.value, 'my-group');
await service.testExtension('setPubRootDirectories', <String, String>{}); 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('getSelectedSummaryWidget', <String, String>{'objectGroup': group}) as Map<String, Object?>?;
// No summary selection because we haven't set the pub root directories // No summary selection because we haven't set the pub root directories
// yet to indicate what directories are in the summary tree. // yet to indicate what directories are in the summary tree.
...@@ -1872,7 +2198,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1872,7 +2198,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
await service.testExtension('setPubRootDirectories', <String, String>{'arg0': pubRootTest}); service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
summarySelection = (await service.testExtension('getSelectedSummaryWidget', <String, String>{'objectGroup': group}))! as Map<String, Object?>; summarySelection = (await service.testExtension('getSelectedSummaryWidget', <String, String>{'objectGroup': group}))! as Map<String, Object?>;
expect(summarySelection['valueId'], isNotNull); expect(summarySelection['valueId'], isNotNull);
...@@ -1903,7 +2230,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1903,7 +2230,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementB = find.text('b').evaluate().first; final Element elementB = find.text('b').evaluate().first;
service.disposeAllGroups(); service.disposeAllGroups();
await service.testExtension('setPubRootDirectories', <String, String>{}); service.resetPubRootDirectories();
service.setSelection(elementA, 'my-group'); 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('getSelectedWidget', <String, String>{'objectGroup': 'my-group'}))! as Map<String, Object?>;
final Map<String, Object?> creationLocationA = jsonA['creationLocation']! as Map<String, Object?>; final Map<String, Object?> creationLocationA = jsonA['creationLocation']! as Map<String, Object?>;
...@@ -1930,7 +2257,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1930,7 +2257,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
}, skip: !WidgetInspectorService.instance.isWidgetCreationTracked()); // [intended] Test requires --track-widget-creation flag. }, skip: !WidgetInspectorService.instance.isWidgetCreationTracked()); // [intended] Test requires --track-widget-creation flag.
group( group(
'ext.flutter.inspector.setPubRootDirectories group', 'ext.flutter.inspector.addPubRootDirectories group',
() { () {
late final String pubRootTest; late final String pubRootTest;
...@@ -1938,6 +2265,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1938,6 +2265,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
pubRootTest = generateTestPubRootDirectory(service); pubRootTest = generateTestPubRootDirectory(service);
}); });
setUp(() {
service.resetPubRootDirectories();
});
testWidgets( testWidgets(
'has createdByLocalProject when the widget is in the pubRootDirectory', 'has createdByLocalProject when the widget is in the pubRootDirectory',
(WidgetTester tester) async { (WidgetTester tester) async {
...@@ -1958,7 +2289,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1958,7 +2289,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': pubRootTest}, <String, String>{'arg0': pubRootTest},
); );
expect( expect(
...@@ -1991,7 +2322,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -1991,7 +2322,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': '/invalid/$pubRootTest'}, <String, String>{'arg0': '/invalid/$pubRootTest'},
); );
expect( expect(
...@@ -2024,7 +2355,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2024,7 +2355,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': 'file://$pubRootTest'}, <String, String>{'arg0': 'file://$pubRootTest'},
); );
expect( expect(
...@@ -2057,7 +2388,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2057,7 +2388,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': '$pubRootTest/different'}, <String, String>{'arg0': '$pubRootTest/different'},
); );
expect( expect(
...@@ -2089,7 +2420,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2089,7 +2420,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension('setPubRootDirectories', <String, String>{ await service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '/unrelated/$pubRootTest', 'arg0': '/unrelated/$pubRootTest',
'arg1': 'file://$pubRootTest', 'arg1': 'file://$pubRootTest',
}); });
...@@ -2151,8 +2482,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2151,8 +2482,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip off /src/widgets/text.dart. // Strip off /src/widgets/text.dart.
final String pubRootFramework = final String pubRootFramework =
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}'; '/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.resetPubRootDirectories();
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': pubRootFramework}, <String, String>{'arg0': pubRootFramework},
); );
expect( expect(
...@@ -2171,8 +2503,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2171,8 +2503,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
isNot(contains('createdByLocalProject')), isNot(contains('createdByLocalProject')),
); );
service.resetPubRootDirectories();
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': pubRootFramework, 'arg1': pubRootTest}, <String, String>{'arg0': pubRootFramework, 'arg1': pubRootTest},
); );
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
...@@ -2209,6 +2542,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2209,6 +2542,10 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
pubRootTest = generateTestPubRootDirectory(service); pubRootTest = generateTestPubRootDirectory(service);
}); });
setUp(() {
service.resetPubRootDirectories();
});
testWidgets( testWidgets(
'has createdByLocalProject when the widget is in the pubRootDirectory', 'has createdByLocalProject when the widget is in the pubRootDirectory',
(WidgetTester tester) async { (WidgetTester tester) async {
...@@ -2228,7 +2565,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2228,7 +2565,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': pubRootTest, 'isolateId': '34'}, <String, String>{'arg0': pubRootTest, 'isolateId': '34'},
); );
expect( expect(
...@@ -2259,7 +2596,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2259,7 +2596,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension('setPubRootDirectories', <String, String>{ await service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest', 'arg0': '/invalid/$pubRootTest',
'isolateId': '34' 'isolateId': '34'
}); });
...@@ -2292,7 +2629,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2292,7 +2629,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension( await service.testExtension(
'setPubRootDirectories', 'addPubRootDirectories',
<String, String>{'arg0': 'file://$pubRootTest', 'isolateId': '34'}, <String, String>{'arg0': 'file://$pubRootTest', 'isolateId': '34'},
); );
expect( expect(
...@@ -2323,7 +2660,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2323,7 +2660,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension('setPubRootDirectories', <String, String>{ await service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '$pubRootTest/different', 'arg0': '$pubRootTest/different',
'isolateId': '34' 'isolateId': '34'
}); });
...@@ -2338,7 +2675,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2338,7 +2675,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
); );
testWidgets( testWidgets(
'has createdByLocalProject if at least one of the pubRootDirectories matchesE', 'has createdByLocalProject if at least one of the pubRootDirectories matches',
(WidgetTester tester) async { (WidgetTester tester) async {
await tester.pumpWidget( await tester.pumpWidget(
Directionality( Directionality(
...@@ -2355,7 +2692,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2355,7 +2692,7 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final Element elementA = find.text('a').evaluate().first; final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group'); service.setSelection(elementA, 'my-group');
await service.testExtension('setPubRootDirectories', <String, String>{ await service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '/unrelated/$pubRootTest', 'arg0': '/unrelated/$pubRootTest',
'isolateId': '34', 'isolateId': '34',
'arg1': 'file://$pubRootTest', 'arg1': 'file://$pubRootTest',
...@@ -2381,10 +2718,504 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2381,10 +2718,504 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
return event; return event;
} }
testWidgets('ext.flutter.inspector.trackRebuildDirtyWidgets', (WidgetTester tester) async { group('ext.flutter.inspector createdByLocalProject', () {
service.rebuildCount = 0; late final String pubRootTest;
await tester.pumpWidget(const ClockDemo()); setUpAll(() {
pubRootTest = generateTestPubRootDirectory(service);
});
setUp(() {
service.resetPubRootDirectories();
});
testWidgets(
'reacts to add and removing pubRootDirectories',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
await service.testExtension(
'addPubRootDirectories',
<String, String>{
'arg0': pubRootTest,
'arg1': 'file://$pubRootTest',
'arg2': '/unrelated/$pubRootTest',
},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
await service.testExtension(
'removePubRootDirectories',
<String, String>{
'arg0': pubRootTest,
},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'does not match when the package directory does not match',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '$pubRootTest/different',
'arg1': '/unrelated/$pubRootTest',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'has createdByLocalProject when the pubRootDirectory is prefixed with file://',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0':'file://$pubRootTest'
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle consecutive calls to add',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
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',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle removing an unrelated pubRootDirectory',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': pubRootTest,
'arg1': '/invalid/$pubRootTest',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
service.testExtension('removePubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle parent widget being part of a separate package',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
final Element richText = find
.descendant(
of: find.text('a'),
matching: find.byType(RichText),
)
.evaluate()
.first;
service.setSelection(richText, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{ 'arg0': pubRootTest });
final Map<String, Object?> jsonObject =
(await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
))! as Map<String, Object?>;
expect(jsonObject, isNot(contains('createdByLocalProject')));
final Map<String, Object?> creationLocation =
jsonObject['creationLocation']! as Map<String, Object?>;
expect(creationLocation, isNotNull);
// This RichText widget is created by the build method of the Text widget
// thus the creation location is in text.dart not basic.dart
final List<String> pathSegmentsFramework =
Uri.parse(creationLocation['file']! as String).pathSegments;
expect(
pathSegmentsFramework.join('/'),
endsWith('/flutter/lib/src/widgets/text.dart'),
);
// Strip off /src/widgets/text.dart.
final String pubRootFramework =
'/${pathSegmentsFramework.take(pathSegmentsFramework.length - 3).join('/')}';
service.resetPubRootDirectories();
service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootFramework});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
isNot(contains('createdByLocalProject')),
);
service.resetPubRootDirectories();
service
.testExtension('addPubRootDirectories', <String, String>{
'arg0': pubRootFramework,
'arg1': pubRootTest
});
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
service.setSelection(richText, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group'},
),
contains('createdByLocalProject'),
);
},
);
},
skip: !WidgetInspectorService.instance.isWidgetCreationTracked(), // [intended] Test requires --track-widget-creation flag.
);
group('ext.flutter.inspector createdByLocalProject extra args regression test', () {
late final String pubRootTest;
setUpAll(() {
pubRootTest = generateTestPubRootDirectory(service);
});
setUp(() {
service.resetPubRootDirectories();
});
testWidgets(
'reacts to add and removing pubRootDirectories',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
await service.testExtension(
'addPubRootDirectories',
<String, String>{
'arg0': pubRootTest,
'arg1': 'file://$pubRootTest',
'arg2': '/unrelated/$pubRootTest',
'isolateId': '34',
},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
await service.testExtension(
'removePubRootDirectories',
<String, String>{
'arg0': pubRootTest,
'isolateId': '34',
},
);
service.setSelection(elementA, 'my-group');
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'does not match when the package directory does not match',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '$pubRootTest/different',
'arg1': '/unrelated/$pubRootTest',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
isNot(contains('createdByLocalProject')),
);
},
);
testWidgets(
'has createdByLocalProject when the pubRootDirectory is prefixed with file://',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0':'file://$pubRootTest',
'isolateId': '34',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle consecutive calls to add',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': pubRootTest,
'isolateId': '34',
});
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest',
'isolateId': '34',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
},
);
testWidgets(
'can handle removing an unrelated pubRootDirectory',
(WidgetTester tester) async {
final Widget widget = Directionality(
textDirection: TextDirection.ltr,
child: Stack(
children: const <Widget>[
Text('a'),
Text('b', textDirection: TextDirection.ltr),
Text('c', textDirection: TextDirection.ltr),
],
),
);
await tester.pumpWidget(widget);
final Element elementA = find.text('a').evaluate().first;
service.setSelection(elementA, 'my-group');
service.testExtension('addPubRootDirectories', <String, String>{
'arg0': pubRootTest,
'arg1': '/invalid/$pubRootTest',
'isolateId': '34',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
service.testExtension('removePubRootDirectories', <String, String>{
'arg0': '/invalid/$pubRootTest',
'isolateId': '34',
});
expect(
await service.testExtension(
'getSelectedWidget',
<String, String>{'objectGroup': 'my-group', 'isolateId': '34',},
),
contains('createdByLocalProject'),
);
},
);
},
skip: !WidgetInspectorService.instance.isWidgetCreationTracked(), // [intended] Test requires --track-widget-creation flag.
);
testWidgets('ext.flutter.inspector.trackRebuildDirtyWidgets', (WidgetTester tester) async {
service.rebuildCount = 0;
await tester.pumpWidget(const ClockDemo());
final Element clockDemoElement = find.byType(ClockDemo).evaluate().first; final Element clockDemoElement = find.byType(ClockDemo).evaluate().first;
...@@ -2401,7 +3232,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2401,7 +3232,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
await service.testExtension('setPubRootDirectories', <String, String>{'arg0': pubRootTest}); service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
final List<Map<Object, Object?>> rebuildEvents = final List<Map<Object, Object?>> rebuildEvents =
service.getEventsDispatched('Flutter.RebuiltWidgets'); service.getEventsDispatched('Flutter.RebuiltWidgets');
...@@ -2611,7 +3443,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -2611,7 +3443,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
// Strip a couple subdirectories away to generate a plausible pub root // Strip a couple subdirectories away to generate a plausible pub root
// directory. // directory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
await service.testExtension('setPubRootDirectories', <String, String>{'arg0': pubRootTest}); service.resetPubRootDirectories();
await service.testExtension('addPubRootDirectories', <String, String>{'arg0': pubRootTest});
final List<Map<Object, Object?>> repaintEvents = final List<Map<Object, Object?>> repaintEvents =
service.getEventsDispatched('Flutter.RepaintWidgets'); service.getEventsDispatched('Flutter.RepaintWidgets');
...@@ -3352,7 +4185,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -3352,7 +4185,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
final List<String> segments = Uri.parse(file).pathSegments; final List<String> segments = Uri.parse(file).pathSegments;
// Strip a couple subdirectories away to generate a plausible pub rootdirectory. // Strip a couple subdirectories away to generate a plausible pub rootdirectory.
final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}'; final String pubRootTest = '/${segments.take(segments.length - 2).join('/')}';
service.setPubRootDirectories(<String>[pubRootTest]); service.resetPubRootDirectories();
service.addPubRootDirectories(<String>[pubRootTest]);
final String summary = service.getRootWidgetSummaryTree('foo1'); final String summary = service.getRootWidgetSummaryTree('foo1');
// ignore: avoid_dynamic_calls // ignore: avoid_dynamic_calls
...@@ -3571,8 +4405,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { ...@@ -3571,8 +4405,9 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
} }
static void setupDefaultPubRootDirectory(TestWidgetInspectorService service) { static void setupDefaultPubRootDirectory(TestWidgetInspectorService service) {
service.resetPubRootDirectories();
service service
.setPubRootDirectories(<String>[generateTestPubRootDirectory(service)]); .addPubRootDirectories(<String>[generateTestPubRootDirectory(service)]);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment