• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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"))
110
111{
112    try {
113        let arr=[1,2,3,4];
114        arr.length=102600;
115        Reflect.set(arr,"length","aaa",arr);
116    } catch (error) {
117        print(error.name)
118    }
119    try {
120        let arr=[1,2,3,4];
121        arr.length=102600;
122        Reflect.set(arr,"length","aaa");
123    } catch (error) {
124        print(error.name)
125    }
126}
127
128print("builtins reflect end");
129