Files
sdk/tests/lib/mirrors/intercepted_object_test.dart
T
Ryan Macnak 081e2acf29 [test] Update copied mirrors tests for Dart 3.
Bug: https://github.com/dart-lang/sdk/issues/40045
Change-Id: Ic0f62843d61b613e61f434b72b9553dd1e6897af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132441
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-01-23 18:09:37 +00:00

65 lines
1.8 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.
// Ensure that objects handled specially by dart2js can be reflected on.
library test.intercepted_object_test;
import 'dart:mirrors';
import 'stringify.dart' show stringify, expect;
import 'intercepted_class_test.dart' show checkClassMirrorMethods;
checkImplements(object, String name) {
ClassMirror cls = reflect(object).type;
checkClassMirrorMethods(cls);
// The VM implements List via a mixin, so check for that.
if (cls.superinterfaces.isEmpty && object is List) {
cls = cls.superclass!.superclass!.mixin;
}
// The VM implements String through an intermediate abstract
// class.
if (cls.superinterfaces.isEmpty && object is String) {
cls = cls.superclass!;
}
// The VM implements int through an intermediate abstract
// class.
if (object is int &&
stringify(cls.superclass!.simpleName) == 's(_IntegerImplementation)') {
cls = cls.superclass!;
}
List<ClassMirror> superinterfaces = cls.superinterfaces;
String symName = 's($name)';
for (ClassMirror superinterface in superinterfaces) {
print(superinterface.simpleName);
if (symName == stringify(superinterface.simpleName)) {
checkClassMirrorMethods(superinterface);
return;
}
}
// A class implements itself, even if not explicitly declared.
if (symName == stringify(cls.simpleName)) {
checkClassMirrorMethods(cls);
return;
}
// TODO(floitsch): use correct fail
expect(name, "super interface not found");
}
main() {
checkImplements('', 'String');
checkImplements(1, 'int');
checkImplements(1.5, 'double');
checkImplements(true, 'bool');
checkImplements(false, 'bool');
checkImplements([], 'List');
}