summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/JSON/stringify/property-order.js
blob: 00bfa481eec1bbbdaf33db89d7bc0a6cf0897777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// Copyright 2019 Kevin Gibbons. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-serializejsonobject
description: JSON.stringify property enumeration order
features: [for-in-order]
---*/

var o = {
  p1: 'p1',
  p2: 'p2',
  p3: 'p3',
};

// This getter will be triggered during enumeration, but the property it adds should not be enumerated.
Object.defineProperty(o, 'add', {
  enumerable: true,
  get: function () {
    o.extra = 'extra';
    return 'add';
  }
});

o.p4 = 'p4';

o[2] = '2';
o[0] = '0';
o[1] = '1';

delete o.p1;
delete o.p3;
o.p1 = 'p1';

var actual = JSON.stringify(o);

var expected = '{"0":"0","1":"1","2":"2","p2":"p2","add":"add","p4":"p4","p1":"p1"}';

assert.sameValue(actual, expected);

reportCompare(0, 0);