17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2024 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 fs from 'fs';
177c804472Sopenharmony_ciimport path from 'path';
187c804472Sopenharmony_ciimport { describe, expect, test } from '@jest/globals';
197c804472Sopenharmony_ciimport { createSourceFile, ScriptTarget } from 'typescript';
207c804472Sopenharmony_ciimport { generateInterfaceDeclaration } from '../generate/generateInterfaceDeclaration';
217c804472Sopenharmony_ci
227c804472Sopenharmony_cidescribe('generateInterfaceDeclaration.ts file test', () => {
237c804472Sopenharmony_ci  test('Test the generateInterfaceDeclaration function', () => {
247c804472Sopenharmony_ci    const filePath = path.join(__dirname, './api/@ohos.abilityAccessCtrl.d.ts');
257c804472Sopenharmony_ci    const code = fs.readFileSync(filePath);
267c804472Sopenharmony_ci    const sourceFile = createSourceFile(filePath, code.toString(), ScriptTarget.Latest);
277c804472Sopenharmony_ci    const interfaceEntity = {
287c804472Sopenharmony_ci      interfaceName: 'AtManager',
297c804472Sopenharmony_ci      typeParameters: [],
307c804472Sopenharmony_ci      heritageClauses: [],
317c804472Sopenharmony_ci      interfaceConstructors: [],
327c804472Sopenharmony_ci      interfaceMethodSignature: new Map(),
337c804472Sopenharmony_ci      interfacePropertySignatures: [],
347c804472Sopenharmony_ci      callSignatures: [],
357c804472Sopenharmony_ci      indexSignature: [],
367c804472Sopenharmony_ci      exportModifiers: []
377c804472Sopenharmony_ci    };
387c804472Sopenharmony_ci    const isSourceFile = false;
397c804472Sopenharmony_ci    const mockApi = 'import { AsyncCallback, Callback } from \'./ohos_base\''
407c804472Sopenharmony_ci      + 'import { Permissions } from \'./permissions\''
417c804472Sopenharmony_ci      + 'import _Context from \'./application/Context\''
427c804472Sopenharmony_ci      + 'import _PermissionRequestResult from \'./security/PermissionRequestResult\''
437c804472Sopenharmony_ci      + 'export const PermissionRequestResult = new _PermissionRequestResult();'
447c804472Sopenharmony_ci      + 'export const Context = _Context;';
457c804472Sopenharmony_ci    const currentSourceInterfaceArray = [
467c804472Sopenharmony_ci      {
477c804472Sopenharmony_ci        interfaceName: 'AtManager',
487c804472Sopenharmony_ci        typeParameters: [],
497c804472Sopenharmony_ci        heritageClauses: [],
507c804472Sopenharmony_ci        interfaceConstructors: [],
517c804472Sopenharmony_ci        interfaceMethodSignature: new Map(),
527c804472Sopenharmony_ci        interfacePropertySignatures: [],
537c804472Sopenharmony_ci        callSignatures: [],
547c804472Sopenharmony_ci        indexSignature: [],
557c804472Sopenharmony_ci        exportModifiers: []
567c804472Sopenharmony_ci      },
577c804472Sopenharmony_ci      {
587c804472Sopenharmony_ci        interfaceName: 'PermissionStateChangeInfo',
597c804472Sopenharmony_ci        typeParameters: [],
607c804472Sopenharmony_ci        heritageClauses: [],
617c804472Sopenharmony_ci        interfaceConstructors: [],
627c804472Sopenharmony_ci        interfaceMethodSignature: new Map(),
637c804472Sopenharmony_ci        interfacePropertySignatures: [],
647c804472Sopenharmony_ci        callSignatures: [],
657c804472Sopenharmony_ci        indexSignature: [],
667c804472Sopenharmony_ci        exportModifiers: []
677c804472Sopenharmony_ci      }
687c804472Sopenharmony_ci    ];
697c804472Sopenharmony_ci    const importDeclarations = [
707c804472Sopenharmony_ci      {
717c804472Sopenharmony_ci        importPath: './@ohos.base',
727c804472Sopenharmony_ci        importElements: '{ AsyncCallback, Callback }'
737c804472Sopenharmony_ci      },
747c804472Sopenharmony_ci      {
757c804472Sopenharmony_ci        importPath: './permissions',
767c804472Sopenharmony_ci        importElements: '{ Permissions }'
777c804472Sopenharmony_ci      },
787c804472Sopenharmony_ci      {
797c804472Sopenharmony_ci        importPath: './application/Context',
807c804472Sopenharmony_ci        importElements: '_Context'
817c804472Sopenharmony_ci      },
827c804472Sopenharmony_ci      {
837c804472Sopenharmony_ci        importPath: './security/PermissionRequestResult',
847c804472Sopenharmony_ci        importElements: '_PermissionRequestResult'
857c804472Sopenharmony_ci      }
867c804472Sopenharmony_ci    ];
877c804472Sopenharmony_ci    const extraImport = [];
887c804472Sopenharmony_ci    const result = generateInterfaceDeclaration(
897c804472Sopenharmony_ci      interfaceEntity,
907c804472Sopenharmony_ci      sourceFile,
917c804472Sopenharmony_ci      isSourceFile,
927c804472Sopenharmony_ci      mockApi,
937c804472Sopenharmony_ci      currentSourceInterfaceArray,
947c804472Sopenharmony_ci      importDeclarations,
957c804472Sopenharmony_ci      extraImport
967c804472Sopenharmony_ci    );
977c804472Sopenharmony_ci    expect(result).toBe('const AtManager = { \n}\n');
987c804472Sopenharmony_ci  });
997c804472Sopenharmony_ci});
100