826b48ee8a
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>
65 lines
1.8 KiB
Dart
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');
|
|
}
|