Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(591)

Side by Side Diff: pkg/analysis_server/test/services/correction/assist_test.dart

Issue 2701563003: Add assist to reparent Flutter widget (Closed)
Patch Set: Address review comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library test.services.correction.assist; 5 library test.services.correction.assist;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; 9 import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; 10 import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
11 import 'package:analysis_server/plugin/protocol/protocol.dart'; 11 import 'package:analysis_server/plugin/protocol/protocol.dart';
12 import 'package:analysis_server/src/plugin/server_plugin.dart'; 12 import 'package:analysis_server/src/plugin/server_plugin.dart';
13 import 'package:analysis_server/src/services/correction/assist.dart'; 13 import 'package:analysis_server/src/services/correction/assist.dart';
14 import 'package:analysis_server/src/services/correction/assist_internal.dart'; 14 import 'package:analysis_server/src/services/correction/assist_internal.dart';
15 import 'package:analyzer/dart/ast/ast.dart'; 15 import 'package:analyzer/dart/ast/ast.dart';
16 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; 16 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
17 import 'package:analyzer/dart/element/element.dart'; 17 import 'package:analyzer/dart/element/element.dart';
18 import 'package:analyzer/file_system/file_system.dart';
19 import 'package:analyzer/source/package_map_resolver.dart';
18 import 'package:analyzer/src/generated/engine.dart'; 20 import 'package:analyzer/src/generated/engine.dart';
19 import 'package:analyzer/src/generated/source.dart'; 21 import 'package:analyzer/src/generated/source.dart';
20 import 'package:plugin/manager.dart'; 22 import 'package:plugin/manager.dart';
21 import 'package:plugin/plugin.dart'; 23 import 'package:plugin/plugin.dart';
22 import 'package:test/test.dart'; 24 import 'package:test/test.dart';
23 import 'package:test_reflective_loader/test_reflective_loader.dart'; 25 import 'package:test_reflective_loader/test_reflective_loader.dart';
24 26
25 import '../../abstract_single_unit.dart'; 27 import '../../abstract_single_unit.dart';
26 28
27 main() { 29 main() {
(...skipping 3568 matching lines...) Expand 10 before | Expand all | Expand 10 after
3596 final int V = 1; 3598 final int V = 1;
3597 '''); 3599 ''');
3598 await assertHasAssistAt( 3600 await assertHasAssistAt(
3599 'int ', 3601 'int ',
3600 DartAssistKind.REMOVE_TYPE_ANNOTATION, 3602 DartAssistKind.REMOVE_TYPE_ANNOTATION,
3601 ''' 3603 '''
3602 final V = 1; 3604 final V = 1;
3603 '''); 3605 ''');
3604 } 3606 }
3605 3607
3608 test_reparentFlutterWidget_OK_singleLine1() async {
3609 _configureFlutterPkg({
3610 'src/widgets/framework.dart': _flutter_framework_code,
3611 });
3612 await resolveTestUnit('''
3613 import 'package:flutter/src/widgets/framework.dart';
3614 class FakeFlutter {
3615 main() {
3616 // start
3617 return /*caret*/new Container();
3618 // end
3619 }
3620 }
3621 ''');
3622 _setCaretLocation();
3623 await assertHasAssist(
3624 DartAssistKind.REPARENT_FLUTTER_WIDGET,
3625 '''
3626 import 'package:flutter/src/widgets/framework.dart';
3627 class FakeFlutter {
3628 main() {
3629 // start
3630 return /*caret*/new widget(child: new Container());
3631 // end
3632 }
3633 }
3634 ''');
3635 }
3636
3637 test_reparentFlutterWidget_OK_singleLine2() async {
3638 _configureFlutterPkg({
3639 'src/widgets/framework.dart': _flutter_framework_code,
3640 });
3641 await resolveTestUnit('''
3642 import 'package:flutter/src/widgets/framework.dart';
3643 class FakeFlutter {
3644 main() {
3645 // start
3646 return new ClipRect./*caret*/rect();
3647 // end
3648 }
3649 }
3650 ''');
3651 _setCaretLocation();
3652 await assertHasAssist(
3653 DartAssistKind.REPARENT_FLUTTER_WIDGET,
3654 '''
3655 import 'package:flutter/src/widgets/framework.dart';
3656 class FakeFlutter {
3657 main() {
3658 // start
3659 return new widget(child: new ClipRect./*caret*/rect());
3660 // end
3661 }
3662 }
3663 ''');
3664 }
3665
3666 test_reparentFlutterWidget_BAD_singleLine() async {
3667 _configureFlutterPkg({
3668 'src/widgets/framework.dart': _flutter_framework_code,
3669 });
3670 await resolveTestUnit('''
3671 import 'package:flutter/src/widgets/framework.dart';
3672 class FakeFlutter {
3673 main() {
3674 var obj;
3675 // start
3676 return new Container(child: obj.xyz./*caret*/abc);
3677 // end
3678 }
3679 }
3680 ''');
3681 _setCaretLocation();
3682 await assertNoAssist(DartAssistKind.REPARENT_FLUTTER_WIDGET);
3683 }
3684
3685 test_reparentFlutterWidget_OK_multiLines1() async {
3686 _configureFlutterPkg({
3687 'src/widgets/framework.dart': _flutter_framework_code,
3688 });
3689 await resolveTestUnit('''
3690 import 'package:flutter/src/widgets/framework.dart';
3691 class FakeFlutter {
3692 main() {
3693 return new Container(
3694 // start
3695 child: new /*caret*/DefaultTextStyle(
3696 child: new Row(
3697 children: <Widget>[
3698 new Container(
3699 ),
3700 ],
3701 ),
3702 ),
3703 // end
3704 );
3705 }
3706 }
3707 ''');
3708 _setCaretLocation();
3709 await assertHasAssist(
3710 DartAssistKind.REPARENT_FLUTTER_WIDGET,
3711 '''
3712 import 'package:flutter/src/widgets/framework.dart';
3713 class FakeFlutter {
3714 main() {
3715 return new Container(
3716 // start
3717 child: new widget(
3718 child: new /*caret*/DefaultTextStyle(
3719 child: new Row(
3720 children: <Widget>[
3721 new Container(
3722 ),
3723 ],
3724 ),
3725 ),
3726 ),
3727 // end
3728 );
3729 }
3730 }
3731 ''');
3732 }
3733
3606 test_replaceConditionalWithIfElse_BAD_noEnclosingStatement() async { 3734 test_replaceConditionalWithIfElse_BAD_noEnclosingStatement() async {
3607 await resolveTestUnit(''' 3735 await resolveTestUnit('''
3608 var v = true ? 111 : 222; 3736 var v = true ? 111 : 222;
3609 '''); 3737 ''');
3610 await assertNoAssistAt( 3738 await assertNoAssistAt(
3611 '? 111', DartAssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE); 3739 '? 111', DartAssistKind.REPLACE_CONDITIONAL_WITH_IF_ELSE);
3612 } 3740 }
3613 3741
3614 test_replaceConditionalWithIfElse_BAD_notConditional() async { 3742 test_replaceConditionalWithIfElse_BAD_notConditional() async {
3615 await resolveTestUnit(''' 3743 await resolveTestUnit('''
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
4210 4338
4211 List<Position> _findResultPositions(List<String> searchStrings) { 4339 List<Position> _findResultPositions(List<String> searchStrings) {
4212 List<Position> positions = <Position>[]; 4340 List<Position> positions = <Position>[];
4213 for (String search in searchStrings) { 4341 for (String search in searchStrings) {
4214 int offset = resultCode.indexOf(search); 4342 int offset = resultCode.indexOf(search);
4215 positions.add(new Position(testFile, offset)); 4343 positions.add(new Position(testFile, offset));
4216 } 4344 }
4217 return positions; 4345 return positions;
4218 } 4346 }
4219 4347
4348 String flutterPkgLibPath = '/packages/flutter/lib';
4349
4350 /**
4351 * Configures the [SourceFactory] to have the `flutter` package in
4352 * `/packages/flutter/lib` folder.
4353 */
4354 void _configureFlutterPkg(Map<String, String> pathToCode) {
4355 pathToCode.forEach((path, code) {
4356 provider.newFile('$flutterPkgLibPath/$path', code);
4357 });
4358 // configure SourceFactory
4359 Folder myPkgFolder = provider.getResource(flutterPkgLibPath);
4360 UriResolver pkgResolver = new PackageMapUriResolver(provider, {
4361 'flutter': [myPkgFolder]
4362 });
4363 SourceFactory sourceFactory = new SourceFactory(
4364 [new DartUriResolver(sdk), pkgResolver, resourceResolver]);
4365 if (enableNewAnalysisDriver) {
4366 driver.configure(sourceFactory: sourceFactory);
4367 } else {
4368 context.sourceFactory = sourceFactory;
4369 }
4370 // force 'flutter' resolution
4371 addSource(
4372 '/tmp/other.dart',
4373 pathToCode.keys
4374 .map((path) => "import 'package:flutter/$path';")
4375 .join('\n'));
4376 }
4377
4378 String get _flutter_framework_code => '''
4379 class Widget {}
4380 class RenderObjectWidget extends Widget {}
4381 class StatelessWidget extends Widget {}
4382 class SingleChildRenderObjectWidget extends RenderObjectWidget {}
4383 class Transform extends SingleChildRenderObjectWidget {}
4384 class ClipRect extends SingleChildRenderObjectWidget { ClipRect.rect(){} }
4385 class AspectRatio extends SingleChildRenderObjectWidget {}
4386 class Container extends StatelessWidget { Container({child: null}){}}
4387 class DefaultTextStyle extends StatelessWidget { DefaultTextStyle({child: null}) {}}
4388 class Row extends Widget { Row({children: null}){}}
4389 ''';
4390
4220 void _setStartEndSelection() { 4391 void _setStartEndSelection() {
4221 offset = findOffset('// start\n') + '// start\n'.length; 4392 offset = findOffset('// start\n') + '// start\n'.length;
4222 length = findOffset('// end') - offset; 4393 length = findOffset('// end') - offset;
4223 } 4394 }
4395
4396 void _setCaretLocation() {
4397 offset = findOffset('/*caret*/') + '/*caret*/'.length;
4398 length = 0;
4399 }
4224 } 4400 }
4225 4401
4226 @reflectiveTest 4402 @reflectiveTest
4227 class AssistProcessorTest_Driver extends AssistProcessorTest { 4403 class AssistProcessorTest_Driver extends AssistProcessorTest {
4228 @override 4404 @override
4229 bool get enableNewAnalysisDriver => true; 4405 bool get enableNewAnalysisDriver => true;
4230 } 4406 }
4231 4407
4232 class _DartAssistContextForValues implements DartAssistContext { 4408 class _DartAssistContextForValues implements DartAssistContext {
4233 @override 4409 @override
4234 final Source source; 4410 final Source source;
4235 4411
4236 @override 4412 @override
4237 final int selectionOffset; 4413 final int selectionOffset;
4238 4414
4239 @override 4415 @override
4240 final int selectionLength; 4416 final int selectionLength;
4241 4417
4242 @override 4418 @override
4243 final AnalysisContext analysisContext; 4419 final AnalysisContext analysisContext;
4244 4420
4245 @override 4421 @override
4246 final CompilationUnit unit; 4422 final CompilationUnit unit;
4247 4423
4248 _DartAssistContextForValues(this.source, this.selectionOffset, 4424 _DartAssistContextForValues(this.source, this.selectionOffset,
4249 this.selectionLength, this.analysisContext, this.unit); 4425 this.selectionLength, this.analysisContext, this.unit);
4250 } 4426 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698