14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2022 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:builtins
184514f5e3Sopenharmony_ci * @tc.desc:test builtins
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issueI5NO8G
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_civar arrayLong = {"1" : "fds", "wode" : "fff"};
234514f5e3Sopenharmony_ciObject.defineProperty(arrayLong, "2", {
244514f5e3Sopenharmony_ci    configurable:true,
254514f5e3Sopenharmony_ci    enumerable:true,
264514f5e3Sopenharmony_ci    value:"ggg",
274514f5e3Sopenharmony_ci    writable:true
284514f5e3Sopenharmony_ci})
294514f5e3Sopenharmony_cifor (const key in arrayLong) {
304514f5e3Sopenharmony_ci    print(key);
314514f5e3Sopenharmony_ci    delete arrayLong[2];
324514f5e3Sopenharmony_ci}
334514f5e3Sopenharmony_ci
344514f5e3Sopenharmony_ciObject.defineProperty(arrayLong, "3", {
354514f5e3Sopenharmony_ci    configurable:true,
364514f5e3Sopenharmony_ci    enumerable:true,
374514f5e3Sopenharmony_ci    value:"ggg",
384514f5e3Sopenharmony_ci    writable:true
394514f5e3Sopenharmony_ci})
404514f5e3Sopenharmony_cifor (const key in arrayLong) {
414514f5e3Sopenharmony_ci    print(key);
424514f5e3Sopenharmony_ci    Object.defineProperty(arrayLong, "3", {
434514f5e3Sopenharmony_ci        configurable:true,
444514f5e3Sopenharmony_ci        enumerable:false,
454514f5e3Sopenharmony_ci        value:"fff",
464514f5e3Sopenharmony_ci        writable:true
474514f5e3Sopenharmony_ci    })
484514f5e3Sopenharmony_ci}
494514f5e3Sopenharmony_ci
504514f5e3Sopenharmony_ciObject.defineProperty(arrayLong, "4", {
514514f5e3Sopenharmony_ci    configurable:true,
524514f5e3Sopenharmony_ci    enumerable:false,
534514f5e3Sopenharmony_ci    value:"ggg",
544514f5e3Sopenharmony_ci    writable:true
554514f5e3Sopenharmony_ci})
564514f5e3Sopenharmony_cifor (const key in arrayLong) {
574514f5e3Sopenharmony_ci    print(key);
584514f5e3Sopenharmony_ci    Object.defineProperty(arrayLong, "4", {
594514f5e3Sopenharmony_ci        configurable:true,
604514f5e3Sopenharmony_ci        enumerable:true,
614514f5e3Sopenharmony_ci        value:"fff",
624514f5e3Sopenharmony_ci        writable:true
634514f5e3Sopenharmony_ci    })
644514f5e3Sopenharmony_ci    arrayLong.sss = "fds";
654514f5e3Sopenharmony_ci}
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_ciconst targetObj = {
684514f5e3Sopenharmony_ci    _secret: 'easily scared',
694514f5e3Sopenharmony_ci    eyeCount: 4
704514f5e3Sopenharmony_ci};
714514f5e3Sopenharmony_ci
724514f5e3Sopenharmony_ciObject.defineProperty(targetObj, "wode", {
734514f5e3Sopenharmony_ci    configurable:true,
744514f5e3Sopenharmony_ci    enumerable:false,
754514f5e3Sopenharmony_ci    value:"ggg",
764514f5e3Sopenharmony_ci    writable:true
774514f5e3Sopenharmony_ci})
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_ciconst proxy_has = new Proxy(targetObj, {
804514f5e3Sopenharmony_ci    has: (target, key) => {
814514f5e3Sopenharmony_ci        print("key==",key)
824514f5e3Sopenharmony_ci        if (key.includes('_')) {
834514f5e3Sopenharmony_ci            return false;
844514f5e3Sopenharmony_ci        }
854514f5e3Sopenharmony_ci        return key in target;
864514f5e3Sopenharmony_ci    }
874514f5e3Sopenharmony_ci})
884514f5e3Sopenharmony_ci
894514f5e3Sopenharmony_cifor (const key in proxy_has) {
904514f5e3Sopenharmony_ci    print(key);
914514f5e3Sopenharmony_ci    delete proxy_has.eyeCount;
924514f5e3Sopenharmony_ci}
934514f5e3Sopenharmony_ci
944514f5e3Sopenharmony_civar view = new Int16Array(3);
954514f5e3Sopenharmony_ciview[1] = 23;
964514f5e3Sopenharmony_ciview[2] = 45;
974514f5e3Sopenharmony_ciview[3] = 67;
984514f5e3Sopenharmony_ciview.hhh = "wode";
994514f5e3Sopenharmony_cifor (const key in view) {
1004514f5e3Sopenharmony_ci    print(key);
1014514f5e3Sopenharmony_ci}
1024514f5e3Sopenharmony_cifor (const key in view) {
1034514f5e3Sopenharmony_ci    print(key);
1044514f5e3Sopenharmony_ci    delete view.hhh;
1054514f5e3Sopenharmony_ci}
1064514f5e3Sopenharmony_ci
1074514f5e3Sopenharmony_citry {
1084514f5e3Sopenharmony_ci    const obj = {};
1094514f5e3Sopenharmony_ci    obj.getOwnPropertyDescriptor = {};
1104514f5e3Sopenharmony_ci    const proxy = new Proxy(new Array(100), obj);
1114514f5e3Sopenharmony_ci    for (const i in proxy) {}
1124514f5e3Sopenharmony_ci} catch (err) {
1134514f5e3Sopenharmony_ci    print(err instanceof TypeError);
1144514f5e3Sopenharmony_ci}
1154514f5e3Sopenharmony_ci
1164514f5e3Sopenharmony_ci// PoC testcase
1174514f5e3Sopenharmony_citry {
1184514f5e3Sopenharmony_ci    class C {
1194514f5e3Sopenharmony_ci
1204514f5e3Sopenharmony_ci    }
1214514f5e3Sopenharmony_ci    C.getPrototypeOf = 3014;
1224514f5e3Sopenharmony_ci    const proxy = new Proxy([7], C);
1234514f5e3Sopenharmony_ci    for (const v in proxy) {
1244514f5e3Sopenharmony_ci
1254514f5e3Sopenharmony_ci    }
1264514f5e3Sopenharmony_ci} catch (err) {
1274514f5e3Sopenharmony_ci    print(err instanceof TypeError);
1284514f5e3Sopenharmony_ci}
1294514f5e3Sopenharmony_ci
1304514f5e3Sopenharmony_ci// Redefine testcast
1314514f5e3Sopenharmony_ciObject.prototype.prop0 = 0;
1324514f5e3Sopenharmony_cilet obj = {prop1:1,prop2:2};
1334514f5e3Sopenharmony_ciObject.defineProperty(obj,
1344514f5e3Sopenharmony_ci    'prop0', { enumerable: false, configurable: true, value: 0 });
1354514f5e3Sopenharmony_cifor (var p in obj)
1364514f5e3Sopenharmony_ci    print(p);
1374514f5e3Sopenharmony_ci
1384514f5e3Sopenharmony_ci
1394514f5e3Sopenharmony_ci
140