Index: tests/compiler/dart2js_native/subclassing_2_test.dart |
diff --git a/tests/compiler/dart2js_native/subclassing_2_test.dart b/tests/compiler/dart2js_native/subclassing_2_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f8b93aaca632a4d06c9f6631eb8ea89945718235 |
--- /dev/null |
+++ b/tests/compiler/dart2js_native/subclassing_2_test.dart |
@@ -0,0 +1,45 @@ |
+// 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:_js_helper' show Creates, setNativeSubclassDispatchRecord; |
+import 'dart:_interceptors' show findInterceptorForType; |
+ |
+// Test calling convention of methods introduced on subclasses of native |
+// classes. |
+ |
+doFoo(r, x) => '$x,${r.oof()}'; |
+ |
+class A native "A" { |
+ foo(x) => (doFoo)(this, x); |
+} |
+ |
+class B extends A { |
+ // [oof] is introduced only on this subclass of a native class. It should |
+ // have interceptor calling convention. |
+ oof() => 'B'; |
+} |
+ |
+B makeB() native; |
+ |
+@Creates('=Object') |
+getBPrototype() native; |
+ |
+void setup() native r""" |
+function A() {} |
+function B() {} |
+makeA = function(){return new A;}; |
+makeB = function(){return new B;}; |
+ |
+getBPrototype = function(){return B.prototype;}; |
+"""; |
+ |
+main() { |
+ setup(); |
+ |
+ setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B)); |
+ |
+ B b = makeB(); |
+ Expect.equals('1,B', b.foo(1)); |
+} |