17c804472Sopenharmony_ci/* 27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 47c804472Sopenharmony_ci * you may not use this file except in compliance with the License. 57c804472Sopenharmony_ci * You may obtain a copy of the License at 67c804472Sopenharmony_ci * 77c804472Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 87c804472Sopenharmony_ci * 97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c804472Sopenharmony_ci * See the License for the specific language governing permissions and 137c804472Sopenharmony_ci * limitations under the License. 147c804472Sopenharmony_ci */ 157c804472Sopenharmony_ci 167c804472Sopenharmony_ciimport { firstCharacterToUppercase } from '../common/commonUtils'; 177c804472Sopenharmony_ci 187c804472Sopenharmony_ci/** 197c804472Sopenharmony_ci * save all mock function 207c804472Sopenharmony_ci */ 217c804472Sopenharmony_ciconst indexArray: Array<IndexEntity> = []; 227c804472Sopenharmony_ci 237c804472Sopenharmony_ciexport function addToIndexArray(indexEntity: IndexEntity): void { 247c804472Sopenharmony_ci indexArray.push(indexEntity); 257c804472Sopenharmony_ci} 267c804472Sopenharmony_ci 277c804472Sopenharmony_ciexport function getIndexArray(): Array<IndexEntity> { 287c804472Sopenharmony_ci return indexArray; 297c804472Sopenharmony_ci} 307c804472Sopenharmony_ci 317c804472Sopenharmony_ci/** 327c804472Sopenharmony_ci * generate index 337c804472Sopenharmony_ci * @returns 347c804472Sopenharmony_ci */ 357c804472Sopenharmony_ciexport function generateIndex(): string { 367c804472Sopenharmony_ci let indexBody = ''; 377c804472Sopenharmony_ci let caseBody = ''; 387c804472Sopenharmony_ci indexBody += 'import * as etsglobal from \'./@internal/ets/global\';\n'; 397c804472Sopenharmony_ci const filterSet: Set<string> = new Set<string>(); 407c804472Sopenharmony_ci 417c804472Sopenharmony_ci indexArray.forEach(value => { 427c804472Sopenharmony_ci let functionName = value.mockFunctionName; 437c804472Sopenharmony_ci let isHasSameValue = false; 447c804472Sopenharmony_ci if (filterSet.has(value.mockFunctionName)) { 457c804472Sopenharmony_ci isHasSameValue = true; 467c804472Sopenharmony_ci const tmpArr = value.fileName.split('_'); 477c804472Sopenharmony_ci let tmpName = tmpArr[0]; 487c804472Sopenharmony_ci for (let i = 1; i < tmpArr.length; i++) { 497c804472Sopenharmony_ci tmpName += firstCharacterToUppercase(tmpArr[i]); 507c804472Sopenharmony_ci } 517c804472Sopenharmony_ci functionName = `${tmpName}`; 527c804472Sopenharmony_ci } 537c804472Sopenharmony_ci filterSet.add(functionName); 547c804472Sopenharmony_ci if (isHasSameValue) { 557c804472Sopenharmony_ci indexBody += `import { ${value.mockFunctionName} as ${functionName} } from './${value.fileName}';\n`; 567c804472Sopenharmony_ci } else { 577c804472Sopenharmony_ci indexBody += `import { ${functionName} } from './${value.fileName}';\n`; 587c804472Sopenharmony_ci } 597c804472Sopenharmony_ci 607c804472Sopenharmony_ci if (value.fileName.startsWith('ohos_')) { 617c804472Sopenharmony_ci caseBody += `case '${value.fileName.split('ohos_')[1].replace(/_/g, '.')}':\n\treturn ${functionName}();\n`; 627c804472Sopenharmony_ci } else { 637c804472Sopenharmony_ci caseBody += `case '${value.fileName}':\n\treturn ${functionName}();\n`; 647c804472Sopenharmony_ci } 657c804472Sopenharmony_ci }); 667c804472Sopenharmony_ci 677c804472Sopenharmony_ci indexBody += `export function mockRequireNapiFun() { 687c804472Sopenharmony_ci global.requireNapi = function(...args) { 697c804472Sopenharmony_ci const globalNapi = global.requireNapiPreview(...args); 707c804472Sopenharmony_ci if (globalNapi !== undefined) { 717c804472Sopenharmony_ci return globalNapi; 727c804472Sopenharmony_ci } 737c804472Sopenharmony_ci switch (args[0]) {`; 747c804472Sopenharmony_ci indexBody += caseBody; 757c804472Sopenharmony_ci const endBody = `} 767c804472Sopenharmony_ci if (global.hosMockFunc !== undefined) { 777c804472Sopenharmony_ci return global.hosMockFunc(args[0]); 787c804472Sopenharmony_ci } 797c804472Sopenharmony_ci } 807c804472Sopenharmony_ci }`; 817c804472Sopenharmony_ci indexBody += endBody; 827c804472Sopenharmony_ci return indexBody; 837c804472Sopenharmony_ci} 847c804472Sopenharmony_ci 857c804472Sopenharmony_ciinterface IndexEntity { 867c804472Sopenharmony_ci fileName: string; 877c804472Sopenharmony_ci mockFunctionName: string; 887c804472Sopenharmony_ci} 89