summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Reflect/has.js
blob: 6019a61ed3ae67ebb6a8c882b5e00dad3c6a4711 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/ */

// Reflect.has is identical to the `in` operator.
assertEq(Reflect.has({x: 0}, "x"), true);
assertEq(Reflect.has({x: 0}, "y"), false);
assertEq(Reflect.has({x: 0}, "toString"), true);

// The target can be an array; Reflect.has works on array elements.
var arr = ["zero"];
arr[10000] = 0;
assertEq(Reflect.has(arr, "10000"), true);
assertEq(Reflect.has(arr, 10000), true);
assertEq(Reflect.has(arr, "-0"), false);
assertEq(Reflect.has(arr, -0), true);

// And string objects (though not string primitives; see target.js).
var str = new String("hello");
assertEq(Reflect.has(str, "4"), true);
assertEq(Reflect.has(str, "-0"), false);
assertEq(Reflect.has(str, -0), true);

// Proxy without .has() handler method
var obj = {get prop() {}};
for (var i = 0; i < 2; i++) {
    obj = new Proxy(obj, {});
    assertEq(Reflect.has(obj, "prop"), true);
    assertEq(Reflect.has(obj, "nope"), false);
}

// Proxy with .has() handler method
obj = new Proxy({}, {
    has(t, k) { return k.startsWith("door"); }
});
assertEq(Reflect.has(obj, "doorbell"), true);
assertEq(Reflect.has(obj, "dormitory"), false);


// For more Reflect.has tests, see target.js and propertyKeys.js.

reportCompare(0, 0);