Index: frog/tests/frog_native/native_class_inheritance1_frog_test.dart |
=================================================================== |
--- frog/tests/frog_native/native_class_inheritance1_frog_test.dart (revision 8644) |
+++ frog/tests/frog_native/native_class_inheritance1_frog_test.dart (working copy) |
@@ -1,101 +0,0 @@ |
-// Copyright (c) 2011, 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. |
- |
-// Test to see if resolving a hidden native class's method interferes with |
-// subsequent resolving the subclass's method. This might happen if the |
-// superclass caches the method in the prototype, so shadowing the dispatcher |
-// stored on Object.prototype. |
- |
-// Version 1: It might be possible to call foo directly. |
-class A1 native "*A1" { |
- foo() native; |
-} |
- |
-class B1 extends A1 native "*B1" { |
- foo() native; |
-} |
- |
-makeA1() native; |
-makeB1() native; |
- |
- |
-// Version 2: foo needs some kind of trampoline. |
-class A2 native "*A2" { |
- foo([a=99]) native; |
-} |
- |
-class B2 extends A2 native "*B2" { |
- foo([z=1000]) native; |
-} |
- |
-makeA2() native; |
-makeB2() native; |
- |
-void setup() native """ |
-// This code is all inside 'setup' and so not accesible from the global scope. |
-function inherits(child, parent) { |
- if (child.prototype.__proto__) { |
- child.prototype.__proto__ = parent.prototype; |
- } else { |
- function tmp() {}; |
- tmp.prototype = parent.prototype; |
- child.prototype = new tmp(); |
- child.prototype.constructor = child; |
- } |
-} |
-function A1(){} |
-function B1(){} |
-inherits(B1, A1); |
-A1.prototype.foo = function(){return 100;} |
-B1.prototype.foo = function(){return 200;} |
- |
-makeA1 = function(){return new A1}; |
-makeB1 = function(){return new B1}; |
- |
-function A2(){} |
-function B2(){} |
-inherits(B2, A2); |
-A2.prototype.foo = function(a){return a + 10000;} |
-B2.prototype.foo = function(z){return z + 20000;} |
- |
-makeA2 = function(){return new A2}; |
-makeB2 = function(){return new B2}; |
-"""; |
- |
- |
-main() { |
- setup(); |
- |
- var a1 = makeA1(); |
- var b1 = makeB1(); |
- Expect.equals(100, a1.foo()); |
- Expect.equals(200, b1.foo()); |
- |
- var a2 = makeA2(); |
- var b2 = makeB2(); |
- Expect.equals(10000 + 99, a2.foo()); |
- Expect.equals(20000 + 1000, b2.foo()); |
- |
- Expect.equals(10000 + 1, a2.foo(1)); |
- Expect.equals(20000 + 2, b2.foo(2)); |
- |
- bool caught = false; |
- try { |
- a1.foo(20); |
- } catch (var ex) { |
- caught = true; |
- Expect.isTrue(ex is NoSuchMethodException); |
- } |
- Expect.isTrue(caught, 'a1.foo(20) should throw'); |
- |
- caught = false; |
- try { |
- var x = 123; |
- x.foo(20); |
- } catch (var ex) { |
- caught = true; |
- Expect.isTrue(ex is NoSuchMethodException); |
- } |
- Expect.isTrue(caught, "x.foo(20) should throw"); |
-} |