Index: pkg/analysis_server/test/analysis/notification_errors_test.dart |
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart |
index aa841e3d47fcbba7a0de86648202d989c3afc68e..e1a58637fee627f22c2c33936f391b5a230f2f1c 100644 |
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart |
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart |
@@ -8,6 +8,8 @@ import 'package:analysis_server/src/constants.dart'; |
import 'package:analysis_server/src/domain_analysis.dart'; |
import 'package:analysis_server/src/protocol.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
+import 'package:analyzer/src/services/lint.dart'; |
+import 'package:linter/src/linter.dart'; |
import 'package:test_reflective_loader/test_reflective_loader.dart'; |
import 'package:unittest/unittest.dart'; |
@@ -23,6 +25,9 @@ main() { |
class NotificationErrorsTest extends AbstractAnalysisTest { |
Map<String, List<AnalysisError>> filesErrors = {}; |
+ /// Cached model state in case tests need to set task model to on/off. |
+ bool wasTaskModelEnabled; |
+ |
void processNotification(Notification notification) { |
if (notification.event == ANALYSIS_ERRORS) { |
var decoded = new AnalysisErrorsParams.fromNotification(notification); |
@@ -34,6 +39,13 @@ class NotificationErrorsTest extends AbstractAnalysisTest { |
void setUp() { |
super.setUp(); |
server.handlers = [new AnalysisDomainHandler(server),]; |
+ wasTaskModelEnabled = AnalysisEngine.instance.useTaskModel; |
+ } |
+ |
+ @override |
+ void tearDown() { |
+ AnalysisEngine.instance.useTaskModel = wasTaskModelEnabled; |
+ super.tearDown(); |
} |
test_importError() { |
@@ -54,6 +66,46 @@ import 'does_not_exist.dart'; |
}); |
} |
+ test_lintError() { |
+ // Requires task model. |
+ AnalysisEngine.instance.useTaskModel = true; |
+ |
+ var camelCaseTypesLintName = 'camel_case_types'; |
+ |
+ addFile( |
+ '$projectPath/.analysis_options', |
+ ''' |
+linter: |
+ rules: |
+ - $camelCaseTypesLintName |
+'''); |
+ |
+ addTestFile('class a { }'); |
+ |
+ Request request = |
+ new AnalysisSetAnalysisRootsParams([projectPath], []).toRequest('0'); |
+ handleSuccessfulRequest(request); |
+ |
+ return waitForTasksFinished().then((_) { |
+ // Confirm lint is registered. |
+ expect(lintRegistry, isNotEmpty); |
+ AnalysisContext testContext = server.getContainingContext(testFile); |
+ List<Linter> lints = lintRegistry[testContext]; |
+ // Registry should only contain single lint rule. |
+ expect(lints, hasLength(1)); |
+ LintRule lint = lints.first as LintRule; |
+ expect(lint.name, camelCaseTypesLintName); |
+ // Verify lint error result. |
+ List<AnalysisError> errors = filesErrors[testFile]; |
+ expect(errors, hasLength(1)); |
+ AnalysisError error = errors[0]; |
+ expect(error.location.file, '/project/bin/test.dart'); |
+ expect(error.severity, AnalysisErrorSeverity.INFO); |
+ expect(error.type, AnalysisErrorType.LINT); |
+ expect(error.message, lint.description); |
+ }); |
+ } |
+ |
test_notInAnalysisRoot() { |
createProject(); |
String otherFile = '/other.dart'; |