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