[ES6] Add Reflect namespace and add Reflect.deleteProperty
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / reflect-delete-property.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.deleteProperty.length, 2);
20
21 shouldThrow(() => {
22     Reflect.deleteProperty("hello", 42);
23 }, `TypeError: Reflect.deleteProperty requires the first argument be a object`);
24
25 var object = { hello: 42 };
26 shouldBe(object.hello, 42);
27 shouldBe(object.hasOwnProperty('hello'), true);
28 shouldBe(Reflect.deleteProperty(object, 'hello'), true);
29 shouldBe(object.hasOwnProperty('hello'), false);
30 shouldBe(Reflect.deleteProperty(object, 'hasOwnProperty'), true);
31 shouldBe(object.hasOwnProperty('hasOwnProperty'), false);
32
33 shouldBe(Reflect.deleteProperty([], 'length'), false);
34 shouldBe(Reflect.deleteProperty([0,1,2], 0), true);
35
36 var object = {
37     [Symbol.iterator]: 42
38 };
39 shouldBe(object.hasOwnProperty(Symbol.iterator), true);
40 shouldBe(object[Symbol.iterator], 42);
41 shouldBe(Reflect.deleteProperty(object, Symbol.iterator), true);
42 shouldBe(object.hasOwnProperty(Symbol.iterator), false);
43
44 var toPropertyKey = {
45     toString() {
46         throw new Error('toString called.');
47     }
48 };
49
50 shouldThrow(() => {
51     Reflect.deleteProperty("hello", toPropertyKey);
52 }, `TypeError: Reflect.deleteProperty requires the first argument be a object`);
53
54 shouldThrow(() => {
55     Reflect.deleteProperty({}, toPropertyKey);
56 }, `Error: toString called.`);