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

Side by Side Diff: pkg/analyzer/test/src/task/dart_test.dart

Issue 1029953002: Task: BuildClassConstructorsTask. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add TODO Created 5 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 | Annotate | Revision Log
« no previous file with comments | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 test.src.task.dart_test; 5 library test.src.task.dart_test;
6 6
7 import 'package:analyzer/file_system/file_system.dart'; 7 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/file_system/memory_file_system.dart'; 8 import 'package:analyzer/file_system/memory_file_system.dart';
9 import 'package:analyzer/src/context/cache.dart'; 9 import 'package:analyzer/src/context/cache.dart';
10 import 'package:analyzer/src/generated/ast.dart'; 10 import 'package:analyzer/src/generated/ast.dart';
(...skipping 13 matching lines...) Expand all
24 import 'package:analyzer/task/model.dart'; 24 import 'package:analyzer/task/model.dart';
25 import 'package:typed_mock/typed_mock.dart'; 25 import 'package:typed_mock/typed_mock.dart';
26 import 'package:unittest/unittest.dart'; 26 import 'package:unittest/unittest.dart';
27 27
28 import '../../generated/test_support.dart'; 28 import '../../generated/test_support.dart';
29 import '../../reflective_tests.dart'; 29 import '../../reflective_tests.dart';
30 import '../mock_sdk.dart'; 30 import '../mock_sdk.dart';
31 31
32 main() { 32 main() {
33 groupSep = ' | '; 33 groupSep = ' | ';
34 runReflectiveTests(BuildClassConstructorsTaskTest);
34 runReflectiveTests(BuildCompilationUnitElementTaskTest); 35 runReflectiveTests(BuildCompilationUnitElementTaskTest);
35 runReflectiveTests(BuildDirectiveElementsTaskTest); 36 runReflectiveTests(BuildDirectiveElementsTaskTest);
36 runReflectiveTests(BuildEnumMemberElementsTaskTest); 37 runReflectiveTests(BuildEnumMemberElementsTaskTest);
37 runReflectiveTests(BuildExportSourceClosureTaskTest); 38 runReflectiveTests(BuildExportSourceClosureTaskTest);
38 runReflectiveTests(BuildExportNamespaceTaskTest); 39 runReflectiveTests(BuildExportNamespaceTaskTest);
39 runReflectiveTests(BuildFunctionTypeAliasesTaskTest); 40 runReflectiveTests(BuildFunctionTypeAliasesTaskTest);
40 runReflectiveTests(BuildLibraryElementTaskTest); 41 runReflectiveTests(BuildLibraryElementTaskTest);
41 runReflectiveTests(BuildPublicNamespaceTaskTest); 42 runReflectiveTests(BuildPublicNamespaceTaskTest);
42 runReflectiveTests(BuildTypeProviderTaskTest); 43 runReflectiveTests(BuildTypeProviderTaskTest);
43 runReflectiveTests(ParseDartTaskTest); 44 runReflectiveTests(ParseDartTaskTest);
44 runReflectiveTests(ResolveUnitTypeNamesTaskTest); 45 runReflectiveTests(ResolveUnitTypeNamesTaskTest);
45 runReflectiveTests(ResolveLibraryTypeNamesTaskTest); 46 runReflectiveTests(ResolveLibraryTypeNamesTaskTest);
46 runReflectiveTests(ScanDartTaskTest); 47 runReflectiveTests(ScanDartTaskTest);
47 } 48 }
48 49
49 @reflectiveTest 50 @reflectiveTest
51 class BuildClassConstructorsTaskTest extends _AbstractDartTaskTest {
52 test_perform_ClassDeclaration_errors_mixinHasNoConstructors() {
53 Source source = _newSource('/test.dart', '''
54 class B {
55 B({x});
56 }
57 class M {}
58 class C extends B with M {}
59 ''');
60 LibraryElement libraryElement;
61 {
62 _computeResult(source, LIBRARY_ELEMENT5);
63 libraryElement = outputs[LIBRARY_ELEMENT5];
64 }
65 // prepare C
66 ClassElement c = libraryElement.getType('C');
67 expect(c, isNotNull);
68 // build constructors
69 _computeResult(c, CONSTRUCTORS);
70 expect(task, new isInstanceOf<BuildClassConstructorsTask>());
71 _fillErrorListener(CONSTRUCTORS_ERRORS);
72 errorListener.assertErrorsWithCodes(
73 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
74 }
75
76 test_perform_ClassDeclaration_explicitConstructors() {
77 Source source = _newSource('/test.dart', '''
78 class B {
79 B(p);
80 }
81 class C extends B {
82 C(int a, String b) {}
83 }
84 ''');
85 LibraryElement libraryElement;
86 {
87 _computeResult(source, LIBRARY_ELEMENT5);
88 libraryElement = outputs[LIBRARY_ELEMENT5];
89 }
90 // prepare C
91 ClassElement c = libraryElement.getType('C');
92 expect(c, isNotNull);
93 // build constructors
94 _computeResult(c, CONSTRUCTORS);
95 expect(task, new isInstanceOf<BuildClassConstructorsTask>());
96 // no errors
97 expect(outputs[CONSTRUCTORS_ERRORS], isEmpty);
98 // explicit constructor
99 List<ConstructorElement> constructors = outputs[CONSTRUCTORS];
100 expect(constructors, hasLength(1));
101 expect(constructors[0].parameters, hasLength(2));
102 }
103
104 test_perform_ClassTypeAlias() {
105 Source source = _newSource('/test.dart', '''
106 class B {
107 B(int i);
108 }
109 class M1 {}
110 class M2 {}
111
112 class C2 = C1 with M2;
113 class C1 = B with M1;
114 ''');
115 LibraryElement libraryElement;
116 {
117 _computeResult(source, LIBRARY_ELEMENT5);
118 libraryElement = outputs[LIBRARY_ELEMENT5];
119 }
120 // prepare C2
121 ClassElement class2 = libraryElement.getType('C2');
122 expect(class2, isNotNull);
123 // build constructors
124 _computeResult(class2, CONSTRUCTORS);
125 expect(task, new isInstanceOf<BuildClassConstructorsTask>());
126 List<ConstructorElement> constructors = outputs[CONSTRUCTORS];
127 expect(constructors, hasLength(1));
128 expect(constructors[0].parameters, hasLength(1));
129 }
130
131 test_perform_ClassTypeAlias_errors_mixinHasNoConstructors() {
132 Source source = _newSource('/test.dart', '''
133 class B {
134 B({x});
135 }
136 class M {}
137 class C = B with M;
138 ''');
139 LibraryElement libraryElement;
140 {
141 _computeResult(source, LIBRARY_ELEMENT5);
142 libraryElement = outputs[LIBRARY_ELEMENT5];
143 }
144 // prepare C
145 ClassElement c = libraryElement.getType('C');
146 expect(c, isNotNull);
147 // build constructors
148 _computeResult(c, CONSTRUCTORS);
149 expect(task, new isInstanceOf<BuildClassConstructorsTask>());
150 _fillErrorListener(CONSTRUCTORS_ERRORS);
151 errorListener.assertErrorsWithCodes(
152 <ErrorCode>[CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS]);
153 }
154 }
155
156 @reflectiveTest
50 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { 157 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest {
51 test_buildInputs() { 158 test_buildInputs() {
52 LibraryUnitTarget target = new LibraryUnitTarget(emptySource, emptySource); 159 LibraryUnitTarget target = new LibraryUnitTarget(emptySource, emptySource);
53 Map<String, TaskInput> inputs = 160 Map<String, TaskInput> inputs =
54 BuildCompilationUnitElementTask.buildInputs(target); 161 BuildCompilationUnitElementTask.buildInputs(target);
55 expect(inputs, isNotNull); 162 expect(inputs, isNotNull);
56 expect(inputs.keys, unorderedEquals( 163 expect(inputs.keys, unorderedEquals(
57 [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME])); 164 [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME]));
58 } 165 }
59 166
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // perform task 263 // perform task
157 _computeResult(sourceA, LIBRARY_ELEMENT2); 264 _computeResult(sourceA, LIBRARY_ELEMENT2);
158 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); 265 expect(task, new isInstanceOf<BuildDirectiveElementsTask>());
159 // prepare outputs 266 // prepare outputs
160 LibraryElement libraryElementA = outputs[LIBRARY_ELEMENT2]; 267 LibraryElement libraryElementA = outputs[LIBRARY_ELEMENT2];
161 LibraryElement libraryElementB = _getImportLibraryInput(sourceB); 268 LibraryElement libraryElementB = _getImportLibraryInput(sourceB);
162 LibraryElement libraryElementC = _getExportLibraryInput(sourceC); 269 LibraryElement libraryElementC = _getExportLibraryInput(sourceC);
163 // no errors 270 // no errors
164 _assertErrorsWithCodes([]); 271 _assertErrorsWithCodes([]);
165 // validate directives 272 // validate directives
166 CompilationUnit libraryUnitA = context.getCacheEntry(new LibraryUnitTarget(s ourceA, sourceA)).getValue(RESOLVED_UNIT1); 273 CompilationUnit libraryUnitA = context
274 .getCacheEntry(new LibraryUnitTarget(sourceA, sourceA))
275 .getValue(RESOLVED_UNIT1);
167 { 276 {
168 ImportDirective importNode = libraryUnitA.directives[1]; 277 ImportDirective importNode = libraryUnitA.directives[1];
169 ImportElement importElement = importNode.element; 278 ImportElement importElement = importNode.element;
170 expect(importElement, isNotNull); 279 expect(importElement, isNotNull);
171 expect(importElement.importedLibrary, libraryElementB); 280 expect(importElement.importedLibrary, libraryElementB);
172 expect(importElement.prefix, isNull); 281 expect(importElement.prefix, isNull);
173 expect(importElement.nameOffset, 14); 282 expect(importElement.nameOffset, 14);
174 expect(importElement.uriOffset, 21); 283 expect(importElement.uriOffset, 21);
175 expect(importElement.uriEnd, 32); 284 expect(importElement.uriEnd, 32);
176 } 285 }
(...skipping 24 matching lines...) Expand all
201 ''', 310 ''',
202 '/libB.dart': ''' 311 '/libB.dart': '''
203 library libB; 312 library libB;
204 ''' 313 '''
205 }); 314 });
206 Source sourceA = sources[0]; 315 Source sourceA = sources[0];
207 // perform task 316 // perform task
208 _computeResult(sourceA, LIBRARY_ELEMENT2); 317 _computeResult(sourceA, LIBRARY_ELEMENT2);
209 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); 318 expect(task, new isInstanceOf<BuildDirectiveElementsTask>());
210 // prepare outputs 319 // prepare outputs
211 CompilationUnit libraryUnitA = context.getCacheEntry(new LibraryUnitTarget(s ourceA, sourceA)).getValue(RESOLVED_UNIT1); 320 CompilationUnit libraryUnitA = context
321 .getCacheEntry(new LibraryUnitTarget(sourceA, sourceA))
322 .getValue(RESOLVED_UNIT1);
212 // no errors 323 // no errors
213 _assertErrorsWithCodes([]); 324 _assertErrorsWithCodes([]);
214 // validate directives 325 // validate directives
215 ImportDirective importNode = libraryUnitA.directives[1]; 326 ImportDirective importNode = libraryUnitA.directives[1];
216 ImportElement importElement = importNode.element; 327 ImportElement importElement = importNode.element;
217 List<NamespaceCombinator> combinators = importElement.combinators; 328 List<NamespaceCombinator> combinators = importElement.combinators;
218 expect(combinators, hasLength(2)); 329 expect(combinators, hasLength(2));
219 { 330 {
220 ShowElementCombinator combinator = combinators[0]; 331 ShowElementCombinator combinator = combinators[0];
221 expect(combinator.offset, 33); 332 expect(combinator.offset, 33);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 '/libC.dart': ''' 403 '/libC.dart': '''
293 library libC; 404 library libC;
294 ''' 405 '''
295 }); 406 });
296 Source sourceA = sources[0]; 407 Source sourceA = sources[0];
297 Source sourceB = sources[1]; 408 Source sourceB = sources[1];
298 // perform task 409 // perform task
299 _computeResult(sourceA, LIBRARY_ELEMENT2); 410 _computeResult(sourceA, LIBRARY_ELEMENT2);
300 expect(task, new isInstanceOf<BuildDirectiveElementsTask>()); 411 expect(task, new isInstanceOf<BuildDirectiveElementsTask>());
301 // prepare outputs 412 // prepare outputs
302 CompilationUnit libraryUnitA = context.getCacheEntry(new LibraryUnitTarget(s ourceA, sourceA)).getValue(RESOLVED_UNIT1); 413 CompilationUnit libraryUnitA = context
414 .getCacheEntry(new LibraryUnitTarget(sourceA, sourceA))
415 .getValue(RESOLVED_UNIT1);
303 // validate directives 416 // validate directives
304 { 417 {
305 ImportDirective importNodeB = libraryUnitA.directives[1]; 418 ImportDirective importNodeB = libraryUnitA.directives[1];
306 SimpleIdentifier prefixNodeB = importNodeB.prefix; 419 SimpleIdentifier prefixNodeB = importNodeB.prefix;
307 ImportElement importElementB = importNodeB.element; 420 ImportElement importElementB = importNodeB.element;
308 PrefixElement prefixElement = importElementB.prefix; 421 PrefixElement prefixElement = importElementB.prefix;
309 expect(importElementB, isNotNull); 422 expect(importElementB, isNotNull);
310 expect(importElementB.importedLibrary, _getImportLibraryInput(sourceB)); 423 expect(importElementB.importedLibrary, _getImportLibraryInput(sourceB));
311 expect(prefixElement, isNotNull); 424 expect(prefixElement, isNotNull);
312 expect(importElementB.prefixOffset, prefixElement.nameOffset); 425 expect(importElementB.prefixOffset, prefixElement.nameOffset);
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) { 922 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) {
810 _fillErrorListener(BUILD_LIBRARY_ERRORS); 923 _fillErrorListener(BUILD_LIBRARY_ERRORS);
811 errorListener.assertErrorsWithCodes(expectedErrorCodes); 924 errorListener.assertErrorsWithCodes(expectedErrorCodes);
812 } 925 }
813 926
814 void _performBuildTask(Map<String, String> sourceMap) { 927 void _performBuildTask(Map<String, String> sourceMap) {
815 List<Source> sources = _newSources(sourceMap); 928 List<Source> sources = _newSources(sourceMap);
816 Source libSource = sources.first; 929 Source libSource = sources.first;
817 _computeResult(libSource, LIBRARY_ELEMENT1); 930 _computeResult(libSource, LIBRARY_ELEMENT1);
818 expect(task, new isInstanceOf<BuildLibraryElementTask>()); 931 expect(task, new isInstanceOf<BuildLibraryElementTask>());
819 libraryUnit = context.getCacheEntry(new LibraryUnitTarget(libSource, libSour ce)).getValue(RESOLVED_UNIT1); 932 libraryUnit = context
933 .getCacheEntry(new LibraryUnitTarget(libSource, libSource))
934 .getValue(RESOLVED_UNIT1);
820 libraryUnitElement = libraryUnit.element; 935 libraryUnitElement = libraryUnit.element;
821 librarySource = libraryUnitElement.source; 936 librarySource = libraryUnitElement.source;
822 libraryElement = outputs[LIBRARY_ELEMENT1]; 937 libraryElement = outputs[LIBRARY_ELEMENT1];
823 partUnits = 938 partUnits = task.inputs[BuildLibraryElementTask.PARTS_UNIT_INPUT];
824 task.inputs[BuildLibraryElementTask.PARTS_UNIT_INPUT];
825 } 939 }
826 } 940 }
827 941
828 @reflectiveTest 942 @reflectiveTest
829 class BuildPublicNamespaceTaskTest extends _AbstractDartTaskTest { 943 class BuildPublicNamespaceTaskTest extends _AbstractDartTaskTest {
830 test_buildInputs() { 944 test_buildInputs() {
831 Map<String, TaskInput> inputs = 945 Map<String, TaskInput> inputs =
832 BuildPublicNamespaceTask.buildInputs(emptySource); 946 BuildPublicNamespaceTask.buildInputs(emptySource);
833 expect(inputs, isNotNull); 947 expect(inputs, isNotNull);
834 expect( 948 expect(
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 emptySource = _newSource('/test.dart'); 1260 emptySource = _newSource('/test.dart');
1147 // prepare AnalysisContext 1261 // prepare AnalysisContext
1148 context.sourceFactory = new SourceFactory(<UriResolver>[ 1262 context.sourceFactory = new SourceFactory(<UriResolver>[
1149 new DartUriResolver(sdk), 1263 new DartUriResolver(sdk),
1150 new ResourceUriResolver(resourceProvider) 1264 new ResourceUriResolver(resourceProvider)
1151 ]); 1265 ]);
1152 // prepare TaskManager 1266 // prepare TaskManager
1153 taskManager.addTaskDescriptor(GetContentTask.DESCRIPTOR); 1267 taskManager.addTaskDescriptor(GetContentTask.DESCRIPTOR);
1154 taskManager.addTaskDescriptor(ScanDartTask.DESCRIPTOR); 1268 taskManager.addTaskDescriptor(ScanDartTask.DESCRIPTOR);
1155 taskManager.addTaskDescriptor(ParseDartTask.DESCRIPTOR); 1269 taskManager.addTaskDescriptor(ParseDartTask.DESCRIPTOR);
1270 taskManager.addTaskDescriptor(BuildClassConstructorsTask.DESCRIPTOR);
1156 taskManager.addTaskDescriptor(BuildCompilationUnitElementTask.DESCRIPTOR); 1271 taskManager.addTaskDescriptor(BuildCompilationUnitElementTask.DESCRIPTOR);
1157 taskManager.addTaskDescriptor(BuildLibraryElementTask.DESCRIPTOR); 1272 taskManager.addTaskDescriptor(BuildLibraryElementTask.DESCRIPTOR);
1158 taskManager.addTaskDescriptor(BuildPublicNamespaceTask.DESCRIPTOR); 1273 taskManager.addTaskDescriptor(BuildPublicNamespaceTask.DESCRIPTOR);
1159 taskManager.addTaskDescriptor(BuildDirectiveElementsTask.DESCRIPTOR); 1274 taskManager.addTaskDescriptor(BuildDirectiveElementsTask.DESCRIPTOR);
1160 taskManager.addTaskDescriptor(BuildExportSourceClosureTask.DESCRIPTOR); 1275 taskManager.addTaskDescriptor(BuildExportSourceClosureTask.DESCRIPTOR);
1161 taskManager.addTaskDescriptor(BuildExportNamespaceTask.DESCRIPTOR); 1276 taskManager.addTaskDescriptor(BuildExportNamespaceTask.DESCRIPTOR);
1162 taskManager.addTaskDescriptor(BuildTypeProviderTask.DESCRIPTOR); 1277 taskManager.addTaskDescriptor(BuildTypeProviderTask.DESCRIPTOR);
1163 taskManager.addTaskDescriptor(BuildEnumMemberElementsTask.DESCRIPTOR); 1278 taskManager.addTaskDescriptor(BuildEnumMemberElementsTask.DESCRIPTOR);
1164 taskManager.addTaskDescriptor(BuildFunctionTypeAliasesTask.DESCRIPTOR); 1279 taskManager.addTaskDescriptor(BuildFunctionTypeAliasesTask.DESCRIPTOR);
1165 taskManager.addTaskDescriptor(ResolveUnitTypeNamesTask.DESCRIPTOR); 1280 taskManager.addTaskDescriptor(ResolveUnitTypeNamesTask.DESCRIPTOR);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1216 return entryMap.putIfAbsent(target, () => new CacheEntry()); 1331 return entryMap.putIfAbsent(target, () => new CacheEntry());
1217 } 1332 }
1218 1333
1219 TimestampedData<String> getContents(Source source) => source.contents; 1334 TimestampedData<String> getContents(Source source) => source.contents;
1220 1335
1221 noSuchMethod(Invocation invocation) { 1336 noSuchMethod(Invocation invocation) {
1222 print('noSuchMethod: ${invocation.memberName}'); 1337 print('noSuchMethod: ${invocation.memberName}');
1223 return super.noSuchMethod(invocation); 1338 return super.noSuchMethod(invocation);
1224 } 1339 }
1225 } 1340 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698