1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16/* 17 * @tc.name:builtinsreflect 18 * @tc.desc:test builtins reflect 19 * @tc.type: FUNC 20 * @tc.require: issueI8SXHD 21 */ 22print("builtins reflect start"); 23 24// test1 -- reflect set length 25var y = []; 26Object.defineProperty(y, 1, { value: 42, configurable: false }); 27var tag1 = Reflect.set(y, 'length', 0); 28var tag2 = Reflect.set(y, 'length', 5); 29print(tag1); 30print(tag2); 31 32const v0 = 102630708; 33let v55 = []; 34let v56 = Object.create(v55) 35Reflect.set(v56, "length", v0) 36Reflect.set(v55, "length", v0, v56) 37print("v56.length",v56.length) 38 39var global = this; 40var sym = Symbol("gaga"); 41var objects = [ 42 {}, 43 [], 44 function() {}, 45 function() { 46 return arguments; 47 }(), 48 Object(1), 49 Object(true), 50 Object('bla'), 51 new Date, 52 new RegExp, 53 new Set, 54 new Map, 55 new WeakMap, 56 new WeakSet, 57 new ArrayBuffer(10), 58 new Int32Array(5), 59 Object, 60 Function, 61 Date, 62 RegExp, 63 global 64]; 65 66function prepare(target) { 67 target["bla"] = true; 68 target[4] = 42; 69 target[sym] = "foo"; 70 target["noconf"] = 43; 71 Object.defineProperty(target, "noconf", 72 { configurable: false }); 73 Object.defineProperty(target, "nowrite", 74 { writable: false, configurable: true, value: 44 }); 75 Object.defineProperty(target, "getter", 76 { get: function () {return this.bla}, configurable: true }); 77 Object.defineProperty(target, "setter", 78 { set: function (x) {this.gaga = x}, configurable: true }); 79 Object.defineProperty(target, "setter2", 80 { set: function (x) {}, configurable: true }); 81} 82 83(function testReflectGetOnObject() { 84 let i = 0; 85 for (let target of objects) { 86 prepare(target); 87 if (true == Reflect.get(target, "bla") && 88 42 == Reflect.get(target, 4) && 89 42 == Reflect.get(target, "4") && 90 "foo" == Reflect.get(target, sym) && 91 43 == Reflect.get(target, "noconf") && 92 true == Reflect.get(target, "getter") && 93 undefined == Reflect.get(target, "setter") && 94 undefined == Reflect.get(target, "foo") && 95 undefined == Reflect.get(target, 333)) { 96 print(i + "success_1"); 97 } 98 let proto = target.__proto__; 99 target.__proto__ = { get foo() {return this.bla} }; 100 if (true == Reflect.get(target, "foo")) { 101 print(i + "success_2"); 102 } 103 target.__proto__ = proto; 104 i++; 105 } 106})(); 107let obj = {name:"tom"}; 108let pxobj = new Proxy(obj,{}); 109print(Reflect.get(pxobj,"name")) 110print("builtins reflect end"); 111