Object-setProperty-non-primitive-key.js (1004B)
1 var g = newGlobal({newCompartment: true}); 2 var dbg = new Debugger(g); 3 var gw = dbg.addDebuggee(g); 4 5 g.eval(` 6 var obj = { 7 p: 0, 8 [Symbol.iterator]: 0, 9 }; 10 `); 11 12 // Return |key| as an object. 13 function toObject(key) { 14 return { 15 [Symbol.toPrimitive]() { 16 return key; 17 } 18 }; 19 } 20 21 let obj = gw.getProperty("obj").return; 22 23 for (let key of obj.getOwnPropertyNames()) { 24 let keyObject = toObject(key); 25 26 g.obj[key] = 1; 27 assertEq(g.obj[key], 1); 28 assertEq(obj.setProperty(key, 2).return, true); 29 assertEq(g.obj[key], 2); 30 31 g.obj[key] = 1; 32 assertEq(g.obj[key], 1); 33 assertEq(obj.setProperty(keyObject, 2).return, true); 34 assertEq(g.obj[key], 2); 35 } 36 37 for (let key of obj.getOwnPropertySymbols()) { 38 let keyObject = toObject(key); 39 40 g.obj[key] = 1; 41 assertEq(g.obj[key], 1); 42 assertEq(obj.setProperty(key, 2).return, true); 43 assertEq(g.obj[key], 2); 44 45 g.obj[key] = 1; 46 assertEq(g.obj[key], 1); 47 assertEq(obj.setProperty(keyObject, 2).return, true); 48 assertEq(g.obj[key], 2); 49 }