Index: pkg/analysis_services/test/correction/fix_test.dart |
diff --git a/pkg/analysis_services/test/correction/fix_test.dart b/pkg/analysis_services/test/correction/fix_test.dart |
deleted file mode 100644 |
index 4a755ab97dab6a9af3c6d571815d4332b71e87af..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_services/test/correction/fix_test.dart |
+++ /dev/null |
@@ -1,1880 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library test.services.correction.fix; |
- |
-import 'package:analysis_services/correction/change.dart'; |
-import 'package:analysis_services/correction/fix.dart'; |
-import 'package:analysis_services/index/index.dart'; |
-import 'package:analysis_services/index/local_memory_index.dart'; |
-import 'package:analysis_services/src/search/search_engine.dart'; |
-import 'package:analysis_testing/abstract_context.dart'; |
-import 'package:analysis_testing/abstract_single_unit.dart'; |
-import 'package:analysis_testing/reflective_tests.dart'; |
-import 'package:analyzer/file_system/file_system.dart'; |
-import 'package:analyzer/source/package_map_resolver.dart'; |
-import 'package:analyzer/src/generated/error.dart'; |
-import 'package:analyzer/src/generated/source.dart'; |
-import 'package:unittest/unittest.dart'; |
- |
- |
-main() { |
- groupSep = ' | '; |
- runReflectiveTests(FixProcessorTest); |
-} |
- |
- |
-@ReflectiveTestCase() |
-class FixProcessorTest extends AbstractSingleUnitTest { |
- Index index; |
- SearchEngineImpl searchEngine; |
- |
- Fix fix; |
- Change change; |
- String resultCode; |
- |
- void assertHasFix(FixKind kind, String expected) { |
- AnalysisError error = _findErrorToFix(); |
- fix = _assertHasFix(kind, error); |
- change = fix.change; |
- // apply to "file" |
- List<FileEdit> fileEdits = change.fileEdits; |
- expect(fileEdits, hasLength(1)); |
- resultCode = Edit.applySequence(testCode, change.fileEdits[0].edits); |
- // verify |
- expect(resultCode, expected); |
- } |
- |
- void assertHasPositionGroup(String id, List<Position> expectedPositions) { |
- List<LinkedEditGroup> linkedPositionGroups = change.linkedEditGroups; |
- for (LinkedEditGroup group in linkedPositionGroups) { |
- if (group.id == id) { |
- expect(group.positions, unorderedEquals(expectedPositions)); |
- return; |
- } |
- } |
- fail('No PositionGroup with id=$id found in $linkedPositionGroups'); |
- } |
- |
- void assertNoFix(FixKind kind) { |
- AnalysisError error = _findErrorToFix(); |
- List<Fix> fixes = computeFixes(searchEngine, testUnit, error); |
- for (Fix fix in fixes) { |
- if (fix.kind == kind) { |
- throw fail('Unexpected fix $kind in\n${fixes.join('\n')}'); |
- } |
- } |
- } |
- |
- void assert_undefinedFunction_create_returnType_bool(String lineWithTest) { |
- _indexTestUnit(''' |
-main() { |
- bool b = true; |
- $lineWithTest |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- bool b = true; |
- $lineWithTest |
-} |
- |
-bool test() { |
-} |
-'''); |
- } |
- |
- Position expectedPosition(String search) { |
- int offset = resultCode.indexOf(search); |
- int length = getLeadingIdentifierLength(search); |
- return new Position(testFile, offset); |
- } |
- |
- List<Position> expectedPositions(List<String> patterns) { |
- List<Position> positions = <Position>[]; |
- patterns.forEach((String search) { |
- positions.add(expectedPosition(search)); |
- }); |
- return positions; |
- } |
- |
- void setUp() { |
- super.setUp(); |
- index = createLocalMemoryIndex(); |
- searchEngine = new SearchEngineImpl(index); |
- verifyNoTestUnitErrors = false; |
- } |
- |
- void test_boolean() { |
- _indexTestUnit(''' |
-main() { |
- boolean v; |
-} |
-'''); |
- assertHasFix(FixKind.REPLACE_BOOLEAN_WITH_BOOL, ''' |
-main() { |
- bool v; |
-} |
-'''); |
- } |
- |
- void test_changeToStaticAccess_method() { |
- _indexTestUnit(''' |
-class A { |
- static foo() {} |
-} |
-main(A a) { |
- a.foo(); |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO_STATIC_ACCESS, ''' |
-class A { |
- static foo() {} |
-} |
-main(A a) { |
- A.foo(); |
-} |
-'''); |
- } |
- |
- void test_changeToStaticAccess_method_prefixLibrary() { |
- _indexTestUnit(''' |
-import 'dart:async' as pref; |
-main(pref.Future f) { |
- f.wait([]); |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO_STATIC_ACCESS, ''' |
-import 'dart:async' as pref; |
-main(pref.Future f) { |
- pref.Future.wait([]); |
-} |
-'''); |
- } |
- |
- void test_changeToStaticAccess_property() { |
- _indexTestUnit(''' |
-class A { |
- static get foo => 42; |
-} |
-main(A a) { |
- a.foo; |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO_STATIC_ACCESS, ''' |
-class A { |
- static get foo => 42; |
-} |
-main(A a) { |
- A.foo; |
-} |
-'''); |
- } |
- |
- void test_createClass() { |
- _indexTestUnit(''' |
-main() { |
- Test v = null; |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CLASS, ''' |
-main() { |
- Test v = null; |
-} |
- |
-class Test { |
-} |
-'''); |
- assertHasPositionGroup('NAME', expectedPositions(['Test v =', 'Test {'])); |
- } |
- |
- void test_createConstructorSuperExplicit() { |
- _indexTestUnit(''' |
-class A { |
- A(bool p1, int p2, double p3, String p4, {p5}); |
-} |
-class B extends A { |
- B() {} |
-} |
-'''); |
- assertHasFix(FixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION, ''' |
-class A { |
- A(bool p1, int p2, double p3, String p4, {p5}); |
-} |
-class B extends A { |
- B() : super(false, 0, 0.0, '') {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperExplicit_hasInitializers() { |
- _indexTestUnit(''' |
-class A { |
- A(int p); |
-} |
-class B extends A { |
- int field; |
- B() : field = 42 {} |
-} |
-'''); |
- assertHasFix(FixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION, ''' |
-class A { |
- A(int p); |
-} |
-class B extends A { |
- int field; |
- B() : field = 42, super(0) {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperExplicit_named() { |
- _indexTestUnit(''' |
-class A { |
- A.named(int p); |
-} |
-class B extends A { |
- B() {} |
-} |
-'''); |
- assertHasFix(FixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION, ''' |
-class A { |
- A.named(int p); |
-} |
-class B extends A { |
- B() : super.named(0) {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperExplicit_named_private() { |
- _indexTestUnit(''' |
-class A { |
- A._named(int p); |
-} |
-class B extends A { |
- B() {} |
-} |
-'''); |
- assertNoFix(FixKind.ADD_SUPER_CONSTRUCTOR_INVOCATION); |
- } |
- |
- void test_createConstructorSuperImplicit() { |
- _indexTestUnit(''' |
-class A { |
- A(p1, int p2, List<String> p3, [int p4]); |
-} |
-class B extends A { |
- int existingField; |
- |
- void existingMethod() {} |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CONSTRUCTOR_SUPER, ''' |
-class A { |
- A(p1, int p2, List<String> p3, [int p4]); |
-} |
-class B extends A { |
- int existingField; |
- |
- B(p1, int p2, List<String> p3) : super(p1, p2, p3); |
- |
- void existingMethod() {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperImplicit_fieldInitializer() { |
- _indexTestUnit(''' |
-class A { |
- int _field; |
- A(this._field); |
-} |
-class B extends A { |
- int existingField; |
- |
- void existingMethod() {} |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CONSTRUCTOR_SUPER, ''' |
-class A { |
- int _field; |
- A(this._field); |
-} |
-class B extends A { |
- int existingField; |
- |
- B(int field) : super(field); |
- |
- void existingMethod() {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperImplicit_named() { |
- _indexTestUnit(''' |
-class A { |
- A.named(p1, int p2); |
-} |
-class B extends A { |
- int existingField; |
- |
- void existingMethod() {} |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CONSTRUCTOR_SUPER, ''' |
-class A { |
- A.named(p1, int p2); |
-} |
-class B extends A { |
- int existingField; |
- |
- B.named(p1, int p2) : super.named(p1, p2); |
- |
- void existingMethod() {} |
-} |
-'''); |
- } |
- |
- void test_createConstructorSuperImplicit_private() { |
- _indexTestUnit(''' |
-class A { |
- A._named(p); |
-} |
-class B extends A { |
-} |
-'''); |
- assertNoFix(FixKind.CREATE_CONSTRUCTOR_SUPER); |
- } |
- |
- void test_createConstructor_insteadOfSyntheticDefault() { |
- _indexTestUnit(''' |
-class A { |
- int field; |
- |
- method() {} |
-} |
-main() { |
- new A(1, 2.0); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CONSTRUCTOR, ''' |
-class A { |
- int field; |
- |
- A(int i, double d) { |
- } |
- |
- method() {} |
-} |
-main() { |
- new A(1, 2.0); |
-} |
-'''); |
- } |
- |
- void test_createConstructor_named() { |
- _indexTestUnit(''' |
-class A { |
- method() {} |
-} |
-main() { |
- new A.named(1, 2.0); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_CONSTRUCTOR, ''' |
-class A { |
- A.named(int i, double d) { |
- } |
- |
- method() {} |
-} |
-main() { |
- new A.named(1, 2.0); |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_functionType() { |
- _indexTestUnit(''' |
-abstract class A { |
- forEach(int f(double p1, String p2)); |
-} |
- |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-abstract class A { |
- forEach(int f(double p1, String p2)); |
-} |
- |
-class B extends A { |
- @override |
- forEach(int f(double p1, String p2)) { |
- // TODO: implement forEach |
- } |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_generics() { |
- _indexTestUnit(''' |
-class Iterator<T> { |
-} |
- |
-abstract class IterableMixin<T> { |
- Iterator<T> get iterator; |
-} |
- |
-class Test extends IterableMixin<int> { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-class Iterator<T> { |
-} |
- |
-abstract class IterableMixin<T> { |
- Iterator<T> get iterator; |
-} |
- |
-class Test extends IterableMixin<int> { |
- // TODO: implement iterator |
- @override |
- Iterator<int> get iterator => null; |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_getter() { |
- _indexTestUnit(''' |
-abstract class A { |
- get g1; |
- int get g2; |
-} |
- |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-abstract class A { |
- get g1; |
- int get g2; |
-} |
- |
-class B extends A { |
- // TODO: implement g1 |
- @override |
- get g1 => null; |
- |
- // TODO: implement g2 |
- @override |
- int get g2 => null; |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_importPrefix() { |
- _indexTestUnit(''' |
-import 'dart:async' as aaa; |
-abstract class A { |
- Map<aaa.Future, List<aaa.Future>> g(aaa.Future p); |
-} |
- |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-import 'dart:async' as aaa; |
-abstract class A { |
- Map<aaa.Future, List<aaa.Future>> g(aaa.Future p); |
-} |
- |
-class B extends A { |
- @override |
- Map<aaa.Future, List<aaa.Future>> g(aaa.Future p) { |
- // TODO: implement g |
- } |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_method() { |
- _indexTestUnit(''' |
-abstract class A { |
- m1(); |
- int m2(); |
- String m3(int p1, double p2, Map<int, List<String>> p3); |
- String m4(p1, p2); |
- String m5(p1, [int p2 = 2, int p3, p4 = 4]); |
- String m6(p1, {int p2: 2, int p3, p4: 4}); |
-} |
- |
-class B extends A { |
-} |
-'''); |
- String expectedCode = ''' |
-abstract class A { |
- m1(); |
- int m2(); |
- String m3(int p1, double p2, Map<int, List<String>> p3); |
- String m4(p1, p2); |
- String m5(p1, [int p2 = 2, int p3, p4 = 4]); |
- String m6(p1, {int p2: 2, int p3, p4: 4}); |
-} |
- |
-class B extends A { |
- @override |
- m1() { |
- // TODO: implement m1 |
- } |
- |
- @override |
- int m2() { |
- // TODO: implement m2 |
- } |
- |
- @override |
- String m3(int p1, double p2, Map<int, List<String>> p3) { |
- // TODO: implement m3 |
- } |
- |
- @override |
- String m4(p1, p2) { |
- // TODO: implement m4 |
- } |
- |
- @override |
- String m5(p1, [int p2 = 2, int p3, p4 = 4]) { |
- // TODO: implement m5 |
- } |
- |
- @override |
- String m6(p1, {int p2: 2, int p3, p4: 4}) { |
- // TODO: implement m6 |
- } |
-} |
-'''; |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, expectedCode); |
- // end position should be on "m1", not on "m2", "m3", etc |
- { |
- Position endPosition = change.selection; |
- expect(endPosition, isNotNull); |
- expect(endPosition.file, testFile); |
- int endOffset = endPosition.offset; |
- String endString = expectedCode.substring(endOffset, endOffset + 25); |
- expect(endString, contains('m1')); |
- expect(endString, isNot(contains('m2'))); |
- expect(endString, isNot(contains('m3'))); |
- expect(endString, isNot(contains('m4'))); |
- expect(endString, isNot(contains('m5'))); |
- expect(endString, isNot(contains('m6'))); |
- } |
- } |
- |
- void test_createMissingOverrides_operator() { |
- _indexTestUnit(''' |
-abstract class A { |
- int operator [](int index); |
- void operator []=(int index, String value); |
-} |
- |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-abstract class A { |
- int operator [](int index); |
- void operator []=(int index, String value); |
-} |
- |
-class B extends A { |
- @override |
- int operator [](int index) { |
- // TODO: implement [] |
- } |
- |
- @override |
- void operator []=(int index, String value) { |
- // TODO: implement []= |
- } |
-} |
-'''); |
- } |
- |
- void test_createMissingOverrides_setter() { |
- _indexTestUnit(''' |
-abstract class A { |
- set s1(x); |
- set s2(int x); |
- void set s3(String x); |
-} |
- |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_MISSING_OVERRIDES, ''' |
-abstract class A { |
- set s1(x); |
- set s2(int x); |
- void set s3(String x); |
-} |
- |
-class B extends A { |
- @override |
- set s1(x) { |
- // TODO: implement s1 |
- } |
- |
- @override |
- set s2(int x) { |
- // TODO: implement s2 |
- } |
- |
- @override |
- void set s3(String x) { |
- // TODO: implement s3 |
- } |
-} |
-'''); |
- } |
- |
- void test_createNoSuchMethod() { |
- _indexTestUnit(''' |
-abstract class A { |
- m1(); |
- int m2(); |
-} |
- |
-class B extends A { |
- existing() {} |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_NO_SUCH_METHOD, ''' |
-abstract class A { |
- m1(); |
- int m2(); |
-} |
- |
-class B extends A { |
- existing() {} |
- |
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
-} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_cascadeSecond() { |
- _indexTestUnit(''' |
-class A { |
- B ma() => null; |
-} |
-class B { |
- useFunction(int g(double a, String b)) {} |
-} |
- |
-main() { |
- A a = new A(); |
- a..ma().useFunction(test); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-class A { |
- B ma() => null; |
-} |
-class B { |
- useFunction(int g(double a, String b)) {} |
-} |
- |
-main() { |
- A a = new A(); |
- a..ma().useFunction(test); |
-} |
- |
-int test(double a, String b) { |
-} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_dynamicArgument() { |
- _indexTestUnit(''' |
-main() { |
- useFunction(test); |
-} |
-useFunction(int g(a, b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- useFunction(test); |
-} |
-useFunction(int g(a, b)) {} |
- |
-int test(a, b) { |
-} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_function() { |
- _indexTestUnit(''' |
-main() { |
- useFunction(test); |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- useFunction(test); |
-} |
-useFunction(int g(double a, String b)) {} |
- |
-int test(double a, String b) { |
-} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_method_enclosingClass_static() { |
- _indexTestUnit(''' |
-class A { |
- static foo() { |
- useFunction(test); |
- } |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- static foo() { |
- useFunction(test); |
- } |
- |
- static int test(double a, String b) { |
- } |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_method_enclosingClass_static2() { |
- _indexTestUnit(''' |
-class A { |
- var f; |
- A() : f = useFunction(test); |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- var f; |
- A() : f = useFunction(test); |
- |
- static int test(double a, String b) { |
- } |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_method_targetClass() { |
- _indexTestUnit(''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-class A { |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-class A { |
- int test(double a, String b) { |
- } |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- } |
- |
- void |
- test_creationFunction_forFunctionType_method_targetClass_hasOtherMember() { |
- _indexTestUnit(''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-class A { |
- m() {} |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-class A { |
- m() {} |
- |
- int test(double a, String b) { |
- } |
-} |
-useFunction(int g(double a, String b)) {} |
-'''); |
- } |
- |
- void test_creationFunction_forFunctionType_notFunctionType() { |
- _indexTestUnit(''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-typedef A(); |
-useFunction(g) {} |
-'''); |
- assertNoFix(FixKind.CREATE_METHOD); |
- assertNoFix(FixKind.CREATE_FUNCTION); |
- } |
- |
- void test_creationFunction_forFunctionType_unknownTarget() { |
- _indexTestUnit(''' |
-main(A a) { |
- useFunction(a.test); |
-} |
-class A { |
-} |
-useFunction(g) {} |
-'''); |
- assertNoFix(FixKind.CREATE_METHOD); |
- } |
- |
- void test_expectedToken_semicolon() { |
- _indexTestUnit(''' |
-main() { |
- print(0) |
-} |
-'''); |
- assertHasFix(FixKind.INSERT_SEMICOLON, ''' |
-main() { |
- print(0); |
-} |
-'''); |
- } |
- |
- void test_importLibraryPackage_withType() { |
- provider.newFile('/packages/my_pkg/lib/my_lib.dart', ''' |
-library my_lib; |
-class Test {} |
-'''); |
- { |
- Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib'); |
- UriResolver pkgResolver = new PackageMapUriResolver(provider, { |
- 'my_pkg': [myPkgFolder] |
- }); |
- context.sourceFactory = new SourceFactory( |
- [AbstractContextTest.SDK_RESOLVER, resourceResolver, pkgResolver]); |
- } |
- // force 'my_pkg' resolution |
- addSource('/tmp/other.dart', "import 'package:my_pkg/my_lib.dart';"); |
- // try to find a fix |
- _indexTestUnit(''' |
-main() { |
- Test test = null; |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import 'package:my_pkg/my_lib.dart'; |
- |
-main() { |
- Test test = null; |
-} |
-'''); |
- } |
- |
- void test_importLibraryPrefix_withTopLevelVariable() { |
- _indexTestUnit(''' |
-import 'dart:math' as pref; |
-main() { |
- print(pref.E); |
- print(PI); |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PREFIX, ''' |
-import 'dart:math' as pref; |
-main() { |
- print(pref.E); |
- print(pref.PI); |
-} |
-'''); |
- } |
- |
- void test_importLibraryPrefix_withType() { |
- _indexTestUnit(''' |
-import 'dart:async' as pref; |
-main() { |
- pref.Stream s = null; |
- Future f = null; |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PREFIX, ''' |
-import 'dart:async' as pref; |
-main() { |
- pref.Stream s = null; |
- pref.Future f = null; |
-} |
-'''); |
- } |
- |
- void test_importLibraryProject_withFunction() { |
- addSource('/lib.dart', ''' |
-library lib; |
-myFunction() {} |
-'''); |
- _indexTestUnit(''' |
-main() { |
- myFunction(); |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import 'lib.dart'; |
- |
-main() { |
- myFunction(); |
-} |
-'''); |
- } |
- |
- void test_importLibraryProject_withTopLevelVariable() { |
- addSource('/lib.dart', ''' |
-library lib; |
-int MY_VAR = 42; |
-'''); |
- _indexTestUnit(''' |
-main() { |
- print(MY_VAR); |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import 'lib.dart'; |
- |
-main() { |
- print(MY_VAR); |
-} |
-'''); |
- } |
- |
- void test_importLibraryProject_withType_inParentFolder() { |
- testFile = '/project/bin/test.dart'; |
- addSource('/project/lib.dart', ''' |
-library lib; |
-class Test {} |
-'''); |
- _indexTestUnit(''' |
-main() { |
- Test t = null; |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import '../lib.dart'; |
- |
-main() { |
- Test t = null; |
-} |
-'''); |
- } |
- |
- void test_importLibraryProject_withType_inRelativeFolder() { |
- testFile = '/project/bin/test.dart'; |
- addSource('/project/lib/sub/folder/lib.dart', ''' |
-library lib; |
-class Test {} |
-'''); |
- _indexTestUnit(''' |
-main() { |
- Test t = null; |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import '../lib/sub/folder/lib.dart'; |
- |
-main() { |
- Test t = null; |
-} |
-'''); |
- } |
- |
- void test_importLibraryProject_withType_inSameFolder() { |
- testFile = '/project/bin/test.dart'; |
- addSource('/project/bin/lib.dart', ''' |
-library lib; |
-class Test {} |
-'''); |
- _indexTestUnit(''' |
-main() { |
- Test t = null; |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_PROJECT, ''' |
-import 'lib.dart'; |
- |
-main() { |
- Test t = null; |
-} |
-'''); |
- } |
- |
- void test_importLibrarySdk_withTopLevelVariable() { |
- _ensureSdkMathLibraryResolved(); |
- _indexTestUnit(''' |
-main() { |
- print(PI); |
-} |
-'''); |
- performAllAnalysisTasks(); |
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, ''' |
-import 'dart:math'; |
- |
-main() { |
- print(PI); |
-} |
-'''); |
- } |
- |
- void test_importLibrarySdk_withType_invocationTarget() { |
- _ensureSdkAsyncLibraryResolved(); |
- _indexTestUnit(''' |
-main() { |
- Future.wait(null); |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, ''' |
-import 'dart:async'; |
- |
-main() { |
- Future.wait(null); |
-} |
-'''); |
- } |
- |
- void test_importLibrarySdk_withType_typeAnnotation() { |
- _ensureSdkAsyncLibraryResolved(); |
- _indexTestUnit(''' |
-main() { |
- Future f = null; |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, ''' |
-import 'dart:async'; |
- |
-main() { |
- Future f = null; |
-} |
-'''); |
- } |
- |
- void test_importLibrarySdk_withType_typeAnnotation_PrefixedIdentifier() { |
- _ensureSdkAsyncLibraryResolved(); |
- _indexTestUnit(''' |
-main() { |
- Future.wait; |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_SDK, ''' |
-import 'dart:async'; |
- |
-main() { |
- Future.wait; |
-} |
-'''); |
- } |
- |
- void test_importLibraryShow() { |
- _indexTestUnit(''' |
-import 'dart:async' show Stream; |
-main() { |
- Stream s = null; |
- Future f = null; |
-} |
-'''); |
- assertHasFix(FixKind.IMPORT_LIBRARY_SHOW, ''' |
-import 'dart:async' show Future, Stream; |
-main() { |
- Stream s = null; |
- Future f = null; |
-} |
-'''); |
- } |
- |
- void test_isNotNull() { |
- _indexTestUnit(''' |
-main(p) { |
- p is! Null; |
-} |
-'''); |
- assertHasFix(FixKind.USE_NOT_EQ_NULL, ''' |
-main(p) { |
- p != null; |
-} |
-'''); |
- } |
- |
- void test_isNull() { |
- _indexTestUnit(''' |
-main(p) { |
- p is Null; |
-} |
-'''); |
- assertHasFix(FixKind.USE_EQ_EQ_NULL, ''' |
-main(p) { |
- p == null; |
-} |
-'''); |
- } |
- |
- void test_makeEnclosingClassAbstract_declaresAbstractMethod() { |
- _indexTestUnit(''' |
-class A { |
- m(); |
-} |
-'''); |
- assertHasFix(FixKind.MAKE_CLASS_ABSTRACT, ''' |
-abstract class A { |
- m(); |
-} |
-'''); |
- } |
- |
- void test_makeEnclosingClassAbstract_inheritsAbstractMethod() { |
- _indexTestUnit(''' |
-abstract class A { |
- m(); |
-} |
-class B extends A { |
-} |
-'''); |
- assertHasFix(FixKind.MAKE_CLASS_ABSTRACT, ''' |
-abstract class A { |
- m(); |
-} |
-abstract class B extends A { |
-} |
-'''); |
- } |
- |
- void test_removeParentheses_inGetterDeclaration() { |
- _indexTestUnit(''' |
-class A { |
- int get foo() => 0; |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_PARAMETERS_IN_GETTER_DECLARATION, ''' |
-class A { |
- int get foo => 0; |
-} |
-'''); |
- } |
- |
- void test_removeParentheses_inGetterInvocation() { |
- _indexTestUnit(''' |
-class A { |
- int get foo => 0; |
-} |
-main(A a) { |
- a.foo(); |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_PARENTHESIS_IN_GETTER_INVOCATION, ''' |
-class A { |
- int get foo => 0; |
-} |
-main(A a) { |
- a.foo; |
-} |
-'''); |
- } |
- |
- void test_removeUnnecessaryCast_assignment() { |
- _indexTestUnit(''' |
-main(Object p) { |
- if (p is String) { |
- String v = ((p as String)); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_UNNECASSARY_CAST, ''' |
-main(Object p) { |
- if (p is String) { |
- String v = p; |
- } |
-} |
-'''); |
- } |
- |
- void test_removeUnusedImport() { |
- _indexTestUnit(''' |
-import 'dart:math'; |
-main() { |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_UNUSED_IMPORT, ''' |
-main() { |
-} |
-'''); |
- } |
- |
- void test_removeUnusedImport_anotherImportOnLine() { |
- _indexTestUnit(''' |
-import 'dart:math'; import 'dart:async'; |
- |
-main() { |
- Future f; |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_UNUSED_IMPORT, ''' |
-import 'dart:async'; |
- |
-main() { |
- Future f; |
-} |
-'''); |
- } |
- |
- void test_removeUnusedImport_severalLines() { |
- _indexTestUnit(''' |
-import |
- 'dart:math'; |
-main() { |
-} |
-'''); |
- assertHasFix(FixKind.REMOVE_UNUSED_IMPORT, ''' |
-main() { |
-} |
-'''); |
- } |
- |
- void test_replaceWithConstInstanceCreation() { |
- _indexTestUnit(''' |
-class A { |
- const A(); |
-} |
-const a = new A(); |
-'''); |
- assertHasFix(FixKind.USE_CONST, ''' |
-class A { |
- const A(); |
-} |
-const a = const A(); |
-'''); |
- } |
- |
- void test_undefinedClass_useSimilar_fromImport() { |
- _indexTestUnit(''' |
-main() { |
- Stirng s = 'abc'; |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-main() { |
- String s = 'abc'; |
-} |
-'''); |
- } |
- |
- void test_undefinedClass_useSimilar_fromThisLibrary() { |
- _indexTestUnit(''' |
-class MyClass {} |
-main() { |
- MyCalss v = null; |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-class MyClass {} |
-main() { |
- MyClass v = null; |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_fromFunction() { |
- _indexTestUnit(''' |
-main() { |
- int v = myUndefinedFunction(1, 2.0, '3'); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- int v = myUndefinedFunction(1, 2.0, '3'); |
-} |
- |
-int myUndefinedFunction(int i, double d, String s) { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_fromMethod() { |
- _indexTestUnit(''' |
-class A { |
- main() { |
- int v = myUndefinedFunction(1, 2.0, '3'); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-class A { |
- main() { |
- int v = myUndefinedFunction(1, 2.0, '3'); |
- } |
-} |
- |
-int myUndefinedFunction(int i, double d, String s) { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_bool_expressions() { |
- assert_undefinedFunction_create_returnType_bool("!test();"); |
- assert_undefinedFunction_create_returnType_bool("b && test();"); |
- assert_undefinedFunction_create_returnType_bool("test() && b;"); |
- assert_undefinedFunction_create_returnType_bool("b || test();"); |
- assert_undefinedFunction_create_returnType_bool("test() || b;"); |
- } |
- |
- void test_undefinedFunction_create_returnType_bool_statements() { |
- assert_undefinedFunction_create_returnType_bool("assert ( test() );"); |
- assert_undefinedFunction_create_returnType_bool("if ( test() ) {}"); |
- assert_undefinedFunction_create_returnType_bool("while ( test() ) {}"); |
- assert_undefinedFunction_create_returnType_bool("do {} while ( test() );"); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromAssignment_eq() { |
- _indexTestUnit(''' |
-main() { |
- int v; |
- v = myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- int v; |
- v = myUndefinedFunction(); |
-} |
- |
-int myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromAssignment_plusEq() { |
- _indexTestUnit(''' |
-main() { |
- int v; |
- v += myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- int v; |
- v += myUndefinedFunction(); |
-} |
- |
-num myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromBinary_right() { |
- _indexTestUnit(''' |
-main() { |
- 0 + myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- 0 + myUndefinedFunction(); |
-} |
- |
-num myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromInitializer() { |
- _indexTestUnit(''' |
-main() { |
- int v = myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- int v = myUndefinedFunction(); |
-} |
- |
-int myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromInvocationArgument() { |
- _indexTestUnit(''' |
-foo(int p) {} |
-main() { |
- foo( myUndefinedFunction() ); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-foo(int p) {} |
-main() { |
- foo( myUndefinedFunction() ); |
-} |
- |
-int myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_fromReturn() { |
- _indexTestUnit(''' |
-int main() { |
- return myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-int main() { |
- return myUndefinedFunction(); |
-} |
- |
-int myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_create_returnType_void() { |
- _indexTestUnit(''' |
-main() { |
- myUndefinedFunction(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_FUNCTION, ''' |
-main() { |
- myUndefinedFunction(); |
-} |
- |
-void myUndefinedFunction() { |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_useSimilar_fromImport() { |
- _indexTestUnit(''' |
-main() { |
- pritn(0); |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-main() { |
- print(0); |
-} |
-'''); |
- } |
- |
- void test_undefinedFunction_useSimilar_thisLibrary() { |
- _indexTestUnit(''' |
-myFunction() {} |
-main() { |
- myFuntcion(); |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-myFunction() {} |
-main() { |
- myFunction(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_createQualified_fromClass() { |
- _indexTestUnit(''' |
-class A { |
-} |
-main() { |
- A.myUndefinedMethod(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- static void myUndefinedMethod() { |
- } |
-} |
-main() { |
- A.myUndefinedMethod(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_createQualified_fromClass_hasOtherMember() { |
- _indexTestUnit(''' |
-class A { |
- foo() {} |
-} |
-main() { |
- A.myUndefinedMethod(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- foo() {} |
- |
- static void myUndefinedMethod() { |
- } |
-} |
-main() { |
- A.myUndefinedMethod(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_createQualified_fromInstance() { |
- _indexTestUnit(''' |
-class A { |
-} |
-main(A a) { |
- a.myUndefinedMethod(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- void myUndefinedMethod() { |
- } |
-} |
-main(A a) { |
- a.myUndefinedMethod(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_createQualified_targetIsFunctionType() { |
- _indexTestUnit(''' |
-typedef A(); |
-main() { |
- A.myUndefinedMethod(); |
-} |
-'''); |
- assertNoFix(FixKind.CREATE_METHOD); |
- } |
- |
- void test_undefinedMethod_createQualified_targetIsUnresolved() { |
- _indexTestUnit(''' |
-main() { |
- NoSuchClass.myUndefinedMethod(); |
-} |
-'''); |
- assertNoFix(FixKind.CREATE_METHOD); |
- } |
- |
- void test_undefinedMethod_createUnqualified_parameters() { |
- _indexTestUnit(''' |
-class A { |
- main() { |
- myUndefinedMethod(0, 1.0, '3'); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- main() { |
- myUndefinedMethod(0, 1.0, '3'); |
- } |
- |
- void myUndefinedMethod(int i, double d, String s) { |
- } |
-} |
-'''); |
- // linked positions |
- _assertHasLinkedPositions( |
- 'NAME', |
- ['myUndefinedMethod(0', 'myUndefinedMethod(int']); |
- _assertHasLinkedPositions('RETURN_TYPE', ['void myUndefinedMethod(']); |
- _assertHasLinkedPositions('TYPE0', ['int i']); |
- _assertHasLinkedPositions('TYPE1', ['double d']); |
- _assertHasLinkedPositions('TYPE2', ['String s']); |
- _assertHasLinkedPositions('ARG0', ['i,']); |
- _assertHasLinkedPositions('ARG1', ['d,']); |
- _assertHasLinkedPositions('ARG2', ['s)']); |
- // linked proposals |
- _assertHasLinkedSuggestions( |
- 'TYPE0', |
- expectedSuggestions( |
- LinkedEditSuggestionKind.TYPE, |
- ['int', 'num', 'Object', 'Comparable'])); |
- _assertHasLinkedSuggestions( |
- 'TYPE1', |
- expectedSuggestions( |
- LinkedEditSuggestionKind.TYPE, |
- ['double', 'num', 'Object', 'Comparable'])); |
- _assertHasLinkedSuggestions( |
- 'TYPE2', |
- expectedSuggestions( |
- LinkedEditSuggestionKind.TYPE, |
- ['String', 'Object', 'Comparable'])); |
- } |
- |
- List<LinkedEditSuggestion> expectedSuggestions(LinkedEditSuggestionKind kind, |
- List<String> values) { |
- return values.map((value) { |
- return new LinkedEditSuggestion(kind, value); |
- }).toList(); |
- } |
- |
- void test_undefinedMethod_createUnqualified_returnType() { |
- _indexTestUnit(''' |
-class A { |
- main() { |
- int v = myUndefinedMethod(); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- main() { |
- int v = myUndefinedMethod(); |
- } |
- |
- int myUndefinedMethod() { |
- } |
-} |
-'''); |
- // linked positions |
- _assertHasLinkedPositions( |
- 'NAME', |
- ['myUndefinedMethod();', 'myUndefinedMethod() {']); |
- _assertHasLinkedPositions('RETURN_TYPE', ['int myUndefinedMethod(']); |
- } |
- |
- void test_undefinedMethod_createUnqualified_staticFromField() { |
- _indexTestUnit(''' |
-class A { |
- static var f = myUndefinedMethod(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- static var f = myUndefinedMethod(); |
- |
- static myUndefinedMethod() { |
- } |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_createUnqualified_staticFromMethod() { |
- _indexTestUnit(''' |
-class A { |
- static main() { |
- myUndefinedMethod(); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- static main() { |
- myUndefinedMethod(); |
- } |
- |
- static void myUndefinedMethod() { |
- } |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_hint_createQualified_fromInstance() { |
- _indexTestUnit(''' |
-class A { |
-} |
-main() { |
- var a = new A(); |
- a.myUndefinedMethod(); |
-} |
-'''); |
- assertHasFix(FixKind.CREATE_METHOD, ''' |
-class A { |
- void myUndefinedMethod() { |
- } |
-} |
-main() { |
- var a = new A(); |
- a.myUndefinedMethod(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_useSimilar_ignoreOperators() { |
- _indexTestUnit(''' |
-main(Object object) { |
- object.then(); |
-} |
-'''); |
- assertNoFix(FixKind.CHANGE_TO); |
- } |
- |
- void test_undefinedMethod_useSimilar_qualified() { |
- _indexTestUnit(''' |
-class A { |
- myMethod() {} |
-} |
-main() { |
- A a = new A(); |
- a.myMehtod(); |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-class A { |
- myMethod() {} |
-} |
-main() { |
- A a = new A(); |
- a.myMethod(); |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_useSimilar_unqualified_superClass() { |
- _indexTestUnit(''' |
-class A { |
- myMethod() {} |
-} |
-class B extends A { |
- main() { |
- myMehtod(); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-class A { |
- myMethod() {} |
-} |
-class B extends A { |
- main() { |
- myMethod(); |
- } |
-} |
-'''); |
- } |
- |
- void test_undefinedMethod_useSimilar_unqualified_thisClass() { |
- _indexTestUnit(''' |
-class A { |
- myMethod() {} |
- main() { |
- myMehtod(); |
- } |
-} |
-'''); |
- assertHasFix(FixKind.CHANGE_TO, ''' |
-class A { |
- myMethod() {} |
- main() { |
- myMethod(); |
- } |
-} |
-'''); |
- } |
- |
- void test_useEffectiveIntegerDivision() { |
- _indexTestUnit(''' |
-main() { |
- var a = 5; |
- var b = 2; |
- print((a / b).toInt()); |
-} |
-'''); |
- assertHasFix(FixKind.USE_EFFECTIVE_INTEGER_DIVISION, ''' |
-main() { |
- var a = 5; |
- var b = 2; |
- print(a ~/ b); |
-} |
-'''); |
- } |
- |
- /** |
- * Computes fixes and verifies that there is a fix of the given kind. |
- */ |
- Fix _assertHasFix(FixKind kind, AnalysisError error) { |
- List<Fix> fixes = computeFixes(searchEngine, testUnit, error); |
- for (Fix fix in fixes) { |
- if (fix.kind == kind) { |
- return fix; |
- } |
- } |
- throw fail('Expected to find fix $kind in\n${fixes.join('\n')}'); |
- } |
- |
- void _assertHasLinkedPositions(String groupId, List<String> expectedStrings) { |
- List<Position> expectedPositions = _findResultPositions(expectedStrings); |
- List<LinkedEditGroup> groups = change.linkedEditGroups; |
- for (LinkedEditGroup group in groups) { |
- if (group.id == groupId) { |
- List<Position> actualPositions = group.positions; |
- expect(actualPositions, unorderedEquals(expectedPositions)); |
- return; |
- } |
- } |
- fail('No group with ID=$groupId foind in\n${groups.join('\n')}'); |
- } |
- |
- void _assertHasLinkedSuggestions(String groupId, |
- List<LinkedEditSuggestion> expected) { |
- List<LinkedEditGroup> groups = change.linkedEditGroups; |
- for (LinkedEditGroup group in groups) { |
- if (group.id == groupId) { |
- expect(group.suggestions, expected); |
- return; |
- } |
- } |
- fail('No group with ID=$groupId foind in\n${groups.join('\n')}'); |
- } |
- |
- /** |
- * We search for elements only already resolved lbiraries, and we use |
- * `dart:async` elements in tests. |
- */ |
- void _ensureSdkAsyncLibraryResolved() { |
- resolveLibraryUnit(addSource('/other.dart', 'import "dart:async";')); |
- } |
- |
- /** |
- * We search for elements only already resolved lbiraries, and we use |
- * `dart:async` elements in tests. |
- */ |
- void _ensureSdkMathLibraryResolved() { |
- resolveLibraryUnit(addSource('/other.dart', 'import "dart:math";')); |
- } |
- |
- AnalysisError _findErrorToFix() { |
- List<AnalysisError> errors = context.computeErrors(testSource); |
- expect( |
- errors, |
- hasLength(1), |
- reason: 'Exactly 1 error expected, but ${errors.length} found:\n' + |
- errors.join('\n')); |
- return errors[0]; |
- } |
- |
- List<Position> _findResultPositions(List<String> searchStrings) { |
- List<Position> positions = <Position>[]; |
- for (String search in searchStrings) { |
- int offset = resultCode.indexOf(search); |
- int length = getLeadingIdentifierLength(search); |
- positions.add(new Position(testFile, offset)); |
- } |
- return positions; |
- } |
- |
- void _indexTestUnit(String code) { |
- resolveTestUnit(code); |
- index.indexUnit(context, testUnit); |
- } |
-} |