Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.edit.fixes; | 5 library test.edit.fixes; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; | 9 import 'package:analysis_server/plugin/protocol/protocol.dart'; |
| 10 import 'package:analysis_server/src/domain_analysis.dart'; | 10 import 'package:analysis_server/src/domain_analysis.dart'; |
| 11 import 'package:analysis_server/src/edit/edit_domain.dart'; | 11 import 'package:analysis_server/src/edit/edit_domain.dart'; |
| 12 import 'package:analysis_server/src/services/correction/fix.dart'; | |
| 12 import 'package:plugin/manager.dart'; | 13 import 'package:plugin/manager.dart'; |
| 13 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 14 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 14 import 'package:unittest/unittest.dart' hide ERROR; | 15 import 'package:unittest/unittest.dart' hide ERROR; |
| 15 | 16 |
| 16 import '../analysis_abstract.dart'; | 17 import '../analysis_abstract.dart'; |
| 17 import '../mocks.dart'; | 18 import '../mocks.dart'; |
| 18 import '../utils.dart'; | 19 import '../utils.dart'; |
| 19 | 20 |
| 20 main() { | 21 main() { |
| 21 initializeTestEnvironment(); | 22 initializeTestEnvironment(); |
| 22 defineReflectiveTests(FixesTest); | 23 defineReflectiveTests(FixesTest); |
| 23 } | 24 } |
| 24 | 25 |
| 25 @reflectiveTest | 26 @reflectiveTest |
| 26 class FixesTest extends AbstractAnalysisTest { | 27 class FixesTest extends AbstractAnalysisTest { |
| 27 @override | 28 @override |
| 28 void setUp() { | 29 void setUp() { |
| 29 super.setUp(); | 30 super.setUp(); |
| 30 createProject(); | 31 createProject(); |
| 31 ExtensionManager manager = new ExtensionManager(); | 32 ExtensionManager manager = new ExtensionManager(); |
| 32 manager.processPlugins([server.serverPlugin]); | 33 manager.processPlugins([server.serverPlugin]); |
| 33 handler = new EditDomainHandler(server); | 34 handler = new EditDomainHandler(server); |
| 34 } | 35 } |
| 35 | 36 |
| 36 test_fixUndefinedClass() async { | 37 test_fixUndefinedClass() async { |
| 37 addTestFile(''' | 38 addTestFile(''' |
| 38 main() { | 39 main() { |
| 39 Future<String> x = null; | 40 Future<String> x = null; |
| 41 print(x); | |
|
scheglov
2016/03/04 18:55:20
Why do we need this statement?
pquitslund
2016/03/04 19:09:39
Without it, we get an `unused_local_variable` hint
| |
| 40 } | 42 } |
| 41 '''); | 43 '''); |
| 42 await waitForTasksFinished(); | 44 await waitForTasksFinished(); |
| 43 List<AnalysisErrorFixes> errorFixes = await _getFixesAt('Future<String>'); | 45 List<AnalysisErrorFixes> errorFixes = await _getFixesAt('Future<String>'); |
| 44 expect(errorFixes, hasLength(1)); | 46 expect(errorFixes, hasLength(1)); |
| 45 AnalysisError error = errorFixes[0].error; | 47 AnalysisError error = errorFixes[0].error; |
| 46 expect(error.severity, AnalysisErrorSeverity.WARNING); | 48 expect(error.severity, AnalysisErrorSeverity.WARNING); |
| 47 expect(error.type, AnalysisErrorType.STATIC_WARNING); | 49 expect(error.type, AnalysisErrorType.STATIC_WARNING); |
| 48 List<SourceChange> fixes = errorFixes[0].fixes; | 50 List<SourceChange> fixes = errorFixes[0].fixes; |
| 49 expect(fixes, hasLength(2)); | 51 expect(fixes, hasLength(3)); |
| 50 expect(fixes[0].message, matches('Import library')); | 52 expect(fixes[0].message, matches('Import library')); |
| 51 expect(fixes[1].message, matches('Create class')); | 53 expect(fixes[1].message, matches('Create class')); |
| 54 expect( | |
| 55 fixes[2].message, matches("Ignore error with code 'undefined_class'")); | |
| 52 } | 56 } |
| 53 | 57 |
| 54 test_hasFixes() async { | 58 test_hasFixes() async { |
| 55 addTestFile(''' | 59 addTestFile(''' |
| 56 foo() { | 60 foo() { |
| 57 print(1) | 61 print(1) |
| 58 } | 62 } |
| 59 bar() { | 63 bar() { |
| 60 print(10) print(20) | 64 print(10) print(20) |
| 61 } | 65 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 109 return await _getFixes(offset); | 113 return await _getFixes(offset); |
| 110 } | 114 } |
| 111 | 115 |
| 112 void _isSyntacticErrorWithSingleFix(AnalysisErrorFixes fixes) { | 116 void _isSyntacticErrorWithSingleFix(AnalysisErrorFixes fixes) { |
| 113 AnalysisError error = fixes.error; | 117 AnalysisError error = fixes.error; |
| 114 expect(error.severity, AnalysisErrorSeverity.ERROR); | 118 expect(error.severity, AnalysisErrorSeverity.ERROR); |
| 115 expect(error.type, AnalysisErrorType.SYNTACTIC_ERROR); | 119 expect(error.type, AnalysisErrorType.SYNTACTIC_ERROR); |
| 116 expect(fixes.fixes, hasLength(1)); | 120 expect(fixes.fixes, hasLength(1)); |
| 117 } | 121 } |
| 118 } | 122 } |
| OLD | NEW |