14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2023 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_ciclass P { 174514f5e3Sopenharmony_ci constructor() { 184514f5e3Sopenharmony_ci this.a = 1; 194514f5e3Sopenharmony_ci } 204514f5e3Sopenharmony_ci} 214514f5e3Sopenharmony_ci// test normal object 224514f5e3Sopenharmony_cilet proto = new P(); 234514f5e3Sopenharmony_cilet protoT = new P(); 244514f5e3Sopenharmony_ci 254514f5e3Sopenharmony_ci// use to store results 264514f5e3Sopenharmony_cilet conditionArray = []; 274514f5e3Sopenharmony_ciconditionArray.push(!(proto === protoT)) 284514f5e3Sopenharmony_ci// share hclass 294514f5e3Sopenharmony_ciconditionArray.push(ArkTools.compareHClass(proto, protoT)); 304514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(proto)); 314514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(protoT)); 324514f5e3Sopenharmony_ci 334514f5e3Sopenharmony_ciprint("start test!!!") 344514f5e3Sopenharmony_cilet obj1 = {"b": "2b"}; 354514f5e3Sopenharmony_cilet obj2 = {"c": "3c"}; 364514f5e3Sopenharmony_cilet obj3 = {"d": "4d"}; 374514f5e3Sopenharmony_ci 384514f5e3Sopenharmony_cilet obj11 = {"bb": "2bb"}; 394514f5e3Sopenharmony_cilet obj22 = {"cc": "3cc"}; 404514f5e3Sopenharmony_cilet obj33 = {"dd": "4dd"}; 414514f5e3Sopenharmony_ci 424514f5e3Sopenharmony_ciObject.setPrototypeOf(obj1, proto); 434514f5e3Sopenharmony_ciObject.setPrototypeOf(obj2, proto); 444514f5e3Sopenharmony_ciObject.setPrototypeOf(obj3, proto); 454514f5e3Sopenharmony_ci 464514f5e3Sopenharmony_ciconditionArray.push(ArkTools.isPrototype(proto)); 474514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(protoT)); 484514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.compareHClass(proto, protoT)); 494514f5e3Sopenharmony_ci 504514f5e3Sopenharmony_ci// set proto of obj11, obj22, obj33 514514f5e3Sopenharmony_ci// obj11 --> proto --> obj1 --> proto --> proto object 524514f5e3Sopenharmony_ci// obj22 --> proto --> obj1 --> proto --> proto object 534514f5e3Sopenharmony_ci// obj33 --> proto --> obj2 --> proto --> proto object 544514f5e3Sopenharmony_ciobj11.__proto__ = obj1; 554514f5e3Sopenharmony_ciobj22.__proto__ = obj1; 564514f5e3Sopenharmony_ciobj33.__proto__ = obj2; 574514f5e3Sopenharmony_ci 584514f5e3Sopenharmony_cifunction test() { 594514f5e3Sopenharmony_ci for (let i = 0; i <= 50; i++) { 604514f5e3Sopenharmony_ci obj11["a"]; 614514f5e3Sopenharmony_ci } 624514f5e3Sopenharmony_ci} 634514f5e3Sopenharmony_citest(); 644514f5e3Sopenharmony_ciprotoT["x"] = "2000x"; 654514f5e3Sopenharmony_ciobj1["www"] = "100www"; 664514f5e3Sopenharmony_ci 674514f5e3Sopenharmony_ci// test proxy 684514f5e3Sopenharmony_cilet protoP1 = new P(); 694514f5e3Sopenharmony_cilet protoP2 = new P(); 704514f5e3Sopenharmony_ciprotoP1.a = "xxx"; 714514f5e3Sopenharmony_ci 724514f5e3Sopenharmony_cilet proxyOfProto = new Proxy(protoP1, {}); 734514f5e3Sopenharmony_ciconditionArray.push(!(protoP1 === protoP2)) 744514f5e3Sopenharmony_ciconditionArray.push(ArkTools.compareHClass(protoP1, protoP2)); 754514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(protoP1)); 764514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(protoP2)); 774514f5e3Sopenharmony_ci 784514f5e3Sopenharmony_ci// change proto of obj1 794514f5e3Sopenharmony_ci// obj11 --> proto --> obj1 --> proto --> protoP1 804514f5e3Sopenharmony_ci// obj22 --> proto --> obj1 --> proto --> protoP1 814514f5e3Sopenharmony_ciObject.setPrototypeOf(obj1, proxyOfProto); 824514f5e3Sopenharmony_ciObject.setPrototypeOf(obj1, proxyOfProto); 834514f5e3Sopenharmony_ciconditionArray.push(ArkTools.compareHClass(protoP1, protoP2)); 844514f5e3Sopenharmony_ci// change proto of obj2 854514f5e3Sopenharmony_ci// obj33 --> proto --> obj2 --> proto --> protoP2 864514f5e3Sopenharmony_ciObject.setPrototypeOf(obj2, protoP2); 874514f5e3Sopenharmony_ciObject.setPrototypeOf(obj3, proxyOfProto); 884514f5e3Sopenharmony_ci 894514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.compareHClass(protoP1, protoP2)); 904514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(protoP1)); 914514f5e3Sopenharmony_ciconditionArray.push(ArkTools.isPrototype(protoP2)); 924514f5e3Sopenharmony_ciconditionArray.push(!ArkTools.isPrototype(proxyOfProto)); 934514f5e3Sopenharmony_ci 944514f5e3Sopenharmony_citest(); 954514f5e3Sopenharmony_ciobj1["zzz"] = "100zzz"; 964514f5e3Sopenharmony_ci 974514f5e3Sopenharmony_ci// check proto 984514f5e3Sopenharmony_ciconditionArray.push(obj11.a === "xxx") 994514f5e3Sopenharmony_ciconditionArray.push(obj22.a === "xxx") 1004514f5e3Sopenharmony_ciconditionArray.push(obj11.b === "2b") 1014514f5e3Sopenharmony_ciconditionArray.push(obj33.a === 1) 1024514f5e3Sopenharmony_ciconditionArray.push(obj33.c === "3c") 1034514f5e3Sopenharmony_ciconditionArray.push(obj11.zzz === "100zzz") 1044514f5e3Sopenharmony_ciconditionArray.push(obj33.zzz === undefined) 1054514f5e3Sopenharmony_ci 1064514f5e3Sopenharmony_cilet str = ""; 1074514f5e3Sopenharmony_ci// check results 1084514f5e3Sopenharmony_cifor (let i of conditionArray) { 1094514f5e3Sopenharmony_ci if (!i) { 1104514f5e3Sopenharmony_ci str = "Test mutli proto ic fail!!!"; 1114514f5e3Sopenharmony_ci break; 1124514f5e3Sopenharmony_ci } 1134514f5e3Sopenharmony_ci} 1144514f5e3Sopenharmony_ciif (str == "") { 1154514f5e3Sopenharmony_ci str = "Test mutli proto ic success!!!"; 1164514f5e3Sopenharmony_ci} 1174514f5e3Sopenharmony_ciprint(str); 118