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

Side by Side Diff: test/mjsunit/harmony/proxies-with.js

Issue 1516843002: [proxy] fixing harmony/proxy.js tests and improving error messages + some drive-by fixes (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
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 14 matching lines...) Expand all
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // Flags: --harmony-proxies 28 // Flags: --harmony-proxies
29 29
30 30
31 // Helper. 31 // Helper.
32 32
33 function TestWithProxies(test, x, y, z) { 33 function TestWithProxies(test, x, y, z) {
34 test(function(h) { return new Proxy({}, h) }, x, y, z) 34 test(function(h) { return new Proxy({}, h) }, x, y, z)
35 test(function(h) { 35 // TODO(cbruni): enable once we have [[Call]] working.
Jakob Kummerow 2015/12/10 15:35:03 Don't we have [[Call]] working?
36 return Proxy.createFunction(h, function() {}) 36 // test(function(h) {
37 }, x, y, z) 37 // return Proxy.createFunction(h, function() {})
38 // }, x, y, z)
neis 2015/12/10 15:13:50 This can be done now :)
38 } 39 }
39 40
40 41
41 42
42 // Getting. 43 // Getting.
43 44
44 function TestWithGet(handler) { 45 function TestWithGet(handler) {
45 TestWithProxies(TestWithGet2, handler) 46 TestWithProxies(TestWithGet2, handler)
46 } 47 }
47 48
(...skipping 17 matching lines...) Expand all
65 assertEquals("global", c) 66 assertEquals("global", c)
66 assertEquals("own", d) 67 assertEquals("own", d)
67 } 68 }
68 } 69 }
69 70
70 TestWithGet({ 71 TestWithGet({
71 get: function(r, k) { 72 get: function(r, k) {
72 key = k; 73 key = k;
73 return k === "a" ? "onproxy" : undefined 74 return k === "a" ? "onproxy" : undefined
74 }, 75 },
75 getPropertyDescriptor: function(k) { 76 getOwnPropertyDescriptor: function(t, k) {
76 key = k; 77 key = k;
77 return k === "a" ? {value: "onproxy", configurable: true} : undefined 78 return k === "a" ? {value: "onproxy", configurable: true} : undefined
78 } 79 }
79 }) 80 })
80 81
81 TestWithGet({ 82 TestWithGet({
82 get: function(r, k) { return this.get2(r, k) }, 83 get: function(r, k) { return this.get2(r, k) },
83 get2: function(r, k) { key = k; return k === "a" ? "onproxy" : undefined }, 84 get2: function(r, k) { key = k; return k === "a" ? "onproxy" : undefined },
84 getPropertyDescriptor: function(k) { 85 getOwnPropertyDescriptor: function(t, k) {
85 key = k; 86 key = k;
86 return k === "a" ? {value: "onproxy", configurable: true} : undefined 87 return k === "a" ? {value: "onproxy", configurable: true} : undefined
87 } 88 }
88 }) 89 })
89 90
90 TestWithGet({ 91 TestWithGet({
91 getPropertyDescriptor: function(k) { 92 get: function(r, k) {
93 key = k;
94 return k === "a" ? "onproxy" : undefined
95 },
96 getOwnPropertyDescriptor: function(t, k) {
97 return this.getOwnPropertyDescriptor2(k)
98 },
99 getOwnPropertyDescriptor2: function(k) {
92 key = k; 100 key = k;
93 return k === "a" ? {value: "onproxy", configurable: true} : undefined 101 return k === "a" ? {value: "onproxy", configurable: true} : undefined
94 } 102 }
95 }) 103 })
96 104
97 TestWithGet({ 105 TestWithGet({
98 getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) }, 106 get: function(r, k) {
99 getPropertyDescriptor2: function(k) {
100 key = k; 107 key = k;
101 return k === "a" ? {value: "onproxy", configurable: true} : undefined 108 return k === "a" ? "onproxy" : undefined
102 } 109 },
103 }) 110 getOwnPropertyDescriptor: function(t, k) {
104
105 TestWithGet({
106 getPropertyDescriptor: function(k) {
107 key = k; 111 key = k;
108 return k === "a" ? 112 return k === "a" ?
109 {get value() { return "onproxy" }, configurable: true} : undefined 113 {get value() { return "onproxy" }, configurable: true} : undefined
110 } 114 }
111 }) 115 })
112 116
113 TestWithGet({
114 get: undefined,
115 getPropertyDescriptor: function(k) {
116 key = k;
117 return k === "a" ? {value: "onproxy", configurable: true} : undefined
118 }
119 })
120
121 117
122 118
123 // Invoking. 119 // Invoking.
124 120
125 function TestWithGetCall(handler) { 121 function TestWithGetCall(handler) {
126 TestWithProxies(TestWithGetCall2, handler) 122 TestWithProxies(TestWithGetCall2, handler)
127 } 123 }
128 124
129 var receiver = null 125 var receiver = null
130 var c = function() { return "global" } 126 var c = function() { return "global" }
(...skipping 18 matching lines...) Expand all
149 assertEquals("local", b()) 145 assertEquals("local", b())
150 assertEquals("global", c()) 146 assertEquals("global", c())
151 assertEquals("own", d()) 147 assertEquals("own", d())
152 } 148 }
153 } 149 }
154 150
155 function onproxy() { receiver = this; return "onproxy" } 151 function onproxy() { receiver = this; return "onproxy" }
156 152
157 TestWithGetCall({ 153 TestWithGetCall({
158 get: function(r, k) { key = k; return k === "a" ? onproxy : undefined }, 154 get: function(r, k) { key = k; return k === "a" ? onproxy : undefined },
159 getPropertyDescriptor: function(k) { 155 getOwnPropertyDescriptor: function(t, k) {
160 key = k; 156 key = k;
161 return k === "a" ? {value: onproxy, configurable: true} : undefined 157 return k === "a" ? {value: onproxy, configurable: true} : undefined
162 } 158 }
163 }) 159 })
164 160
165 TestWithGetCall({ 161 TestWithGetCall({
166 get: function(r, k) { return this.get2(r, k) }, 162 get: function(r, k) { return this.get2(r, k) },
167 get2: function(r, k) { key = k; return k === "a" ? onproxy : undefined }, 163 get2: function(r, k) { key = k; return k === "a" ? onproxy : undefined },
168 getPropertyDescriptor: function(k) { 164 getOwnPropertyDescriptor: function(t, k) {
169 key = k; 165 key = k;
170 return k === "a" ? {value: onproxy, configurable: true} : undefined 166 return k === "a" ? {value: onproxy, configurable: true} : undefined
171 } 167 }
172 }) 168 })
173 169
174 TestWithGetCall({ 170 TestWithGetCall({
175 getPropertyDescriptor: function(k) { 171 get: function(r, k) { key = k; return k === "a" ? onproxy : undefined },
172 getOwnPropertyDescriptor: function(t, k) {
173 return this.getOwnPropertyDescriptor2(k)
174 },
175 getOwnPropertyDescriptor2: function(k) {
176 key = k; 176 key = k;
177 return k === "a" ? {value: onproxy, configurable: true} : undefined 177 return k === "a" ? {value: onproxy, configurable: true} : undefined
178 } 178 }
179 }) 179 })
180 180
181 TestWithGetCall({ 181 TestWithGetCall({
182 getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) }, 182 get: function(r, k) { key = k; return k === "a" ? onproxy : undefined },
183 getPropertyDescriptor2: function(k) { 183 getOwnPropertyDescriptor: function(t, k) {
184 key = k;
185 return k === "a" ? {value: onproxy, configurable: true} : undefined
186 }
187 })
188
189 TestWithGetCall({
190 getPropertyDescriptor: function(k) {
191 key = k; 184 key = k;
192 return k === "a" ? 185 return k === "a" ?
193 {get value() { return onproxy }, configurable: true} : undefined 186 {get value() { return onproxy }, configurable: true} : undefined
194 } 187 }
195 }) 188 })
196 189
197 TestWithGetCall({
198 get: undefined,
199 getPropertyDescriptor: function(k) {
200 key = k;
201 return k === "a" ? {value: onproxy, configurable: true} : undefined
202 }
203 })
204
205 190
206 function TestWithGetCallThrow(handler) { 191 function TestWithGetCallThrow(handler) {
207 TestWithProxies(TestWithGetCallThrow2, handler) 192 TestWithProxies(TestWithGetCallThrow2, handler)
208 } 193 }
209 194
210 function TestWithGetCallThrow2(create, handler) { 195 function TestWithGetCallThrow2(create, handler) {
211 var b = function() { return "local" } 196 var b = function() { return "local" }
212 197
213 var p = create(handler) 198 var p = create(handler)
214 with (p) { 199 with (p) {
215 assertThrows(function(){ a() }, "myexn") 200 assertThrows(function(){ a() }, "myexn")
216 assertEquals("local", b()) 201 assertEquals("local", b())
217 assertEquals("global", c()) 202 assertEquals("global", c())
218 } 203 }
219 204
220 var o = Object.create(p, {d: {value: function() { return "own" }}}) 205 var o = Object.create(p, {d: {value: function() { return "own" }}})
221 with (o) { 206 with (o) {
222 assertThrows(function(){ a() }, "myexn") 207 assertThrows(function(){ a() }, "myexn")
223 assertEquals("local", b()) 208 assertEquals("local", b())
224 assertEquals("global", c()) 209 assertEquals("global", c())
225 assertEquals("own", d()) 210 assertEquals("own", d())
226 } 211 }
227 } 212 }
228 213
229 function onproxythrow() { throw "myexn" } 214 function onproxythrow() { throw "myexn" }
230 215
231 TestWithGetCallThrow({ 216 TestWithGetCallThrow({
232 get: function(r, k) { key = k; return k === "a" ? onproxythrow : undefined }, 217 get: function(r, k) { key = k; return k === "a" ? onproxythrow : undefined },
233 getPropertyDescriptor: function(k) {
234 key = k;
235 return k === "a" ? {value: onproxythrow, configurable: true} : undefined
236 }
237 }) 218 })
238 219
239 TestWithGetCallThrow({ 220 TestWithGetCallThrow({
240 get: function(r, k) { return this.get2(r, k) }, 221 get: function(r, k) { return this.get2(r, k) },
241 get2: function(r, k) { key = k; return k === "a" ? onproxythrow : undefined }, 222 get2: function(r, k) { key = k; return k === "a" ? onproxythrow : undefined },
242 getPropertyDescriptor: function(k) {
243 key = k;
244 return k === "a" ? {value: onproxythrow, configurable: true} : undefined
245 }
246 })
247
248 TestWithGetCallThrow({
249 getPropertyDescriptor: function(k) {
250 key = k;
251 return k === "a" ? {value: onproxythrow, configurable: true} : undefined
252 }
253 })
254
255 TestWithGetCallThrow({
256 getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) },
257 getPropertyDescriptor2: function(k) {
258 key = k;
259 return k === "a" ? {value: onproxythrow, configurable: true} : undefined
260 }
261 })
262
263 TestWithGetCallThrow({
264 getPropertyDescriptor: function(k) {
265 key = k;
266 return k === "a" ?
267 {get value() { return onproxythrow }, configurable: true} : undefined
268 }
269 })
270
271 TestWithGetCallThrow({
272 get: undefined,
273 getPropertyDescriptor: function(k) {
274 key = k;
275 return k === "a" ? {value: onproxythrow, configurable: true} : undefined
276 }
277 }) 223 })
278 224
279 225
280 226
281 // Setting. 227 // Setting.
282 228
283 var key 229 var key
284 var val 230 var val
285 231
286 function TestWithSet(handler, hasSetter) { 232 function TestWithSet(handler, hasSetter) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 b = "local" 266 b = "local"
321 c = "global" 267 c = "global"
322 d = "own" 268 d = "own"
323 assertEquals("a", key) 269 assertEquals("a", key)
324 assertEquals("set", val) 270 assertEquals("set", val)
325 } 271 }
326 } 272 }
327 273
328 TestWithSet({ 274 TestWithSet({
329 set: function(r, k, v) { key = k; val = v; return true }, 275 set: function(r, k, v) { key = k; val = v; return true },
330 getPropertyDescriptor: function(k) { 276 getOwnPropertyDescriptor: function(t, k) {
331 return k === "a" ? {writable: true, configurable: true} : undefined 277 return k === "a" ? {writable: true, configurable: true} : undefined
332 } 278 }
333 }) 279 })
334 280
335 TestWithSet({ 281 TestWithSet({
336 set: function(r, k, v) { return this.set2(r, k, v) }, 282 set: function(r, k, v) { return this.set2(r, k, v) },
337 set2: function(r, k, v) { key = k; val = v; return true }, 283 set2: function(r, k, v) { key = k; val = v; return true },
338 getPropertyDescriptor: function(k) { 284 getOwnPropertyDescriptor: function(t, k) {
339 return k === "a" ? {writable: true, configurable: true} : undefined 285 return k === "a" ? {writable: true, configurable: true} : undefined
340 } 286 }
341 }) 287 })
342 288
343 TestWithSet({ 289 TestWithSet({
344 getPropertyDescriptor: function(k) { 290 getOwnPropertyDescriptor: function(t, k) {
345 return this.getOwnPropertyDescriptor(k)
346 },
347 getOwnPropertyDescriptor: function(k) {
348 return k === "a" ? {writable: true, configurable: true} : undefined 291 return k === "a" ? {writable: true, configurable: true} : undefined
349 }, 292 },
350 defineProperty: function(k, desc) { key = k; val = desc.value } 293 defineProperty: function(t, k, desc) { key = k; val = desc.value }
351 }) 294 })
352 295
353 TestWithSet({ 296 TestWithSet({
354 getOwnPropertyDescriptor: function(k) { 297 getOwnPropertyDescriptor: function(t, k) {
355 return this.getPropertyDescriptor2(k) 298 return this.getOwnPropertyDescriptor2(k)
356 }, 299 },
357 getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) }, 300 getOwnPropertyDescriptor2: function(k) {
358 getPropertyDescriptor2: function(k) {
359 return k === "a" ? {writable: true, configurable: true} : undefined 301 return k === "a" ? {writable: true, configurable: true} : undefined
360 }, 302 },
361 defineProperty: function(k, desc) { this.defineProperty2(k, desc) }, 303 defineProperty: function(t, k, desc) { this.defineProperty2(k, desc) },
362 defineProperty2: function(k, desc) { key = k; val = desc.value } 304 defineProperty2: function(k, desc) { key = k; val = desc.value }
363 }) 305 })
364 306
365 TestWithSet({ 307 TestWithSet({
366 getOwnPropertyDescriptor: function(k) { 308 getOwnPropertyDescriptor: function(t, k) {
367 return this.getPropertyDescriptor(k)
368 },
369 getPropertyDescriptor: function(k) {
370 return k === "a" ? 309 return k === "a" ?
371 {get writable() { return true }, configurable: true} : undefined 310 {get writable() { return true }, configurable: true} : undefined
372 }, 311 },
373 defineProperty: function(k, desc) { key = k; val = desc.value } 312 defineProperty: function(t, k, desc) { key = k; val = desc.value }
374 }) 313 })
375 314
376 TestWithSet({ 315 TestWithSet({
377 getOwnPropertyDescriptor: function(k) { 316 getOwnPropertyDescriptor: function(t, k) {
378 return this.getPropertyDescriptor(k) 317 return this.getOwnPropertyDescriptor2(k) },
379 }, 318 getOwnPropertyDescriptor2: function(k) {
380 getPropertyDescriptor: function(k) {
381 return k === "a" ? 319 return k === "a" ?
382 {set: function(v) { key = k; val = v }, configurable: true} : undefined 320 {set: function(v) { key = k; val = v }, configurable: true} : undefined
383 } 321 },
322 set: function(t, k, v) { key = k; val = v; return true }
384 }, true) 323 }, true)
385 324
386 TestWithSet({ 325 TestWithSet({
387 getOwnPropertyDescriptor: function(k) { 326 getOwnPropertyDescriptor: function(t, k) {
388 return this.getPropertyDescriptor(k)
389 },
390 getPropertyDescriptor: function(k) { return this.getPropertyDescriptor2(k) },
391 getPropertyDescriptor2: function(k) {
392 return k === "a" ?
393 {set: function(v) { key = k; val = v }, configurable: true} : undefined
394 }
395 }, true)
396
397 TestWithSet({
398 getOwnPropertyDescriptor: function(k) { return null },
399 getPropertyDescriptor: function(k) {
400 return k === "a" ? {writable: true, configurable: true} : undefined 327 return k === "a" ? {writable: true, configurable: true} : undefined
401 }, 328 },
402 defineProperty: function(k, desc) { key = k; val = desc.value } 329 defineProperty: function(t, k, desc) { key = k; val = desc.value }
403 }) 330 })
404 331
405 332
406 function TestWithSetThrow(handler, hasSetter) { 333 function TestWithSetThrow(handler, hasSetter) {
407 TestWithProxies(TestWithSetThrow2, handler, hasSetter) 334 TestWithProxies(TestWithSetThrow2, handler, hasSetter)
408 } 335 }
409 336
410 function TestWithSetThrow2(create, handler, hasSetter) { 337 function TestWithSetThrow2(create, handler, hasSetter) {
411 var p = create(handler) 338 var p = create(handler)
412 assertThrows(function(){ 339 assertThrows(function(){
413 with (p) { 340 with (p) {
414 a = 1 341 a = 1
415 } 342 }
416 }, "myexn") 343 }, "myexn")
417 344
418 if (!hasSetter) return 345 if (!hasSetter) return
419 346
420 var o = Object.create(p, {}) 347 var o = Object.create(p, {})
421 assertThrows(function(){ 348 assertThrows(function(){
422 with (o) { 349 with (o) {
423 a = 1 350 a = 1
424 } 351 }
425 }, "myexn") 352 }, "myexn")
426 } 353 }
427 354
428 TestWithSetThrow({ 355 TestWithSetThrow({
429 set: function(r, k, v) { throw "myexn" }, 356 set: function() { throw "myexn" },
430 getPropertyDescriptor: function(k) { 357 getOwnPropertyDescriptor: function(t, k) {
431 return k === "a" ? {writable: true, configurable: true} : undefined 358 return k === "a" ? {writable: true, configurable: true} : undefined
432 } 359 }
433 }) 360 })
434 361
435 TestWithSetThrow({ 362 TestWithSetThrow({
436 getPropertyDescriptor: function(k) { throw "myexn" }, 363 getOwnPropertyDescriptor: function() { throw "myexn" },
437 }) 364 })
438 365
439 TestWithSetThrow({ 366 TestWithSetThrow({
440 getPropertyDescriptor: function(k) { 367 has: function() { throw "myexn" },
441 return k === "a" ? {writable: true, configurable: true} : undefined
442 },
443 defineProperty: function(k, desc) { throw "myexn" }
444 }) 368 })
445 369
446 TestWithSetThrow({ 370 TestWithSetThrow({
447 getPropertyDescriptor: function(k) { 371 getOwnPropertyDescriptor: function(t, k) {
372 return k === "a" ? {writable: true, configurable: true} : undefined
373 },
374 defineProperty: function() { throw "myexn" }
375 })
376
377 TestWithSetThrow({
378 getOwnPropertyDescriptor: function(t, k) {
448 return k === "a" ? 379 return k === "a" ?
449 {set: function() { throw "myexn" }, configurable: true} : undefined 380 {set: function() { throw "myexn" }, configurable: true} : undefined
450 } 381 },
382 defineProperty: function() { throw "myexn" }
451 }, true) 383 }, true)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698