14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ci/* 174514f5e3Sopenharmony_ci * @tc.name:builtinsreflect 184514f5e3Sopenharmony_ci * @tc.desc:test builtins reflect 194514f5e3Sopenharmony_ci * @tc.type: FUNC 204514f5e3Sopenharmony_ci * @tc.require: issueI8SXHD 214514f5e3Sopenharmony_ci */ 224514f5e3Sopenharmony_ciprint("builtins reflect start"); 234514f5e3Sopenharmony_ci 244514f5e3Sopenharmony_ci// test1 -- reflect set length 254514f5e3Sopenharmony_civar y = []; 264514f5e3Sopenharmony_ciObject.defineProperty(y, 1, { value: 42, configurable: false }); 274514f5e3Sopenharmony_civar tag1 = Reflect.set(y, 'length', 0); 284514f5e3Sopenharmony_civar tag2 = Reflect.set(y, 'length', 5); 294514f5e3Sopenharmony_ciprint(tag1); 304514f5e3Sopenharmony_ciprint(tag2); 314514f5e3Sopenharmony_ci 324514f5e3Sopenharmony_ciconst v0 = 102630708; 334514f5e3Sopenharmony_cilet v55 = []; 344514f5e3Sopenharmony_cilet v56 = Object.create(v55) 354514f5e3Sopenharmony_ciReflect.set(v56, "length", v0) 364514f5e3Sopenharmony_ciReflect.set(v55, "length", v0, v56) 374514f5e3Sopenharmony_ciprint("v56.length",v56.length) 384514f5e3Sopenharmony_ci 394514f5e3Sopenharmony_civar global = this; 404514f5e3Sopenharmony_civar sym = Symbol("gaga"); 414514f5e3Sopenharmony_civar objects = [ 424514f5e3Sopenharmony_ci {}, 434514f5e3Sopenharmony_ci [], 444514f5e3Sopenharmony_ci function() {}, 454514f5e3Sopenharmony_ci function() { 464514f5e3Sopenharmony_ci return arguments; 474514f5e3Sopenharmony_ci }(), 484514f5e3Sopenharmony_ci Object(1), 494514f5e3Sopenharmony_ci Object(true), 504514f5e3Sopenharmony_ci Object('bla'), 514514f5e3Sopenharmony_ci new Date, 524514f5e3Sopenharmony_ci new RegExp, 534514f5e3Sopenharmony_ci new Set, 544514f5e3Sopenharmony_ci new Map, 554514f5e3Sopenharmony_ci new WeakMap, 564514f5e3Sopenharmony_ci new WeakSet, 574514f5e3Sopenharmony_ci new ArrayBuffer(10), 584514f5e3Sopenharmony_ci new Int32Array(5), 594514f5e3Sopenharmony_ci Object, 604514f5e3Sopenharmony_ci Function, 614514f5e3Sopenharmony_ci Date, 624514f5e3Sopenharmony_ci RegExp, 634514f5e3Sopenharmony_ci global 644514f5e3Sopenharmony_ci]; 654514f5e3Sopenharmony_ci 664514f5e3Sopenharmony_cifunction prepare(target) { 674514f5e3Sopenharmony_ci target["bla"] = true; 684514f5e3Sopenharmony_ci target[4] = 42; 694514f5e3Sopenharmony_ci target[sym] = "foo"; 704514f5e3Sopenharmony_ci target["noconf"] = 43; 714514f5e3Sopenharmony_ci Object.defineProperty(target, "noconf", 724514f5e3Sopenharmony_ci { configurable: false }); 734514f5e3Sopenharmony_ci Object.defineProperty(target, "nowrite", 744514f5e3Sopenharmony_ci { writable: false, configurable: true, value: 44 }); 754514f5e3Sopenharmony_ci Object.defineProperty(target, "getter", 764514f5e3Sopenharmony_ci { get: function () {return this.bla}, configurable: true }); 774514f5e3Sopenharmony_ci Object.defineProperty(target, "setter", 784514f5e3Sopenharmony_ci { set: function (x) {this.gaga = x}, configurable: true }); 794514f5e3Sopenharmony_ci Object.defineProperty(target, "setter2", 804514f5e3Sopenharmony_ci { set: function (x) {}, configurable: true }); 814514f5e3Sopenharmony_ci} 824514f5e3Sopenharmony_ci 834514f5e3Sopenharmony_ci(function testReflectGetOnObject() { 844514f5e3Sopenharmony_ci let i = 0; 854514f5e3Sopenharmony_ci for (let target of objects) { 864514f5e3Sopenharmony_ci prepare(target); 874514f5e3Sopenharmony_ci if (true == Reflect.get(target, "bla") && 884514f5e3Sopenharmony_ci 42 == Reflect.get(target, 4) && 894514f5e3Sopenharmony_ci 42 == Reflect.get(target, "4") && 904514f5e3Sopenharmony_ci "foo" == Reflect.get(target, sym) && 914514f5e3Sopenharmony_ci 43 == Reflect.get(target, "noconf") && 924514f5e3Sopenharmony_ci true == Reflect.get(target, "getter") && 934514f5e3Sopenharmony_ci undefined == Reflect.get(target, "setter") && 944514f5e3Sopenharmony_ci undefined == Reflect.get(target, "foo") && 954514f5e3Sopenharmony_ci undefined == Reflect.get(target, 333)) { 964514f5e3Sopenharmony_ci print(i + "success_1"); 974514f5e3Sopenharmony_ci } 984514f5e3Sopenharmony_ci let proto = target.__proto__; 994514f5e3Sopenharmony_ci target.__proto__ = { get foo() {return this.bla} }; 1004514f5e3Sopenharmony_ci if (true == Reflect.get(target, "foo")) { 1014514f5e3Sopenharmony_ci print(i + "success_2"); 1024514f5e3Sopenharmony_ci } 1034514f5e3Sopenharmony_ci target.__proto__ = proto; 1044514f5e3Sopenharmony_ci i++; 1054514f5e3Sopenharmony_ci } 1064514f5e3Sopenharmony_ci})(); 1074514f5e3Sopenharmony_cilet obj = {name:"tom"}; 1084514f5e3Sopenharmony_cilet pxobj = new Proxy(obj,{}); 1094514f5e3Sopenharmony_ciprint(Reflect.get(pxobj,"name")) 1104514f5e3Sopenharmony_ciprint("builtins reflect end"); 111