Implement Reflect object (#3036)

JerryScript-DCO-1.0-Signed-off-by: Virag Orkenyi orkvi@inf.u-szeged.hu
This commit is contained in:
Virag Orkenyi
2019-10-21 13:46:29 +02:00
committed by Robert Fancsik
parent edf66f4e9b
commit 3fb6f15730
19 changed files with 438 additions and 8 deletions
+18
View File
@@ -0,0 +1,18 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
assert (Reflect['apply'](Math.floor, undefined, [1.75]) === 1);
assert (Reflect['apply'](String.fromCharCode, undefined, [104, 101, 108, 108, 111]) === "hello");
assert (Reflect['apply'](RegExp.prototype.exec, /ab/, ['confabulation']).index === 4);
assert (Reflect['apply'](''.charAt, 'ponies', [3]) === "i");
@@ -0,0 +1,23 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var obj = {};
assert(Reflect['defineProperty'](obj, 'x', {value: 7}) === true);
assert(Reflect['defineProperty'](obj, 'y', {value: function() {throw 5}}) === true);
try {
Reflect['defineProperty'](obj, {toString: function() {throw new TypeError(5)}}, {value: 8});
assert(false);
} catch (e) {
assert(e instanceof TypeError);
}
@@ -0,0 +1,21 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var object1 = {
property1: 42
};
assert(Reflect.getOwnPropertyDescriptor(object1, 'property1').value === 42);
assert(Reflect.getOwnPropertyDescriptor(object1, 'property2') === undefined);
assert(Reflect.getOwnPropertyDescriptor(object1, 'property1').writable === true);
@@ -0,0 +1,17 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
assert (Reflect['getPrototypeOf']({}) === Object.prototype);
assert (Reflect['getPrototypeOf'](Object.create(null)) === null);
assert (Reflect['getPrototypeOf'](Object.prototype) === null);
@@ -0,0 +1,22 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var empty = {};
assert (Reflect['isExtensible'](empty) === true);
Reflect.preventExtensions(empty);
assert (Reflect['isExtensible'](empty) === false);
var sealed = Object.seal({});
assert (Reflect['isExtensible'](sealed) === false);
@@ -0,0 +1,20 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var object1 = {};
assert (Reflect['isExtensible'](object1) === true);
Reflect.preventExtensions(object1);
assert (Reflect['isExtensible'](object1) === false);
@@ -0,0 +1,21 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var object1 = {};
assert(Reflect.setPrototypeOf(object1, Object.prototype) === true);
assert(Reflect.setPrototypeOf(object1, null) === true);
var object2 = {};
assert(Reflect.setPrototypeOf(Object.freeze(object2), null) === false);