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

Side by Side Diff: test/mjsunit/harmony/reflect-apply.js

Issue 913073003: [es6] implement Reflect.apply() & Reflect.construct() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix arm Created 5 years, 9 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
« no previous file with comments | « src/x64/builtins-x64.cc ('k') | test/mjsunit/harmony/reflect-construct.js » ('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 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-reflect
6
7
8 (function testReflectApplyArity() {
9 assertEquals(3, Reflect.apply.length);
10 })();
11
12
13 (function testReflectApplyNonConstructor() {
14 assertThrows(function() {
15 new Reflect.apply(function(){}, null, []);
16 }, TypeError);
17 })();
18
19
20 (function testAppliedReceiverSloppy() {
21 function returnThis() { return this; }
22 var receiver = {};
23
24 assertSame(this, Reflect.apply(returnThis, void 0, []));
25 assertSame(this, Reflect.apply(returnThis, null, []));
26 assertSame(this, Reflect.apply(returnThis, this, []));
27 assertSame(receiver, Reflect.apply(returnThis, receiver, []));
28
29 // Wrap JS values
30 assertSame(String.prototype,
31 Object.getPrototypeOf(Reflect.apply(returnThis, "str", [])));
32 assertSame(Number.prototype,
33 Object.getPrototypeOf(Reflect.apply(returnThis, 123, [])));
34 assertSame(Boolean.prototype,
35 Object.getPrototypeOf(Reflect.apply(returnThis, true, [])));
36 assertSame(Symbol.prototype,
37 Object.getPrototypeOf(
38 Reflect.apply(returnThis, Symbol("test"), [])));
39 })();
40
41
42 (function testAppliedReceiverStrict() {
43 function returnThis() { 'use strict'; return this; }
44 var receiver = {};
45
46 assertSame(void 0, Reflect.apply(returnThis, void 0, []));
47 assertSame(this, Reflect.apply(returnThis, this, []));
48 assertSame(receiver, Reflect.apply(returnThis, receiver, []));
49
50 // Don't wrap value types
51 var regexp = /123/;
52 var symbol = Symbol("test");
53 assertSame("str", Reflect.apply(returnThis, "str", []));
54 assertSame(123, Reflect.apply(returnThis, 123, []));
55 assertSame(true, Reflect.apply(returnThis, true, []));
56 assertSame(regexp, Reflect.apply(returnThis, regexp, []));
57 assertSame(symbol, Reflect.apply(returnThis, symbol, []));
58 })();
59
60
61 (function testAppliedArgumentsLength() {
62 function returnLengthStrict() { 'use strict'; return arguments.length; }
63 function returnLengthSloppy() { return arguments.length; }
64
65 assertEquals(0, Reflect.apply(returnLengthStrict, this, []));
66 assertEquals(0, Reflect.apply(returnLengthSloppy, this, []));
67 assertEquals(0, Reflect.apply(returnLengthStrict, this, {}));
68 assertEquals(0, Reflect.apply(returnLengthSloppy, this, {}));
69
70 for (var i = 0; i < 256; ++i) {
71 assertEquals(i, Reflect.apply(returnLengthStrict, this, new Array(i)));
72 assertEquals(i, Reflect.apply(returnLengthSloppy, this, new Array(i)));
73 assertEquals(i, Reflect.apply(returnLengthStrict, this, { length: i }));
74 assertEquals(i, Reflect.apply(returnLengthSloppy, this, { length: i }));
75 }
76 })();
77
78
79 (function testAppliedArgumentsLengthThrows() {
80 function noopStrict() { 'use strict'; }
81 function noopSloppy() { }
82 function MyError() {}
83
84 var argsList = {};
85 Object.defineProperty(argsList, "length", {
86 get: function() { throw new MyError(); }
87 });
88
89 assertThrows(function() {
90 Reflect.apply(noopStrict, this, argsList);
91 }, MyError);
92
93 assertThrows(function() {
94 Reflect.apply(noopSloppy, this, argsList);
95 }, MyError);
96 })();
97
98
99 (function testAppliedArgumentsElementThrows() {
100 function noopStrict() { 'use strict'; }
101 function noopSloppy() { }
102 function MyError() {}
103
104 var argsList = { length: 1 };
105 Object.defineProperty(argsList, "0", {
106 get: function() { throw new MyError(); }
107 });
108
109 assertThrows(function() {
110 Reflect.apply(noopStrict, this, argsList);
111 }, MyError);
112
113 assertThrows(function() {
114 Reflect.apply(noopSloppy, this, argsList);
115 }, MyError);
116 })();
117
118
119 (function testAppliedNonFunctionStrict() {
120 'use strict';
121 assertThrows(function() { Reflect.apply(void 0); }, TypeError);
122 assertThrows(function() { Reflect.apply(null); }, TypeError);
123 assertThrows(function() { Reflect.apply(123); }, TypeError);
124 assertThrows(function() { Reflect.apply("str"); }, TypeError);
125 assertThrows(function() { Reflect.apply(Symbol("x")); }, TypeError);
126 assertThrows(function() { Reflect.apply(/123/); }, TypeError);
127 assertThrows(function() { Reflect.apply(NaN); }, TypeError);
128 assertThrows(function() { Reflect.apply({}); }, TypeError);
129 assertThrows(function() { Reflect.apply([]); }, TypeError);
130 })();
131
132
133 (function testAppliedNonFunctionSloppy() {
134 assertThrows(function() { Reflect.apply(void 0); }, TypeError);
135 assertThrows(function() { Reflect.apply(null); }, TypeError);
136 assertThrows(function() { Reflect.apply(123); }, TypeError);
137 assertThrows(function() { Reflect.apply("str"); }, TypeError);
138 assertThrows(function() { Reflect.apply(Symbol("x")); }, TypeError);
139 assertThrows(function() { Reflect.apply(/123/); }, TypeError);
140 assertThrows(function() { Reflect.apply(NaN); }, TypeError);
141 assertThrows(function() { Reflect.apply({}); }, TypeError);
142 assertThrows(function() { Reflect.apply([]); }, TypeError);
143 })();
144
145
146 (function testAppliedArgumentsNonList() {
147 function noopStrict() { 'use strict'; }
148 function noopSloppy() {}
149 var R = void 0;
150 assertThrows(function() { Reflect.apply(noopStrict, R, null); }, TypeError);
151 assertThrows(function() { Reflect.apply(noopSloppy, R, null); }, TypeError);
152 assertThrows(function() { Reflect.apply(noopStrict, R, 1); }, TypeError);
153 assertThrows(function() { Reflect.apply(noopSloppy, R, 1); }, TypeError);
154 assertThrows(function() { Reflect.apply(noopStrict, R, "BAD"); }, TypeError);
155 assertThrows(function() { Reflect.apply(noopSloppy, R, "BAD"); }, TypeError);
156 assertThrows(function() { Reflect.apply(noopStrict, R, true); }, TypeError);
157 assertThrows(function() { Reflect.apply(noopSloppy, R, true); }, TypeError);
158 var sym = Symbol("x");
159 assertThrows(function() { Reflect.apply(noopStrict, R, sym); }, TypeError);
160 assertThrows(function() { Reflect.apply(noopSloppy, R, sym); }, TypeError);
161 })();
162
163
164 (function testAppliedArgumentValue() {
165 function returnFirstStrict(a) { 'use strict'; return a; }
166 function returnFirstSloppy(a) { return a; }
167 function returnLastStrict(a) {
168 'use strict'; return arguments[arguments.length - 1]; }
169 function returnLastSloppy(a) { return arguments[arguments.length - 1]; }
170 function returnSumStrict() {
171 'use strict';
172 var sum = arguments[0];
173 for (var i = 1; i < arguments.length; ++i) {
174 sum += arguments[i];
175 }
176 return sum;
177 }
178 function returnSumSloppy() {
179 var sum = arguments[0];
180 for (var i = 1; i < arguments.length; ++i) {
181 sum += arguments[i];
182 }
183 return sum;
184 }
185
186 assertEquals("OK!", Reflect.apply(returnFirstStrict, this, ["OK!"]));
187 assertEquals("OK!", Reflect.apply(returnFirstSloppy, this, ["OK!"]));
188 assertEquals("OK!", Reflect.apply(returnFirstStrict, this,
189 { 0: "OK!", length: 1 }));
190 assertEquals("OK!", Reflect.apply(returnFirstSloppy, this,
191 { 0: "OK!", length: 1 }));
192 assertEquals("OK!", Reflect.apply(returnLastStrict, this,
193 [0, 1, 2, 3, 4, 5, 6, 7, 8, "OK!"]));
194 assertEquals("OK!", Reflect.apply(returnLastSloppy, this,
195 [0, 1, 2, 3, 4, 5, 6, 7, 8, "OK!"]));
196 assertEquals("OK!", Reflect.apply(returnLastStrict, this,
197 { 9: "OK!", length: 10 }));
198 assertEquals("OK!", Reflect.apply(returnLastSloppy, this,
199 { 9: "OK!", length: 10 }));
200 assertEquals("TEST", Reflect.apply(returnSumStrict, this,
201 ["T", "E", "S", "T"]));
202 assertEquals("TEST!!", Reflect.apply(returnSumStrict, this,
203 ["T", "E", "S", "T", "!", "!"]));
204 assertEquals(10, Reflect.apply(returnSumStrict, this,
205 { 0: 1, 1: 2, 2: 3, 3: 4, length: 4 }));
206 assertEquals("TEST", Reflect.apply(returnSumSloppy, this,
207 ["T", "E", "S", "T"]));
208 assertEquals("TEST!!", Reflect.apply(returnSumSloppy, this,
209 ["T", "E", "S", "T", "!", "!"]));
210 assertEquals(10, Reflect.apply(returnSumSloppy, this,
211 { 0: 1, 1: 2, 2: 3, 3: 4, length: 4 }));
212 })();
OLDNEW
« no previous file with comments | « src/x64/builtins-x64.cc ('k') | test/mjsunit/harmony/reflect-construct.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698