Index: tests/compiler/dart2js_native/subclassing_1_test.dart |
diff --git a/tests/compiler/dart2js_native/subclassing_1_test.dart b/tests/compiler/dart2js_native/subclassing_1_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b90366a49ccd864fc00f2910973260655e8c508c |
--- /dev/null |
+++ b/tests/compiler/dart2js_native/subclassing_1_test.dart |
@@ -0,0 +1,58 @@ |
+// 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 that subclasses of native classes can be defined by setting the dispatch |
+// record. |
+ |
+class A native "A" { |
+ foo(x) => '$x,${this.oof()}'; |
+ oof() => 'A'; |
+} |
+ |
+class B extends A { |
+ oof() => 'B'; |
+} |
+ |
+B makeB1() native; |
+B makeB2() native; |
+B makeC() native; |
+ |
+@Creates('=Object') |
+getBPrototype() native; |
+ |
+@Creates('=Object') |
+getCPrototype() native; |
+ |
+void setup() native r""" |
+function A() {} |
+function B() {} |
+function C() {} |
+makeA = function(){return new A;}; |
+makeB1 = function(){return new B;}; |
+makeB2 = function(){return new B;}; |
+makeC = function(){return new C;}; |
+ |
+getBPrototype = function(){return B.prototype;}; |
+getCPrototype = function(){return C.prototype;}; |
+"""; |
+ |
+main() { |
+ setup(); |
+ |
+ setNativeSubclassDispatchRecord(getBPrototype(), findInterceptorForType(B)); |
+ setNativeSubclassDispatchRecord(getCPrototype(), findInterceptorForType(B)); |
+ |
+ B b1 = makeB1(); |
+ Expect.equals('1,B', b1.foo(1)); |
+ |
+ B b2 = makeB2(); |
+ Expect.equals('2,B', b2.foo(2)); |
+ |
+ B b3 = makeC(); |
+ Expect.equals('3,B', b3.foo(3)); |
+} |