| 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/src/context/cache.dart'; | 7 import 'package:analyzer/src/context/cache.dart'; |
| 8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
| 9 import 'package:analyzer/src/generated/constant.dart'; | 9 import 'package:analyzer/src/generated/constant.dart'; |
| 10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 runReflectiveTests(ResolveVariableReferencesTaskTest); | 55 runReflectiveTests(ResolveVariableReferencesTaskTest); |
| 56 runReflectiveTests(ScanDartTaskTest); | 56 runReflectiveTests(ScanDartTaskTest); |
| 57 runReflectiveTests(VerifyUnitTaskTest); | 57 runReflectiveTests(VerifyUnitTaskTest); |
| 58 } | 58 } |
| 59 | 59 |
| 60 @reflectiveTest | 60 @reflectiveTest |
| 61 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { | 61 class BuildCompilationUnitElementTaskTest extends _AbstractDartTaskTest { |
| 62 Source source; | 62 Source source; |
| 63 LibrarySpecificUnit target; | 63 LibrarySpecificUnit target; |
| 64 | 64 |
| 65 /** |
| 66 * Enable strong mode in the current analysis context. |
| 67 */ |
| 68 void enableStrongMode() { |
| 69 AnalysisOptionsImpl options = context.analysisOptions; |
| 70 options.strongMode = true; |
| 71 context.analysisOptions = options; |
| 72 } |
| 73 |
| 65 test_buildInputs() { | 74 test_buildInputs() { |
| 66 LibrarySpecificUnit target = | 75 LibrarySpecificUnit target = |
| 67 new LibrarySpecificUnit(emptySource, emptySource); | 76 new LibrarySpecificUnit(emptySource, emptySource); |
| 68 Map<String, TaskInput> inputs = | 77 Map<String, TaskInput> inputs = |
| 69 BuildCompilationUnitElementTask.buildInputs(target); | 78 BuildCompilationUnitElementTask.buildInputs(target); |
| 70 expect(inputs, isNotNull); | 79 expect(inputs, isNotNull); |
| 71 expect( | 80 expect( |
| 72 inputs.keys, | 81 inputs.keys, |
| 73 unorderedEquals( | 82 unorderedEquals( |
| 74 [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME])); | 83 [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME])); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 94 BuildCompilationUnitElementTask task = | 103 BuildCompilationUnitElementTask task = |
| 95 new BuildCompilationUnitElementTask(null, emptySource); | 104 new BuildCompilationUnitElementTask(null, emptySource); |
| 96 expect(task.description, isNotNull); | 105 expect(task.description, isNotNull); |
| 97 } | 106 } |
| 98 | 107 |
| 99 test_descriptor() { | 108 test_descriptor() { |
| 100 TaskDescriptor descriptor = BuildCompilationUnitElementTask.DESCRIPTOR; | 109 TaskDescriptor descriptor = BuildCompilationUnitElementTask.DESCRIPTOR; |
| 101 expect(descriptor, isNotNull); | 110 expect(descriptor, isNotNull); |
| 102 } | 111 } |
| 103 | 112 |
| 104 test_perform_find_constants() { | 113 test_perform_find_constants_strong() { |
| 114 enableStrongMode(); |
| 105 _performBuildTask(''' | 115 _performBuildTask(''' |
| 106 const x = 1; | 116 const x = 1; |
| 107 class C { | 117 class C { |
| 108 static const y = 1; | 118 static const y = 1; |
| 109 const C([p = 1]); | 119 const C([p = 1]); |
| 110 } | 120 } |
| 111 @x | 121 @x |
| 112 f() { | 122 f() { |
| 113 const z = 1; | 123 const z = 1; |
| 114 } | 124 } |
| 115 '''); | 125 '''); |
| 116 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 126 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
| 117 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; | 127 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; |
| 118 Annotation annotation = unit.declarations | 128 Annotation annotation = unit.declarations |
| 119 .firstWhere((m) => m is FunctionDeclaration) | 129 .firstWhere((m) => m is FunctionDeclaration) |
| 120 .metadata[0]; | 130 .metadata[0]; |
| 121 List<ConstantEvaluationTarget> expectedConstants = [ | 131 List<ConstantEvaluationTarget> expectedConstants = [ |
| 122 unitElement.accessors.firstWhere((e) => e.isGetter).variable, | 132 unitElement.accessors.firstWhere((e) => e.isGetter).variable, |
| 123 unitElement.types[0].fields[0], | 133 unitElement.types[0].fields[0], |
| 124 unitElement.functions[0].localVariables[0], | 134 unitElement.functions[0].localVariables[0], |
| 125 unitElement.types[0].constructors[0], | 135 unitElement.types[0].constructors[0], |
| 126 new ConstantEvaluationTarget_Annotation( | 136 new ConstantEvaluationTarget_Annotation( |
| 127 context, source, source, annotation), | 137 context, source, source, annotation), |
| 128 unitElement.types[0].constructors[0].parameters[0] | 138 unitElement.types[0].constructors[0].parameters[0] |
| 129 ]; | 139 ]; |
| 140 expect(outputs[CLASSES_IN_UNIT], hasLength(1)); |
| 130 expect( | 141 expect( |
| 131 outputs[COMPILATION_UNIT_CONSTANTS].toSet(), expectedConstants.toSet()); | 142 outputs[COMPILATION_UNIT_CONSTANTS].toSet(), expectedConstants.toSet()); |
| 143 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(2)); |
| 132 } | 144 } |
| 133 | 145 |
| 134 test_perform_library() { | 146 test_perform_find_constants_weak() { |
| 147 _performBuildTask(''' |
| 148 const x = 1; |
| 149 class C { |
| 150 static const y = 1; |
| 151 const C([p = 1]); |
| 152 } |
| 153 @x |
| 154 f() { |
| 155 const z = 1; |
| 156 } |
| 157 '''); |
| 158 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
| 159 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; |
| 160 Annotation annotation = unit.declarations |
| 161 .firstWhere((m) => m is FunctionDeclaration) |
| 162 .metadata[0]; |
| 163 List<ConstantEvaluationTarget> expectedConstants = [ |
| 164 unitElement.accessors.firstWhere((e) => e.isGetter).variable, |
| 165 unitElement.types[0].fields[0], |
| 166 unitElement.functions[0].localVariables[0], |
| 167 unitElement.types[0].constructors[0], |
| 168 new ConstantEvaluationTarget_Annotation( |
| 169 context, source, source, annotation), |
| 170 unitElement.types[0].constructors[0].parameters[0] |
| 171 ]; |
| 172 expect(outputs[CLASSES_IN_UNIT], hasLength(0)); |
| 173 expect( |
| 174 outputs[COMPILATION_UNIT_CONSTANTS].toSet(), expectedConstants.toSet()); |
| 175 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(0)); |
| 176 } |
| 177 |
| 178 test_perform_library_strong() { |
| 179 enableStrongMode(); |
| 135 _performBuildTask(r''' | 180 _performBuildTask(r''' |
| 136 library lib; | 181 library lib; |
| 137 import 'lib2.dart'; | 182 import 'lib2.dart'; |
| 138 export 'lib3.dart'; | 183 export 'lib3.dart'; |
| 139 part 'part.dart'; | 184 part 'part.dart'; |
| 140 class A {} | 185 final x = ''; |
| 186 class A { |
| 187 static final y = 0; |
| 188 } |
| 141 class B = Object with A; | 189 class B = Object with A; |
| 142 '''); | 190 '''); |
| 143 expect(outputs, hasLength(3)); | 191 expect(outputs, hasLength(5)); |
| 192 expect(outputs[CLASSES_IN_UNIT], hasLength(2)); |
| 193 expect(outputs[COMPILATION_UNIT_CONSTANTS], isNotNull); |
| 144 expect(outputs[COMPILATION_UNIT_ELEMENT], isNotNull); | 194 expect(outputs[COMPILATION_UNIT_ELEMENT], isNotNull); |
| 195 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(2)); |
| 145 expect(outputs[RESOLVED_UNIT1], isNotNull); | 196 expect(outputs[RESOLVED_UNIT1], isNotNull); |
| 197 } |
| 198 |
| 199 test_perform_library_weak() { |
| 200 _performBuildTask(r''' |
| 201 library lib; |
| 202 import 'lib2.dart'; |
| 203 export 'lib3.dart'; |
| 204 part 'part.dart'; |
| 205 final x = ''; |
| 206 class A { |
| 207 static final y = 0; |
| 208 } |
| 209 class B = Object with A; |
| 210 '''); |
| 211 expect(outputs, hasLength(5)); |
| 212 expect(outputs[CLASSES_IN_UNIT], hasLength(0)); |
| 146 expect(outputs[COMPILATION_UNIT_CONSTANTS], isNotNull); | 213 expect(outputs[COMPILATION_UNIT_CONSTANTS], isNotNull); |
| 214 expect(outputs[COMPILATION_UNIT_ELEMENT], isNotNull); |
| 215 expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(0)); |
| 216 expect(outputs[RESOLVED_UNIT1], isNotNull); |
| 147 } | 217 } |
| 148 | 218 |
| 149 test_perform_reuseElement() { | 219 test_perform_reuseElement() { |
| 150 _performBuildTask(r''' | 220 _performBuildTask(r''' |
| 151 library lib; | 221 library lib; |
| 152 class A {} | 222 class A {} |
| 153 class B = Object with A; | 223 class B = Object with A; |
| 154 '''); | 224 '''); |
| 155 CompilationUnit unit = outputs[RESOLVED_UNIT1]; | 225 CompilationUnit unit = outputs[RESOLVED_UNIT1]; |
| 156 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; | 226 CompilationUnitElement unitElement = outputs[COMPILATION_UNIT_ELEMENT]; |
| (...skipping 2610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2767 /** | 2837 /** |
| 2768 * Fill [errorListener] with [result] errors in the current [task]. | 2838 * Fill [errorListener] with [result] errors in the current [task]. |
| 2769 */ | 2839 */ |
| 2770 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { | 2840 void _fillErrorListener(ResultDescriptor<List<AnalysisError>> result) { |
| 2771 List<AnalysisError> errors = task.outputs[result]; | 2841 List<AnalysisError> errors = task.outputs[result]; |
| 2772 expect(errors, isNotNull, reason: result.name); | 2842 expect(errors, isNotNull, reason: result.name); |
| 2773 errorListener = new GatheringErrorListener(); | 2843 errorListener = new GatheringErrorListener(); |
| 2774 errorListener.addAll(errors); | 2844 errorListener.addAll(errors); |
| 2775 } | 2845 } |
| 2776 } | 2846 } |
| OLD | NEW |