| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 instantiated_classes_test; | 5 library instantiated_classes_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'package:expect/expect.dart'; | 8 import 'package:expect/expect.dart'; |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:compiler/src/elements/entities.dart' | 10 import 'package:compiler/src/elements/entities.dart' |
| 11 show ClassEntity, LibraryEntity; | 11 show ClassEntity, LibraryEntity; |
| 12 import 'type_test_helper.dart'; | 12 import 'type_test_helper.dart'; |
| 13 | 13 |
| 14 void main() { | 14 void main() { |
| 15 asyncTest(() => Future.forEach([ | 15 asyncTest(() => Future.forEach([ |
| 16 () => test("class Class {}", ["Class"]), | 16 () => test("class Class {}", ["Class"]), |
| 17 () => test( | 17 () => test("""abstract class A {} |
| 18 """abstract class A {} | 18 class Class extends A {}""", ["Class"]), |
| 19 class Class extends A {}""", | 19 () => test("""class A {} |
| 20 ["Class"]), | 20 class Class extends A {}""", ["Class"]), |
| 21 () => test( | 21 () => test("""class A {} |
| 22 """class A {} | |
| 23 class Class extends A {}""", | |
| 24 ["Class"]), | |
| 25 () => test( | |
| 26 """class A {} | |
| 27 class B {} | 22 class B {} |
| 28 class Class extends A {}""", | 23 class Class extends A {}""", ["Class"]), |
| 29 ["Class"]), | 24 () => test("""class A {} |
| 30 () => test( | 25 class Class implements A {}""", ["Class"]), |
| 31 """class A {} | 26 () => test("""class A {} |
| 32 class Class implements A {}""", | 27 class Class extends Object with A {}""", ["Class"]), |
| 33 ["Class"]), | 28 () => test("""class A {} |
| 34 () => test( | |
| 35 """class A {} | |
| 36 class Class extends Object with A {}""", | |
| 37 ["Class"]), | |
| 38 () => test( | |
| 39 """class A {} | |
| 40 class B {} | 29 class B {} |
| 41 class Class extends Object with B implements A {}""", | 30 class Class extends Object with B implements A {}""", |
| 42 ["Class"]), | 31 ["Class"]), |
| 43 | 32 |
| 44 () => test( | 33 () => test("""class A {} |
| 45 """class A {} | 34 class Class {}""", ["Class", "A"], ["Class", "A"]), |
| 46 class Class {}""", | 35 () => test("""class A {} |
| 47 ["Class", "A"], | 36 class Class extends A {}""", ["Class", "A"], ["Class", "A"]), |
| 37 () => test("""class A {} |
| 38 class Class implements A {}""", ["Class", "A"], |
| 48 ["Class", "A"]), | 39 ["Class", "A"]), |
| 49 () => test( | 40 () => test("""class A {} |
| 50 """class A {} | |
| 51 class Class extends A {}""", | |
| 52 ["Class", "A"], | |
| 53 ["Class", "A"]), | |
| 54 () => test( | |
| 55 """class A {} | |
| 56 class Class implements A {}""", | |
| 57 ["Class", "A"], | |
| 58 ["Class", "A"]), | |
| 59 () => test( | |
| 60 """class A {} | |
| 61 class B extends A {} | 41 class B extends A {} |
| 62 class Class extends B {}""", | 42 class Class extends B {}""", ["Class", "A"], ["Class", "A"]), |
| 63 ["Class", "A"], | 43 () => test("""class A {} |
| 64 ["Class", "A"]), | |
| 65 () => test( | |
| 66 """class A {} | |
| 67 class B {} | 44 class B {} |
| 68 class Class extends B with A {}""", | 45 class Class extends B with A {}""", ["Class", "A"], |
| 69 ["Class", "A"], | |
| 70 ["Class", "A"]), | 46 ["Class", "A"]), |
| 71 | 47 |
| 72 // TODO(johnniwinther): Avoid registration of `Class` as instantiated. | 48 // TODO(johnniwinther): Avoid registration of `Class` as instantiated. |
| 73 () => test( | 49 () => test("""class A {} |
| 74 """class A {} | |
| 75 class Class implements A { | 50 class Class implements A { |
| 76 factory Class() = A; | 51 factory Class() = A; |
| 77 }""", | 52 }""", ["Class", "A"], ["Class"]), |
| 78 ["Class", "A"], | |
| 79 ["Class"]), | |
| 80 ], (f) => f())); | 53 ], (f) => f())); |
| 81 } | 54 } |
| 82 | 55 |
| 83 Future test(String source, List<String> directlyInstantiatedClasses, | 56 Future test(String source, List<String> directlyInstantiatedClasses, |
| 84 [List<String> newClasses = const <String>["Class"]]) { | 57 [List<String> newClasses = const <String>["Class"]]) { |
| 85 StringBuffer mainSource = new StringBuffer(); | 58 StringBuffer mainSource = new StringBuffer(); |
| 86 mainSource.write('main() {\n'); | 59 mainSource.write('main() {\n'); |
| 87 for (String newClass in newClasses) { | 60 for (String newClass in newClasses) { |
| 88 mainSource.write(' new $newClass();\n'); | 61 mainSource.write(' new $newClass();\n'); |
| 89 } | 62 } |
| 90 mainSource.write('}'); | 63 mainSource.write('}'); |
| 91 return TypeEnvironment | 64 return TypeEnvironment |
| 92 .create(source, mainSource: mainSource.toString(), useMockCompiler: true) | 65 .create(source, mainSource: mainSource.toString(), useMockCompiler: true) |
| 93 .then((dynamic env) { | 66 .then((dynamic env) { |
| 94 LibraryEntity mainLibrary = | 67 LibraryEntity mainLibrary = |
| 95 env.compiler.frontendStrategy.elementEnvironment.mainLibrary; | 68 env.compiler.frontendStrategy.elementEnvironment.mainLibrary; |
| 96 Iterable<ClassEntity> expectedClasses = | 69 Iterable<ClassEntity> expectedClasses = |
| 97 directlyInstantiatedClasses.map(env.getElement); | 70 directlyInstantiatedClasses.map(env.getElement); |
| 98 Iterable<ClassEntity> actualClasses = env | 71 Iterable<ClassEntity> actualClasses = env |
| 99 .compiler.resolutionWorldBuilder.directlyInstantiatedClasses | 72 .compiler.resolutionWorldBuilder.directlyInstantiatedClasses |
| 100 .where((c) => c.library == mainLibrary); | 73 .where((c) => c.library == mainLibrary); |
| 101 Expect.setEquals(expectedClasses, actualClasses); | 74 Expect.setEquals(expectedClasses, actualClasses); |
| 102 }); | 75 }); |
| 103 } | 76 } |
| OLD | NEW |