Files
sdk/tests/lib/mirrors/intercepted_object_test.dart
T
Vyacheslav Egorov 826b48ee8a [VM] Clean up typing violations in the numerics implementation.
Bug: https://github.com/dart-lang/sdk/issues/31052
Change-Id: I93d7bca2ff627431f1a316bb01a5dada1b5f2354
Reviewed-on: https://dart-review.googlesource.com/14522
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2017-10-17 21:00:24 +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');
}