13af6ab5fSopenharmony_ci/*
23af6ab5fSopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
33af6ab5fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43af6ab5fSopenharmony_ci * you may not use this file except in compliance with the License.
53af6ab5fSopenharmony_ci * You may obtain a copy of the License at
63af6ab5fSopenharmony_ci *
73af6ab5fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
83af6ab5fSopenharmony_ci *
93af6ab5fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103af6ab5fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113af6ab5fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123af6ab5fSopenharmony_ci * See the License for the specific language governing permissions and
133af6ab5fSopenharmony_ci * limitations under the License.
143af6ab5fSopenharmony_ci */
153af6ab5fSopenharmony_ci
163af6ab5fSopenharmony_ci/// Global
173af6ab5fSopenharmony_cieval('console.log("foo")');
183af6ab5fSopenharmony_cilet inf = Infinity;
193af6ab5fSopenharmony_cilet nan = NaN;
203af6ab5fSopenharmony_ciisFinite(1);
213af6ab5fSopenharmony_ciisNaN(2);
223af6ab5fSopenharmony_ciparseFloat('3');
233af6ab5fSopenharmony_ciparseInt('4', 10);
243af6ab5fSopenharmony_ciencodeURI('');
253af6ab5fSopenharmony_ciencodeURIComponent('');
263af6ab5fSopenharmony_cidecodeURI('');
273af6ab5fSopenharmony_cidecodeURIComponent('');
283af6ab5fSopenharmony_ciescape('');
293af6ab5fSopenharmony_ciunescape('');
303af6ab5fSopenharmony_ci
313af6ab5fSopenharmony_ciglobal.eval('console.log("foo")');
323af6ab5fSopenharmony_ciglobalThis.eval('console.log("foo")');
333af6ab5fSopenharmony_ciconst evl = "eval('console.log(1)')";
343af6ab5fSopenharmony_ciconst res: void = Function(evl)();
353af6ab5fSopenharmony_ciconst arr1 = ['foo', 'foo', 'foo'];
363af6ab5fSopenharmony_ci
373af6ab5fSopenharmony_ciclass C {}
383af6ab5fSopenharmony_cilet c = new C();
393af6ab5fSopenharmony_ciinterface Obj {
403af6ab5fSopenharmony_ci    a: string;
413af6ab5fSopenharmony_ci    b: number;
423af6ab5fSopenharmony_ci    c: boolean;
433af6ab5fSopenharmony_ci}
443af6ab5fSopenharmony_ciconst object1: Obj = {
453af6ab5fSopenharmony_ci    a: 'somestring',
463af6ab5fSopenharmony_ci    b: 42,
473af6ab5fSopenharmony_ci    c: false,
483af6ab5fSopenharmony_ci};
493af6ab5fSopenharmony_ci
503af6ab5fSopenharmony_ci/// Object
513af6ab5fSopenharmony_ci/// Object . __proto__ ()
523af6ab5fSopenharmony_ci/// Object . __defineGetter__ ()
533af6ab5fSopenharmony_ci/// Object . __defineSetter__ ()
543af6ab5fSopenharmony_ci/// Object . __lookupGetter__ ()
553af6ab5fSopenharmony_ci/// Object . __lookupSetter__ ()
563af6ab5fSopenharmony_ciObject.assign<C, C>(c, c);
573af6ab5fSopenharmony_ciObject.create(c);
583af6ab5fSopenharmony_ciObject.defineProperties<C>(c, {});
593af6ab5fSopenharmony_ciObject.defineProperty<C>(c, 'p', c);
603af6ab5fSopenharmony_ciObject.entries<C>([]);
613af6ab5fSopenharmony_ciObject.freeze(() => {});
623af6ab5fSopenharmony_ciObject.fromEntries<number>([]); // OK
633af6ab5fSopenharmony_ciObject.getOwnPropertyDescriptor(c, 'p');
643af6ab5fSopenharmony_ciObject.getOwnPropertyDescriptors<C>(c);
653af6ab5fSopenharmony_ciObject.getOwnPropertySymbols(c);
663af6ab5fSopenharmony_ciObject.getPrototypeOf(c);
673af6ab5fSopenharmony_ciObject.hasOwnProperty('p');
683af6ab5fSopenharmony_ciObject.is(c, c);
693af6ab5fSopenharmony_ciObject.isExtensible(c);
703af6ab5fSopenharmony_ciObject.isFrozen(c);
713af6ab5fSopenharmony_ciObject.isPrototypeOf(c);
723af6ab5fSopenharmony_ciObject.isSealed(c);
733af6ab5fSopenharmony_ciObject.preventExtensions<C>(c);
743af6ab5fSopenharmony_ciObject.propertyIsEnumerable('p');
753af6ab5fSopenharmony_ciObject.seal<C>(c);
763af6ab5fSopenharmony_ciObject.setPrototypeOf(c, c);
773af6ab5fSopenharmony_ciconsole.log(Object.getOwnPropertyNames(object1));
783af6ab5fSopenharmony_ciconsole.log(Object.hasOwn(object1, 'a'));
793af6ab5fSopenharmony_ciconsole.log(Object.hasOwn(object1, 'toString'));
803af6ab5fSopenharmony_ciconsole.log(Object.keys(object1));
813af6ab5fSopenharmony_ciconsole.log(Object.values(object1));
823af6ab5fSopenharmony_ciconsole.log(Object.entries(object1));
833af6ab5fSopenharmony_ci
843af6ab5fSopenharmony_ci/// Reflect
853af6ab5fSopenharmony_ciReflect.apply<C, number[], void>(() => {}, c, []);
863af6ab5fSopenharmony_ciReflect.construct<number[], C>(C, []);
873af6ab5fSopenharmony_ciReflect.defineProperty(c, 'p', {});
883af6ab5fSopenharmony_ciReflect.deleteProperty(c, 'p', );
893af6ab5fSopenharmony_ciReflect.get<C, string>(c, 'p');
903af6ab5fSopenharmony_ciReflect.getOwnPropertyDescriptor<C, string>(c, 'p');
913af6ab5fSopenharmony_ciReflect.getPrototypeOf(c);
923af6ab5fSopenharmony_ciReflect.isExtensible(c);
933af6ab5fSopenharmony_ciReflect.preventExtensions(c);
943af6ab5fSopenharmony_ciReflect.setPrototypeOf(c, c);
953af6ab5fSopenharmony_ciconsole.log(Reflect.has(object1, 'a'));
963af6ab5fSopenharmony_ciconsole.log(Reflect.has(object1, 'toString'));
973af6ab5fSopenharmony_ciconsole.log(Reflect.get(object1, 'a'));
983af6ab5fSopenharmony_ciconsole.log(Reflect.get(object1, 'd'));
993af6ab5fSopenharmony_ciconsole.log(Reflect.ownKeys(object1));
1003af6ab5fSopenharmony_ciReflect.set(object1, 'b', 43);
1013af6ab5fSopenharmony_ciReflect.set(arr1, 2, 'bar');
1023af6ab5fSopenharmony_ci
1033af6ab5fSopenharmony_ci/// Proxy
1043af6ab5fSopenharmony_cilet handler: ProxyHandler<C> = {};
1053af6ab5fSopenharmony_ciif (handler.apply) handler.apply(c, c, []);
1063af6ab5fSopenharmony_ciif (handler.construct) handler.construct(c, [], () => {});
1073af6ab5fSopenharmony_ciif (handler.defineProperty) handler.defineProperty(c, "prop", {});
1083af6ab5fSopenharmony_ciif (handler.deleteProperty) handler.deleteProperty(c, "prop");
1093af6ab5fSopenharmony_ciif (handler.get) handler.get(c, "prop", {});
1103af6ab5fSopenharmony_ciif (handler.getOwnPropertyDescriptor) handler.getOwnPropertyDescriptor(c, "prop");
1113af6ab5fSopenharmony_ciif (handler.getPrototypeOf) handler.getPrototypeOf(c);
1123af6ab5fSopenharmony_ciif (handler.has) handler.has(c, "prop");
1133af6ab5fSopenharmony_ciif (handler.isExtensible) handler.isExtensible(c);
1143af6ab5fSopenharmony_ciif (handler.ownKeys) handler.ownKeys(c);
1153af6ab5fSopenharmony_ciif (handler.preventExtensions) handler.preventExtensions(c);
1163af6ab5fSopenharmony_ciif (handler.set) handler.set(c, "prop", 1, c);
1173af6ab5fSopenharmony_ciif (handler.setPrototypeOf) handler.setPrototypeOf(c, null);
1183af6ab5fSopenharmony_ci
1193af6ab5fSopenharmony_ci/// Array
1203af6ab5fSopenharmony_ciArrayBuffer.isView({});
1213af6ab5fSopenharmony_cilet a: number[] = [];
1223af6ab5fSopenharmony_cilet b = new ArrayBuffer(1);
1233af6ab5fSopenharmony_ciArray.isArray(a);
1243af6ab5fSopenharmony_ci
1253af6ab5fSopenharmony_ci// 'Object.assign' is allowed only with signature like: 'assign(target: Record<string, V>, ...source: Object[]): Record<String, V>'
1263af6ab5fSopenharmony_ciclass C2 { a: number }
1273af6ab5fSopenharmony_ciclass C3 { [k: string]: Object };
1283af6ab5fSopenharmony_ciconst rec: Record<string, number> = {'1': 1, '2': 2};
1293af6ab5fSopenharmony_ciconst rec2: Record<string, number> = Object.assign(rec, new C2());      // OK
1303af6ab5fSopenharmony_ciconst rec3: C2 = Object.assign(rec, new C2());                          // NOT OK, return type is 'C2'
1313af6ab5fSopenharmony_ciconst rec4: Object = Object.assign(rec, new C2());                      // NOT OK, return type is 'Object'
1323af6ab5fSopenharmony_ciconst rec5 = Object.assign(rec, new C2());                              // NOT OK, return type is intersection type 'Record<K,V> & C2'
1333af6ab5fSopenharmony_ciconst rec6: Record<string, Object> = Object.assign(new C2(), new C3()); // NOT OK, target type is 'C2'
1343af6ab5fSopenharmony_ciObject.assign(rec, new C2());                                           // NOT OK, no return (context) type
135