[ES6] Implement Reflect.has
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / reflect-has.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 function shouldThrow(func, message) {
7     var error = null;
8     try {
9         func();
10     } catch (e) {
11         error = e;
12     }
13     if (!error)
14         throw new Error("not thrown.");
15     if (String(error) !== message)
16         throw new Error("bad error: " + String(error));
17 }
18
19 shouldBe(Reflect.has.length, 2);
20
21 shouldThrow(() => {
22     Reflect.has("hello", 42);
23 }, `TypeError: Reflect.has requires the first argument be an object`);
24
25 var object = { hello: 42 };
26 shouldBe(Reflect.has(object, 'hello'), true);
27 shouldBe(Reflect.has(object, 'world'), false);
28 shouldBe(Reflect.has(object, 'prototype'), false);
29 shouldBe(Reflect.has(object, '__proto__'), true);
30 shouldBe(Reflect.has(object, 'hasOwnProperty'), true);
31 shouldBe(Reflect.deleteProperty(object, 'hello'), true);
32 shouldBe(Reflect.has(object, 'hello'), false);
33
34 shouldBe(Reflect.has([], 'length'), true);
35 shouldBe(Reflect.has([0,1,2], 0), true);
36 shouldBe(Reflect.has([0,1,2], 200), false);
37
38 var object = {
39     [Symbol.iterator]: 42
40 };
41 shouldBe(Reflect.has(object, Symbol.iterator), true);
42 shouldBe(Reflect.has(object, Symbol.unscopables), false);
43 shouldBe(Reflect.deleteProperty(object, Symbol.iterator), true);
44 shouldBe(Reflect.has(object, Symbol.iterator), false);
45
46 var toPropertyKey = {
47     toString() {
48         throw new Error('toString called.');
49     }
50 };
51
52 shouldThrow(() => {
53     Reflect.has("hello", toPropertyKey);
54 }, `TypeError: Reflect.has requires the first argument be an object`);
55
56 shouldThrow(() => {
57     Reflect.has({}, toPropertyKey);
58 }, `Error: toString called.`);
59
60 var toPropertyKey = {
61     toString() {
62         return 'ok';
63     }
64 };
65 shouldBe(Reflect.has({ 'ok': 42 }, toPropertyKey), true);