OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-proxies --harmony-reflect --allow-natives-syntax | 5 // Flags: --harmony-proxies --harmony-reflect --allow-natives-syntax |
6 | 6 |
7 | 7 |
8 var symbol = %CreatePrivateSymbol("private"); | 8 var symbol = %CreatePrivateSymbol("private"); |
9 | 9 |
10 | 10 |
11 // Private symbols must never be listed. | 11 // Private symbols must never be listed. |
12 | 12 |
13 var object = {}; | 13 var object = {}; |
14 object[symbol] = 42; | 14 object[symbol] = 42; |
15 for (var key of Object.keys(object)) assertUnreachable(); | 15 for (var key of Object.keys(object)) assertUnreachable(); |
16 for (var key of Object.getOwnPropertySymbols(object)) assertUnreachable(); | 16 for (var key of Object.getOwnPropertySymbols(object)) assertUnreachable(); |
17 for (var key of Object.getOwnPropertyNames(object)) assertUnreachable(); | 17 for (var key of Object.getOwnPropertyNames(object)) assertUnreachable(); |
18 for (var key of Reflect.ownKeys(object)) assertUnreachable(); | 18 for (var key of Reflect.ownKeys(object)) assertUnreachable(); |
19 for (var key of Reflect.enumerate(object)) assertUnreachable(); | |
20 for (var key in object) assertUnreachable(); | 19 for (var key in object) assertUnreachable(); |
21 | 20 |
22 var object2 = {__proto__: object}; | 21 var object2 = {__proto__: object}; |
23 for (var key of Object.keys(object2)) assertUnreachable(); | 22 for (var key of Object.keys(object2)) assertUnreachable(); |
24 for (var key of Object.getOwnPropertySymbols(object2)) assertUnreachable(); | 23 for (var key of Object.getOwnPropertySymbols(object2)) assertUnreachable(); |
25 for (var key of Object.getOwnPropertyNames(object2)) assertUnreachable(); | 24 for (var key of Object.getOwnPropertyNames(object2)) assertUnreachable(); |
26 for (var key of Reflect.ownKeys(object2)) assertUnreachable(); | 25 for (var key of Reflect.ownKeys(object2)) assertUnreachable(); |
27 for (var key of Reflect.enumerate(object2)) assertUnreachable(); | |
28 for (var key in object2) assertUnreachable(); | 26 for (var key in object2) assertUnreachable(); |
29 | 27 |
30 | 28 |
31 // Private symbols must never leak to proxy traps. | 29 // Private symbols must never leak to proxy traps. |
32 | 30 |
33 var proxy = new Proxy({}, new Proxy({}, {get() {return () => {throw 666}}})); | 31 var proxy = new Proxy({}, new Proxy({}, {get() {return () => {throw 666}}})); |
34 var object = {__proto__: proxy}; | 32 var object = {__proto__: proxy}; |
35 | 33 |
36 // [[Set]] | 34 // [[Set]] |
37 assertEquals(42, proxy[symbol] = 42); | 35 assertEquals(42, proxy[symbol] = 42); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 assertFalse(symbol in object); | 67 assertFalse(symbol in object); |
70 assertFalse(Reflect.has(object, symbol)); | 68 assertFalse(Reflect.has(object, symbol)); |
71 | 69 |
72 // [[Get]] | 70 // [[Get]] |
73 assertEquals(undefined, proxy[symbol]); | 71 assertEquals(undefined, proxy[symbol]); |
74 assertEquals(undefined, Reflect.get(proxy, symbol)); | 72 assertEquals(undefined, Reflect.get(proxy, symbol)); |
75 assertEquals(undefined, Reflect.get(proxy, symbol, 42)); | 73 assertEquals(undefined, Reflect.get(proxy, symbol, 42)); |
76 assertEquals(undefined, object[symbol]); | 74 assertEquals(undefined, object[symbol]); |
77 assertEquals(undefined, Reflect.get(object, symbol)); | 75 assertEquals(undefined, Reflect.get(object, symbol)); |
78 assertEquals(undefined, Reflect.get(object, symbol, 42)); | 76 assertEquals(undefined, Reflect.get(object, symbol, 42)); |
OLD | NEW |