| Index: test/codegen/lib/mirrors/constructor_kinds_test.dart
|
| diff --git a/test/codegen/lib/mirrors/constructor_kinds_test.dart b/test/codegen/lib/mirrors/constructor_kinds_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e083d0ecd4fac337deff5a07d1c60bdef1b50a93
|
| --- /dev/null
|
| +++ b/test/codegen/lib/mirrors/constructor_kinds_test.dart
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library test.constructor_kinds_test;
|
| +
|
| +import 'dart:mirrors';
|
| +import 'package:expect/expect.dart';
|
| +
|
| +class ClassWithDefaultConstructor {}
|
| +
|
| +class Class {
|
| + Class.generativeConstructor();
|
| + Class.redirectingGenerativeConstructor() : this.generativeConstructor();
|
| + factory Class.factoryConstructor() => new Class.generativeConstructor();
|
| + factory Class.redirectingFactoryConstructor() = Class.factoryConstructor;
|
| +
|
| + const Class.constGenerativeConstructor();
|
| + const Class.constRedirectingGenerativeConstructor()
|
| + : this.constGenerativeConstructor();
|
| + // Not legal.
|
| + // const factory Class.constFactoryConstructor() => ...
|
| + const factory Class.constRedirectingFactoryConstructor()
|
| + = Class.constGenerativeConstructor;
|
| +}
|
| +
|
| +main() {
|
| + ClassMirror cm;
|
| + MethodMirror mm;
|
| +
|
| + // Multitest with and without constructor calls. On the VM, we want to check
|
| + // that constructor properties are correctly set even if the constructor
|
| + // hasn't been fully compiled. On dart2js, we want to check that constructors
|
| + // are retain even if there are no base-level calls.
|
| + new ClassWithDefaultConstructor(); /// 01: ok
|
| + new Class.generativeConstructor(); /// 01: ok
|
| + new Class.redirectingGenerativeConstructor(); /// 01: ok
|
| + new Class.factoryConstructor(); /// 01: ok
|
| + new Class.redirectingFactoryConstructor(); /// 01: ok
|
| + const Class.constGenerativeConstructor(); /// 01: ok
|
| + const Class.constRedirectingGenerativeConstructor(); /// 01: ok
|
| + const Class.constRedirectingFactoryConstructor(); /// 01: ok
|
| +
|
| + cm = reflectClass(ClassWithDefaultConstructor);
|
| + mm = cm.declarations.values
|
| + .where((d) => d is MethodMirror && d.isConstructor).single;
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isTrue(mm.isGenerativeConstructor);
|
| + Expect.isFalse(mm.isFactoryConstructor);
|
| + Expect.isFalse(mm.isRedirectingConstructor);
|
| + Expect.isFalse(mm.isConstConstructor);
|
| +
|
| + cm = reflectClass(Class);
|
| +
|
| + mm = cm.declarations[#Class.generativeConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isTrue(mm.isGenerativeConstructor);
|
| + Expect.isFalse(mm.isFactoryConstructor);
|
| + Expect.isFalse(mm.isRedirectingConstructor);
|
| + Expect.isFalse(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.redirectingGenerativeConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isTrue(mm.isGenerativeConstructor);
|
| + Expect.isFalse(mm.isFactoryConstructor);
|
| + Expect.isTrue(mm.isRedirectingConstructor);
|
| + Expect.isFalse(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.factoryConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isFalse(mm.isGenerativeConstructor);
|
| + Expect.isTrue(mm.isFactoryConstructor);
|
| + Expect.isFalse(mm.isRedirectingConstructor);
|
| + Expect.isFalse(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.redirectingFactoryConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isFalse(mm.isGenerativeConstructor);
|
| + Expect.isTrue(mm.isFactoryConstructor);
|
| + Expect.isTrue(mm.isRedirectingConstructor);
|
| + Expect.isFalse(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.constGenerativeConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isTrue(mm.isGenerativeConstructor);
|
| + Expect.isFalse(mm.isFactoryConstructor);
|
| + Expect.isFalse(mm.isRedirectingConstructor);
|
| + Expect.isTrue(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.constRedirectingGenerativeConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isTrue(mm.isGenerativeConstructor);
|
| + Expect.isFalse(mm.isFactoryConstructor);
|
| + Expect.isTrue(mm.isRedirectingConstructor);
|
| + Expect.isTrue(mm.isConstConstructor);
|
| +
|
| + // Not legal.
|
| + // mm = cm.declarations[#Class.constFactoryConstructor];
|
| + // Expect.isTrue(mm.isConstructor);
|
| + // Expect.isFalse(mm.isGenerativeConstructor);
|
| + // Expect.isTrue(mm.isFactoryConstructor);
|
| + // Expect.isFalse(mm.isRedirectingConstructor);
|
| + // Expect.isTrue(mm.isConstConstructor);
|
| +
|
| + mm = cm.declarations[#Class.constRedirectingFactoryConstructor];
|
| + Expect.isTrue(mm.isConstructor);
|
| + Expect.isFalse(mm.isGenerativeConstructor);
|
| + Expect.isTrue(mm.isFactoryConstructor);
|
| + Expect.isTrue(mm.isRedirectingConstructor);
|
| + Expect.isTrue(mm.isConstConstructor);
|
| +}
|
|
|