| // Copyright (C) 2015 Jordan Harband. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| esid: sec-object.values |
| description: Object.values should perform observable operations in the correct order |
| author: Jordan Harband |
| features: [Proxy] |
| includes: [proxyTrapsHelper.js] |
| ---*/ |
| |
| var log = ""; |
| var object = { |
| a: 0, |
| b: 0, |
| c: 0 |
| }; |
| var handler = allowProxyTraps({ |
| get: function(target, propertyKey, receiver) { |
| assert.sameValue(target, object, "get target"); |
| assert.sameValue(receiver, proxy, "get receiver"); |
| log += "|get:" + propertyKey; |
| return target[propertyKey]; |
| }, |
| getOwnPropertyDescriptor: function(target, propertyKey) { |
| assert.sameValue(target, object, "getOwnPropertyDescriptor"); |
| log += "|getOwnPropertyDescriptor:" + propertyKey; |
| return Object.getOwnPropertyDescriptor(target, propertyKey); |
| }, |
| ownKeys: function(target) { |
| assert.sameValue(target, object, "ownKeys"); |
| log += "|ownKeys"; |
| return Object.getOwnPropertyNames(target); |
| } |
| }); |
| var check = allowProxyTraps({ |
| get: function(target, propertyKey, receiver) { |
| assert(propertyKey in target, "handler check: " + propertyKey); |
| return target[propertyKey]; |
| } |
| }); |
| var proxy = new Proxy(object, new Proxy(handler, check)); |
| var result = Object.values(proxy); |
| assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|get:a|getOwnPropertyDescriptor:b|get:b|getOwnPropertyDescriptor:c|get:c", log); |