| Index: frog/tests/frog_native/native_class_inheritance2_frog_test.dart
|
| ===================================================================
|
| --- frog/tests/frog_native/native_class_inheritance2_frog_test.dart (revision 8644)
|
| +++ frog/tests/frog_native/native_class_inheritance2_frog_test.dart (working copy)
|
| @@ -1,78 +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.
|
| -
|
| -class A native "*A" {
|
| - foo([a=100]) native;
|
| -}
|
| -
|
| -class B extends A native "*B" {
|
| -}
|
| -
|
| -class C extends B native "*C" {
|
| - foo([z=300]) native;
|
| -}
|
| -
|
| -class D extends C native "*D" {
|
| -}
|
| -
|
| -makeA() native;
|
| -makeB() native;
|
| -makeC() native;
|
| -makeD() 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 A(){}
|
| -function B(){}
|
| -inherits(B, A);
|
| -function C(){}
|
| -inherits(C, B);
|
| -function D(){}
|
| -inherits(D, C);
|
| -
|
| -A.prototype.foo = function(a){return 'A.foo(' + a + ')';}
|
| -C.prototype.foo = function(z){return 'C.foo(' + z + ')';}
|
| -
|
| -makeA = function(){return new A};
|
| -makeB = function(){return new B};
|
| -makeC = function(){return new C};
|
| -makeD = function(){return new D};
|
| -""";
|
| -
|
| -
|
| -main() {
|
| - setup();
|
| -
|
| - var a = makeA();
|
| - var b = makeB();
|
| - var c = makeC();
|
| - var d = makeD();
|
| -
|
| - Expect.equals('A.foo(100)', b.foo());
|
| - Expect.equals('C.foo(300)', d.foo());
|
| - // If the above line fails with C.foo(100) then the dispatch to fill in the
|
| - // default got the wrong one, followed by a second dispatch that resolved to
|
| - // the correct native method.
|
| -
|
| - Expect.equals('A.foo(1)', a.foo(1));
|
| - Expect.equals('A.foo(2)', b.foo(2));
|
| - Expect.equals('C.foo(3)', c.foo(3));
|
| - Expect.equals('C.foo(4)', d.foo(4));
|
| -}
|
|
|