From 08842365043fcf171e9f11ba744fa4acce688e5d Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Wed, 21 Oct 2020 12:13:10 -0700 Subject: [PATCH] Fix assert due to VSCode passing in an isolateId as well as the expected args to setPubRootDirectories. (#68721) --- .../lib/src/widgets/widget_inspector.dart | 4 +- .../test/widgets/widget_inspector_test.dart | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart index 45a9800508..194a88e966 100644 --- a/packages/flutter/lib/src/widgets/widget_inspector.dart +++ b/packages/flutter/lib/src/widgets/widget_inspector.dart @@ -891,7 +891,9 @@ mixin WidgetInspectorService { } index++; } - assert(index == parameters.length); + // Verify that the only arguments other than perhaps 'isolateId' are + // arguments we have already handled. + assert(index == parameters.length || (index == parameters.length - 1 && parameters.containsKey('isolateId'))); return {'result': await callback(args)}; }, ); diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart index 0f43c6ebe2..ed6e28298f 100644 --- a/packages/flutter/test/widgets/widget_inspector_test.dart +++ b/packages/flutter/test/widgets/widget_inspector_test.dart @@ -1697,6 +1697,58 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), contains('createdByLocalProject')); }, skip: !WidgetInspectorService.instance.isWidgetCreationTracked() || isBrowser); // Test requires --track-widget-creation flag. + testWidgets('ext.flutter.inspector.setPubRootDirectories extra args regression test', (WidgetTester tester) async { + // Ensure that passing the isolate id as an argument won't break + // setPubRootDirectories command. + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: Stack( + children: const [ + Text('a'), + Text('b', textDirection: TextDirection.ltr), + Text('c', textDirection: TextDirection.ltr), + ], + ), + ), + ); + final Element elementA = find.text('a').evaluate().first; + + await service.testExtension('setPubRootDirectories', {'isolateId': '34'}); + service.setSelection(elementA, 'my-group'); + final Map jsonObject = (await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}))! as Map; + final Map creationLocation = jsonObject['creationLocation']! as Map; + expect(creationLocation, isNotNull); + final String fileA = creationLocation['file']! as String; + expect(fileA, endsWith('widget_inspector_test.dart')); + expect(jsonObject, isNot(contains('createdByLocalProject'))); + final List segments = Uri.parse(fileA).pathSegments; + // Strip a couple subdirectories away to generate a plausible pub root + // directory. + final String pubRootTest = '/' + segments.take(segments.length - 2).join('/'); + await service.testExtension('setPubRootDirectories', {'arg0': pubRootTest, 'isolateId': '34'}); + + service.setSelection(elementA, 'my-group'); + expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), contains('createdByLocalProject')); + + await service.testExtension('setPubRootDirectories', {'arg0': '/invalid/$pubRootTest', 'isolateId': '34'}); + expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), isNot(contains('createdByLocalProject'))); + + await service.testExtension('setPubRootDirectories', {'arg0': 'file://$pubRootTest', 'isolateId': '34'}); + expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), contains('createdByLocalProject')); + + await service.testExtension('setPubRootDirectories', {'arg0': '$pubRootTest/different', 'isolateId': '34'}); + expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), isNot(contains('createdByLocalProject'))); + + await service.testExtension('setPubRootDirectories', { + 'arg0': '/unrelated/$pubRootTest', + 'isolateId': '34', + 'arg1': 'file://$pubRootTest', + }); + + expect(await service.testExtension('getSelectedWidget', {'objectGroup': 'my-group'}), contains('createdByLocalProject')); + }, skip: !WidgetInspectorService.instance.isWidgetCreationTracked() || isBrowser); // Test requires --track-widget-creation flag. + testWidgets('ext.flutter.inspector.trackRebuildDirtyWidgets', (WidgetTester tester) async { service.rebuildCount = 0;