| Index: tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
|
| diff --git a/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart b/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..250c8844b2460ecdc8914d6b988c64402ba5c132
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
|
| @@ -0,0 +1,63 @@
|
| +// 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.
|
| +
|
| +import "package:expect/expect.dart";
|
| +import 'dart:_foreign_helper' show JS;
|
| +import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
|
| +import 'dart:_interceptors' show
|
| + findInterceptorForType, findConstructorForNativeSubclassType;
|
| +
|
| +// Test for shadowed fields in classes that extend native classes.
|
| +
|
| +class N native "N" {
|
| + N.init();
|
| +}
|
| +
|
| +class A extends N {
|
| + var foo = 111;
|
| + A.init() : super.init();
|
| +}
|
| +
|
| +class B extends A {
|
| + var foo = 222;
|
| + B.init() : super.init();
|
| +
|
| + Afoo() => super.foo;
|
| + Bfoo() => foo;
|
| +}
|
| +
|
| +B makeB() native;
|
| +
|
| +@Creates('=Object')
|
| +getBPrototype() native;
|
| +
|
| +void setup() native r"""
|
| +function B() { }
|
| +makeB = function(){return new B;};
|
| +
|
| +getBPrototype = function(){return B.prototype;};
|
| +""";
|
| +
|
| +var inscrutable;
|
| +
|
| +main() {
|
| + setup();
|
| + inscrutable = (x) => x;
|
| +
|
| + setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B));
|
| +
|
| + B b = makeB();
|
| +
|
| + var constructor = findConstructorForNativeSubclassType(B, 'init');
|
| + Expect.isNotNull(constructor);
|
| + JS('', '#(#)', constructor, b);
|
| +
|
| + print(b);
|
| +
|
| + Expect.equals(222, inscrutable(b).Bfoo());
|
| + Expect.equals(111, inscrutable(b).Afoo());
|
| +
|
| + Expect.equals(222, b.Bfoo());
|
| + Expect.equals(111, b.Afoo());
|
| +}
|
|
|