14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2021 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:class
184514f5e3Sopenharmony_ci * @tc.desc:test class
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issueI5NO8G
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_ciclass Parent {
234514f5e3Sopenharmony_ci    constructor(x) {
244514f5e3Sopenharmony_ci        this.x = x;
254514f5e3Sopenharmony_ci    }
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_ci    static toString() {
284514f5e3Sopenharmony_ci        return 'parent';
294514f5e3Sopenharmony_ci    }
304514f5e3Sopenharmony_ci}
314514f5e3Sopenharmony_ci
324514f5e3Sopenharmony_ciclass Child extends Parent {
334514f5e3Sopenharmony_ci    constructor(x, y) {
344514f5e3Sopenharmony_ci        super(x);
354514f5e3Sopenharmony_ci        this.y = y;
364514f5e3Sopenharmony_ci    }
374514f5e3Sopenharmony_ci
384514f5e3Sopenharmony_ci    value() {
394514f5e3Sopenharmony_ci        return this.x * this.y;
404514f5e3Sopenharmony_ci    }
414514f5e3Sopenharmony_ci
424514f5e3Sopenharmony_ci    static toString() {
434514f5e3Sopenharmony_ci        return super.toString() + ' child';
444514f5e3Sopenharmony_ci    }
454514f5e3Sopenharmony_ci}
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_civar c = new Child(2, 3);
484514f5e3Sopenharmony_ciprint(c.value());
494514f5e3Sopenharmony_ciprint(Child.toString());
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_citry {
524514f5e3Sopenharmony_ci    class C {
534514f5e3Sopenharmony_ci        a = 1;
544514f5e3Sopenharmony_ci    }
554514f5e3Sopenharmony_ci
564514f5e3Sopenharmony_ci    class D extends C {
574514f5e3Sopenharmony_ci        constructo() {
584514f5e3Sopenharmony_ci            delete super.a;
594514f5e3Sopenharmony_ci        }
604514f5e3Sopenharmony_ci    }
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_ci    d = new D();
634514f5e3Sopenharmony_ci} catch (err) {
644514f5e3Sopenharmony_ci    print("PASS");
654514f5e3Sopenharmony_ci}
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_ciclass A {
684514f5e3Sopenharmony_ci    a = 10;
694514f5e3Sopenharmony_ci}
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_ciclass B extends A {
724514f5e3Sopenharmony_ci    constructor() {
734514f5e3Sopenharmony_ci        let a = "a";
744514f5e3Sopenharmony_ci        super[a] = 1;
754514f5e3Sopenharmony_ci    }
764514f5e3Sopenharmony_ci}
774514f5e3Sopenharmony_ci
784514f5e3Sopenharmony_civar par = new A;
794514f5e3Sopenharmony_ciprint(par.a);
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_cifor (let i = 0; i < 2; i++) {
824514f5e3Sopenharmony_ci    class Cls {
834514f5e3Sopenharmony_ci        foo() {
844514f5e3Sopenharmony_ci        }
854514f5e3Sopenharmony_ci    }
864514f5e3Sopenharmony_ci
874514f5e3Sopenharmony_ci    if (i == 0) {
884514f5e3Sopenharmony_ci        Cls.prototype.foo.x = 1;
894514f5e3Sopenharmony_ci    }
904514f5e3Sopenharmony_ci    print(Cls.prototype.foo.x);
914514f5e3Sopenharmony_ci}
924514f5e3Sopenharmony_ci
934514f5e3Sopenharmony_ciclass Class2022 {
944514f5e3Sopenharmony_ci    public = 12;
954514f5e3Sopenharmony_ci    #private = 34;
964514f5e3Sopenharmony_ci    static static_public = 56;
974514f5e3Sopenharmony_ci    static #static_private = 78;
984514f5e3Sopenharmony_ci
994514f5e3Sopenharmony_ci    static test(obj) {
1004514f5e3Sopenharmony_ci        print(obj.public);
1014514f5e3Sopenharmony_ci        print(obj.#private);
1024514f5e3Sopenharmony_ci        print(obj.static_public);
1034514f5e3Sopenharmony_ci        print(obj.#static_private);
1044514f5e3Sopenharmony_ci    }
1054514f5e3Sopenharmony_ci}
1064514f5e3Sopenharmony_ci
1074514f5e3Sopenharmony_civar class2022 = new Class2022();
1084514f5e3Sopenharmony_citry {
1094514f5e3Sopenharmony_ci    Class2022.test(class2022);
1104514f5e3Sopenharmony_ci} catch (err) {
1114514f5e3Sopenharmony_ci    print(err.name);
1124514f5e3Sopenharmony_ci}
1134514f5e3Sopenharmony_citry {
1144514f5e3Sopenharmony_ci    Class2022.test(new Proxy(class2022, {}));
1154514f5e3Sopenharmony_ci} catch (err) {
1164514f5e3Sopenharmony_ci    print(err.name);
1174514f5e3Sopenharmony_ci}
1184514f5e3Sopenharmony_ci
1194514f5e3Sopenharmony_cifunction foo() {
1204514f5e3Sopenharmony_ci
1214514f5e3Sopenharmony_ci}
1224514f5e3Sopenharmony_ci
1234514f5e3Sopenharmony_ciclass Class2024 {
1244514f5e3Sopenharmony_ci    static #g;
1254514f5e3Sopenharmony_ci    a = [1, 2, 3];
1264514f5e3Sopenharmony_ci    #c = foo;
1274514f5e3Sopenharmony_ci}
1284514f5e3Sopenharmony_ci
1294514f5e3Sopenharmony_civar class2024 = new Class2024();
1304514f5e3Sopenharmony_ciprint("test successful!");
1314514f5e3Sopenharmony_ci
1324514f5e3Sopenharmony_ciclass StaticTest {
1334514f5e3Sopenharmony_ci    static set a(a) {
1344514f5e3Sopenharmony_ci        print(a);
1354514f5e3Sopenharmony_ci    }
1364514f5e3Sopenharmony_ci
1374514f5e3Sopenharmony_ci    static a = 1; // expect no print
1384514f5e3Sopenharmony_ci    static length = 1; // expect no TypeError
1394514f5e3Sopenharmony_ci}
1404514f5e3Sopenharmony_ci
1414514f5e3Sopenharmony_cilet o = {
1424514f5e3Sopenharmony_ci    toString() {
1434514f5e3Sopenharmony_ci        class C {
1444514f5e3Sopenharmony_ci            #p(a, b) {
1454514f5e3Sopenharmony_ci            }
1464514f5e3Sopenharmony_ci        }
1474514f5e3Sopenharmony_ci    }
1484514f5e3Sopenharmony_ci}
1494514f5e3Sopenharmony_cilet o1 = {
1504514f5e3Sopenharmony_ci    [o](a, b) {
1514514f5e3Sopenharmony_ci    }
1524514f5e3Sopenharmony_ci}
1534514f5e3Sopenharmony_ciprint("test privateproperty class sucecess")
1544514f5e3Sopenharmony_ci
1554514f5e3Sopenharmony_ci// TypeError
1564514f5e3Sopenharmony_citry {
1574514f5e3Sopenharmony_ci    const v13 = new ArrayBuffer(16);
1584514f5e3Sopenharmony_ci
1594514f5e3Sopenharmony_ci    function F14(a16, a17) {
1604514f5e3Sopenharmony_ci        if (!new.target) {
1614514f5e3Sopenharmony_ci            throw 'must be called with new';
1624514f5e3Sopenharmony_ci        }
1634514f5e3Sopenharmony_ci
1644514f5e3Sopenharmony_ci        function f18(a19, a20, a21) {
1654514f5e3Sopenharmony_ci        }
1664514f5e3Sopenharmony_ci
1674514f5e3Sopenharmony_ci        const v23 = `-2`;
1684514f5e3Sopenharmony_ci
1694514f5e3Sopenharmony_ci        async function f25(a26, a27, a28, a29) {
1704514f5e3Sopenharmony_ci            return v23;
1714514f5e3Sopenharmony_ci        }
1724514f5e3Sopenharmony_ci
1734514f5e3Sopenharmony_ci        f25();
1744514f5e3Sopenharmony_ci        const v33 = new BigUint64Array(31);
1754514f5e3Sopenharmony_ci        const o34 = {
1764514f5e3Sopenharmony_ci            ...v33,
1774514f5e3Sopenharmony_ci            ...v33,
1784514f5e3Sopenharmony_ci        };
1794514f5e3Sopenharmony_ci        Object.defineProperty(o34, 4, { set: f18 });
1804514f5e3Sopenharmony_ci    }
1814514f5e3Sopenharmony_ci
1824514f5e3Sopenharmony_ci    const v35 = new F14(ArrayBuffer);
1834514f5e3Sopenharmony_ci    const t33 = 64n;
1844514f5e3Sopenharmony_ci    new t33(v35, v13);
1854514f5e3Sopenharmony_ci} catch (err) {
1864514f5e3Sopenharmony_ci    print(err.name);
1874514f5e3Sopenharmony_ci}
1884514f5e3Sopenharmony_ci
1894514f5e3Sopenharmony_ci// TypeError
1904514f5e3Sopenharmony_citry {
1914514f5e3Sopenharmony_ci    class C0 {
1924514f5e3Sopenharmony_ci        constructor(a2) {
1934514f5e3Sopenharmony_ci            const v5 = new ArrayBuffer(10);
1944514f5e3Sopenharmony_ci
1954514f5e3Sopenharmony_ci            function F6(a8, a9) {
1964514f5e3Sopenharmony_ci                if (!new.target) {
1974514f5e3Sopenharmony_ci                    throw 'must be called with new';
1984514f5e3Sopenharmony_ci                }
1994514f5e3Sopenharmony_ci                const v12 = new BigUint64Array(32);
2004514f5e3Sopenharmony_ci                const o13 = {
2014514f5e3Sopenharmony_ci                    ...v12,
2024514f5e3Sopenharmony_ci                };
2034514f5e3Sopenharmony_ci                Object.defineProperty(o13, 4, { set: F6 });
2044514f5e3Sopenharmony_ci            }
2054514f5e3Sopenharmony_ci
2064514f5e3Sopenharmony_ci            new F6(ArrayBuffer, v5);
2074514f5e3Sopenharmony_ci            new a2();
2084514f5e3Sopenharmony_ci        }
2094514f5e3Sopenharmony_ci    }
2104514f5e3Sopenharmony_ci
2114514f5e3Sopenharmony_ci    new C0(C0);
2124514f5e3Sopenharmony_ci} catch (err) {
2134514f5e3Sopenharmony_ci    print(err.name);
2144514f5e3Sopenharmony_ci}
2154514f5e3Sopenharmony_ci
2164514f5e3Sopenharmony_ci// TypeError
2174514f5e3Sopenharmony_citry {
2184514f5e3Sopenharmony_ci    const v1 = new WeakSet();
2194514f5e3Sopenharmony_ci
2204514f5e3Sopenharmony_ci    function f2() {
2214514f5e3Sopenharmony_ci        return v1;
2224514f5e3Sopenharmony_ci    }
2234514f5e3Sopenharmony_ci
2244514f5e3Sopenharmony_ci    new SharedArrayBuffer(24);
2254514f5e3Sopenharmony_ci    const o8 = {};
2264514f5e3Sopenharmony_ci    for (let i11 = -57, i12 = 10; i11 < i12; i12--) {
2274514f5e3Sopenharmony_ci        o8[i12] >>= i12;
2284514f5e3Sopenharmony_ci    }
2294514f5e3Sopenharmony_ci
2304514f5e3Sopenharmony_ci    class C20 extends f2 {
2314514f5e3Sopenharmony_ci    }
2324514f5e3Sopenharmony_ci
2334514f5e3Sopenharmony_ci    new C20(83.14, 4.14, -7.50);
2344514f5e3Sopenharmony_ci    C20(54.1);
2354514f5e3Sopenharmony_ci    BigUint64Array();
2364514f5e3Sopenharmony_ci} catch (err) {
2374514f5e3Sopenharmony_ci    print(err.name);
2384514f5e3Sopenharmony_ci}
239