| Index: tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
|
| diff --git a/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart b/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dca071bceebfce1ab1a3322bdd09cc161668b462
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
|
| @@ -0,0 +1,69 @@
|
| +// 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 fields with same name as native fields. We expect N.foo to have the
|
| +// property name 'foo' and A.foo and B.foo to have non-conflicting names.
|
| +
|
| +class N native "N" {
|
| + var foo;
|
| + N.init();
|
| +}
|
| +
|
| +class A extends N {
|
| + var foo = 222;
|
| + A.init() : super.init();
|
| + Nfoo() => super.foo; // TODO(sra): Fix compiler assert.
|
| +}
|
| +
|
| +class B extends A {
|
| + var foo = 333;
|
| + B.init() : super.init();
|
| + Afoo() => super.foo;
|
| + Bfoo() => foo;
|
| +
|
| + toString() => '[N.foo = ${Nfoo()}, A.foo = ${Afoo()}, B.foo = ${Bfoo()}]';
|
| +}
|
| +
|
| +B makeB() native;
|
| +
|
| +@Creates('=Object')
|
| +getBPrototype() native;
|
| +
|
| +void setup() native r"""
|
| +function B() { this.foo = 111; } // N.foo
|
| +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(333, inscrutable(b).Bfoo());
|
| + Expect.equals(222, inscrutable(b).Afoo());
|
| + Expect.equals(111, inscrutable(b).Nfoo());
|
| +
|
| + Expect.equals(333, b.Bfoo());
|
| + Expect.equals(222, b.Afoo());
|
| + Expect.equals(111, b.Nfoo());
|
| +}
|
|
|