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

Side by Side Diff: pkg/analysis_server/test/analysis/notification_analysis_options_test.dart

Issue 1399893004: Context invalidation on option changes (Implements #24574). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Review fix. Created 5 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
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.
4
5 library test.analysis.notification.analysis_options;
6
7 import 'package:analysis_server/plugin/protocol/protocol.dart';
8 import 'package:analysis_server/src/constants.dart';
9 import 'package:analysis_server/src/domain_analysis.dart';
10 import 'package:analyzer/src/generated/engine.dart';
11 import 'package:test_reflective_loader/test_reflective_loader.dart';
12 import 'package:unittest/unittest.dart';
13
14 import '../analysis_abstract.dart';
15 import '../mocks.dart';
16 import '../utils.dart';
17
18 main() {
19 initializeTestEnvironment();
20 defineReflectiveTests(AnalysisOptionsFileNotificationTest);
21 }
22
23 @reflectiveTest
24 class AnalysisOptionsFileNotificationTest extends AbstractAnalysisTest {
25 /// Cached model state in case tests need to set task model to on/off.
26 bool wasTaskModelEnabled;
27
28 Map<String, List<AnalysisError>> filesErrors = {};
29
30 final testSource = '''
31 main() {
32 var x = '';
33 int y = x; // Not assignable in strong-mode
34 print(y);
35 }''';
36
37 List<AnalysisError> get errors => filesErrors[testFile];
38
39 String get optionsFilePath => '$projectPath/.analysis_options';
40
41 AnalysisContext get testContext => server.getContainingContext(testFile);
42
43 void addOptionsFile(String contents) {
44 addFile(optionsFilePath, contents);
45 }
46
47 void deleteFile(String filePath) {
48 resourceProvider.deleteFile(filePath);
49 }
50
51 @override
52 void processNotification(Notification notification) {
53 if (notification.event == ANALYSIS_ERRORS) {
54 var decoded = new AnalysisErrorsParams.fromNotification(notification);
55 filesErrors[decoded.file] = decoded.errors;
56 }
57 }
58
59 void setAnalysisRoot() {
60 Request request =
61 new AnalysisSetAnalysisRootsParams([projectPath], []).toRequest('0');
62 handleSuccessfulRequest(request);
63 }
64
65 void setStrongMode(bool isSet) {
66 addOptionsFile('''
67 analyzer:
68 strong-mode: $isSet
69 ''');
70 }
71
72 @override
73 void setUp() {
74 super.setUp();
75 server.handlers = [new AnalysisDomainHandler(server)];
76 wasTaskModelEnabled = AnalysisEngine.instance.useTaskModel;
77 AnalysisEngine.instance.useTaskModel = true;
78 }
79
80 @override
81 void tearDown() {
82 AnalysisEngine.instance.useTaskModel = wasTaskModelEnabled;
83 super.tearDown();
84 }
85
86 test_options_file_added() async {
87 addTestFile(testSource);
88 setAnalysisRoot();
89
90 await waitForTasksFinished();
91
92 // Verify strong-mode disabled.
93 verifyStrongMode(enabled: false);
94
95 // Clear errors.
96 filesErrors[testFile] = [];
97
98 // Add options file with strong mode enabled.
99 setStrongMode(true);
100
101 await pumpEventQueue();
102 await waitForTasksFinished();
103
104 verifyStrongMode(enabled: true);
105 }
106
107 test_options_file_removed() async {
108 setStrongMode(true);
109
110 addTestFile(testSource);
111 setAnalysisRoot();
112
113 await waitForTasksFinished();
114
115 verifyStrongMode(enabled: true);
116
117 // Clear errors.
118 filesErrors[testFile] = [];
119
120 deleteFile(optionsFilePath);
121
122 await pumpEventQueue();
123 await waitForTasksFinished();
124
125 verifyStrongMode(enabled: false);
126 }
127
128 test_strong_mode_changed() async {
129 setStrongMode(true);
130
131 addTestFile(testSource);
132 setAnalysisRoot();
133
134 await waitForTasksFinished();
135
136 verifyStrongMode(enabled: true);
137
138 // Clear errors.
139 filesErrors[testFile] = [];
140
141 setStrongMode(false);
142
143 await pumpEventQueue();
144 await waitForTasksFinished();
145
146 verifyStrongMode(enabled: false);
147 }
148
149 verifyStrongMode({bool enabled}) {
150 // Verify strong-mode enabled.
151 expect(testContext.analysisOptions.strongMode, enabled);
152
153 if (enabled) {
154 // Should produce a warning and an error.
155 expect(
156 errors.map((error) => error.type),
157 unorderedEquals([
158 AnalysisErrorType.STATIC_TYPE_WARNING,
159 AnalysisErrorType.COMPILE_TIME_ERROR
160 ]));
161 } else {
162 // Should only produce a hint.
163 expect(errors.map((error) => error.type),
164 unorderedEquals([AnalysisErrorType.HINT]));
165 }
166 }
167 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/context_manager.dart ('k') | pkg/analysis_server/test/analysis/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698