summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Symbol/symbol-object-not-unboxed-for-value-to-id.js
blob: d889a77162828c91a305115049526db4c44dee6a (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
// Create a symbol and a wrapper for it.
var s = Symbol();
var so = Object(s);

// Create a symbol-valued property key using |s|.
var o = {[s]: 0};

// The default Symbol.prototype[@@toPrimitive] will unbox the symbol object as needed.
assertEq(o.propertyIsEnumerable(so), true);
assertEq(o.hasOwnProperty(so), true);

// After redefining Symbol.prototype[@@toPrimitive], any calls to the ToPropertyKey
// abstract operation will no longer unbox the symbol object.
Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, {
    value: function() {
        return "foo";
    }
});

// |o| doesn't have a string-valued property named "foo".
assertEq(o.propertyIsEnumerable(so), false);
assertEq(o.hasOwnProperty(so), false);

o.foo = 123;

// After |o.foo| was added, both calls should return true again.
assertEq(o.propertyIsEnumerable(so), true);
assertEq(o.hasOwnProperty(so), true);

if (typeof reportCompare === "function")
    reportCompare(0, 0);