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