Files
sdk/tests/lib_2/mirrors/instantiate_abstract_class_test.dart
T
Ben Konyi 81ef1a9818 Migrated test block 223 to Dart 2.0.
Updated invoke_call_through* tests to make them strong mode clean, which
mostly involved changing var -> dynamic in some places.

Bug:
Change-Id: I3ac946bdfadd09d6459c7f104068be4cb0c49c1d
Reviewed-on: https://dart-review.googlesource.com/3781
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2017-09-08 18:23:41 +00:00

47 lines
1.6 KiB
Dart

// 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.instantiate_abstract_class;
import 'dart:mirrors';
import 'package:expect/expect.dart';
assertInstanitationErrorOnGenerativeConstructors(classMirror) {
classMirror.declarations.values.forEach((decl) {
if (decl is! MethodMirror) return;
if (!decl.isGenerativeConstructor) return;
var args = new List(decl.parameters.length);
Expect.throws(
() => classMirror.newInstance(decl.constructorName, args),
(e) => e is AbstractClassInstantiationError,
'${decl.qualifiedName} should have failed');
});
}
runFactoryConstructors(classMirror) {
classMirror.declarations.values.forEach((decl) {
if (decl is! MethodMirror) return;
if (!decl.isFactoryConstructor) return;
var args = new List(decl.parameters.length);
classMirror.newInstance(decl.constructorName, args); // Should not throw.
});
}
abstract class AbstractClass {
AbstractClass();
AbstractClass.named();
factory AbstractClass.named2() => new ConcreteClass();
}
class ConcreteClass implements AbstractClass {}
main() {
assertInstanitationErrorOnGenerativeConstructors(reflectType(num));
assertInstanitationErrorOnGenerativeConstructors(reflectType(double));
assertInstanitationErrorOnGenerativeConstructors(reflectType(StackTrace));
assertInstanitationErrorOnGenerativeConstructors(reflectType(AbstractClass));
runFactoryConstructors(reflectType(AbstractClass));
}