OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 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 | 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 | 5 // Flags: --harmony-proxies |
6 | 6 /* |
7 var target = { | 7 var target = { |
8 "target_one": 1 | 8 "target_one": 1 |
9 }; | 9 }; |
10 target.__proto__ = { | 10 target.__proto__ = { |
11 "target_two": 2 | 11 "target_two": 2 |
12 }; | 12 }; |
13 var handler = { | 13 var handler = { |
14 enumerate: function(target) { | 14 enumerate: function(target) { |
15 function* keys() { | 15 function* keys() { |
16 yield "foo"; | 16 yield "foo"; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 assertThrows("for (var k in proxy) {}", TypeError); | 65 assertThrows("for (var k in proxy) {}", TypeError); |
66 } | 66 } |
67 | 67 |
68 TestNonStringKey(1); | 68 TestNonStringKey(1); |
69 TestNonStringKey(3.14); | 69 TestNonStringKey(3.14); |
70 TestNonStringKey(Symbol("foo")); | 70 TestNonStringKey(Symbol("foo")); |
71 TestNonStringKey({bad: "value"}); | 71 TestNonStringKey({bad: "value"}); |
72 TestNonStringKey(null); | 72 TestNonStringKey(null); |
73 TestNonStringKey(undefined); | 73 TestNonStringKey(undefined); |
74 TestNonStringKey(true); | 74 TestNonStringKey(true); |
| 75 */ |
| 76 |
| 77 (function testProtoProxyEnumerate() { |
| 78 var keys = ['a', 'b', 'c', 'd']; |
| 79 var handler = { |
| 80 enumerate() { return keys[Symbol.iterator]() }, |
| 81 has(target, key) { return false } |
| 82 }; |
| 83 var proxy = new Proxy({}, handler); |
| 84 var seen_keys = []; |
| 85 for (var i in proxy) { |
| 86 seen_keys.push(i); |
| 87 } |
| 88 assertEquals([], seen_keys); |
| 89 |
| 90 handler.has = function(target, key) { return true }; |
| 91 for (var i in proxy) { |
| 92 seen_keys.push(i); |
| 93 } |
| 94 assertEquals(keys, seen_keys); |
| 95 |
| 96 o = {__proto__:proxy}; |
| 97 handler.has = function(target, key) { return false }; |
| 98 seen_keys = []; |
| 99 for (var i in o) { |
| 100 seen_keys.push(i); |
| 101 } |
| 102 assertEquals([], seen_keys); |
| 103 |
| 104 handler.has = function(target, key) { return true }; |
| 105 seen_keys = []; |
| 106 for (var i in o) { |
| 107 seen_keys.push(i); |
| 108 } |
| 109 assertEquals(keys, seen_keys); |
| 110 })(); |
OLD | NEW |