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

Side by Side Diff: test/mjsunit/strong/function-arity.js

Issue 1115263004: [strong] Check arity of functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cleanup Created 5 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
OLDNEW
(Empty)
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --strong-mode --harmony_arrow_functions --harmony-reflect
6
7 (function NoArguments() {
8 'use strong';
9
10 function checkNoArguments(f) {
11 f();
12 f(1);
13 f(1, 2);
14 f(undefined);
15 f.call(undefined);
rossberg 2015/05/05 14:26:20 Perhaps add f.call() and f.apply() (here and elsew
arv (Not doing code reviews) 2015/05/05 16:46:29 Done.
16 f.call(undefined, 1);
17 f.call(undefined, 1, 2);
18 f.call(undefined, undefined);
19 f.apply(undefined);
20 f.apply(undefined, []);
21 f.apply(undefined, [1]);
22 f.apply(undefined, [1, 2]);
23 f.apply(undefined, [undefined]);
rossberg 2015/05/05 14:26:20 Also add tests for .bind, %Call, %Apply, %_CallFun
arv (Not doing code reviews) 2015/05/05 16:46:29 Your wish is my command. Done. If you can think
rossberg 2015/05/05 16:51:56 Oh, and super calls. :)
24 }
25
26 function f() {}
27 function* g() {}
28 let a = () => 42;
29
30 checkNoArguments(f);
31 checkNoArguments(g);
32 checkNoArguments(a);
33
34 })();
35
36
37 (function NoArgumentsMethod() {
38 'use strong';
39
40 function checkNoArguments(object) {
41 object.m();
42 object.m(1);
43 object.m(1, 2);
44 object.m(undefined);
45 object.m.call(object);
46 object.m.call(object, 1);
47 object.m.call(object, 1, 2);
48 object.m.call(object, undefined);
49 object.m.apply(object);
50 object.m.apply(object, []);
51 object.m.apply(object, [1]);
52 object.m.apply(object, [1, 2]);
53 object.m.apply(object, [undefined]);
54 }
55
56 class C {
57 m() {}
58 }
59 let obj = {
60 m() {}
61 };
62
63 checkNoArguments(new C());
64 checkNoArguments(obj);
65 })();
66
67
68 (function NoArgumentsConstructor() {
69 'use strong';
70
71 class C {
72 constructor() {}
73 }
74
75 new C();
76 new C(1);
77 new C(1, 2);
78 new C(undefined);
79 Reflect.construct(C, []);
80 Reflect.construct(C, [1]);
81 Reflect.construct(C, [1, 2]);
82 Reflect.construct(C, [undefined]);
83 })();
84
85
86 (function OneArgument() {
87 'use strong';
88
89 function checkOneArgument(fun) {
90 assertThrows(function() { fun(); }, TypeError);
91 fun(1);
92 fun(1, 2);
93 fun(undefined);
94 assertThrows(function() { fun.call(undefined); }, TypeError);
95 fun.call(undefined, 1);
96 fun.call(undefined, 1, 2);
97 fun.call(undefined, undefined);
98 assertThrows(function() { fun.apply(undefined); }, TypeError);
99 assertThrows(function() { fun.apply(undefined, []); }, TypeError);
100 fun.apply(undefined, [1]);
101 fun.apply(undefined, [1, 2]);
102 fun.apply(undefined, [undefined]);
103 }
104
105 function f(x) {}
106 function* g(x) {}
107 let a = (x) => {};
108
109 checkOneArgument(f);
110 checkOneArgument(g);
111 checkOneArgument(a);
112 })();
113
114
115 (function OneArgumentMethod() {
116 'use strong';
117
118 function checkOneArgument(object) {
119 assertThrows(function() { object.m(); }, TypeError);
120 object.m(1);
121 object.m(1, 2);
122 object.m(undefined);
123 assertThrows(function() { object.m.call(undefined); }, TypeError);
124 object.m.call(object, 1);
125 object.m.call(object, 1, 2);
126 object.m.call(object, undefined);
127 assertThrows(function() { object.m.apply(object); }, TypeError);
128 assertThrows(function() { object.m.apply(object, []); }, TypeError);
129 object.m.apply(object, [1]);
130 object.m.apply(object, [1, 2]);
131 object.m.apply(object, [undefined]);
132 }
133
134 class C {
135 m(x) {}
136 }
137 let obj = {
138 m(x) {}
139 };
140
141 checkOneArgument(new C());
142 checkOneArgument(obj);
143 })();
144
145
146 (function OneArgumentConstructor() {
147 'use strong';
148
149 class C {
150 constructor(x) {}
151 }
152
153 assertThrows(function() { new C(); }, TypeError);
154 new C(1);
155 new C(1, 2);
156 new C(undefined);
157 assertThrows(function() { Reflect.construct(C); }, TypeError);
158 assertThrows(function() { Reflect.construct(C, []); }, TypeError);
159 Reflect.construct(C, [1]);
160 Reflect.construct(C, [1, 2]);
161 Reflect.construct(C, [undefined]);
162 })();
163
164
165 (function TwoArguments() {
166 'use strong';
167
168 function checkTwoArguments(fun) {
169 assertThrows(function() { fun(); }, TypeError);
170 assertThrows(function() { fun(1); }, TypeError);
171 fun(1, 2);
172 fun(1, 2, 3);
173 assertThrows(function() { fun(undefined); }, TypeError);
174 assertThrows(function() { fun.call(undefined); }, TypeError);
175 assertThrows(function() { fun.call(undefined, 1); }, TypeError);
176 fun.call(undefined, 1, 2);
177 fun.call(undefined, 1, 2, 3);
178 assertThrows(function() { fun.call(undefined, undefined); }, TypeError);
179 assertThrows(function() { fun.apply(undefined); }, TypeError);
180 assertThrows(function() { fun.apply(undefined, []); }, TypeError);
181 assertThrows(function() { fun.apply(undefined, [1]); }, TypeError);
182 fun.apply(undefined, [1, 2]);
183 fun.apply(undefined, [1, 2, 3]);
184 assertThrows(function() { fun.apply(undefined, [undefined]); }, TypeError);
185 }
186
187 function f(x, y) {}
188 function* g(x, y) {}
189 let a = (x, y) => {};
190
191 checkTwoArguments(f);
192 checkTwoArguments(g);
193 checkTwoArguments(a);
194 })();
195
196
197 (function TwoArgumentsMethod() {
198 'use strong';
199
200 function checkTwoArguments(object) {
201 assertThrows(function() { object.m(); }, TypeError);
202 assertThrows(function() { object.m(1); }, TypeError);
203 object.m(1, 2);
204 object.m(1, 2, 3);
205 assertThrows(function() { object.m(undefined); }, TypeError);
206 assertThrows(function() { object.m.call(object); }, TypeError);
207 assertThrows(function() { object.m.call(object, 1); }, TypeError);
208 object.m.call(object, 1, 2);
209 object.m.call(object, 1, 2, 3);
210 assertThrows(function() { object.m.call(object, undefined); }, TypeError);
211 assertThrows(function() { object.m.apply(object); }, TypeError);
212 assertThrows(function() { object.m.apply(object, []); }, TypeError);
213 assertThrows(function() { object.m.apply(object, [1]); }, TypeError);
214 object.m.apply(object, [1, 2]);
215 object.m.apply(object, [1, 2, 3]);
216 assertThrows(function() { object.m.apply(object, [undefined]); }, TypeError) ;
217 }
218
219 class C {
220 m(x, y) {}
221 }
222 let obj = {
223 m(x, y) {}
224 };
225
226 checkTwoArguments(new C());
227 checkTwoArguments(obj);
228 })();
229
230
231 (function TwoArgumentsConstructor() {
232 'use strong';
233
234 class C {
235 constructor(x, y) {}
236 }
237
238 assertThrows(function() { new C(); }, TypeError);
239 assertThrows(function() { new C(1); }, TypeError);
240 new C(1, 2);
241 new C(1, 2, 3);
242 assertThrows(function() { new C(undefined); }, TypeError);
243 assertThrows(function() { Reflect.construct(C, []); }, TypeError);
244 assertThrows(function() { Reflect.construct(C, [1]); }, TypeError);
245 Reflect.construct(C, [1, 2]);
246 Reflect.construct(C, [1, 2, 3]);
247 assertThrows(function() { Reflect.construct(C, [undefined]); }, TypeError);
248 })();
OLDNEW
« test/mjsunit/strong/declaration-after-use.js ('K') | « test/mjsunit/strong/declaration-after-use.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698