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 16import fs from 'fs'; 17import path from 'path'; 18import { describe, expect, test } from '@jest/globals'; 19import { createSourceFile, ScriptTarget } from 'typescript'; 20import { generateModuleDeclaration } from '../generate/generateModuleDeclaration'; 21 22const filePath = path.join(__dirname, './api/@ohos.ability.ability.d.ts'); 23const code = fs.readFileSync(filePath); 24const sourceFile = createSourceFile(filePath, code.toString(), ScriptTarget.Latest); 25 26describe('generateModuleDeclaration.ts file test', () => { 27 test('Test the generateModuleDeclaration function', () => { 28 const moduleEntity = { 29 typeAliasDeclarations: [ 30 { 31 typeAliasName: 'DataAbilityHelper', 32 typeAliasTypeKind: 173, 33 typeAliasTypeElements: [ 34 { 35 typeName: '_DataAbilityHelper', 36 typeKind: 78 37 } 38 ], 39 modifiers: [92] 40 }, 41 { 42 typeAliasName: 'PacMap', 43 typeAliasTypeKind: 173, 44 typeAliasTypeElements: [ 45 { 46 typeName: '_PacMap', 47 typeKind: 78 48 } 49 ], 50 modifiers: [92] 51 }, 52 { 53 typeAliasName: 'DataAbilityOperation', 54 typeAliasTypeKind: 173, 55 typeAliasTypeElements: [ 56 { 57 typeName: '_DataAbilityOperation', 58 typeKind: 78 59 } 60 ], 61 modifiers: [92] 62 }, 63 { 64 typeAliasName: 'DataAbilityResult', 65 typeAliasTypeKind: 173, 66 typeAliasTypeElements: [ 67 { 68 typeName: '_DataAbilityResult', 69 typeKind: 78 70 } 71 ], 72 modifiers: [92] 73 }, 74 { 75 typeAliasName: 'AbilityResult', 76 typeAliasTypeKind: 173, 77 typeAliasTypeElements: [ 78 { 79 typeName: '_AbilityResult', 80 typeKind: 78 81 } 82 ], 83 modifiers: [92] 84 }, 85 { 86 typeAliasName: 'ConnectOptions', 87 typeAliasTypeKind: 173, 88 typeAliasTypeElements: [ 89 { 90 typeName: '_ConnectOptions', 91 typeKind: 78 92 } 93 ], 94 modifiers: [92] 95 }, 96 { 97 typeAliasName: 'StartAbilityParameter', 98 typeAliasTypeKind: 173, 99 typeAliasTypeElements: [ 100 { 101 typeName: '_StartAbilityParameter', 102 typeKind: 78 103 } 104 ], 105 modifiers: [92] 106 } 107 ], 108 classDeclarations: [], 109 interfaceDeclarations: [], 110 functionDeclarations: new Map(), 111 enumDeclarations: [], 112 moduleDeclarations: [], 113 variableStatements: [], 114 moduleImportEquaqls: [], 115 exportDeclarations: [], 116 exportModifiers: [133], 117 moduleName: 'ability' 118 }; 119 const filename = 'ohos_ability_ability'; 120 const mockApi = 'import { DataAbilityHelper as _DataAbilityHelper } from \'./ability/dataAbilityHelper\'' 121 + 'import { PacMap as _PacMap } from \'./ability/dataAbilityHelper\'' 122 + 'import { DataAbilityOperation as _DataAbilityOperation } from \'./ability/dataAbilityOperation\'' 123 + 'import { DataAbilityResult as _DataAbilityResult } from \'./ability/dataAbilityResult\'' 124 + 'import { AbilityResult as _AbilityResult } from \'./ability/abilityResult\'' 125 + 'import { ConnectOptions as _ConnectOptions } from \'./ability/connectOptions\'' 126 + 'import { StartAbilityParameter as _StartAbilityParameter } from \'./ability/startAbilityParameter\''; 127 const extraImport = []; 128 const importDeclarations = [ 129 { 130 importPath: './ability/dataAbilityHelper', 131 importElements: '{ DataAbilityHelper as _DataAbilityHelper }' 132 }, 133 { 134 importPath: './ability/dataAbilityHelper', 135 importElements: '{ PacMap as _PacMap }' 136 }, 137 { 138 importPath: './ability/dataAbilityOperation', 139 importElements: '{ DataAbilityOperation as _DataAbilityOperation }' 140 }, 141 { 142 importPath: './ability/dataAbilityResult', 143 importElements: '{ DataAbilityResult as _DataAbilityResult }' 144 }, 145 { 146 importPath: './ability/abilityResult', 147 importElements: '{ AbilityResult as _AbilityResult }' 148 }, 149 { 150 importPath: './ability/connectOptions', 151 importElements: '{ ConnectOptions as _ConnectOptions }' 152 }, 153 { 154 importPath: './ability/startAbilityParameter', 155 importElements: '{ StartAbilityParameter as _StartAbilityParameter }' 156 } 157 ]; 158 const data = 'export function mockAbility() {\n\tconst ability = {\n\n\n\tDataAbilityHelper: DataAbilityHelper,\n' 159 + 'PacMap: PacMap,\nDataAbilityOperation: DataAbilityOperation,\nDataAbilityResult: DataAbilityResult,\n' 160 + 'AbilityResult: AbilityResult,\nConnectOptions: ConnectOptions,\nStartAbilityParameter: StartAbilityParameter,\n\t' 161 + '};\n\treturn ability;}\nconst DataAbilityHelper = _DataAbilityHelper;\nconst PacMap = _PacMap;\n' 162 + 'const DataAbilityOperation = _DataAbilityOperation;\nconst DataAbilityResult = _DataAbilityResult;\n' 163 + 'const AbilityResult = _AbilityResult;\nconst ConnectOptions = _ConnectOptions;\n' 164 + 'const StartAbilityParameter = _StartAbilityParameter;\n'; 165 const result = generateModuleDeclaration( 166 moduleEntity, 167 sourceFile, 168 filename, 169 mockApi, 170 extraImport, 171 importDeclarations 172 ); 173 expect(result).toBe(data); 174 }); 175}); 176