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

Unified Diff: pkg/analysis_server/test/services/correction/fix_test.dart

Issue 1736383002: Quick-fix for `annotate_overrides` lint (#25416). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: rev_fixes Created 4 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/services/correction/fix_test.dart
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 0d89134875c2f7086c21e2b72965400fbc619f98..f1bc9986d0cd44e7aba0a359f5b51374c7404959 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -27,12 +27,15 @@ import '../../utils.dart';
main() {
initializeTestEnvironment();
defineReflectiveTests(FixProcessorTest);
+ defineReflectiveTests(LintFixTest);
}
typedef bool AnalysisErrorFilter(AnalysisError error);
-@reflectiveTest
-class FixProcessorTest extends AbstractSingleUnitTest {
+/**
+ * Base class for fix processor tests.
+ */
+class BaseFixProcessorTest extends AbstractSingleUnitTest {
AnalysisErrorFilter errorFilter = (AnalysisError error) {
return error.errorCode != HintCode.UNUSED_CATCH_CLAUSE &&
error.errorCode != HintCode.UNUSED_CATCH_STACK &&
@@ -112,6 +115,80 @@ bool test() {
verifyNoTestUnitErrors = false;
}
+ /**
+ * Computes fixes and verifies that there is a fix of the given kind.
+ */
+ Future<Fix> _assertHasFix(FixKind kind, AnalysisError error) async {
+ List<Fix> fixes = await _computeFixes(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 _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings,
+ [List<LinkedEditSuggestion> expectedSuggestions]) {
+ List<Position> expectedPositions = _findResultPositions(expectedStrings);
+ expect(group.positions, unorderedEquals(expectedPositions));
+ if (expectedSuggestions != null) {
+ expect(group.suggestions, unorderedEquals(expectedSuggestions));
+ }
+ }
+
+ /**
+ * Computes fixes for the given [error] in [testUnit].
+ */
+ Future<List<Fix>> _computeFixes(AnalysisError error) async {
+ DartFixContext dartContext = new DartFixContextImpl(
+ new FixContextImpl(provider, context, error), testUnit);
+ FixProcessor processor = new FixProcessor(dartContext);
+ return processor.compute();
+ }
+
+ /**
+ * Configures the [SourceFactory] to have the `my_pkg` package in
+ * `/packages/my_pkg/lib` folder.
+ */
+ void _configureMyPkg(String myLibCode) {
+ provider.newFile('/packages/my_pkg/lib/my_lib.dart', myLibCode);
+ // configure SourceFactory
+ Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib');
+ UriResolver pkgResolver = new PackageMapUriResolver(provider, {
+ 'my_pkg': [myPkgFolder]
+ });
+ context.sourceFactory = new SourceFactory(
+ [AbstractContextTest.SDK_RESOLVER, pkgResolver, resourceResolver]);
+ // force 'my_pkg' resolution
+ addSource('/tmp/other.dart', "import 'package:my_pkg/my_lib.dart';");
+ }
+
+ AnalysisError _findErrorToFix() {
+ List<AnalysisError> errors = context.computeErrors(testSource);
+ if (errorFilter != null) {
+ errors = errors.where(errorFilter).toList();
+ }
+ expect(errors, hasLength(1));
+ return errors[0];
+ }
+
+ List<Position> _findResultPositions(List<String> searchStrings) {
+ List<Position> positions = <Position>[];
+ for (String search in searchStrings) {
+ int offset = resultCode.indexOf(search);
+ positions.add(new Position(testFile, offset));
+ }
+ return positions;
+ }
+
+ void _performAnalysis() {
+ while (context.performAnalysisTask().hasMoreWork);
+ }
+}
+
+@reflectiveTest
+class FixProcessorTest extends BaseFixProcessorTest {
test_addFieldFormalParameters_hasRequiredParameter() async {
resolveTestUnit('''
class Test {
@@ -4946,75 +5023,101 @@ main() {
}
''');
}
+}
- /**
- * Computes fixes and verifies that there is a fix of the given kind.
- */
- Future<Fix> _assertHasFix(FixKind kind, AnalysisError error) async {
- List<Fix> fixes = await _computeFixes(error);
- for (Fix fix in fixes) {
- if (fix.kind == kind) {
- return fix;
- }
- }
- throw fail('Expected to find fix $kind in\n${fixes.join('\n')}');
- }
+@reflectiveTest
+class LintFixTest extends BaseFixProcessorTest {
+ AnalysisError error;
- void _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings,
- [List<LinkedEditSuggestion> expectedSuggestions]) {
- List<Position> expectedPositions = _findResultPositions(expectedStrings);
- expect(group.positions, unorderedEquals(expectedPositions));
- if (expectedSuggestions != null) {
- expect(group.suggestions, unorderedEquals(expectedSuggestions));
- }
+ Future applyFix(FixKind kind) async {
+ fix = await _assertHasFix(kind, error);
+ change = fix.change;
+ // apply to "file"
+ List<SourceFileEdit> fileEdits = change.edits;
+ expect(fileEdits, hasLength(1));
+ resultCode = SourceEdit.applySequence(testCode, change.edits[0].edits);
}
- /**
- * Computes fixes for the given [error] in [testUnit].
- */
- Future<List<Fix>> _computeFixes(AnalysisError error) async {
- DartFixContext dartContext = new DartFixContextImpl(
- new FixContextImpl(provider, context, error), testUnit);
- FixProcessor processor = new FixProcessor(dartContext);
- return processor.compute();
+ void findLint(String src, String lintCode) {
+ int errorOffset = src.indexOf('/*LINT*/');
+ resolveTestUnit(src.replaceAll('/*LINT*/', ''));
+ error = new AnalysisError(testUnit.element.source, errorOffset, 1,
+ new LintCode(lintCode, '<ignored>'));
}
- /**
- * Configures the [SourceFactory] to have the `my_pkg` package in
- * `/packages/my_pkg/lib` folder.
- */
- void _configureMyPkg(String myLibCode) {
- provider.newFile('/packages/my_pkg/lib/my_lib.dart', myLibCode);
- // configure SourceFactory
- Folder myPkgFolder = provider.getResource('/packages/my_pkg/lib');
- UriResolver pkgResolver = new PackageMapUriResolver(provider, {
- 'my_pkg': [myPkgFolder]
- });
- context.sourceFactory = new SourceFactory(
- [AbstractContextTest.SDK_RESOLVER, pkgResolver, resourceResolver]);
- // force 'my_pkg' resolution
- addSource('/tmp/other.dart', "import 'package:my_pkg/my_lib.dart';");
+ test_lint_addMissingOverride_field() async {
+ String src = '''
+class abstract Test {
+ int get t;
+}
+class Sub extends Test {
+ int /*LINT*/t = 42;
+}
+''';
+ findLint(src, LintNames.annotate_overrides);
+
+ await applyFix(DartFixKind.LINT_ADD_OVERRIDE);
+
+ verifyResult('''
+class abstract Test {
+ int get t;
+}
+class Sub extends Test {
+ @override
+ int t = 42;
+}
+''');
}
- AnalysisError _findErrorToFix() {
- List<AnalysisError> errors = context.computeErrors(testSource);
- if (errorFilter != null) {
- errors = errors.where(errorFilter).toList();
- }
- expect(errors, hasLength(1));
- return errors[0];
+ test_lint_addMissingOverride_getter() async {
+ String src = '''
+class Test {
+ int get t => null;
+}
+class Sub extends Test {
+ int get /*LINT*/t => null;
+}
+''';
+ findLint(src, LintNames.annotate_overrides);
+
+ await applyFix(DartFixKind.LINT_ADD_OVERRIDE);
+
+ verifyResult('''
+class Test {
+ int get t => null;
+}
+class Sub extends Test {
+ @override
+ int get t => null;
+}
+''');
}
- List<Position> _findResultPositions(List<String> searchStrings) {
- List<Position> positions = <Position>[];
- for (String search in searchStrings) {
- int offset = resultCode.indexOf(search);
- positions.add(new Position(testFile, offset));
- }
- return positions;
+ test_lint_addMissingOverride_method() async {
+ String src = '''
+class Test {
+ void t() { }
+}
+class Sub extends Test {
+ void /*LINT*/t() { }
+}
+''';
+ findLint(src, LintNames.annotate_overrides);
+
+ await applyFix(DartFixKind.LINT_ADD_OVERRIDE);
+
+ verifyResult('''
+class Test {
+ void t() { }
+}
+class Sub extends Test {
+ @override
+ void t() { }
+}
+''');
}
- void _performAnalysis() {
- while (context.performAnalysisTask().hasMoreWork);
+ void verifyResult(String expectedResult) {
+ expect(resultCode, expectedResult);
}
}

Powered by Google App Engine
This is Rietveld 408576698