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.serialization.elements_test; | 5 library test.src.serialization.elements_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 10 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
(...skipping 1325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1336 throw new UnimplementedError( | 1336 throw new UnimplementedError( |
1337 'Modifier $modifier for ${element?.runtimeType}'); | 1337 'Modifier $modifier for ${element?.runtimeType}'); |
1338 } | 1338 } |
1339 } | 1339 } |
1340 | 1340 |
1341 @reflectiveTest | 1341 @reflectiveTest |
1342 abstract class ResynthesizeTest extends AbstractResynthesizeTest { | 1342 abstract class ResynthesizeTest extends AbstractResynthesizeTest { |
1343 Future<LibraryElementImpl> checkLibrary(String text, | 1343 Future<LibraryElementImpl> checkLibrary(String text, |
1344 {bool allowErrors: false, bool dumpSummaries: false}); | 1344 {bool allowErrors: false, bool dumpSummaries: false}); |
1345 | 1345 |
1346 /** | |
1347 * Return a [SummaryResynthesizer] to resynthesize the library with the | |
1348 * given [librarySource]. | |
1349 */ | |
1350 SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource); | |
1351 | |
1352 test_class_abstract() async { | 1346 test_class_abstract() async { |
1353 var library = await checkLibrary('abstract class C {}'); | 1347 var library = await checkLibrary('abstract class C {}'); |
1354 checkElementText(library, r''' | 1348 checkElementText(library, r''' |
1355 abstract class C { | 1349 abstract class C { |
1356 } | 1350 } |
1357 '''); | 1351 '''); |
1358 } | 1352 } |
1359 | 1353 |
1360 test_class_alias() async { | 1354 test_class_alias() async { |
1361 var library = await checkLibrary(''' | 1355 var library = await checkLibrary(''' |
(...skipping 4830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6192 test_genericFunction_asTopLevelVariableType() async { | 6186 test_genericFunction_asTopLevelVariableType() async { |
6193 shouldCompareLibraryElements = false; | 6187 shouldCompareLibraryElements = false; |
6194 var library = await checkLibrary(r''' | 6188 var library = await checkLibrary(r''' |
6195 int Function(int a, String b) v; | 6189 int Function(int a, String b) v; |
6196 '''); | 6190 '''); |
6197 checkElementText(library, r''' | 6191 checkElementText(library, r''' |
6198 (int, String) → int v; | 6192 (int, String) → int v; |
6199 '''); | 6193 '''); |
6200 } | 6194 } |
6201 | 6195 |
6202 test_getElement_constructor_named() async { | |
6203 String text = 'class C { C.named(); }'; | |
6204 Source source = addLibrarySource('/test.dart', text); | |
6205 ConstructorElement original = context | |
6206 .computeLibraryElement(source) | |
6207 .getType('C') | |
6208 .getNamedConstructor('named'); | |
6209 expect(original, isNotNull); | |
6210 ConstructorElement resynthesized = validateGetElement(text, original); | |
6211 compareConstructorElements(resynthesized, original, 'C.constructor named'); | |
6212 } | |
6213 | |
6214 test_getElement_constructor_unnamed() async { | |
6215 String text = 'class C { C(); }'; | |
6216 Source source = addLibrarySource('/test.dart', text); | |
6217 ConstructorElement original = | |
6218 context.computeLibraryElement(source).getType('C').unnamedConstructor; | |
6219 expect(original, isNotNull); | |
6220 ConstructorElement resynthesized = validateGetElement(text, original); | |
6221 compareConstructorElements(resynthesized, original, 'C.constructor'); | |
6222 } | |
6223 | |
6224 test_getElement_field() async { | |
6225 String text = 'class C { var f; }'; | |
6226 Source source = addLibrarySource('/test.dart', text); | |
6227 FieldElement original = | |
6228 context.computeLibraryElement(source).getType('C').getField('f'); | |
6229 expect(original, isNotNull); | |
6230 FieldElement resynthesized = validateGetElement(text, original); | |
6231 compareFieldElements(resynthesized, original, 'C.field f'); | |
6232 } | |
6233 | |
6234 test_getElement_getter() async { | |
6235 String text = 'class C { get f => null; }'; | |
6236 Source source = addLibrarySource('/test.dart', text); | |
6237 PropertyAccessorElement original = | |
6238 context.computeLibraryElement(source).getType('C').getGetter('f'); | |
6239 expect(original, isNotNull); | |
6240 PropertyAccessorElement resynthesized = validateGetElement(text, original); | |
6241 comparePropertyAccessorElements(resynthesized, original, 'C.getter f'); | |
6242 } | |
6243 | |
6244 test_getElement_method() async { | |
6245 String text = 'class C { f() {} }'; | |
6246 Source source = addLibrarySource('/test.dart', text); | |
6247 MethodElement original = | |
6248 context.computeLibraryElement(source).getType('C').getMethod('f'); | |
6249 expect(original, isNotNull); | |
6250 MethodElement resynthesized = validateGetElement(text, original); | |
6251 compareMethodElements(resynthesized, original, 'C.method f'); | |
6252 } | |
6253 | |
6254 test_getElement_operator() async { | |
6255 String text = 'class C { operator+(x) => null; }'; | |
6256 Source source = addLibrarySource('/test.dart', text); | |
6257 MethodElement original = | |
6258 context.computeLibraryElement(source).getType('C').getMethod('+'); | |
6259 expect(original, isNotNull); | |
6260 MethodElement resynthesized = validateGetElement(text, original); | |
6261 compareMethodElements(resynthesized, original, 'C.operator+'); | |
6262 } | |
6263 | |
6264 test_getElement_setter() async { | |
6265 String text = 'class C { void set f(value) {} }'; | |
6266 Source source = addLibrarySource('/test.dart', text); | |
6267 PropertyAccessorElement original = | |
6268 context.computeLibraryElement(source).getType('C').getSetter('f'); | |
6269 expect(original, isNotNull); | |
6270 PropertyAccessorElement resynthesized = validateGetElement(text, original); | |
6271 comparePropertyAccessorElements(resynthesized, original, 'C.setter f'); | |
6272 } | |
6273 | |
6274 test_getElement_unit() async { | |
6275 String text = 'class C { f() {} }'; | |
6276 Source source = addLibrarySource('/test.dart', text); | |
6277 CompilationUnitElement original = | |
6278 context.computeLibraryElement(source).definingCompilationUnit; | |
6279 expect(original, isNotNull); | |
6280 CompilationUnitElement resynthesized = validateGetElement(text, original); | |
6281 compareCompilationUnitElements(resynthesized, original); | |
6282 } | |
6283 | |
6284 test_getter_documented() async { | 6196 test_getter_documented() async { |
6285 var library = await checkLibrary(''' | 6197 var library = await checkLibrary(''' |
6286 // Extra comment so doc comment offset != 0 | 6198 // Extra comment so doc comment offset != 0 |
6287 /** | 6199 /** |
6288 * Docs | 6200 * Docs |
6289 */ | 6201 */ |
6290 get x => null;'''); | 6202 get x => null;'''); |
6291 checkElementText(library, r''' | 6203 checkElementText(library, r''' |
6292 /** | 6204 /** |
6293 * Docs | 6205 * Docs |
(...skipping 3715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10009 '''); | 9921 '''); |
10010 } | 9922 } |
10011 | 9923 |
10012 test_variables() async { | 9924 test_variables() async { |
10013 var library = await checkLibrary('int i; int j;'); | 9925 var library = await checkLibrary('int i; int j;'); |
10014 checkElementText(library, r''' | 9926 checkElementText(library, r''' |
10015 int i; | 9927 int i; |
10016 int j; | 9928 int j; |
10017 '''); | 9929 '''); |
10018 } | 9930 } |
10019 | |
10020 /** | |
10021 * Encode the library containing [original] into a summary and then use | |
10022 * [TestSummaryResynthesizer.getElement] to retrieve just the original | |
10023 * element from the resynthesized summary. | |
10024 */ | |
10025 Element validateGetElement(String text, Element original) { | |
10026 SummaryResynthesizer resynthesizer = | |
10027 encodeDecodeLibrarySource(original.library.source); | |
10028 ElementLocationImpl location = original.location; | |
10029 Element result = resynthesizer.getElement(location); | |
10030 checkMinimalResynthesisWork(resynthesizer, original.library); | |
10031 // Check that no other summaries needed to be resynthesized to resynthesize | |
10032 // the library element. | |
10033 expect(resynthesizer.resynthesisCount, 3); | |
10034 expect(result.location, location); | |
10035 return result; | |
10036 } | |
10037 } | 9931 } |
10038 | 9932 |
10039 class TestSummaryResynthesizer extends SummaryResynthesizer { | 9933 class TestSummaryResynthesizer extends SummaryResynthesizer { |
10040 final Map<String, UnlinkedUnit> unlinkedSummaries; | 9934 final Map<String, UnlinkedUnit> unlinkedSummaries; |
10041 final Map<String, LinkedLibrary> linkedSummaries; | 9935 final Map<String, LinkedLibrary> linkedSummaries; |
10042 final bool allowMissingFiles; | 9936 final bool allowMissingFiles; |
10043 | 9937 |
10044 /** | 9938 /** |
10045 * The set of uris for which unlinked summaries have been requested using | 9939 * The set of uris for which unlinked summaries have been requested using |
10046 * [getUnlinkedSummary]. | 9940 * [getUnlinkedSummary]. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10080 fail('Unexpectedly tried to get unlinked summary for $uri'); | 9974 fail('Unexpectedly tried to get unlinked summary for $uri'); |
10081 } | 9975 } |
10082 return serializedUnit; | 9976 return serializedUnit; |
10083 } | 9977 } |
10084 | 9978 |
10085 @override | 9979 @override |
10086 bool hasLibrarySummary(String uri) { | 9980 bool hasLibrarySummary(String uri) { |
10087 return true; | 9981 return true; |
10088 } | 9982 } |
10089 } | 9983 } |
OLD | NEW |