Files
sdk/tests/lib/mirrors/method_mirror_extension_test.dart
T
Ryan Macnak 00b2e580a3 [test] Fork mirrors tests.
Bug: https://github.com/dart-lang/sdk/issues/40045
Change-Id: I597259b38684de87016f1e136723d24f4ac05420
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132440
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-01-22 18:46:23 +00:00

127 lines
2.8 KiB
Dart

// Copyright (c) 2019, 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.
// SharedOptions=--enable-experiment=extension-methods
library lib;
import "dart:mirrors";
import "package:expect/expect.dart";
class C<T> {
static int tracefunc() {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
return 10;
}
}
extension ext<T> on C<T> {
func() {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
get prop {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
set prop(value) {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
operator +(val) {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
operator -(val) {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
static int sfld = C.tracefunc();
static sfunc() {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
static get sprop {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
static set sprop(value) {
try {
throw "producing a stack trace";
} catch (e, s) {
print(s);
}
}
}
checkExtensionKind(closure, kind, name) {
var closureMirror = reflect(closure) as ClosureMirror;
var methodMirror = closureMirror.function;
Expect.isTrue(methodMirror.simpleName.toString().contains(name));
Expect.equals(kind, methodMirror.isExtensionMember, "isExtension");
}
void testExtension(sym, mirror) {
if (mirror is MethodMirror) {
var methodMirror = mirror as MethodMirror;
if (MirrorSystem.getName(sym).startsWith('ext', 0)) {
Expect.equals(true, methodMirror.isExtensionMember, "isExtension");
Expect.isTrue(methodMirror.simpleName.toString().contains('ext.'));
} else {
Expect.equals(false, methodMirror.isExtensionMember, "isExtension");
}
} else if (mirror is VariableMirror) {
var variableMirror = mirror as VariableMirror;
if (MirrorSystem.getName(sym).startsWith('ext', 0)) {
Expect.equals(true, variableMirror.isExtensionMember, "isExtension");
} else {
Expect.equals(false, variableMirror.isExtensionMember, "isExtension");
}
}
}
main() {
checkExtensionKind(C.tracefunc, false, 'tracefunc');
C c = new C();
checkExtensionKind(c.func, true, 'ext.func');
checkExtensionKind(ext.sfunc, true, 'ext.sfunc');
var libraryMirror = reflectClass(C).owner as LibraryMirror;
libraryMirror.declarations.forEach(testExtension);
}