Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: tests/language/src/MethodBindingTest.dart

Issue 10248007: test rename overhaul: step 8 - language tests (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/language/src/MathVMTest.dart ('k') | tests/language/src/MethodInvocationTest.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 // Bind a method to a variable that can be invoked as a function
6
7 class A {
8 int a;
9
10 static var func;
11
12 A(this.a) { }
13
14 static foo() { return 4; }
15
16 bar() { return a; }
17
18 int baz() { return a; }
19
20 getThis() { return this.bar; }
21
22 getNoThis() { return bar; }
23
24 methodArgs(arg) { return arg + a; }
25
26 selfReference () { return selfReference; }
27
28 invokeBaz() { return (baz)(); }
29
30 invokeBar(var obj) { return (obj.bar)(); }
31
32 invokeThisBar() { return (this.bar)(); }
33
34 implicitStaticRef() { return foo; }
35 }
36
37 class B {
38 static foo() { return -1; }
39 }
40
41 class C {
42 C() { }
43 var f;
44 }
45
46 topLevel99() {
47 return 99;
48 }
49
50 var topFunc;
51
52 class D extends A {
53 D(a): super(a) { }
54 getSuper() { return super.bar; }
55 }
56
57 class MethodBindingTest {
58 static test() {
59
60 // Create closure from global
61 Expect.equals(99, topLevel99());
62 Function f99 = topLevel99;
63 Expect.equals(99, f99());
64
65 // Invoke closure through a global
66 topFunc = f99;
67 Expect.equals(99, topFunc());
68
69 // Create closure from static method
70 Function f4 = A.foo;
71 Expect.equals(4, f4());
72
73 // Create closure from instance method
74 var o5 = new A(5);
75 Function f5 = o5.bar;
76 Expect.equals(5, f5());
77
78 // Assign closure to field and invoke it
79 var c = new C();
80 c.f = () => "success";
81 Expect.equals("success", c.f());
82
83 // referencing instance method with explicit 'this' qualiier
84 var o6 = new A(6);
85 var f6 = o6.getThis();
86 Expect.equals(6, f6());
87
88 // referencing an instance method with no qualifier
89 var o7 = new A(7);
90 var f7 = o7.getNoThis();
91 Expect.equals(7, f7());
92
93 // bind a method that takes arguments
94 var o8 = new A(8);
95 Function f8 = o8.methodArgs;
96 Expect.equals(9, f8(1));
97
98 // Self referential method
99 var o9 = new A(9);
100 Function f9 = o9.selfReference;
101
102 // invoking a known method as if it were a bound closure...
103 var o10 = new A(10);
104 Expect.equals(10, o10.invokeBaz());
105
106 // invoking a known method as if it were a bound closure...
107 var o11 = new A(11);
108 Expect.equals(10, o11.invokeBar(o10));
109
110 // invoking a known method as if it were a bound closure...
111 var o12 = new A(12);
112 Expect.equals(12, o12.invokeThisBar());
113
114 // bind to a static variable with no explicit class qualifier
115 var o13 = new A(13);
116 Function f13 = o13.implicitStaticRef();
117 Expect.equals(4, f13());
118
119 var o14 = new D(14);
120 Function f14 = o14.getSuper();
121 Expect.equals(14, f14());
122
123 // Assign static field to a function and invoke it.
124 A.func = A.foo;
125 Expect.equals(4, A.func());
126
127 // bind a function that is possibly native in Javascript.
128 String o15 = 'hithere';
129 var f15 = o15.substring;
130 Expect.equals('i', f15(1, 2));
131
132 var o16 = 'hithere';
133 var f16 = o16.substring;
134 Expect.equals('i', f16(1, 2));
135
136 var f17 = 'hithere'.substring;
137 Expect.equals('i', f17(1, 2));
138 }
139
140 static testMain() {
141 test();
142 }
143 }
144
145 main() {
146 MethodBindingTest.testMain();
147 }
OLDNEW
« no previous file with comments | « tests/language/src/MathVMTest.dart ('k') | tests/language/src/MethodInvocationTest.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698