// Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-serializejsonobject description: > Proxy of an object is treated as regular object. info: | JSON.stringify ( value [ , replacer [ , space ] ] ) [...] 12. Return ? SerializeJSONProperty(the empty String, wrapper). SerializeJSONProperty ( key, holder ) [...] 10. If Type(value) is Object and IsCallable(value) is false, then [...] c. Return ? SerializeJSONObject(value). SerializeJSONObject ( value ) [...] 6. Else, a. Let K be ? EnumerableOwnPropertyNames(value, "key"). 7. Let partial be a new empty List. 8. For each element P of K, do a. Let strP be ? SerializeJSONProperty(P, value). features: [Proxy] ---*/ var objectProxy = new Proxy({}, { getOwnPropertyDescriptor: function() { return {value: 1, writable: true, enumerable: true, configurable: true}; }, get: function() { return 1; }, ownKeys: function() { return ['a', 'b']; }, }); assert.sameValue( JSON.stringify(objectProxy), '{"a":1,"b":1}', 'proxy for an object' ); assert.sameValue( JSON.stringify({l1: {l2: objectProxy}}), '{"l1":{"l2":{"a":1,"b":1}}}', 'proxy for an object (nested)' ); var objectProxyProxy = new Proxy(objectProxy, {}); assert.sameValue( JSON.stringify({l1: {l2: objectProxyProxy}}), '{"l1":{"l2":{"a":1,"b":1}}}', 'proxy for a proxy for an object (nested)' ); reportCompare(0, 0);