| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |