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

Side by Side Diff: pkg/analyzer/test/source/analysis_options_provider_test.dart

Issue 1832643002: Allow Analysis Server crawl up the folders to search .analysis_options file. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 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 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 analyzer.test.source.analysis_options_provider_test; 5 library analyzer.test.source.analysis_options_provider_test;
6 6
7 import 'dart:core' hide Resource;
8
7 import 'package:analyzer/file_system/file_system.dart'; 9 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/file_system/memory_file_system.dart'; 10 import 'package:analyzer/file_system/memory_file_system.dart';
9 import 'package:analyzer/source/analysis_options_provider.dart'; 11 import 'package:analyzer/source/analysis_options_provider.dart';
10 import 'package:unittest/unittest.dart'; 12 import 'package:unittest/unittest.dart';
11 import 'package:yaml/yaml.dart'; 13 import 'package:yaml/yaml.dart';
12 14
15 import '../reflective_tests.dart';
13 import '../resource_utils.dart'; 16 import '../resource_utils.dart';
17 import '../utils.dart';
14 18
15 main() { 19 main() {
20 initializeTestEnvironment();
21 runReflectiveTests(AnalysisOptionsProviderTest);
16 group('AnalysisOptionsProvider', () { 22 group('AnalysisOptionsProvider', () {
17 void expectMergesTo(String defaults, String overrides, String expected) { 23 void expectMergesTo(String defaults, String overrides, String expected) {
18 var optionsProvider = new AnalysisOptionsProvider(); 24 var optionsProvider = new AnalysisOptionsProvider();
19 var defaultOptions = optionsProvider.getOptionsFromString(defaults); 25 var defaultOptions = optionsProvider.getOptionsFromString(defaults);
20 var overrideOptions = optionsProvider.getOptionsFromString(overrides); 26 var overrideOptions = optionsProvider.getOptionsFromString(overrides);
21 var merged = optionsProvider.merge(defaultOptions, overrideOptions); 27 var merged = optionsProvider.merge(defaultOptions, overrideOptions);
22 expect(merged, optionsProvider.getOptionsFromString(expected)); 28 expect(merged, optionsProvider.getOptionsFromString(expected));
23 } 29 }
24 30
25 group('merging', () { 31 group('merging', () {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 rules: 66 rules:
61 camel_case_types: true 67 camel_case_types: true
62 one_member_abstracts: false 68 one_member_abstracts: false
63 always_specify_return_types: true 69 always_specify_return_types: true
64 '''); 70 ''');
65 }); 71 });
66 }); 72 });
67 }); 73 });
68 74
69 group('AnalysisOptionsProvider', () { 75 group('AnalysisOptionsProvider', () {
70 setUp(() {
71 buildResourceProvider();
72 });
73 tearDown(() {
74 clearResourceProvider();
75 });
76 test('test_simple', () {
77 var optionsProvider = new AnalysisOptionsProvider();
78 Map<String, YamlNode> options =
79 optionsProvider.getOptions(pathTranslator.getResource('/'));
80 expect(options, hasLength(1));
81 expect(options['analyzer'], isNotNull);
82 YamlMap analyzer = options['analyzer'];
83 expect(analyzer, hasLength(1));
84 expect(analyzer['ignore'], isNotNull);
85 YamlList ignore = analyzer['ignore'];
86 expect(ignore, hasLength(2));
87 expect(ignore[0], 'ignoreme.dart');
88 expect(ignore[1], 'sdk_ext/**');
89 });
90 test('test_doesnotexist', () {
91 var optionsProvider = new AnalysisOptionsProvider();
92 Map<String, YamlNode> options =
93 optionsProvider.getOptions(pathTranslator.getResource('/empty'));
94 expect(options, isEmpty);
95 });
96 });
97 group('AnalysisOptionsProvider', () {
98 setUp(() {
99 buildResourceProvider(emptyAnalysisOptions: true);
100 });
101 tearDown(() {
102 clearResourceProvider();
103 });
104 test('test_empty', () {
105 var optionsProvider = new AnalysisOptionsProvider();
106 Map<String, YamlNode> options =
107 optionsProvider.getOptions(pathTranslator.getResource('/'));
108 expect(options, isNotNull);
109 });
110 });
111 group('AnalysisOptionsProvider', () {
112 setUp(() {
113 buildResourceProvider(badAnalysisOptions: true);
114 });
115 tearDown(() {
116 clearResourceProvider();
117 });
118 test('test_invalid', () {
119 var optionsProvider = new AnalysisOptionsProvider();
120 bool exceptionCaught = false;
121 try {
122 Map<String, YamlNode> options =
123 optionsProvider.getOptions(pathTranslator.getResource('/'));
124 expect(options, isNotNull);
125 } catch (e) {
126 exceptionCaught = true;
127 }
128 expect(exceptionCaught, isTrue);
129 });
130 });
131 group('AnalysisOptionsProvider', () {
132 test('test_bad_yaml (1)', () { 76 test('test_bad_yaml (1)', () {
133 var src = ''' 77 var src = '''
134 analyzer: # <= bang 78 analyzer: # <= bang
135 strong-mode: true 79 strong-mode: true
136 '''; 80 ''';
137 81
138 var optionsProvider = new AnalysisOptionsProvider(); 82 var optionsProvider = new AnalysisOptionsProvider();
139 expect(() => optionsProvider.getOptionsFromString(src), 83 expect(() => optionsProvider.getOptionsFromString(src),
140 throwsA(new isInstanceOf<OptionsFormatException>())); 84 throwsA(new isInstanceOf<OptionsFormatException>()));
141 }); 85 });
142 86
143 test('test_bad_yaml (2)', () { 87 test('test_bad_yaml (2)', () {
144 var src = ''' 88 var src = '''
145 analyzer: 89 analyzer:
146 strong-mode:true # missing space (sdk/issues/24885) 90 strong-mode:true # missing space (sdk/issues/24885)
147 '''; 91 ''';
148 92
149 var optionsProvider = new AnalysisOptionsProvider(); 93 var optionsProvider = new AnalysisOptionsProvider();
150 // Should not throw an exception. 94 // Should not throw an exception.
151 var options = optionsProvider.getOptionsFromString(src); 95 var options = optionsProvider.getOptionsFromString(src);
152 // Should return a non-null options list. 96 // Should return a non-null options list.
153 expect(options, isNotNull); 97 expect(options, isNotNull);
154 }); 98 });
155 }); 99 });
156 } 100 }
157 101
102 TestPathTranslator pathTranslator;
158 ResourceProvider resourceProvider; 103 ResourceProvider resourceProvider;
159 TestPathTranslator pathTranslator;
160 104
161 buildResourceProvider( 105 buildResourceProvider(
162 {bool emptyAnalysisOptions: false, bool badAnalysisOptions: false}) { 106 {bool emptyAnalysisOptions: false, bool badAnalysisOptions: false}) {
163 var rawProvider = new MemoryResourceProvider(isWindows: isWindows); 107 var rawProvider = new MemoryResourceProvider(isWindows: isWindows);
164 resourceProvider = new TestResourceProvider(rawProvider); 108 resourceProvider = new TestResourceProvider(rawProvider);
165 pathTranslator = new TestPathTranslator(rawProvider) 109 pathTranslator = new TestPathTranslator(rawProvider)
166 ..newFolder('/empty') 110 ..newFolder('/empty')
167 ..newFolder('/tmp'); 111 ..newFolder('/tmp');
168 if (badAnalysisOptions) { 112 if (badAnalysisOptions) {
169 pathTranslator.newFile('/.analysis_options', r''':'''); 113 pathTranslator.newFile('/.analysis_options', r''':''');
170 } else if (emptyAnalysisOptions) { 114 } else if (emptyAnalysisOptions) {
171 pathTranslator.newFile('/.analysis_options', r'''#empty'''); 115 pathTranslator.newFile('/.analysis_options', r'''#empty''');
172 } else { 116 } else {
173 pathTranslator.newFile( 117 pathTranslator.newFile(
174 '/.analysis_options', 118 '/.analysis_options',
175 r''' 119 r'''
176 analyzer: 120 analyzer:
177 ignore: 121 ignore:
178 - ignoreme.dart 122 - ignoreme.dart
179 - 'sdk_ext/**' 123 - 'sdk_ext/**'
180 '''); 124 ''');
181 } 125 }
182 } 126 }
183 127
184 clearResourceProvider() { 128 clearResourceProvider() {
185 resourceProvider = null; 129 resourceProvider = null;
186 } 130 }
131
132 @reflectiveTest
133 class AnalysisOptionsProviderTest {
134 TestPathTranslator pathTranslator;
135 ResourceProvider resourceProvider;
136
137 AnalysisOptionsProvider provider = new AnalysisOptionsProvider();
138
139 void setUp() {
140 var rawProvider = new MemoryResourceProvider(isWindows: isWindows);
141 resourceProvider = new TestResourceProvider(rawProvider);
142 pathTranslator = new TestPathTranslator(rawProvider);
143 }
144
145 void test_getOptions_crawlUp_hasInFolder() {
146 pathTranslator.newFolder('/foo/bar');
147 pathTranslator.newFile(
148 '/foo/.analysis_options',
149 r'''
150 analyzer:
151 ignore:
152 - foo
153 ''');
154 pathTranslator.newFile(
155 '/foo/bar/.analysis_options',
156 r'''
157 analyzer:
158 ignore:
159 - bar
160 ''');
161 Map<String, YamlNode> options = _getOptions('/foo/bar', crawlUp: true);
162 expect(options, hasLength(1));
163 {
164 YamlMap analyzer = options['analyzer'];
165 expect(analyzer, isNotNull);
166 expect(analyzer['ignore'], unorderedEquals(['bar']));
167 }
168 }
169
170 void test_getOptions_crawlUp_hasInParent() {
171 pathTranslator.newFolder('/foo/bar/baz');
172 pathTranslator.newFile(
173 '/foo/.analysis_options',
174 r'''
175 analyzer:
176 ignore:
177 - foo
178 ''');
179 pathTranslator.newFile(
180 '/foo/bar/.analysis_options',
181 r'''
182 analyzer:
183 ignore:
184 - bar
185 ''');
186 Map<String, YamlNode> options = _getOptions('/foo/bar/baz', crawlUp: true);
187 expect(options, hasLength(1));
188 {
189 YamlMap analyzer = options['analyzer'];
190 expect(analyzer, isNotNull);
191 expect(analyzer['ignore'], unorderedEquals(['bar']));
192 }
193 }
194
195 void test_getOptions_doesNotExist() {
196 pathTranslator.newFolder('/notFile');
197 Map<String, YamlNode> options = _getOptions('/notFile');
198 expect(options, isEmpty);
199 }
200
201 void test_getOptions_empty() {
202 pathTranslator.newFile('/.analysis_options', r'''#empty''');
203 Map<String, YamlNode> options = _getOptions('/');
204 expect(options, isNotNull);
205 expect(options, isEmpty);
206 }
207
208 void test_getOptions_invalid() {
209 pathTranslator.newFile('/.analysis_options', r''':''');
210 expect(() {
211 _getOptions('/');
212 }, throws);
213 }
214
215 void test_getOptions_simple() {
216 pathTranslator.newFile(
217 '/.analysis_options',
218 r'''
219 analyzer:
220 ignore:
221 - ignoreme.dart
222 - 'sdk_ext/**'
223 ''');
224 Map<String, YamlNode> options = _getOptions('/');
225 expect(options, hasLength(1));
226 {
227 YamlMap analyzer = options['analyzer'];
228 expect(analyzer, hasLength(1));
229 {
230 YamlList ignore = analyzer['ignore'];
231 expect(ignore, hasLength(2));
232 expect(ignore[0], 'ignoreme.dart');
233 expect(ignore[1], 'sdk_ext/**');
234 }
235 }
236 }
237
238 Map<String, YamlNode> _getOptions(String posixPath, {bool crawlUp: false}) {
239 Resource resource = pathTranslator.getResource(posixPath);
240 return provider.getOptions(resource, crawlUp: crawlUp);
241 }
242 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698