| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library test.constructor_kinds_test; | |
| 6 | |
| 7 import 'dart:mirrors'; | |
| 8 import 'package:expect/expect.dart'; | |
| 9 | |
| 10 class ClassWithDefaultConstructor {} | |
| 11 | |
| 12 class Class { | |
| 13 Class.generativeConstructor(); | |
| 14 Class.redirectingGenerativeConstructor() : this.generativeConstructor(); | |
| 15 factory Class.factoryConstructor() => new Class.generativeConstructor(); | |
| 16 factory Class.redirectingFactoryConstructor() = Class.factoryConstructor; | |
| 17 | |
| 18 const Class.constGenerativeConstructor(); | |
| 19 const Class.constRedirectingGenerativeConstructor() | |
| 20 : this.constGenerativeConstructor(); | |
| 21 // Not legal. | |
| 22 // const factory Class.constFactoryConstructor() => ... | |
| 23 const factory Class.constRedirectingFactoryConstructor() = | |
| 24 Class.constGenerativeConstructor; | |
| 25 } | |
| 26 | |
| 27 main() { | |
| 28 ClassMirror cm; | |
| 29 MethodMirror mm; | |
| 30 | |
| 31 // Multitest with and without constructor calls. On the VM, we want to check | |
| 32 // that constructor properties are correctly set even if the constructor | |
| 33 // hasn't been fully compiled. On dart2js, we want to check that constructors | |
| 34 // are retain even if there are no base-level calls. | |
| 35 new ClassWithDefaultConstructor(); // //# 01: ok | |
| 36 new Class.generativeConstructor(); // //# 01: ok | |
| 37 new Class.redirectingGenerativeConstructor(); // //# 01: ok | |
| 38 new Class.factoryConstructor(); // //# 01: ok | |
| 39 new Class.redirectingFactoryConstructor(); // //# 01: ok | |
| 40 const Class.constGenerativeConstructor(); // //# 01: ok | |
| 41 const Class.constRedirectingGenerativeConstructor(); // //# 01: ok | |
| 42 const Class.constRedirectingFactoryConstructor(); // //# 01: ok | |
| 43 | |
| 44 cm = reflectClass(ClassWithDefaultConstructor); | |
| 45 mm = cm.declarations.values | |
| 46 .where((d) => d is MethodMirror && d.isConstructor) | |
| 47 .single; | |
| 48 Expect.isTrue(mm.isConstructor); | |
| 49 Expect.isTrue(mm.isGenerativeConstructor); | |
| 50 Expect.isFalse(mm.isFactoryConstructor); | |
| 51 Expect.isFalse(mm.isRedirectingConstructor); | |
| 52 Expect.isFalse(mm.isConstConstructor); | |
| 53 | |
| 54 cm = reflectClass(Class); | |
| 55 | |
| 56 mm = cm.declarations[#Class.generativeConstructor]; | |
| 57 Expect.isTrue(mm.isConstructor); | |
| 58 Expect.isTrue(mm.isGenerativeConstructor); | |
| 59 Expect.isFalse(mm.isFactoryConstructor); | |
| 60 Expect.isFalse(mm.isRedirectingConstructor); | |
| 61 Expect.isFalse(mm.isConstConstructor); | |
| 62 | |
| 63 mm = cm.declarations[#Class.redirectingGenerativeConstructor]; | |
| 64 Expect.isTrue(mm.isConstructor); | |
| 65 Expect.isTrue(mm.isGenerativeConstructor); | |
| 66 Expect.isFalse(mm.isFactoryConstructor); | |
| 67 Expect.isTrue(mm.isRedirectingConstructor); | |
| 68 Expect.isFalse(mm.isConstConstructor); | |
| 69 | |
| 70 mm = cm.declarations[#Class.factoryConstructor]; | |
| 71 Expect.isTrue(mm.isConstructor); | |
| 72 Expect.isFalse(mm.isGenerativeConstructor); | |
| 73 Expect.isTrue(mm.isFactoryConstructor); | |
| 74 Expect.isFalse(mm.isRedirectingConstructor); | |
| 75 Expect.isFalse(mm.isConstConstructor); | |
| 76 | |
| 77 mm = cm.declarations[#Class.redirectingFactoryConstructor]; | |
| 78 Expect.isTrue(mm.isConstructor); | |
| 79 Expect.isFalse(mm.isGenerativeConstructor); | |
| 80 Expect.isTrue(mm.isFactoryConstructor); | |
| 81 Expect.isTrue(mm.isRedirectingConstructor); | |
| 82 Expect.isFalse(mm.isConstConstructor); | |
| 83 | |
| 84 mm = cm.declarations[#Class.constGenerativeConstructor]; | |
| 85 Expect.isTrue(mm.isConstructor); | |
| 86 Expect.isTrue(mm.isGenerativeConstructor); | |
| 87 Expect.isFalse(mm.isFactoryConstructor); | |
| 88 Expect.isFalse(mm.isRedirectingConstructor); | |
| 89 Expect.isTrue(mm.isConstConstructor); | |
| 90 | |
| 91 mm = cm.declarations[#Class.constRedirectingGenerativeConstructor]; | |
| 92 Expect.isTrue(mm.isConstructor); | |
| 93 Expect.isTrue(mm.isGenerativeConstructor); | |
| 94 Expect.isFalse(mm.isFactoryConstructor); | |
| 95 Expect.isTrue(mm.isRedirectingConstructor); | |
| 96 Expect.isTrue(mm.isConstConstructor); | |
| 97 | |
| 98 // Not legal. | |
| 99 // mm = cm.declarations[#Class.constFactoryConstructor]; | |
| 100 // Expect.isTrue(mm.isConstructor); | |
| 101 // Expect.isFalse(mm.isGenerativeConstructor); | |
| 102 // Expect.isTrue(mm.isFactoryConstructor); | |
| 103 // Expect.isFalse(mm.isRedirectingConstructor); | |
| 104 // Expect.isTrue(mm.isConstConstructor); | |
| 105 | |
| 106 mm = cm.declarations[#Class.constRedirectingFactoryConstructor]; | |
| 107 Expect.isTrue(mm.isConstructor); | |
| 108 Expect.isFalse(mm.isGenerativeConstructor); | |
| 109 Expect.isTrue(mm.isFactoryConstructor); | |
| 110 Expect.isTrue(mm.isRedirectingConstructor); | |
| 111 Expect.isTrue(mm.isConstConstructor); | |
| 112 } | |
| OLD | NEW |