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