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

Side by Side Diff: test/mjsunit/harmony/rest-params.js

Issue 1519073004: Remove always-on --harmony-rest-parameters flag (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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 2014 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: --harmony-rest-parameters
6
7 (function testRestIndex() {
8 assertEquals(5, (function(...args) { return args.length; })(1,2,3,4,5));
9 assertEquals(4, (function(a, ...args) { return args.length; })(1,2,3,4,5));
10 assertEquals(3, (function(a, b, ...args) { return args.length; })(1,2,3,4,5));
11 assertEquals(2, (function(a, b, c, ...args) {
12 return args.length; })(1,2,3,4,5));
13 assertEquals(1, (function(a, b, c, d, ...args) {
14 return args.length; })(1,2,3,4,5));
15 assertEquals(0, (function(a, b, c, d, e, ...args) {
16 return args.length; })(1,2,3,4,5));
17 })();
18
19
20 var strictTest = (function() {
21 "use strict";
22 return function strictTest(a, b, ...c) {
23 assertEquals(Array, c.constructor);
24 assertTrue(Array.isArray(c));
25
26 var expectedLength = arguments.length >= 3 ? arguments.length - 2 : 0;
27 assertEquals(expectedLength, c.length);
28
29 for (var i = 2, j = 0; i < arguments.length; ++i) {
30 assertEquals(c[j++], arguments[i]);
31 }
32 };
33 })();
34
35
36 function sloppyTest(a, b, ...c) {
37 assertEquals(Array, c.constructor);
38 assertTrue(Array.isArray(c));
39
40 var expectedLength = arguments.length >= 3 ? arguments.length - 2 : 0;
41 assertEquals(expectedLength, c.length);
42
43 for (var i = 2, j = 0; i < arguments.length; ++i) {
44 assertEquals(c[j++], arguments[i]);
45 }
46 }
47
48
49 var O = {
50 strict: strictTest,
51 sloppy: sloppyTest
52 };
53
54 (function testStrictRestParamArity() {
55 assertEquals(2, strictTest.length);
56 assertEquals(2, O.strict.length);
57 })();
58
59
60 (function testRestParamsStrictMode() {
61 strictTest();
62 strictTest(1, 2);
63 strictTest(1, 2, 3, 4, 5, 6);
64 strictTest(1, 2, 3);
65 O.strict();
66 O.strict(1, 2);
67 O.strict(1, 2, 3, 4, 5, 6);
68 O.strict(1, 2, 3);
69 })();
70
71
72 (function testRestParamsStrictModeApply() {
73 strictTest.apply(null, []);
74 strictTest.apply(null, [1, 2]);
75 strictTest.apply(null, [1, 2, 3, 4, 5, 6]);
76 strictTest.apply(null, [1, 2, 3]);
77 O.strict.apply(O, []);
78 O.strict.apply(O, [1, 2]);
79 O.strict.apply(O, [1, 2, 3, 4, 5, 6]);
80 O.strict.apply(O, [1, 2, 3]);
81 })();
82
83
84 (function testRestParamsStrictModeCall() {
85 strictTest.call(null);
86 strictTest.call(null, 1, 2);
87 strictTest.call(null, 1, 2, 3, 4, 5, 6);
88 strictTest.call(null, 1, 2, 3);
89 O.strict.call(O);
90 O.strict.call(O, 1, 2);
91 O.strict.call(O, 1, 2, 3, 4, 5, 6);
92 O.strict.call(O, 1, 2, 3);
93 })();
94
95
96 (function testsloppyRestParamArity() {
97 assertEquals(2, sloppyTest.length);
98 assertEquals(2, O.sloppy.length);
99 })();
100
101
102 (function testRestParamssloppyMode() {
103 sloppyTest();
104 sloppyTest(1, 2);
105 sloppyTest(1, 2, 3, 4, 5, 6);
106 sloppyTest(1, 2, 3);
107 O.sloppy();
108 O.sloppy(1, 2);
109 O.sloppy(1, 2, 3, 4, 5, 6);
110 O.sloppy(1, 2, 3);
111 })();
112
113
114 (function testRestParamssloppyModeApply() {
115 sloppyTest.apply(null, []);
116 sloppyTest.apply(null, [1, 2]);
117 sloppyTest.apply(null, [1, 2, 3, 4, 5, 6]);
118 sloppyTest.apply(null, [1, 2, 3]);
119 O.sloppy.apply(O, []);
120 O.sloppy.apply(O, [1, 2]);
121 O.sloppy.apply(O, [1, 2, 3, 4, 5, 6]);
122 O.sloppy.apply(O, [1, 2, 3]);
123 })();
124
125
126 (function testRestParamssloppyModeCall() {
127 sloppyTest.call(null);
128 sloppyTest.call(null, 1, 2);
129 sloppyTest.call(null, 1, 2, 3, 4, 5, 6);
130 sloppyTest.call(null, 1, 2, 3);
131 O.sloppy.call(O);
132 O.sloppy.call(O, 1, 2);
133 O.sloppy.call(O, 1, 2, 3, 4, 5, 6);
134 O.sloppy.call(O, 1, 2, 3);
135 })();
136
137
138 (function testUnmappedArguments() {
139 // Strict/Unmapped arguments should always be used for functions with rest
140 // parameters
141 assertThrows(function(...rest) { return arguments.caller; }, TypeError);
142 assertThrows(function(...rest) { return arguments.callee; }, TypeError);
143 // TODO(caitp): figure out why this doesn't throw sometimes, even though the
144 // getter always does =)
145 // assertThrows(function(...rest) { arguments.caller = 1; }, TypeError);
146 // assertThrows(function(...rest) { arguments.callee = 1; }, TypeError);
147 })();
148
149
150 (function testNoAliasArgumentsStrict() {
151 ((function() {
152 "use strict";
153 return (function strictF(a, ...rest) {
154 arguments[0] = 1;
155 assertEquals(3, a);
156 arguments[1] = 2;
157 assertArrayEquals([4, 5], rest);
158 });
159 })())(3, 4, 5);
160 })();
161
162
163 (function testNoAliasArgumentsSloppy() {
164 function sloppyF(a, ...rest) {
165 arguments[0] = 1;
166 assertEquals(3, a);
167 arguments[1] = 2;
168 assertArrayEquals([4, 5], rest);
169 }
170 sloppyF(3, 4, 5);
171 })();
172
173
174 (function testRestParamsWithNewTarget() {
175 "use strict";
176 class Base {
177 constructor(...a) {
178 this.base = a;
179 assertEquals(arguments.length, a.length);
180 var args = [];
181 for (var i = 0; i < arguments.length; ++i) {
182 args.push(arguments[i]);
183 }
184 assertEquals(args, a);
185 }
186 }
187 class Child extends Base {
188 constructor(...b) {
189 super(1, 2, 3);
190 this.child = b;
191 assertEquals(arguments.length, b.length);
192 var args = [];
193 for (var i = 0; i < arguments.length; ++i) {
194 args.push(arguments[i]);
195 }
196 assertEquals(args, b);
197 }
198 }
199
200 var c = new Child(1, 2, 3);
201 assertEquals([1, 2, 3], c.child);
202 assertEquals([1, 2, 3], c.base);
203 })();
204
205 (function TestDirectiveThrows() {
206 "use strict";
207
208 assertThrows(
209 function(){ eval("function(...rest){'use strict';}") }, SyntaxError);
210 assertThrows(function(){ eval("(...rest) => {'use strict';}") }, SyntaxError);
211 assertThrows(
212 function(){ eval("(class{foo(...rest) {'use strict';}});") }, SyntaxError);
213
214 assertThrows(
215 function(){ eval("function(a, ...rest){'use strict';}") }, SyntaxError);
216 assertThrows(
217 function(){ eval("(a, ...rest) => {'use strict';}") }, SyntaxError);
218 assertThrows(
219 function(){ eval("(class{foo(a, ...rest) {'use strict';}});") },
220 SyntaxError);
221 })();
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/regress/regress-513474.js ('k') | test/mjsunit/harmony/rest-params-lazy-parsing.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698