OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 // This is a similar test to NativeCallArity1FrogTest, but makes sure | |
6 // that subclasses also get the right number of arguments. | |
7 | |
8 class A native "*A" { | |
9 int foo([x, y]) native; | |
10 } | |
11 | |
12 class B extends A native "*B" { | |
13 int foo([x, y]) native; | |
14 } | |
15 | |
16 A makeA() native { return new A(); } | |
17 B makeB() native { return new B(); } | |
18 | |
19 void setup() native """ | |
20 function inherits(child, parent) { | |
21 if (child.prototype.__proto__) { | |
22 child.prototype.__proto__ = parent.prototype; | |
23 } else { | |
24 function tmp() {}; | |
25 tmp.prototype = parent.prototype; | |
26 child.prototype = new tmp(); | |
27 child.prototype.constructor = child; | |
28 } | |
29 } | |
30 function A() {} | |
31 A.prototype.foo = function () { return arguments.length; }; | |
32 | |
33 function B() {} | |
34 B.prototype.foo = function () { return arguments.length; }; | |
35 inherits(B, A); | |
36 | |
37 makeA = function(){return new A;}; | |
38 makeB = function(){return new B;}; | |
39 """; | |
40 | |
41 | |
42 testDynamicContext() { | |
43 var things = [makeA(), makeB()]; | |
44 var a = things[0]; | |
45 var b = things[1]; | |
46 | |
47 Expect.equals(0, a.foo()); | |
48 Expect.equals(1, a.foo(10)); | |
49 Expect.equals(2, a.foo(10, 20)); | |
50 Expect.throws(() => a.foo(10, 20, 30)); | |
51 | |
52 Expect.equals(1, a.foo(x: 10)); // 1 = x | |
53 Expect.equals(2, a.foo(y: 20)); // 2 = x, y | |
54 Expect.throws(() => a.foo(10, 20, 30)); | |
55 | |
56 Expect.equals(0, b.foo()); | |
57 Expect.equals(1, b.foo(10)); | |
58 Expect.equals(2, b.foo(10, 20)); | |
59 Expect.throws(() => b.foo(10, 20, 30)); | |
60 | |
61 Expect.equals(1, b.foo(x: 10)); // 1 = x | |
62 Expect.equals(2, b.foo(y: 20)); // 2 = x, y | |
63 Expect.throws(() => b.foo(10, 20, 30)); | |
64 } | |
65 | |
66 testStaticContext() { | |
67 A a = makeA(); | |
68 B b = makeB(); | |
69 | |
70 Expect.equals(0, a.foo()); | |
71 Expect.equals(1, a.foo(10)); | |
72 Expect.equals(2, a.foo(10, 20)); | |
73 Expect.throws(() => a.foo(10, 20, 30)); | |
74 | |
75 Expect.equals(1, a.foo(x: 10)); // 1 = x | |
76 Expect.equals(2, a.foo(y: 20)); // 2 = x, y | |
77 Expect.throws(() => a.foo(10, 20, 30)); | |
78 | |
79 Expect.equals(0, b.foo()); | |
80 Expect.equals(1, b.foo(10)); | |
81 Expect.equals(2, b.foo(10, 20)); | |
82 Expect.throws(() => b.foo(10, 20, 30)); | |
83 | |
84 Expect.equals(1, b.foo(x: 10)); // 1 = x | |
85 Expect.equals(2, b.foo(y: 20)); // 2 = x, y | |
86 Expect.throws(() => b.foo(10, 20, 30)); | |
87 } | |
88 | |
89 main() { | |
90 setup(); | |
91 testDynamicContext(); | |
92 testStaticContext(); | |
93 } | |
OLD | NEW |