| // 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.edit.fixes; |
| |
| import 'dart:async'; |
| |
| import 'package:analysis_server/plugin/protocol/protocol.dart'; |
| import 'package:analysis_server/src/domain_analysis.dart'; |
| import 'package:analysis_server/src/edit/edit_domain.dart'; |
| import 'package:plugin/manager.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| import 'package:unittest/unittest.dart' hide ERROR; |
| |
| import '../analysis_abstract.dart'; |
| import '../mocks.dart'; |
| import '../utils.dart'; |
| |
| main() { |
| initializeTestEnvironment(); |
| defineReflectiveTests(FixesTest); |
| } |
| |
| @reflectiveTest |
| class FixesTest extends AbstractAnalysisTest { |
| @override |
| void setUp() { |
| super.setUp(); |
| createProject(); |
| ExtensionManager manager = new ExtensionManager(); |
| manager.processPlugins([server.serverPlugin]); |
| handler = new EditDomainHandler(server); |
| } |
| |
| Future test_fixUndefinedClass() async { |
| addTestFile(''' |
| main() { |
| Future<String> x = null; |
| } |
| '''); |
| await waitForTasksFinished(); |
| List<AnalysisErrorFixes> errorFixes = _getFixesAt('Future<String>'); |
| expect(errorFixes, hasLength(1)); |
| AnalysisError error = errorFixes[0].error; |
| expect(error.severity, AnalysisErrorSeverity.WARNING); |
| expect(error.type, AnalysisErrorType.STATIC_WARNING); |
| List<SourceChange> fixes = errorFixes[0].fixes; |
| expect(fixes, hasLength(2)); |
| expect(fixes[0].message, matches('Import library')); |
| expect(fixes[1].message, matches('Create class')); |
| } |
| |
| Future test_hasFixes() async { |
| addTestFile(''' |
| foo() { |
| print(1) |
| } |
| bar() { |
| print(10) print(20) |
| } |
| '''); |
| await waitForTasksFinished(); |
| // print(1) |
| { |
| List<AnalysisErrorFixes> errorFixes = _getFixesAt('print(1)'); |
| expect(errorFixes, hasLength(1)); |
| _isSyntacticErrorWithSingleFix(errorFixes[0]); |
| } |
| // print(10) |
| { |
| List<AnalysisErrorFixes> errorFixes = _getFixesAt('print(10)'); |
| expect(errorFixes, hasLength(2)); |
| _isSyntacticErrorWithSingleFix(errorFixes[0]); |
| _isSyntacticErrorWithSingleFix(errorFixes[1]); |
| } |
| } |
| |
| Future test_overlayOnlyFile() async { |
| // add an overlay-only file |
| { |
| testCode = ''' |
| main() { |
| print(1) |
| } |
| '''; |
| Request request = new AnalysisUpdateContentParams( |
| {testFile: new AddContentOverlay(testCode)}).toRequest('0'); |
| Response response = |
| new AnalysisDomainHandler(server).handleRequest(request); |
| expect(response, isResponseSuccess('0')); |
| } |
| // ask for fixes |
| await waitForTasksFinished(); |
| List<AnalysisErrorFixes> errorFixes = _getFixesAt('print(1)'); |
| expect(errorFixes, hasLength(1)); |
| _isSyntacticErrorWithSingleFix(errorFixes[0]); |
| } |
| |
| List<AnalysisErrorFixes> _getFixes(int offset) { |
| Request request = new EditGetFixesParams(testFile, offset).toRequest('0'); |
| Response response = handleSuccessfulRequest(request); |
| var result = new EditGetFixesResult.fromResponse(response); |
| return result.fixes; |
| } |
| |
| List<AnalysisErrorFixes> _getFixesAt(String search) { |
| int offset = findOffset(search); |
| return _getFixes(offset); |
| } |
| |
| void _isSyntacticErrorWithSingleFix(AnalysisErrorFixes fixes) { |
| AnalysisError error = fixes.error; |
| expect(error.severity, AnalysisErrorSeverity.ERROR); |
| expect(error.type, AnalysisErrorType.SYNTACTIC_ERROR); |
| expect(fixes.fixes, hasLength(1)); |
| } |
| } |