observable-operations.js (1489B)
1 // Copyright (C) 2015 Jordan Harband. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-object.values 6 description: Object.values should perform observable operations in the correct order 7 author: Jordan Harband 8 features: [Proxy] 9 includes: [proxyTrapsHelper.js] 10 ---*/ 11 12 var log = ""; 13 var object = { 14 a: 0, 15 b: 0, 16 c: 0 17 }; 18 var handler = allowProxyTraps({ 19 get: function(target, propertyKey, receiver) { 20 assert.sameValue(target, object, "get target"); 21 assert.sameValue(receiver, proxy, "get receiver"); 22 log += "|get:" + propertyKey; 23 return target[propertyKey]; 24 }, 25 getOwnPropertyDescriptor: function(target, propertyKey) { 26 assert.sameValue(target, object, "getOwnPropertyDescriptor"); 27 log += "|getOwnPropertyDescriptor:" + propertyKey; 28 return Object.getOwnPropertyDescriptor(target, propertyKey); 29 }, 30 ownKeys: function(target) { 31 assert.sameValue(target, object, "ownKeys"); 32 log += "|ownKeys"; 33 return Object.getOwnPropertyNames(target); 34 } 35 }); 36 var check = allowProxyTraps({ 37 get: function(target, propertyKey, receiver) { 38 assert(propertyKey in target, "handler check: " + propertyKey); 39 return target[propertyKey]; 40 } 41 }); 42 var proxy = new Proxy(object, new Proxy(handler, check)); 43 var result = Object.values(proxy); 44 assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|get:a|getOwnPropertyDescriptor:b|get:b|getOwnPropertyDescriptor:c|get:c", log); 45 46 reportCompare(0, 0);