observable-operations.js (1303B)
1 // Copyright (C) 2016 Jordan Harband. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 description: Object.getOwnPropertyDescriptors should perform observable operations in the correct order 6 esid: sec-object.getownpropertydescriptors 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 getOwnPropertyDescriptor: function(target, propertyKey) { 20 assert.sameValue(target, object, "getOwnPropertyDescriptor"); 21 log += "|getOwnPropertyDescriptor:" + propertyKey; 22 return Object.getOwnPropertyDescriptor(target, propertyKey); 23 }, 24 ownKeys: function(target) { 25 assert.sameValue(target, object, "ownKeys"); 26 log += "|ownKeys"; 27 return Object.getOwnPropertyNames(target); 28 } 29 }); 30 var check = allowProxyTraps({ 31 get: function(target, propertyKey, receiver) { 32 assert(propertyKey in target, "handler check: " + propertyKey); 33 return target[propertyKey]; 34 } 35 }); 36 var proxy = new Proxy(object, new Proxy(handler, check)); 37 var result = Object.getOwnPropertyDescriptors(proxy); 38 assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|getOwnPropertyDescriptor:b|getOwnPropertyDescriptor:c", 'log'); 39 40 reportCompare(0, 0);