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 analyzer.test.src.summary.summary_test; | 5 library analyzer.test.src.summary.summary_test; |
6 | 6 |
7 import 'package:analyzer/src/generated/element.dart'; | 7 import 'package:analyzer/src/generated/element.dart'; |
8 import 'package:analyzer/src/generated/engine.dart'; | 8 import 'package:analyzer/src/generated/engine.dart'; |
9 import 'package:analyzer/src/generated/java_engine_io.dart'; | 9 import 'package:analyzer/src/generated/java_engine_io.dart'; |
10 import 'package:analyzer/src/generated/source.dart'; | 10 import 'package:analyzer/src/generated/source.dart'; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 } | 52 } |
53 | 53 |
54 @override | 54 @override |
55 void serializeLibraryText(String text, {bool allowErrors: false}) { | 55 void serializeLibraryText(String text, {bool allowErrors: false}) { |
56 Source source = addSource(text); | 56 Source source = addSource(text); |
57 LibraryElement library = resolve2(source); | 57 LibraryElement library = resolve2(source); |
58 if (!allowErrors) { | 58 if (!allowErrors) { |
59 assertNoErrors(source); | 59 assertNoErrors(source); |
60 } | 60 } |
61 serializeLibraryElement(library); | 61 serializeLibraryElement(library); |
62 expect(unlinked.imports.length, lib.importDependencies.length); | 62 expect(definingUnit.unlinked.imports.length, lib.importDependencies.length); |
63 expect(unlinked.references.length, lib.references.length); | 63 expect(unlinked.references.length, lib.references.length); |
64 } | 64 } |
65 | 65 |
66 @override | 66 @override |
67 void setUp() { | 67 void setUp() { |
68 super.setUp(); | 68 super.setUp(); |
69 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 69 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
70 options.enableGenericMethods = true; | 70 options.enableGenericMethods = true; |
71 resetWithOptions(options); | 71 resetWithOptions(options); |
72 } | 72 } |
(...skipping 18 matching lines...) Expand all Loading... |
91 | 91 |
92 /** | 92 /** |
93 * `true` if the summary was created directly from the AST (and hence | 93 * `true` if the summary was created directly from the AST (and hence |
94 * contains information that is not obtainable from the element model alone). | 94 * contains information that is not obtainable from the element model alone). |
95 * TODO(paulberry): modify the element model so that it contains all the data | 95 * TODO(paulberry): modify the element model so that it contains all the data |
96 * that summaries need, so that this flag is no longer needed. | 96 * that summaries need, so that this flag is no longer needed. |
97 */ | 97 */ |
98 bool get checkAstDerivedData; | 98 bool get checkAstDerivedData; |
99 | 99 |
100 /** | 100 /** |
| 101 * Get access to the prelinked defining compilation unit. |
| 102 */ |
| 103 PrelinkedUnit get definingUnit => lib.units[0]; |
| 104 |
| 105 /** |
101 * Get access to the "unlinked" section of the summary. | 106 * Get access to the "unlinked" section of the summary. |
102 */ | 107 */ |
103 UnlinkedLibrary get unlinked => lib.unlinked; | 108 UnlinkedLibrary get unlinked => lib.unlinked; |
104 | 109 |
105 /** | 110 /** |
106 * Convert [path] to a suitably formatted absolute path URI for the current | 111 * Convert [path] to a suitably formatted absolute path URI for the current |
107 * platform. | 112 * platform. |
108 */ | 113 */ |
109 String absUri(String path) { | 114 String absUri(String path) { |
110 return FileUtilities2.createFile(path).toURI().toString(); | 115 return FileUtilities2.createFile(path).toURI().toString(); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 expectedKind: PrelinkedReferenceKind.unresolved); | 259 expectedKind: PrelinkedReferenceKind.unresolved); |
255 } | 260 } |
256 | 261 |
257 fail_test_import_missing() { | 262 fail_test_import_missing() { |
258 // TODO(paulberry): At the moment unresolved imports are not included in | 263 // TODO(paulberry): At the moment unresolved imports are not included in |
259 // the element model, so we can't pass this test. | 264 // the element model, so we can't pass this test. |
260 // Unresolved imports are included since this is necessary for proper | 265 // Unresolved imports are included since this is necessary for proper |
261 // dependency tracking. | 266 // dependency tracking. |
262 serializeLibraryText('import "foo.dart";', allowErrors: true); | 267 serializeLibraryText('import "foo.dart";', allowErrors: true); |
263 // Second import is the implicit import of dart:core | 268 // Second import is the implicit import of dart:core |
264 expect(unlinked.imports, hasLength(2)); | 269 expect(definingUnit.unlinked.imports, hasLength(2)); |
265 checkDependency(lib.importDependencies[0], absUri('/foo.dart'), 'foo.dart'); | 270 checkDependency(lib.importDependencies[0], absUri('/foo.dart'), 'foo.dart'); |
266 } | 271 } |
267 | 272 |
268 /** | 273 /** |
269 * Find the class with the given [className] in the summary, and return its | 274 * Find the class with the given [className] in the summary, and return its |
270 * [UnlinkedClass] data structure. | 275 * [UnlinkedClass] data structure. If [unit] is not given, the class is |
| 276 * looked for in the defining compilation unit. |
271 */ | 277 */ |
272 UnlinkedClass findClass(String className, {bool failIfAbsent: false}) { | 278 UnlinkedClass findClass(String className, |
| 279 {bool failIfAbsent: false, PrelinkedUnit unit}) { |
| 280 unit ??= definingUnit; |
273 UnlinkedClass result; | 281 UnlinkedClass result; |
274 for (UnlinkedClass cls in unlinked.classes) { | 282 for (UnlinkedClass cls in unit.unlinked.classes) { |
275 if (cls.name == className) { | 283 if (cls.name == className) { |
276 if (result != null) { | 284 if (result != null) { |
277 fail('Duplicate class $className'); | 285 fail('Duplicate class $className'); |
278 } | 286 } |
279 result = cls; | 287 result = cls; |
280 } | 288 } |
281 } | 289 } |
282 if (result == null && failIfAbsent) { | 290 if (result == null && failIfAbsent) { |
283 fail('Class $className not found in serialized output'); | 291 fail('Class $className not found in serialized output'); |
284 } | 292 } |
285 return result; | 293 return result; |
286 } | 294 } |
287 | 295 |
288 /** | 296 /** |
289 * Find the enum with the given [enumName] in the summary, and return its | 297 * Find the enum with the given [enumName] in the summary, and return its |
290 * [UnlinkedEnum] data structure. | 298 * [UnlinkedEnum] data structure. If [unit] is not given, the enum is looked |
| 299 * for in the defining compilation unit. |
291 */ | 300 */ |
292 UnlinkedEnum findEnum(String enumName, {bool failIfAbsent: false}) { | 301 UnlinkedEnum findEnum(String enumName, |
| 302 {bool failIfAbsent: false, PrelinkedUnit unit}) { |
| 303 unit ??= definingUnit; |
293 UnlinkedEnum result; | 304 UnlinkedEnum result; |
294 for (UnlinkedEnum e in unlinked.enums) { | 305 for (UnlinkedEnum e in unit.unlinked.enums) { |
295 if (e.name == enumName) { | 306 if (e.name == enumName) { |
296 if (result != null) { | 307 if (result != null) { |
297 fail('Duplicate enum $enumName'); | 308 fail('Duplicate enum $enumName'); |
298 } | 309 } |
299 result = e; | 310 result = e; |
300 } | 311 } |
301 } | 312 } |
302 if (result == null && failIfAbsent) { | 313 if (result == null && failIfAbsent) { |
303 fail('Enum $enumName not found in serialized output'); | 314 fail('Enum $enumName not found in serialized output'); |
304 } | 315 } |
305 return result; | 316 return result; |
306 } | 317 } |
307 | 318 |
308 /** | 319 /** |
309 * Find the executable with the given [executableName] in the summary, and | 320 * Find the executable with the given [executableName] in the summary, and |
310 * return its [UnlinkedExecutable] data structure. | 321 * return its [UnlinkedExecutable] data structure. If [executables] is not |
| 322 * given, then the executable is searched for in the defining compilation |
| 323 * unit. |
311 */ | 324 */ |
312 UnlinkedExecutable findExecutable(String executableName, | 325 UnlinkedExecutable findExecutable(String executableName, |
313 {UnlinkedClass cls, bool failIfAbsent: false}) { | 326 {List<UnlinkedExecutable> executables, bool failIfAbsent: false}) { |
314 List<UnlinkedExecutable> executables; | 327 executables ??= definingUnit.unlinked.executables; |
315 if (cls == null) { | |
316 executables = unlinked.executables; | |
317 } else { | |
318 executables = cls.executables; | |
319 } | |
320 UnlinkedExecutable result; | 328 UnlinkedExecutable result; |
321 for (UnlinkedExecutable executable in executables) { | 329 for (UnlinkedExecutable executable in executables) { |
322 if (executable.name == executableName) { | 330 if (executable.name == executableName) { |
323 if (result != null) { | 331 if (result != null) { |
324 fail('Duplicate executable $executableName'); | 332 fail('Duplicate executable $executableName'); |
325 } | 333 } |
326 result = executable; | 334 result = executable; |
327 } | 335 } |
328 } | 336 } |
329 if (result == null && failIfAbsent) { | 337 if (result == null && failIfAbsent) { |
330 fail('Executable $executableName not found in serialized output'); | 338 fail('Executable $executableName not found in serialized output'); |
331 } | 339 } |
332 return result; | 340 return result; |
333 } | 341 } |
334 | 342 |
335 /** | 343 /** |
336 * Find the typedef with the given [typedefName] in the summary, and return | 344 * Find the typedef with the given [typedefName] in the summary, and return |
337 * its [UnlinkedTypedef] data structure. | 345 * its [UnlinkedTypedef] data structure. If [unit] is not given, the typedef |
| 346 * is looked for in the defining compilation unit. |
338 */ | 347 */ |
339 UnlinkedTypedef findTypedef(String typedefName, {bool failIfAbsent: false}) { | 348 UnlinkedTypedef findTypedef(String typedefName, |
| 349 {bool failIfAbsent: false, PrelinkedUnit unit}) { |
| 350 unit ??= definingUnit; |
340 UnlinkedTypedef result; | 351 UnlinkedTypedef result; |
341 for (UnlinkedTypedef type in unlinked.typedefs) { | 352 for (UnlinkedTypedef type in unit.unlinked.typedefs) { |
342 if (type.name == typedefName) { | 353 if (type.name == typedefName) { |
343 if (result != null) { | 354 if (result != null) { |
344 fail('Duplicate typedef $typedefName'); | 355 fail('Duplicate typedef $typedefName'); |
345 } | 356 } |
346 result = type; | 357 result = type; |
347 } | 358 } |
348 } | 359 } |
349 if (result == null && failIfAbsent) { | 360 if (result == null && failIfAbsent) { |
350 fail('Typedef $typedefName not found in serialized output'); | 361 fail('Typedef $typedefName not found in serialized output'); |
351 } | 362 } |
352 return result; | 363 return result; |
353 } | 364 } |
354 | 365 |
355 /** | 366 /** |
356 * Find the top level variable with the given [variableName] in the summary, | 367 * Find the top level variable with the given [variableName] in the summary, |
357 * and return its [UnlinkedVariable] data structure. | 368 * and return its [UnlinkedVariable] data structure. If [variables] is not |
| 369 * specified, the variable is looked for in the defining compilation unit. |
358 */ | 370 */ |
359 UnlinkedVariable findVariable(String variableName, | 371 UnlinkedVariable findVariable(String variableName, |
360 {UnlinkedClass cls, bool failIfAbsent: false}) { | 372 {List<UnlinkedVariable> variables, bool failIfAbsent: false}) { |
361 List<UnlinkedVariable> variables; | 373 variables ??= definingUnit.unlinked.variables; |
362 if (cls == null) { | |
363 variables = unlinked.variables; | |
364 } else { | |
365 variables = cls.fields; | |
366 } | |
367 UnlinkedVariable result; | 374 UnlinkedVariable result; |
368 for (UnlinkedVariable variable in variables) { | 375 for (UnlinkedVariable variable in variables) { |
369 if (variable.name == variableName) { | 376 if (variable.name == variableName) { |
370 if (result != null) { | 377 if (result != null) { |
371 fail('Duplicate variable $variableName'); | 378 fail('Duplicate variable $variableName'); |
372 } | 379 } |
373 result = variable; | 380 result = variable; |
374 } | 381 } |
375 } | 382 } |
376 if (result == null && failIfAbsent) { | 383 if (result == null && failIfAbsent) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 void serializeLibraryText(String text, {bool allowErrors: false}); | 421 void serializeLibraryText(String text, {bool allowErrors: false}); |
415 | 422 |
416 /** | 423 /** |
417 * Serialize the given method [text] and return the summary of the executable | 424 * Serialize the given method [text] and return the summary of the executable |
418 * with the given [executableName]. | 425 * with the given [executableName]. |
419 */ | 426 */ |
420 UnlinkedExecutable serializeMethodText(String text, | 427 UnlinkedExecutable serializeMethodText(String text, |
421 [String executableName = 'f']) { | 428 [String executableName = 'f']) { |
422 serializeLibraryText('class C { $text }'); | 429 serializeLibraryText('class C { $text }'); |
423 return findExecutable(executableName, | 430 return findExecutable(executableName, |
424 cls: findClass('C', failIfAbsent: true), failIfAbsent: true); | 431 executables: findClass('C', failIfAbsent: true).executables, |
| 432 failIfAbsent: true); |
425 } | 433 } |
426 | 434 |
427 /** | 435 /** |
428 * Serialize the given library [text] and return the summary of the typedef | 436 * Serialize the given library [text] and return the summary of the typedef |
429 * with the given [typedefName]. | 437 * with the given [typedefName]. |
430 */ | 438 */ |
431 UnlinkedTypedef serializeTypedefText(String text, | 439 UnlinkedTypedef serializeTypedefText(String text, |
432 [String typedefName = 'F']) { | 440 [String typedefName = 'F']) { |
433 serializeLibraryText(text); | 441 serializeLibraryText(text); |
434 return findTypedef(typedefName, failIfAbsent: true); | 442 return findTypedef(typedefName, failIfAbsent: true); |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 '''); | 687 '''); |
680 expect(cls.mixins, hasLength(2)); | 688 expect(cls.mixins, hasLength(2)); |
681 checkTypeRef(cls.mixins[0], null, null, 'D'); | 689 checkTypeRef(cls.mixins[0], null, null, 'D'); |
682 checkTypeRef(cls.mixins[1], null, null, 'E'); | 690 checkTypeRef(cls.mixins[1], null, null, 'E'); |
683 } | 691 } |
684 | 692 |
685 test_class_name() { | 693 test_class_name() { |
686 var classText = 'class C {}'; | 694 var classText = 'class C {}'; |
687 UnlinkedClass cls = serializeClassText(classText); | 695 UnlinkedClass cls = serializeClassText(classText); |
688 expect(cls.name, 'C'); | 696 expect(cls.name, 'C'); |
689 expect(cls.unit, 0); | |
690 } | 697 } |
691 | 698 |
692 test_class_no_flags() { | 699 test_class_no_flags() { |
693 UnlinkedClass cls = serializeClassText('class C {}'); | 700 UnlinkedClass cls = serializeClassText('class C {}'); |
694 expect(cls.isAbstract, false); | 701 expect(cls.isAbstract, false); |
695 expect(cls.isMixinApplication, false); | 702 expect(cls.isMixinApplication, false); |
696 } | 703 } |
697 | 704 |
698 test_class_no_interface() { | 705 test_class_no_interface() { |
699 UnlinkedClass cls = serializeClassText('class C {}'); | 706 UnlinkedClass cls = serializeClassText('class C {}'); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 } | 755 } |
749 | 756 |
750 test_class_type_param_no_bound() { | 757 test_class_type_param_no_bound() { |
751 UnlinkedClass cls = serializeClassText('class C<T> {}'); | 758 UnlinkedClass cls = serializeClassText('class C<T> {}'); |
752 expect(cls.typeParameters, hasLength(1)); | 759 expect(cls.typeParameters, hasLength(1)); |
753 expect(cls.typeParameters[0].name, 'T'); | 760 expect(cls.typeParameters[0].name, 'T'); |
754 expect(cls.typeParameters[0].bound, isNull); | 761 expect(cls.typeParameters[0].bound, isNull); |
755 } | 762 } |
756 | 763 |
757 test_constructor() { | 764 test_constructor() { |
758 UnlinkedExecutable executable = | 765 UnlinkedExecutable executable = findExecutable('', |
759 findExecutable('', cls: serializeClassText('class C { C(); }')); | 766 executables: serializeClassText('class C { C(); }').executables); |
760 expect(executable.kind, UnlinkedExecutableKind.constructor); | 767 expect(executable.kind, UnlinkedExecutableKind.constructor); |
761 expect(executable.hasImplicitReturnType, isFalse); | 768 expect(executable.hasImplicitReturnType, isFalse); |
762 } | 769 } |
763 | 770 |
764 test_constructor_anonymous() { | 771 test_constructor_anonymous() { |
765 UnlinkedExecutable executable = | 772 UnlinkedExecutable executable = findExecutable('', |
766 findExecutable('', cls: serializeClassText('class C { C(); }')); | 773 executables: serializeClassText('class C { C(); }').executables); |
767 expect(executable.name, isEmpty); | 774 expect(executable.name, isEmpty); |
768 } | 775 } |
769 | 776 |
770 test_constructor_const() { | 777 test_constructor_const() { |
771 UnlinkedExecutable executable = | 778 UnlinkedExecutable executable = findExecutable('', |
772 findExecutable('', cls: serializeClassText('class C { const C(); }')); | 779 executables: serializeClassText('class C { const C(); }').executables); |
773 expect(executable.isConst, isTrue); | 780 expect(executable.isConst, isTrue); |
774 } | 781 } |
775 | 782 |
776 test_constructor_factory() { | 783 test_constructor_factory() { |
777 UnlinkedExecutable executable = findExecutable('', | 784 UnlinkedExecutable executable = findExecutable('', |
778 cls: serializeClassText('class C { factory C() => null; }')); | 785 executables: |
| 786 serializeClassText('class C { factory C() => null; }').executables); |
779 expect(executable.isFactory, isTrue); | 787 expect(executable.isFactory, isTrue); |
780 } | 788 } |
781 | 789 |
782 test_constructor_implicit() { | 790 test_constructor_implicit() { |
783 // Implicit constructors are not serialized. | 791 // Implicit constructors are not serialized. |
784 UnlinkedExecutable executable = findExecutable(null, | 792 UnlinkedExecutable executable = findExecutable(null, |
785 cls: serializeClassText('class C { C(); }'), failIfAbsent: false); | 793 executables: serializeClassText('class C { C(); }').executables, |
| 794 failIfAbsent: false); |
786 expect(executable, isNull); | 795 expect(executable, isNull); |
787 } | 796 } |
788 | 797 |
789 test_constructor_initializing_formal() { | 798 test_constructor_initializing_formal() { |
790 UnlinkedExecutable executable = findExecutable('', | 799 UnlinkedExecutable executable = findExecutable('', |
791 cls: serializeClassText('class C { C(this.x); final x; }')); | 800 executables: |
| 801 serializeClassText('class C { C(this.x); final x; }').executables); |
792 UnlinkedParam parameter = executable.parameters[0]; | 802 UnlinkedParam parameter = executable.parameters[0]; |
793 expect(parameter.isInitializingFormal, isTrue); | 803 expect(parameter.isInitializingFormal, isTrue); |
794 } | 804 } |
795 | 805 |
796 test_constructor_initializing_formal_explicit_type() { | 806 test_constructor_initializing_formal_explicit_type() { |
797 UnlinkedExecutable executable = findExecutable('', | 807 UnlinkedExecutable executable = findExecutable('', |
798 cls: serializeClassText('class C { C(int this.x); final x; }')); | 808 executables: serializeClassText('class C { C(int this.x); final x; }') |
| 809 .executables); |
799 UnlinkedParam parameter = executable.parameters[0]; | 810 UnlinkedParam parameter = executable.parameters[0]; |
800 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); | 811 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); |
801 } | 812 } |
802 | 813 |
803 test_constructor_initializing_formal_function_typed() { | 814 test_constructor_initializing_formal_function_typed() { |
804 UnlinkedExecutable executable = findExecutable('', | 815 UnlinkedExecutable executable = findExecutable('', |
805 cls: serializeClassText('class C { C(this.x()); final x; }')); | 816 executables: serializeClassText('class C { C(this.x()); final x; }') |
| 817 .executables); |
806 UnlinkedParam parameter = executable.parameters[0]; | 818 UnlinkedParam parameter = executable.parameters[0]; |
807 expect(parameter.isFunctionTyped, isTrue); | 819 expect(parameter.isFunctionTyped, isTrue); |
808 } | 820 } |
809 | 821 |
810 test_constructor_initializing_formal_function_typed_explicit_return_type() { | 822 test_constructor_initializing_formal_function_typed_explicit_return_type() { |
811 UnlinkedExecutable executable = findExecutable('', | 823 UnlinkedExecutable executable = findExecutable('', |
812 cls: serializeClassText('class C { C(int this.x()); Function x; }')); | 824 executables: |
| 825 serializeClassText('class C { C(int this.x()); Function x; }') |
| 826 .executables); |
813 UnlinkedParam parameter = executable.parameters[0]; | 827 UnlinkedParam parameter = executable.parameters[0]; |
814 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); | 828 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); |
815 } | 829 } |
816 | 830 |
817 test_constructor_initializing_formal_function_typed_implicit_return_type() { | 831 test_constructor_initializing_formal_function_typed_implicit_return_type() { |
818 UnlinkedExecutable executable = findExecutable('', | 832 UnlinkedExecutable executable = findExecutable('', |
819 cls: serializeClassText('class C { C(this.x()); Function x; }')); | 833 executables: serializeClassText('class C { C(this.x()); Function x; }') |
| 834 .executables); |
820 UnlinkedParam parameter = executable.parameters[0]; | 835 UnlinkedParam parameter = executable.parameters[0]; |
821 // Since the parameter is function-typed it is considered to have an | 836 // Since the parameter is function-typed it is considered to have an |
822 // explicit type, even though that explicit type itself has an implicit | 837 // explicit type, even though that explicit type itself has an implicit |
823 // return type. | 838 // return type. |
824 expect(parameter.hasImplicitType, isFalse); | 839 expect(parameter.hasImplicitType, isFalse); |
825 checkDynamicTypeRef(parameter.type); | 840 checkDynamicTypeRef(parameter.type); |
826 } | 841 } |
827 | 842 |
828 test_constructor_initializing_formal_function_typed_no_prameters() { | 843 test_constructor_initializing_formal_function_typed_no_prameters() { |
829 UnlinkedExecutable executable = findExecutable('', | 844 UnlinkedExecutable executable = findExecutable('', |
830 cls: serializeClassText('class C { C(this.x()); final x; }')); | 845 executables: serializeClassText('class C { C(this.x()); final x; }') |
| 846 .executables); |
831 UnlinkedParam parameter = executable.parameters[0]; | 847 UnlinkedParam parameter = executable.parameters[0]; |
832 expect(parameter.parameters, isEmpty); | 848 expect(parameter.parameters, isEmpty); |
833 } | 849 } |
834 | 850 |
835 test_constructor_initializing_formal_function_typed_prameter() { | 851 test_constructor_initializing_formal_function_typed_prameter() { |
836 UnlinkedExecutable executable = findExecutable('', | 852 UnlinkedExecutable executable = findExecutable('', |
837 cls: serializeClassText('class C { C(this.x(a)); final x; }')); | 853 executables: serializeClassText('class C { C(this.x(a)); final x; }') |
| 854 .executables); |
838 UnlinkedParam parameter = executable.parameters[0]; | 855 UnlinkedParam parameter = executable.parameters[0]; |
839 expect(parameter.parameters, hasLength(1)); | 856 expect(parameter.parameters, hasLength(1)); |
840 } | 857 } |
841 | 858 |
842 test_constructor_initializing_formal_function_typed_prameter_order() { | 859 test_constructor_initializing_formal_function_typed_prameter_order() { |
843 UnlinkedExecutable executable = findExecutable('', | 860 UnlinkedExecutable executable = findExecutable('', |
844 cls: serializeClassText('class C { C(this.x(a, b)); final x; }')); | 861 executables: serializeClassText('class C { C(this.x(a, b)); final x; }') |
| 862 .executables); |
845 UnlinkedParam parameter = executable.parameters[0]; | 863 UnlinkedParam parameter = executable.parameters[0]; |
846 expect(parameter.parameters, hasLength(2)); | 864 expect(parameter.parameters, hasLength(2)); |
847 expect(parameter.parameters[0].name, 'a'); | 865 expect(parameter.parameters[0].name, 'a'); |
848 expect(parameter.parameters[1].name, 'b'); | 866 expect(parameter.parameters[1].name, 'b'); |
849 } | 867 } |
850 | 868 |
851 test_constructor_initializing_formal_implicit_type() { | 869 test_constructor_initializing_formal_implicit_type() { |
852 // Note: the implicit type of an initializing formal is the type of the | 870 // Note: the implicit type of an initializing formal is the type of the |
853 // field. | 871 // field. |
854 UnlinkedExecutable executable = findExecutable('', | 872 UnlinkedExecutable executable = findExecutable('', |
855 cls: serializeClassText('class C { C(this.x); int x; }')); | 873 executables: |
| 874 serializeClassText('class C { C(this.x); int x; }').executables); |
856 UnlinkedParam parameter = executable.parameters[0]; | 875 UnlinkedParam parameter = executable.parameters[0]; |
857 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); | 876 checkTypeRef(parameter.type, 'dart:core', 'dart:core', 'int'); |
858 expect(parameter.hasImplicitType, isTrue); | 877 expect(parameter.hasImplicitType, isTrue); |
859 } | 878 } |
860 | 879 |
861 test_constructor_initializing_formal_name() { | 880 test_constructor_initializing_formal_name() { |
862 UnlinkedExecutable executable = findExecutable('', | 881 UnlinkedExecutable executable = findExecutable('', |
863 cls: serializeClassText('class C { C(this.x); final x; }')); | 882 executables: |
| 883 serializeClassText('class C { C(this.x); final x; }').executables); |
864 UnlinkedParam parameter = executable.parameters[0]; | 884 UnlinkedParam parameter = executable.parameters[0]; |
865 expect(parameter.name, 'x'); | 885 expect(parameter.name, 'x'); |
866 } | 886 } |
867 | 887 |
868 test_constructor_initializing_formal_named() { | 888 test_constructor_initializing_formal_named() { |
869 // TODO(paulberry): also test default value | 889 // TODO(paulberry): also test default value |
870 UnlinkedExecutable executable = findExecutable('', | 890 UnlinkedExecutable executable = findExecutable('', |
871 cls: serializeClassText('class C { C({this.x}); final x; }')); | 891 executables: serializeClassText('class C { C({this.x}); final x; }') |
| 892 .executables); |
872 UnlinkedParam parameter = executable.parameters[0]; | 893 UnlinkedParam parameter = executable.parameters[0]; |
873 expect(parameter.kind, UnlinkedParamKind.named); | 894 expect(parameter.kind, UnlinkedParamKind.named); |
874 } | 895 } |
875 | 896 |
876 test_constructor_initializing_formal_non_function_typed() { | 897 test_constructor_initializing_formal_non_function_typed() { |
877 UnlinkedExecutable executable = findExecutable('', | 898 UnlinkedExecutable executable = findExecutable('', |
878 cls: serializeClassText('class C { C(this.x); final x; }')); | 899 executables: |
| 900 serializeClassText('class C { C(this.x); final x; }').executables); |
879 UnlinkedParam parameter = executable.parameters[0]; | 901 UnlinkedParam parameter = executable.parameters[0]; |
880 expect(parameter.isFunctionTyped, isFalse); | 902 expect(parameter.isFunctionTyped, isFalse); |
881 } | 903 } |
882 | 904 |
883 test_constructor_initializing_formal_positional() { | 905 test_constructor_initializing_formal_positional() { |
884 // TODO(paulberry): also test default value | 906 // TODO(paulberry): also test default value |
885 UnlinkedExecutable executable = findExecutable('', | 907 UnlinkedExecutable executable = findExecutable('', |
886 cls: serializeClassText('class C { C([this.x]); final x; }')); | 908 executables: serializeClassText('class C { C([this.x]); final x; }') |
| 909 .executables); |
887 UnlinkedParam parameter = executable.parameters[0]; | 910 UnlinkedParam parameter = executable.parameters[0]; |
888 expect(parameter.kind, UnlinkedParamKind.positional); | 911 expect(parameter.kind, UnlinkedParamKind.positional); |
889 } | 912 } |
890 | 913 |
891 test_constructor_initializing_formal_required() { | 914 test_constructor_initializing_formal_required() { |
892 UnlinkedExecutable executable = findExecutable('', | 915 UnlinkedExecutable executable = findExecutable('', |
893 cls: serializeClassText('class C { C(this.x); final x; }')); | 916 executables: |
| 917 serializeClassText('class C { C(this.x); final x; }').executables); |
894 UnlinkedParam parameter = executable.parameters[0]; | 918 UnlinkedParam parameter = executable.parameters[0]; |
895 expect(parameter.kind, UnlinkedParamKind.required); | 919 expect(parameter.kind, UnlinkedParamKind.required); |
896 } | 920 } |
897 | 921 |
898 test_constructor_named() { | 922 test_constructor_named() { |
899 UnlinkedExecutable executable = | 923 UnlinkedExecutable executable = findExecutable('foo', |
900 findExecutable('foo', cls: serializeClassText('class C { C.foo(); }')); | 924 executables: serializeClassText('class C { C.foo(); }').executables); |
901 expect(executable.name, 'foo'); | 925 expect(executable.name, 'foo'); |
902 } | 926 } |
903 | 927 |
904 test_constructor_non_const() { | 928 test_constructor_non_const() { |
905 UnlinkedExecutable executable = | 929 UnlinkedExecutable executable = findExecutable('', |
906 findExecutable('', cls: serializeClassText('class C { C(); }')); | 930 executables: serializeClassText('class C { C(); }').executables); |
907 expect(executable.isConst, isFalse); | 931 expect(executable.isConst, isFalse); |
908 } | 932 } |
909 | 933 |
910 test_constructor_non_factory() { | 934 test_constructor_non_factory() { |
911 UnlinkedExecutable executable = | 935 UnlinkedExecutable executable = findExecutable('', |
912 findExecutable('', cls: serializeClassText('class C { C(); }')); | 936 executables: serializeClassText('class C { C(); }').executables); |
913 expect(executable.isFactory, isFalse); | 937 expect(executable.isFactory, isFalse); |
914 } | 938 } |
915 | 939 |
916 test_constructor_return_type() { | 940 test_constructor_return_type() { |
917 UnlinkedExecutable executable = | 941 UnlinkedExecutable executable = findExecutable('', |
918 findExecutable('', cls: serializeClassText('class C { C(); }')); | 942 executables: serializeClassText('class C { C(); }').executables); |
919 checkTypeRef(executable.returnType, null, null, 'C'); | 943 checkTypeRef(executable.returnType, null, null, 'C'); |
920 } | 944 } |
921 | 945 |
922 test_constructor_return_type_parameterized() { | 946 test_constructor_return_type_parameterized() { |
923 UnlinkedExecutable executable = | 947 UnlinkedExecutable executable = findExecutable('', |
924 findExecutable('', cls: serializeClassText('class C<T, U> { C(); }')); | 948 executables: serializeClassText('class C<T, U> { C(); }').executables); |
925 checkTypeRef(executable.returnType, null, null, 'C', | 949 checkTypeRef(executable.returnType, null, null, 'C', |
926 allowTypeParameters: true); | 950 allowTypeParameters: true); |
927 expect(executable.returnType.typeArguments, hasLength(2)); | 951 expect(executable.returnType.typeArguments, hasLength(2)); |
928 { | 952 { |
929 UnlinkedTypeRef typeRef = executable.returnType.typeArguments[0]; | 953 UnlinkedTypeRef typeRef = executable.returnType.typeArguments[0]; |
930 checkParamTypeRef(typeRef, 2); | 954 checkParamTypeRef(typeRef, 2); |
931 } | 955 } |
932 { | 956 { |
933 UnlinkedTypeRef typeRef = executable.returnType.typeArguments[1]; | 957 UnlinkedTypeRef typeRef = executable.returnType.typeArguments[1]; |
934 checkParamTypeRef(typeRef, 1); | 958 checkParamTypeRef(typeRef, 1); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1024 ''' | 1048 ''' |
1025 part of my.lib; | 1049 part of my.lib; |
1026 | 1050 |
1027 class C {} | 1051 class C {} |
1028 enum E { v } | 1052 enum E { v } |
1029 var v; | 1053 var v; |
1030 f() {} | 1054 f() {} |
1031 typedef F(); | 1055 typedef F(); |
1032 '''); | 1056 '''); |
1033 serializeLibraryText('library my.lib; part "part1.dart";'); | 1057 serializeLibraryText('library my.lib; part "part1.dart";'); |
1034 expect(findClass('C', failIfAbsent: true).unit, 1); | 1058 PrelinkedUnit unit = lib.units[1]; |
1035 expect(findEnum('E', failIfAbsent: true).unit, 1); | 1059 expect(findClass('C', unit: unit), isNotNull); |
1036 expect(findVariable('v', failIfAbsent: true).unit, 1); | 1060 expect(findEnum('E', unit: unit), isNotNull); |
1037 expect(findExecutable('f', failIfAbsent: true).unit, 1); | 1061 expect(findVariable('v', variables: unit.unlinked.variables), isNotNull); |
1038 expect(findTypedef('F', failIfAbsent: true).unit, 1); | 1062 expect( |
| 1063 findExecutable('f', executables: unit.unlinked.executables), isNotNull); |
| 1064 expect(findTypedef('F', unit: unit), isNotNull); |
1039 } | 1065 } |
1040 | 1066 |
1041 test_enum() { | 1067 test_enum() { |
1042 UnlinkedEnum e = serializeEnumText('enum E { v1 }'); | 1068 UnlinkedEnum e = serializeEnumText('enum E { v1 }'); |
1043 expect(e.name, 'E'); | 1069 expect(e.name, 'E'); |
1044 expect(e.values, hasLength(1)); | 1070 expect(e.values, hasLength(1)); |
1045 expect(e.values[0].name, 'v1'); | 1071 expect(e.values[0].name, 'v1'); |
1046 expect(e.unit, 0); | |
1047 } | 1072 } |
1048 | 1073 |
1049 test_enum_order() { | 1074 test_enum_order() { |
1050 UnlinkedEnum e = serializeEnumText('enum E { v1, v2 }'); | 1075 UnlinkedEnum e = serializeEnumText('enum E { v1, v2 }'); |
1051 expect(e.values, hasLength(2)); | 1076 expect(e.values, hasLength(2)); |
1052 expect(e.values[0].name, 'v1'); | 1077 expect(e.values[0].name, 'v1'); |
1053 expect(e.values[1].name, 'v2'); | 1078 expect(e.values[1].name, 'v2'); |
1054 } | 1079 } |
1055 | 1080 |
1056 test_executable_abstract() { | 1081 test_executable_abstract() { |
1057 UnlinkedExecutable executable = | 1082 UnlinkedExecutable executable = |
1058 serializeClassText('abstract class C { f(); }').executables[0]; | 1083 serializeClassText('abstract class C { f(); }').executables[0]; |
1059 expect(executable.isAbstract, isTrue); | 1084 expect(executable.isAbstract, isTrue); |
1060 } | 1085 } |
1061 | 1086 |
1062 test_executable_concrete() { | 1087 test_executable_concrete() { |
1063 UnlinkedExecutable executable = | 1088 UnlinkedExecutable executable = |
1064 serializeClassText('abstract class C { f() {} }').executables[0]; | 1089 serializeClassText('abstract class C { f() {} }').executables[0]; |
1065 expect(executable.isAbstract, isFalse); | 1090 expect(executable.isAbstract, isFalse); |
1066 } | 1091 } |
1067 | 1092 |
1068 test_executable_function() { | 1093 test_executable_function() { |
1069 UnlinkedExecutable executable = serializeExecutableText('f() {}'); | 1094 UnlinkedExecutable executable = serializeExecutableText('f() {}'); |
1070 expect(executable.kind, UnlinkedExecutableKind.functionOrMethod); | 1095 expect(executable.kind, UnlinkedExecutableKind.functionOrMethod); |
1071 expect(executable.unit, 0); | |
1072 expect(executable.hasImplicitReturnType, isTrue); | 1096 expect(executable.hasImplicitReturnType, isTrue); |
1073 checkDynamicTypeRef(executable.returnType); | 1097 checkDynamicTypeRef(executable.returnType); |
1074 } | 1098 } |
1075 | 1099 |
1076 test_executable_function_explicit_return() { | 1100 test_executable_function_explicit_return() { |
1077 UnlinkedExecutable executable = | 1101 UnlinkedExecutable executable = |
1078 serializeExecutableText('dynamic f() => null;'); | 1102 serializeExecutableText('dynamic f() => null;'); |
1079 expect(executable.hasImplicitReturnType, isFalse); | 1103 expect(executable.hasImplicitReturnType, isFalse); |
1080 checkDynamicTypeRef(executable.returnType); | 1104 checkDynamicTypeRef(executable.returnType); |
1081 } | 1105 } |
(...skipping 13 matching lines...) Expand all Loading... |
1095 } | 1119 } |
1096 | 1120 |
1097 test_executable_getter_type_implicit() { | 1121 test_executable_getter_type_implicit() { |
1098 UnlinkedExecutable executable = serializeExecutableText('get f => 1;'); | 1122 UnlinkedExecutable executable = serializeExecutableText('get f => 1;'); |
1099 checkDynamicTypeRef(executable.returnType); | 1123 checkDynamicTypeRef(executable.returnType); |
1100 expect(executable.hasImplicitReturnType, isTrue); | 1124 expect(executable.hasImplicitReturnType, isTrue); |
1101 expect(executable.parameters, isEmpty); | 1125 expect(executable.parameters, isEmpty); |
1102 } | 1126 } |
1103 | 1127 |
1104 test_executable_member_function() { | 1128 test_executable_member_function() { |
1105 UnlinkedExecutable executable = | 1129 UnlinkedExecutable executable = findExecutable('f', |
1106 findExecutable('f', cls: serializeClassText('class C { f() {} }')); | 1130 executables: serializeClassText('class C { f() {} }').executables); |
1107 expect(executable.kind, UnlinkedExecutableKind.functionOrMethod); | 1131 expect(executable.kind, UnlinkedExecutableKind.functionOrMethod); |
1108 expect(executable.hasImplicitReturnType, isTrue); | 1132 expect(executable.hasImplicitReturnType, isTrue); |
1109 } | 1133 } |
1110 | 1134 |
1111 test_executable_member_function_explicit_return() { | 1135 test_executable_member_function_explicit_return() { |
1112 UnlinkedExecutable executable = findExecutable('f', | 1136 UnlinkedExecutable executable = findExecutable('f', |
1113 cls: serializeClassText('class C { dynamic f() => null; }')); | 1137 executables: |
| 1138 serializeClassText('class C { dynamic f() => null; }').executables); |
1114 expect(executable.hasImplicitReturnType, isFalse); | 1139 expect(executable.hasImplicitReturnType, isFalse); |
1115 } | 1140 } |
1116 | 1141 |
1117 test_executable_member_getter() { | 1142 test_executable_member_getter() { |
1118 UnlinkedClass cls = serializeClassText('class C { int get f => 1; }'); | 1143 UnlinkedClass cls = serializeClassText('class C { int get f => 1; }'); |
1119 UnlinkedExecutable executable = | 1144 UnlinkedExecutable executable = |
1120 findExecutable('f', cls: cls, failIfAbsent: true); | 1145 findExecutable('f', executables: cls.executables, failIfAbsent: true); |
1121 expect(executable.kind, UnlinkedExecutableKind.getter); | 1146 expect(executable.kind, UnlinkedExecutableKind.getter); |
1122 expect(executable.hasImplicitReturnType, isFalse); | 1147 expect(executable.hasImplicitReturnType, isFalse); |
1123 expect(findVariable('f', cls: cls), isNull); | 1148 expect(findVariable('f', variables: cls.fields), isNull); |
1124 expect(findExecutable('f=', cls: cls), isNull); | 1149 expect(findExecutable('f=', executables: cls.executables), isNull); |
1125 } | 1150 } |
1126 | 1151 |
1127 test_executable_member_setter() { | 1152 test_executable_member_setter() { |
1128 UnlinkedClass cls = serializeClassText('class C { void set f(value) {} }'); | 1153 UnlinkedClass cls = serializeClassText('class C { void set f(value) {} }'); |
1129 UnlinkedExecutable executable = | 1154 UnlinkedExecutable executable = |
1130 findExecutable('f=', cls: cls, failIfAbsent: true); | 1155 findExecutable('f=', executables: cls.executables, failIfAbsent: true); |
1131 expect(executable.kind, UnlinkedExecutableKind.setter); | 1156 expect(executable.kind, UnlinkedExecutableKind.setter); |
1132 // For setters, hasImplicitReturnType is always false. | 1157 // For setters, hasImplicitReturnType is always false. |
1133 expect(executable.hasImplicitReturnType, isFalse); | 1158 expect(executable.hasImplicitReturnType, isFalse); |
1134 expect(findVariable('f', cls: cls), isNull); | 1159 expect(findVariable('f', variables: cls.fields), isNull); |
1135 expect(findExecutable('f', cls: cls), isNull); | 1160 expect(findExecutable('f', executables: cls.executables), isNull); |
1136 } | 1161 } |
1137 | 1162 |
1138 test_executable_member_setter_implicit_return() { | 1163 test_executable_member_setter_implicit_return() { |
1139 UnlinkedClass cls = serializeClassText('class C { set f(value) {} }'); | 1164 UnlinkedClass cls = serializeClassText('class C { set f(value) {} }'); |
1140 UnlinkedExecutable executable = | 1165 UnlinkedExecutable executable = |
1141 findExecutable('f=', cls: cls, failIfAbsent: true); | 1166 findExecutable('f=', executables: cls.executables, failIfAbsent: true); |
1142 expect(executable.hasImplicitReturnType, isFalse); | 1167 expect(executable.hasImplicitReturnType, isFalse); |
1143 checkDynamicTypeRef(executable.returnType); | 1168 checkDynamicTypeRef(executable.returnType); |
1144 } | 1169 } |
1145 | 1170 |
1146 test_executable_name() { | 1171 test_executable_name() { |
1147 UnlinkedExecutable executable = serializeExecutableText('f() {}'); | 1172 UnlinkedExecutable executable = serializeExecutableText('f() {}'); |
1148 expect(executable.name, 'f'); | 1173 expect(executable.name, 'f'); |
1149 } | 1174 } |
1150 | 1175 |
1151 test_executable_no_flags() { | 1176 test_executable_no_flags() { |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1345 } | 1370 } |
1346 | 1371 |
1347 test_executable_type_param_in_return_type() { | 1372 test_executable_type_param_in_return_type() { |
1348 // TODO(paulberry): also test top level executables. | 1373 // TODO(paulberry): also test top level executables. |
1349 UnlinkedExecutable ex = serializeMethodText('T f<T>() => null;'); | 1374 UnlinkedExecutable ex = serializeMethodText('T f<T>() => null;'); |
1350 checkParamTypeRef(ex.returnType, 1); | 1375 checkParamTypeRef(ex.returnType, 1); |
1351 } | 1376 } |
1352 | 1377 |
1353 test_export_hide_order() { | 1378 test_export_hide_order() { |
1354 serializeLibraryText('export "dart:async" hide Future, Stream;'); | 1379 serializeLibraryText('export "dart:async" hide Future, Stream;'); |
1355 expect(unlinked.exports, hasLength(1)); | 1380 expect(definingUnit.unlinked.exports, hasLength(1)); |
1356 expect(unlinked.exports[0].combinators, hasLength(1)); | 1381 expect(definingUnit.unlinked.exports[0].combinators, hasLength(1)); |
1357 expect(unlinked.exports[0].combinators[0].shows, isEmpty); | 1382 expect(definingUnit.unlinked.exports[0].combinators[0].shows, isEmpty); |
1358 expect(unlinked.exports[0].combinators[0].hides, hasLength(2)); | 1383 expect(definingUnit.unlinked.exports[0].combinators[0].hides, hasLength(2)); |
1359 checkCombinatorName(unlinked.exports[0].combinators[0].hides[0], 'Future'); | 1384 checkCombinatorName( |
1360 checkCombinatorName(unlinked.exports[0].combinators[0].hides[1], 'Stream'); | 1385 definingUnit.unlinked.exports[0].combinators[0].hides[0], 'Future'); |
| 1386 checkCombinatorName( |
| 1387 definingUnit.unlinked.exports[0].combinators[0].hides[1], 'Stream'); |
1361 } | 1388 } |
1362 | 1389 |
1363 test_export_no_combinators() { | 1390 test_export_no_combinators() { |
1364 serializeLibraryText('export "dart:async";'); | 1391 serializeLibraryText('export "dart:async";'); |
1365 expect(unlinked.exports, hasLength(1)); | 1392 expect(definingUnit.unlinked.exports, hasLength(1)); |
1366 expect(unlinked.exports[0].combinators, isEmpty); | 1393 expect(definingUnit.unlinked.exports[0].combinators, isEmpty); |
1367 } | 1394 } |
1368 | 1395 |
1369 test_export_show_order() { | 1396 test_export_show_order() { |
1370 serializeLibraryText('export "dart:async" show Future, Stream;'); | 1397 serializeLibraryText('export "dart:async" show Future, Stream;'); |
1371 expect(unlinked.exports, hasLength(1)); | 1398 expect(definingUnit.unlinked.exports, hasLength(1)); |
1372 expect(unlinked.exports[0].combinators, hasLength(1)); | 1399 expect(definingUnit.unlinked.exports[0].combinators, hasLength(1)); |
1373 expect(unlinked.exports[0].combinators[0].shows, hasLength(2)); | 1400 expect(definingUnit.unlinked.exports[0].combinators[0].shows, hasLength(2)); |
1374 expect(unlinked.exports[0].combinators[0].hides, isEmpty); | 1401 expect(definingUnit.unlinked.exports[0].combinators[0].hides, isEmpty); |
1375 checkCombinatorName(unlinked.exports[0].combinators[0].shows[0], 'Future'); | 1402 checkCombinatorName( |
1376 checkCombinatorName(unlinked.exports[0].combinators[0].shows[1], 'Stream'); | 1403 definingUnit.unlinked.exports[0].combinators[0].shows[0], 'Future'); |
| 1404 checkCombinatorName( |
| 1405 definingUnit.unlinked.exports[0].combinators[0].shows[1], 'Stream'); |
1377 } | 1406 } |
1378 | 1407 |
1379 test_export_uri() { | 1408 test_export_uri() { |
1380 addNamedSource('/a.dart', 'library my.lib;'); | 1409 addNamedSource('/a.dart', 'library my.lib;'); |
1381 String uriString = '"a.dart"'; | 1410 String uriString = '"a.dart"'; |
1382 String libraryText = 'export $uriString;'; | 1411 String libraryText = 'export $uriString;'; |
1383 serializeLibraryText(libraryText); | 1412 serializeLibraryText(libraryText); |
1384 expect(unlinked.exports, hasLength(1)); | 1413 expect(definingUnit.unlinked.exports, hasLength(1)); |
1385 expect(unlinked.exports[0].uri, 'a.dart'); | 1414 expect(definingUnit.unlinked.exports[0].uri, 'a.dart'); |
1386 } | 1415 } |
1387 | 1416 |
1388 test_field() { | 1417 test_field() { |
1389 UnlinkedClass cls = serializeClassText('class C { int i; }'); | 1418 UnlinkedClass cls = serializeClassText('class C { int i; }'); |
1390 expect(findVariable('i', cls: cls), isNotNull); | 1419 expect(findVariable('i', variables: cls.fields), isNotNull); |
1391 expect(findExecutable('i', cls: cls), isNull); | 1420 expect(findExecutable('i', executables: cls.executables), isNull); |
1392 expect(findExecutable('i=', cls: cls), isNull); | 1421 expect(findExecutable('i=', executables: cls.executables), isNull); |
1393 } | 1422 } |
1394 | 1423 |
1395 test_field_final() { | 1424 test_field_final() { |
1396 UnlinkedVariable variable = | 1425 UnlinkedVariable variable = |
1397 serializeClassText('class C { final int i = 0; }').fields[0]; | 1426 serializeClassText('class C { final int i = 0; }').fields[0]; |
1398 expect(variable.isFinal, isTrue); | 1427 expect(variable.isFinal, isTrue); |
1399 } | 1428 } |
1400 | 1429 |
1401 test_field_non_final() { | 1430 test_field_non_final() { |
1402 UnlinkedVariable variable = | 1431 UnlinkedVariable variable = |
1403 serializeClassText('class C { int i; }').fields[0]; | 1432 serializeClassText('class C { int i; }').fields[0]; |
1404 expect(variable.isFinal, isFalse); | 1433 expect(variable.isFinal, isFalse); |
1405 } | 1434 } |
1406 | 1435 |
1407 test_generic_method_in_generic_class() { | 1436 test_generic_method_in_generic_class() { |
1408 UnlinkedClass cls = serializeClassText( | 1437 UnlinkedClass cls = serializeClassText( |
1409 'class C<T, U> { void m<V, W>(T t, U u, V v, W w) {} }'); | 1438 'class C<T, U> { void m<V, W>(T t, U u, V v, W w) {} }'); |
1410 List<UnlinkedParam> params = cls.executables[0].parameters; | 1439 List<UnlinkedParam> params = cls.executables[0].parameters; |
1411 checkParamTypeRef(params[0].type, 4); | 1440 checkParamTypeRef(params[0].type, 4); |
1412 checkParamTypeRef(params[1].type, 3); | 1441 checkParamTypeRef(params[1].type, 3); |
1413 checkParamTypeRef(params[2].type, 2); | 1442 checkParamTypeRef(params[2].type, 2); |
1414 checkParamTypeRef(params[3].type, 1); | 1443 checkParamTypeRef(params[3].type, 1); |
1415 } | 1444 } |
1416 | 1445 |
1417 test_import_deferred() { | 1446 test_import_deferred() { |
1418 serializeLibraryText( | 1447 serializeLibraryText( |
1419 'import "dart:async" deferred as a; main() { print(a.Future); }'); | 1448 'import "dart:async" deferred as a; main() { print(a.Future); }'); |
1420 expect(unlinked.imports[0].isDeferred, isTrue); | 1449 expect(definingUnit.unlinked.imports[0].isDeferred, isTrue); |
1421 } | 1450 } |
1422 | 1451 |
1423 test_import_dependency() { | 1452 test_import_dependency() { |
1424 serializeLibraryText('import "dart:async"; Future x;'); | 1453 serializeLibraryText('import "dart:async"; Future x;'); |
1425 // Second import is the implicit import of dart:core | 1454 // Second import is the implicit import of dart:core |
1426 expect(unlinked.imports, hasLength(2)); | 1455 expect(definingUnit.unlinked.imports, hasLength(2)); |
1427 checkDependency(lib.importDependencies[0], 'dart:async', 'dart:async'); | 1456 checkDependency(lib.importDependencies[0], 'dart:async', 'dart:async'); |
1428 } | 1457 } |
1429 | 1458 |
1430 test_import_explicit() { | 1459 test_import_explicit() { |
1431 serializeLibraryText('import "dart:core"; int i;'); | 1460 serializeLibraryText('import "dart:core"; int i;'); |
1432 expect(unlinked.imports, hasLength(1)); | 1461 expect(definingUnit.unlinked.imports, hasLength(1)); |
1433 expect(unlinked.imports[0].isImplicit, isFalse); | 1462 expect(definingUnit.unlinked.imports[0].isImplicit, isFalse); |
1434 } | 1463 } |
1435 | 1464 |
1436 test_import_hide_order() { | 1465 test_import_hide_order() { |
1437 serializeLibraryText( | 1466 serializeLibraryText( |
1438 'import "dart:async" hide Future, Stream; Completer c;'); | 1467 'import "dart:async" hide Future, Stream; Completer c;'); |
1439 // Second import is the implicit import of dart:core | 1468 // Second import is the implicit import of dart:core |
1440 expect(unlinked.imports, hasLength(2)); | 1469 expect(definingUnit.unlinked.imports, hasLength(2)); |
1441 expect(unlinked.imports[0].combinators, hasLength(1)); | 1470 expect(definingUnit.unlinked.imports[0].combinators, hasLength(1)); |
1442 expect(unlinked.imports[0].combinators[0].shows, isEmpty); | 1471 expect(definingUnit.unlinked.imports[0].combinators[0].shows, isEmpty); |
1443 expect(unlinked.imports[0].combinators[0].hides, hasLength(2)); | 1472 expect(definingUnit.unlinked.imports[0].combinators[0].hides, hasLength(2)); |
1444 checkCombinatorName(unlinked.imports[0].combinators[0].hides[0], 'Future'); | 1473 checkCombinatorName( |
1445 checkCombinatorName(unlinked.imports[0].combinators[0].hides[1], 'Stream'); | 1474 definingUnit.unlinked.imports[0].combinators[0].hides[0], 'Future'); |
| 1475 checkCombinatorName( |
| 1476 definingUnit.unlinked.imports[0].combinators[0].hides[1], 'Stream'); |
1446 } | 1477 } |
1447 | 1478 |
1448 test_import_implicit() { | 1479 test_import_implicit() { |
1449 // The implicit import of dart:core is represented in the model. | 1480 // The implicit import of dart:core is represented in the model. |
1450 serializeLibraryText(''); | 1481 serializeLibraryText(''); |
1451 expect(unlinked.imports, hasLength(1)); | 1482 expect(definingUnit.unlinked.imports, hasLength(1)); |
1452 checkDependency(lib.importDependencies[0], 'dart:core', 'dart:core'); | 1483 checkDependency(lib.importDependencies[0], 'dart:core', 'dart:core'); |
1453 expect(unlinked.imports[0].uri, isEmpty); | 1484 expect(definingUnit.unlinked.imports[0].uri, isEmpty); |
1454 expect(unlinked.imports[0].prefix, 0); | 1485 expect(definingUnit.unlinked.imports[0].prefix, 0); |
1455 expect(unlinked.imports[0].combinators, isEmpty); | 1486 expect(definingUnit.unlinked.imports[0].combinators, isEmpty); |
1456 expect(unlinked.imports[0].isImplicit, isTrue); | 1487 expect(definingUnit.unlinked.imports[0].isImplicit, isTrue); |
1457 } | 1488 } |
1458 | 1489 |
1459 test_import_no_combinators() { | 1490 test_import_no_combinators() { |
1460 serializeLibraryText('import "dart:async"; Future x;'); | 1491 serializeLibraryText('import "dart:async"; Future x;'); |
1461 // Second import is the implicit import of dart:core | 1492 // Second import is the implicit import of dart:core |
1462 expect(unlinked.imports, hasLength(2)); | 1493 expect(definingUnit.unlinked.imports, hasLength(2)); |
1463 expect(unlinked.imports[0].combinators, isEmpty); | 1494 expect(definingUnit.unlinked.imports[0].combinators, isEmpty); |
1464 } | 1495 } |
1465 | 1496 |
1466 test_import_no_flags() { | 1497 test_import_no_flags() { |
1467 serializeLibraryText('import "dart:async"; Future x;'); | 1498 serializeLibraryText('import "dart:async"; Future x;'); |
1468 expect(unlinked.imports[0].isImplicit, isFalse); | 1499 expect(definingUnit.unlinked.imports[0].isImplicit, isFalse); |
1469 expect(unlinked.imports[0].isDeferred, isFalse); | 1500 expect(definingUnit.unlinked.imports[0].isDeferred, isFalse); |
1470 } | 1501 } |
1471 | 1502 |
1472 test_import_non_deferred() { | 1503 test_import_non_deferred() { |
1473 serializeLibraryText( | 1504 serializeLibraryText( |
1474 'import "dart:async" as a; main() { print(a.Future); }'); | 1505 'import "dart:async" as a; main() { print(a.Future); }'); |
1475 expect(unlinked.imports[0].isDeferred, isFalse); | 1506 expect(definingUnit.unlinked.imports[0].isDeferred, isFalse); |
1476 } | 1507 } |
1477 | 1508 |
1478 test_import_of_file_with_missing_part() { | 1509 test_import_of_file_with_missing_part() { |
1479 // Other references in foo.dart should be resolved even though foo.dart's | 1510 // Other references in foo.dart should be resolved even though foo.dart's |
1480 // part declaration for bar.dart refers to a non-existent file. | 1511 // part declaration for bar.dart refers to a non-existent file. |
1481 addNamedSource('/foo.dart', 'part "bar.dart"; class C {}'); | 1512 addNamedSource('/foo.dart', 'part "bar.dart"; class C {}'); |
1482 serializeLibraryText('import "foo.dart"; C x;'); | 1513 serializeLibraryText('import "foo.dart"; C x;'); |
1483 checkTypeRef(findVariable('x').type, absUri('/foo.dart'), 'foo.dart', 'C'); | 1514 checkTypeRef(findVariable('x').type, absUri('/foo.dart'), 'foo.dart', 'C'); |
1484 } | 1515 } |
1485 | 1516 |
1486 test_import_of_missing_export() { | 1517 test_import_of_missing_export() { |
1487 // Other references in foo.dart should be resolved even though foo.dart's | 1518 // Other references in foo.dart should be resolved even though foo.dart's |
1488 // re-export of bar.dart refers to a non-existent file. | 1519 // re-export of bar.dart refers to a non-existent file. |
1489 addNamedSource('/foo.dart', 'export "bar.dart"; class C {}'); | 1520 addNamedSource('/foo.dart', 'export "bar.dart"; class C {}'); |
1490 serializeLibraryText('import "foo.dart"; C x;'); | 1521 serializeLibraryText('import "foo.dart"; C x;'); |
1491 checkTypeRef(findVariable('x').type, absUri('/foo.dart'), 'foo.dart', 'C'); | 1522 checkTypeRef(findVariable('x').type, absUri('/foo.dart'), 'foo.dart', 'C'); |
1492 } | 1523 } |
1493 | 1524 |
1494 test_import_offset() { | 1525 test_import_offset() { |
1495 String libraryText = ' import "dart:async"; Future x;'; | 1526 String libraryText = ' import "dart:async"; Future x;'; |
1496 serializeLibraryText(libraryText); | 1527 serializeLibraryText(libraryText); |
1497 expect(unlinked.imports[0].offset, libraryText.indexOf('import')); | 1528 expect( |
| 1529 definingUnit.unlinked.imports[0].offset, libraryText.indexOf('import')); |
1498 } | 1530 } |
1499 | 1531 |
1500 test_import_prefix_name() { | 1532 test_import_prefix_name() { |
1501 String libraryText = 'import "dart:async" as a; a.Future x;'; | 1533 String libraryText = 'import "dart:async" as a; a.Future x;'; |
1502 serializeLibraryText(libraryText); | 1534 serializeLibraryText(libraryText); |
1503 // Second import is the implicit import of dart:core | 1535 // Second import is the implicit import of dart:core |
1504 expect(unlinked.imports, hasLength(2)); | 1536 expect(definingUnit.unlinked.imports, hasLength(2)); |
1505 expect(unlinked.imports[0].prefix, isNot(0)); | 1537 expect(definingUnit.unlinked.imports[0].prefix, isNot(0)); |
1506 expect(unlinked.prefixes[unlinked.imports[0].prefix].name, 'a'); | 1538 expect( |
| 1539 unlinked.prefixes[definingUnit.unlinked.imports[0].prefix].name, 'a'); |
1507 } | 1540 } |
1508 | 1541 |
1509 test_import_prefix_none() { | 1542 test_import_prefix_none() { |
1510 serializeLibraryText('import "dart:async"; Future x;'); | 1543 serializeLibraryText('import "dart:async"; Future x;'); |
1511 // Second import is the implicit import of dart:core | 1544 // Second import is the implicit import of dart:core |
1512 expect(unlinked.imports, hasLength(2)); | 1545 expect(definingUnit.unlinked.imports, hasLength(2)); |
1513 expect(unlinked.imports[0].prefix, 0); | 1546 expect(definingUnit.unlinked.imports[0].prefix, 0); |
1514 expect(unlinked.prefixes[unlinked.imports[0].prefix].name, isEmpty); | 1547 expect(unlinked.prefixes[definingUnit.unlinked.imports[0].prefix].name, |
| 1548 isEmpty); |
1515 } | 1549 } |
1516 | 1550 |
1517 test_import_prefix_reference() { | 1551 test_import_prefix_reference() { |
1518 UnlinkedVariable variable = | 1552 UnlinkedVariable variable = |
1519 serializeVariableText('import "dart:async" as a; a.Future v;'); | 1553 serializeVariableText('import "dart:async" as a; a.Future v;'); |
1520 checkTypeRef(variable.type, 'dart:async', 'dart:async', 'Future', | 1554 checkTypeRef(variable.type, 'dart:async', 'dart:async', 'Future', |
1521 expectedPrefix: 'a'); | 1555 expectedPrefix: 'a'); |
1522 } | 1556 } |
1523 | 1557 |
1524 test_import_reference() { | 1558 test_import_reference() { |
(...skipping 26 matching lines...) Expand all Loading... |
1551 expectedPrefix: 'a'); | 1585 expectedPrefix: 'a'); |
1552 checkTypeRef(findVariable('s').type, 'dart:async', 'dart:async', 'Stream', | 1586 checkTypeRef(findVariable('s').type, 'dart:async', 'dart:async', 'Stream', |
1553 expectedPrefix: 'a'); | 1587 expectedPrefix: 'a'); |
1554 } | 1588 } |
1555 | 1589 |
1556 test_import_show_order() { | 1590 test_import_show_order() { |
1557 String libraryText = | 1591 String libraryText = |
1558 'import "dart:async" show Future, Stream; Future x; Stream y;'; | 1592 'import "dart:async" show Future, Stream; Future x; Stream y;'; |
1559 serializeLibraryText(libraryText); | 1593 serializeLibraryText(libraryText); |
1560 // Second import is the implicit import of dart:core | 1594 // Second import is the implicit import of dart:core |
1561 expect(unlinked.imports, hasLength(2)); | 1595 expect(definingUnit.unlinked.imports, hasLength(2)); |
1562 expect(unlinked.imports[0].combinators, hasLength(1)); | 1596 expect(definingUnit.unlinked.imports[0].combinators, hasLength(1)); |
1563 expect(unlinked.imports[0].combinators[0].shows, hasLength(2)); | 1597 expect(definingUnit.unlinked.imports[0].combinators[0].shows, hasLength(2)); |
1564 expect(unlinked.imports[0].combinators[0].hides, isEmpty); | 1598 expect(definingUnit.unlinked.imports[0].combinators[0].hides, isEmpty); |
1565 checkCombinatorName(unlinked.imports[0].combinators[0].shows[0], 'Future'); | 1599 checkCombinatorName( |
1566 checkCombinatorName(unlinked.imports[0].combinators[0].shows[1], 'Stream'); | 1600 definingUnit.unlinked.imports[0].combinators[0].shows[0], 'Future'); |
| 1601 checkCombinatorName( |
| 1602 definingUnit.unlinked.imports[0].combinators[0].shows[1], 'Stream'); |
1567 } | 1603 } |
1568 | 1604 |
1569 test_import_uri() { | 1605 test_import_uri() { |
1570 String uriString = '"dart:async"'; | 1606 String uriString = '"dart:async"'; |
1571 String libraryText = 'import $uriString; Future x;'; | 1607 String libraryText = 'import $uriString; Future x;'; |
1572 serializeLibraryText(libraryText); | 1608 serializeLibraryText(libraryText); |
1573 // Second import is the implicit import of dart:core | 1609 // Second import is the implicit import of dart:core |
1574 expect(unlinked.imports, hasLength(2)); | 1610 expect(definingUnit.unlinked.imports, hasLength(2)); |
1575 expect(unlinked.imports[0].uri, 'dart:async'); | 1611 expect(definingUnit.unlinked.imports[0].uri, 'dart:async'); |
1576 } | 1612 } |
1577 | 1613 |
1578 test_library_named() { | 1614 test_library_named() { |
1579 String text = 'library foo.bar;'; | 1615 String text = 'library foo.bar;'; |
1580 serializeLibraryText(text); | 1616 serializeLibraryText(text); |
1581 expect(unlinked.name, 'foo.bar'); | 1617 expect(definingUnit.unlinked.libraryName, 'foo.bar'); |
1582 } | 1618 } |
1583 | 1619 |
1584 test_library_unnamed() { | 1620 test_library_unnamed() { |
1585 serializeLibraryText(''); | 1621 serializeLibraryText(''); |
1586 expect(unlinked.name, isEmpty); | 1622 expect(definingUnit.unlinked.libraryName, isEmpty); |
1587 } | |
1588 | |
1589 test_nested_elements_have_no_part() { | |
1590 addNamedSource( | |
1591 '/part1.dart', | |
1592 ''' | |
1593 part of my.lib; | |
1594 | |
1595 class C { | |
1596 var v; | |
1597 f() {} | |
1598 } | |
1599 '''); | |
1600 serializeLibraryText('library my.lib; part "part1.dart";'); | |
1601 UnlinkedClass cls = findClass('C'); | |
1602 expect(findVariable('v', cls: cls).unit, 0); | |
1603 expect(findExecutable('f', cls: cls).unit, 0); | |
1604 } | 1623 } |
1605 | 1624 |
1606 test_parts_defining_compilation_unit() { | 1625 test_parts_defining_compilation_unit() { |
1607 serializeLibraryText(''); | 1626 serializeLibraryText(''); |
1608 expect(unlinked.units, hasLength(1)); | 1627 expect(lib.units, hasLength(1)); |
1609 expect(unlinked.units[0].uri, isEmpty); | 1628 expect(definingUnit.unlinked.parts, isEmpty); |
1610 } | 1629 } |
1611 | 1630 |
1612 test_parts_included() { | 1631 test_parts_included() { |
1613 addNamedSource('/part1.dart', 'part of my.lib;'); | 1632 addNamedSource('/part1.dart', 'part of my.lib;'); |
1614 String partString = '"part1.dart"'; | 1633 String partString = '"part1.dart"'; |
1615 String libraryText = 'library my.lib; part $partString;'; | 1634 String libraryText = 'library my.lib; part $partString;'; |
1616 serializeLibraryText(libraryText); | 1635 serializeLibraryText(libraryText); |
1617 expect(unlinked.units, hasLength(2)); | 1636 expect(lib.units, hasLength(2)); |
1618 expect(unlinked.units[1].uri, 'part1.dart'); | 1637 expect(definingUnit.unlinked.parts, hasLength(1)); |
| 1638 expect(definingUnit.unlinked.parts[0].uri, 'part1.dart'); |
1619 } | 1639 } |
1620 | 1640 |
1621 test_type_arguments_explicit() { | 1641 test_type_arguments_explicit() { |
1622 UnlinkedTypeRef typeRef = serializeTypeText('List<int>'); | 1642 UnlinkedTypeRef typeRef = serializeTypeText('List<int>'); |
1623 checkTypeRef(typeRef, 'dart:core', 'dart:core', 'List', | 1643 checkTypeRef(typeRef, 'dart:core', 'dart:core', 'List', |
1624 allowTypeParameters: true); | 1644 allowTypeParameters: true); |
1625 expect(typeRef.typeArguments, hasLength(1)); | 1645 expect(typeRef.typeArguments, hasLength(1)); |
1626 checkTypeRef(typeRef.typeArguments[0], 'dart:core', 'dart:core', 'int'); | 1646 checkTypeRef(typeRef.typeArguments[0], 'dart:core', 'dart:core', 'int'); |
1627 } | 1647 } |
1628 | 1648 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 } | 1698 } |
1679 | 1699 |
1680 test_type_dynamic() { | 1700 test_type_dynamic() { |
1681 checkDynamicTypeRef(serializeTypeText('dynamic')); | 1701 checkDynamicTypeRef(serializeTypeText('dynamic')); |
1682 } | 1702 } |
1683 | 1703 |
1684 test_type_reference_to_class_argument() { | 1704 test_type_reference_to_class_argument() { |
1685 UnlinkedClass cls = serializeClassText('class C<T, U> { T t; U u; }'); | 1705 UnlinkedClass cls = serializeClassText('class C<T, U> { T t; U u; }'); |
1686 { | 1706 { |
1687 UnlinkedTypeRef typeRef = | 1707 UnlinkedTypeRef typeRef = |
1688 findVariable('t', cls: cls, failIfAbsent: true).type; | 1708 findVariable('t', variables: cls.fields, failIfAbsent: true).type; |
1689 checkParamTypeRef(typeRef, 2); | 1709 checkParamTypeRef(typeRef, 2); |
1690 } | 1710 } |
1691 { | 1711 { |
1692 UnlinkedTypeRef typeRef = | 1712 UnlinkedTypeRef typeRef = |
1693 findVariable('u', cls: cls, failIfAbsent: true).type; | 1713 findVariable('u', variables: cls.fields, failIfAbsent: true).type; |
1694 checkParamTypeRef(typeRef, 1); | 1714 checkParamTypeRef(typeRef, 1); |
1695 } | 1715 } |
1696 } | 1716 } |
1697 | 1717 |
1698 test_type_reference_to_import_of_export() { | 1718 test_type_reference_to_import_of_export() { |
1699 addNamedSource('/a.dart', 'library a; export "b.dart";'); | 1719 addNamedSource('/a.dart', 'library a; export "b.dart";'); |
1700 addNamedSource('/b.dart', 'library b; class C {}'); | 1720 addNamedSource('/b.dart', 'library b; class C {}'); |
1701 checkTypeRef(serializeTypeText('C', otherDeclarations: 'import "a.dart";'), | 1721 checkTypeRef(serializeTypeText('C', otherDeclarations: 'import "a.dart";'), |
1702 absUri('/b.dart'), 'b.dart', 'C'); | 1722 absUri('/b.dart'), 'b.dart', 'C'); |
1703 } | 1723 } |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1793 } | 1813 } |
1794 | 1814 |
1795 test_type_unresolved() { | 1815 test_type_unresolved() { |
1796 UnlinkedTypeRef typeRef = serializeTypeText('Foo', allowErrors: true); | 1816 UnlinkedTypeRef typeRef = serializeTypeText('Foo', allowErrors: true); |
1797 checkUnresolvedTypeRef(typeRef, null, 'Foo'); | 1817 checkUnresolvedTypeRef(typeRef, null, 'Foo'); |
1798 } | 1818 } |
1799 | 1819 |
1800 test_typedef_name() { | 1820 test_typedef_name() { |
1801 UnlinkedTypedef type = serializeTypedefText('typedef F();'); | 1821 UnlinkedTypedef type = serializeTypedefText('typedef F();'); |
1802 expect(type.name, 'F'); | 1822 expect(type.name, 'F'); |
1803 expect(type.unit, 0); | |
1804 } | 1823 } |
1805 | 1824 |
1806 test_typedef_param_none() { | 1825 test_typedef_param_none() { |
1807 UnlinkedTypedef type = serializeTypedefText('typedef F();'); | 1826 UnlinkedTypedef type = serializeTypedefText('typedef F();'); |
1808 expect(type.parameters, isEmpty); | 1827 expect(type.parameters, isEmpty); |
1809 } | 1828 } |
1810 | 1829 |
1811 test_typedef_param_order() { | 1830 test_typedef_param_order() { |
1812 UnlinkedTypedef type = serializeTypedefText('typedef F(x, y);'); | 1831 UnlinkedTypedef type = serializeTypedefText('typedef F(x, y);'); |
1813 expect(type.parameters, hasLength(2)); | 1832 expect(type.parameters, hasLength(2)); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1869 test_variable_implicit_dynamic() { | 1888 test_variable_implicit_dynamic() { |
1870 UnlinkedVariable variable = serializeVariableText('var v;'); | 1889 UnlinkedVariable variable = serializeVariableText('var v;'); |
1871 checkDynamicTypeRef(variable.type); | 1890 checkDynamicTypeRef(variable.type); |
1872 expect(variable.hasImplicitType, isTrue); | 1891 expect(variable.hasImplicitType, isTrue); |
1873 } | 1892 } |
1874 | 1893 |
1875 test_variable_name() { | 1894 test_variable_name() { |
1876 UnlinkedVariable variable = | 1895 UnlinkedVariable variable = |
1877 serializeVariableText('int i;', variableName: 'i'); | 1896 serializeVariableText('int i;', variableName: 'i'); |
1878 expect(variable.name, 'i'); | 1897 expect(variable.name, 'i'); |
1879 expect(variable.unit, 0); | |
1880 } | 1898 } |
1881 | 1899 |
1882 test_variable_no_flags() { | 1900 test_variable_no_flags() { |
1883 UnlinkedVariable variable = | 1901 UnlinkedVariable variable = |
1884 serializeVariableText('int i;', variableName: 'i'); | 1902 serializeVariableText('int i;', variableName: 'i'); |
1885 expect(variable.isStatic, isFalse); | 1903 expect(variable.isStatic, isFalse); |
1886 expect(variable.isConst, isFalse); | 1904 expect(variable.isConst, isFalse); |
1887 expect(variable.isFinal, isFalse); | 1905 expect(variable.isFinal, isFalse); |
1888 } | 1906 } |
1889 | 1907 |
(...skipping 27 matching lines...) Expand all Loading... |
1917 serializeClassText('class C { static int i; }').fields[0]; | 1935 serializeClassText('class C { static int i; }').fields[0]; |
1918 expect(variable.isStatic, isTrue); | 1936 expect(variable.isStatic, isTrue); |
1919 } | 1937 } |
1920 | 1938 |
1921 test_variable_type() { | 1939 test_variable_type() { |
1922 UnlinkedVariable variable = | 1940 UnlinkedVariable variable = |
1923 serializeVariableText('int i;', variableName: 'i'); | 1941 serializeVariableText('int i;', variableName: 'i'); |
1924 checkTypeRef(variable.type, 'dart:core', 'dart:core', 'int'); | 1942 checkTypeRef(variable.type, 'dart:core', 'dart:core', 'int'); |
1925 } | 1943 } |
1926 } | 1944 } |
OLD | NEW |