161847f8eSopenharmony_ci/*
261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
461847f8eSopenharmony_ci * you may not use this file except in compliance with the License.
561847f8eSopenharmony_ci * You may obtain a copy of the License at
661847f8eSopenharmony_ci *
761847f8eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
861847f8eSopenharmony_ci *
961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and
1361847f8eSopenharmony_ci * limitations under the License.
1461847f8eSopenharmony_ci */
1561847f8eSopenharmony_ci
1661847f8eSopenharmony_ciimport { expect } from 'chai';
1761847f8eSopenharmony_ciimport path from 'path';
1861847f8eSopenharmony_ciimport fs from 'fs';
1961847f8eSopenharmony_ciimport { FileUtils } from '../../src/utils/FileUtils';
2061847f8eSopenharmony_ciimport { FilesMap, Parser } from '../../src/coreImpl/parser/parser';
2161847f8eSopenharmony_ciimport { StringConstant } from '../../src/utils/Constant';
2261847f8eSopenharmony_ciimport { DiffHelper } from '../../src/coreImpl/diff/diff';
2361847f8eSopenharmony_ciimport { BasicDiffInfo } from '../../src/typedef/diff/ApiInfoDiff';
2461847f8eSopenharmony_ciimport { ApiStatisticsHelper } from '../../src/coreImpl/statistics/Statistics';
2561847f8eSopenharmony_ciimport { ApiStatisticsInfo } from '../../src/typedef/statistics/ApiStatistics';
2661847f8eSopenharmony_ciimport { Check } from '../../src/coreImpl/checker/src/api_check_plugin';
2761847f8eSopenharmony_ciimport { apiCheckResult, cleanApiCheckResult, compositiveResult } from '../../src/utils/checkUtils';
2861847f8eSopenharmony_ciimport { LocalEntry } from '../../src/coreImpl/checker/local_entry';
2961847f8eSopenharmony_ciimport { ApiChangeCheck } from '../../src/coreImpl/checker/src/check_api_diff';
3061847f8eSopenharmony_ciimport { ApiResultMessage, checkEntryType } from '../../src/typedef/checker/result_type';
3161847f8eSopenharmony_ciconst utDir: string = 'test/ut';
3261847f8eSopenharmony_ciconst outputDir: string = 'test/output';
3361847f8eSopenharmony_ciconst expectDir: string = 'test/expect';
3461847f8eSopenharmony_ci
3561847f8eSopenharmony_cidescribe('testParserEachSince', function () {
3661847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
3761847f8eSopenharmony_ci  const testFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'parserSince');
3861847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'parserSince');
3961847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'parserSince');
4061847f8eSopenharmony_ci  const testFileNames: string[] = fs.readdirSync(testFileDir);
4161847f8eSopenharmony_ci  testFileNames.forEach((testFileName: string) => {
4261847f8eSopenharmony_ci    const baseName: string = path
4361847f8eSopenharmony_ci      .basename(testFileName)
4461847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
4561847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
4661847f8eSopenharmony_ci    const testFilePath: string = path.join(testFileDir, testFileName);
4761847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
4861847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
4961847f8eSopenharmony_ci    it('\ntestFile#' + testFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
5061847f8eSopenharmony_ci      if (fs.existsSync(outputFilePath)) {
5161847f8eSopenharmony_ci        fs.rmdirSync(outputFilePath, { recursive: true });
5261847f8eSopenharmony_ci      }
5361847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
5461847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
5561847f8eSopenharmony_ci      }
5661847f8eSopenharmony_ci      const outputContent: string = Parser.getParseEachSince(Parser.parseFile(testFileDir, testFilePath));
5761847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
5861847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
5961847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
6061847f8eSopenharmony_ci    });
6161847f8eSopenharmony_ci  });
6261847f8eSopenharmony_ci});
6361847f8eSopenharmony_ci
6461847f8eSopenharmony_cidescribe('testParser', function () {
6561847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
6661847f8eSopenharmony_ci  const testFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'parser');
6761847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'parser');
6861847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'parser');
6961847f8eSopenharmony_ci  const testFileNames: string[] = fs.readdirSync(testFileDir);
7061847f8eSopenharmony_ci  testFileNames.forEach((testFileName: string) => {
7161847f8eSopenharmony_ci    const baseName: string = path
7261847f8eSopenharmony_ci      .basename(testFileName)
7361847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
7461847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
7561847f8eSopenharmony_ci    const testFilePath: string = path.join(testFileDir, testFileName);
7661847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
7761847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
7861847f8eSopenharmony_ci    it('\ntestFile#' + testFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
7961847f8eSopenharmony_ci      if (fs.existsSync(outputFilePath)) {
8061847f8eSopenharmony_ci        fs.rmdirSync(outputFilePath, { recursive: true });
8161847f8eSopenharmony_ci      }
8261847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
8361847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
8461847f8eSopenharmony_ci      }
8561847f8eSopenharmony_ci      const outputContent: string = Parser.getParseResults(Parser.parseFile(testFileDir, testFilePath));
8661847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
8761847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
8861847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
8961847f8eSopenharmony_ci    });
9061847f8eSopenharmony_ci  });
9161847f8eSopenharmony_ci});
9261847f8eSopenharmony_ci
9361847f8eSopenharmony_cidescribe('testApiDiff', function () {
9461847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
9561847f8eSopenharmony_ci  const testOldFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'apiDiff/old');
9661847f8eSopenharmony_ci  const testNewFileDir: string = testOldFileDir.replace('old', 'new');
9761847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'apiDiff');
9861847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'apiDiff');
9961847f8eSopenharmony_ci  const testOldFileNames: string[] = fs.readdirSync(testOldFileDir);
10061847f8eSopenharmony_ci  testOldFileNames.forEach((testOldFileName: string) => {
10161847f8eSopenharmony_ci    const baseName: string = path
10261847f8eSopenharmony_ci      .basename(testOldFileName)
10361847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
10461847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
10561847f8eSopenharmony_ci    const testOldFilePath: string = path.join(testOldFileDir, testOldFileName);
10661847f8eSopenharmony_ci    const testNewFilePath: string = testOldFilePath.replace('old', 'new');
10761847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
10861847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
10961847f8eSopenharmony_ci    it('\ntestFile#' + testOldFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
11061847f8eSopenharmony_ci      if (fs.existsSync(outputFilePath)) {
11161847f8eSopenharmony_ci        fs.rmdirSync(outputFilePath, { recursive: true });
11261847f8eSopenharmony_ci      }
11361847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
11461847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
11561847f8eSopenharmony_ci      }
11661847f8eSopenharmony_ci      Parser.cleanParserParamSDK();
11761847f8eSopenharmony_ci      const oldSDKApiMap: FilesMap = Parser.parseFile(testOldFileDir, testOldFilePath);
11861847f8eSopenharmony_ci      Parser.cleanParserParamSDK();
11961847f8eSopenharmony_ci      const newSDKApiMap: FilesMap = Parser.parseFile(testNewFileDir, testNewFilePath);
12061847f8eSopenharmony_ci      const diffInfos: BasicDiffInfo[] = DiffHelper.diffSDK(oldSDKApiMap, newSDKApiMap, true);
12161847f8eSopenharmony_ci      const outputContent: string = JSON.stringify(diffInfos, null, 2);
12261847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
12361847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
12461847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
12561847f8eSopenharmony_ci    });
12661847f8eSopenharmony_ci  });
12761847f8eSopenharmony_ci});
12861847f8eSopenharmony_ci
12961847f8eSopenharmony_cidescribe('testStatistics', function () {
13061847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
13161847f8eSopenharmony_ci  const testFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'apiStatistics');
13261847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'apiStatistics');
13361847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'apiStatistics');
13461847f8eSopenharmony_ci  const testFileNames: string[] = fs.readdirSync(testFileDir);
13561847f8eSopenharmony_ci  testFileNames.forEach((testFileName: string) => {
13661847f8eSopenharmony_ci    const baseName: string = path
13761847f8eSopenharmony_ci      .basename(testFileName)
13861847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
13961847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
14061847f8eSopenharmony_ci    const testFilePath: string = path.join(testFileDir, testFileName);
14161847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
14261847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
14361847f8eSopenharmony_ci    it('\ntestFile#' + testFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
14461847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
14561847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
14661847f8eSopenharmony_ci      }
14761847f8eSopenharmony_ci      const apiInfos: ApiStatisticsInfo[] = ApiStatisticsHelper.getApiStatisticsInfos(
14861847f8eSopenharmony_ci        Parser.parseFile(testFileDir, testFilePath)
14961847f8eSopenharmony_ci      ).apiStatisticsInfos;
15061847f8eSopenharmony_ci      const outputContent: string = JSON.stringify(apiInfos, null, 2);
15161847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
15261847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
15361847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
15461847f8eSopenharmony_ci    });
15561847f8eSopenharmony_ci  });
15661847f8eSopenharmony_ci});
15761847f8eSopenharmony_ci
15861847f8eSopenharmony_cidescribe('testApiCheck', function () {
15961847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
16061847f8eSopenharmony_ci  const testFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'apiCheck');
16161847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'apiCheck');
16261847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'apiCheck');
16361847f8eSopenharmony_ci  const testFileNames: string[] = fs.readdirSync(testFileDir);
16461847f8eSopenharmony_ci  testFileNames.forEach((testFileName: string) => {
16561847f8eSopenharmony_ci    const baseName: string = path
16661847f8eSopenharmony_ci      .basename(testFileName)
16761847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
16861847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
16961847f8eSopenharmony_ci    const testFilePath: string = path.join(testFileDir, testFileName);
17061847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
17161847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
17261847f8eSopenharmony_ci    it('\ntestFile#' + testFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
17361847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
17461847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
17561847f8eSopenharmony_ci      }
17661847f8eSopenharmony_ci      Check.scanEntry([testFilePath], '');
17761847f8eSopenharmony_ci      let ruleName: string = testFileName.substring(0, testFileName.indexOf('.'));
17861847f8eSopenharmony_ci      ruleName = testFileName.indexOf('API_DEFINE_ANONYMOUS_FUNCTION') !== -1 ?
17961847f8eSopenharmony_ci        'API_DEFINE_ANONYMOUS_FUNCTION_01' : ruleName;
18061847f8eSopenharmony_ci      ruleName = testFileName.indexOf('API_DEFINE_HUMP_01_small') !== -1 ?
18161847f8eSopenharmony_ci        'API_DEFINE_HUMP_01' : ruleName;
18261847f8eSopenharmony_ci      ruleName = testFileName.indexOf('API_DEFINE_HUMP_02_LARGE') !== -1 ?
18361847f8eSopenharmony_ci        'API_DEFINE_HUMP_02' : ruleName;
18461847f8eSopenharmony_ci      ruleName = testFileName.indexOf('API_DEFINE_NAME_02_ability') !== -1 ?
18561847f8eSopenharmony_ci        'API_DEFINE_NAME_02' : ruleName;
18661847f8eSopenharmony_ci
18761847f8eSopenharmony_ci      LocalEntry.maskAlarm(compositiveResult, [ruleName]);
18861847f8eSopenharmony_ci      apiCheckResult.forEach((result: ApiResultMessage) => {
18961847f8eSopenharmony_ci        result.buggyFilePath = result.buggyFilePath.substring(result.buggyFilePath.indexOf('build-tools'), result.buggyFilePath.length);
19061847f8eSopenharmony_ci      });
19161847f8eSopenharmony_ci      const outputContent: string = JSON.stringify(apiCheckResult, null, 2);
19261847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
19361847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
19461847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
19561847f8eSopenharmony_ci    });
19661847f8eSopenharmony_ci  });
19761847f8eSopenharmony_ci});
19861847f8eSopenharmony_ci
19961847f8eSopenharmony_cidescribe('testApiChangeCheck', function () {
20061847f8eSopenharmony_ci  before(() => { Parser.cleanParserParamSDK(); });
20161847f8eSopenharmony_ci  const testFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'apiChange');
20261847f8eSopenharmony_ci  const outputFileDir: string = path.join(FileUtils.getBaseDirName(), outputDir, 'apiChange');
20361847f8eSopenharmony_ci  const expectFileDir: string = path.join(FileUtils.getBaseDirName(), expectDir, 'apiChange');
20461847f8eSopenharmony_ci  const testOldFileDir: string = path.join(FileUtils.getBaseDirName(), utDir, 'apiChange/old');
20561847f8eSopenharmony_ci  const testOldFileNames: string[] = fs.readdirSync(testOldFileDir);
20661847f8eSopenharmony_ci
20761847f8eSopenharmony_ci  ApiChangeCheck.checkApiChange(testFileDir);
20861847f8eSopenharmony_ci  testOldFileNames.forEach((testOldFileName: string) => {
20961847f8eSopenharmony_ci    const baseName: string = path
21061847f8eSopenharmony_ci      .basename(testOldFileName)
21161847f8eSopenharmony_ci      .replace(/.d.ts/g, '')
21261847f8eSopenharmony_ci      .replace(/.d.ets/g, '');
21361847f8eSopenharmony_ci    const testOldFilePath: string = path.join(testOldFileDir, testOldFileName);
21461847f8eSopenharmony_ci    const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
21561847f8eSopenharmony_ci    const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
21661847f8eSopenharmony_ci    it('\ntestFile#' + testOldFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
21761847f8eSopenharmony_ci      if (!fs.existsSync(outputFileDir)) {
21861847f8eSopenharmony_ci        fs.mkdirSync(outputFileDir);
21961847f8eSopenharmony_ci      }
22061847f8eSopenharmony_ci      cleanApiCheckResult();
22161847f8eSopenharmony_ci      LocalEntry.maskAlarm(compositiveResult, [baseName]);
22261847f8eSopenharmony_ci      const keyString: string[] = [];
22361847f8eSopenharmony_ci      const finalResult: ApiResultMessage[] = [];
22461847f8eSopenharmony_ci      apiCheckResult.forEach(apiCheck => {
22561847f8eSopenharmony_ci        const key: string = apiCheck.description + apiCheck.mainBuggyCode + apiCheck.extendInfo.hierarchicalRelations;
22661847f8eSopenharmony_ci        if (!keyString.includes(key)) {
22761847f8eSopenharmony_ci          keyString.push(key);
22861847f8eSopenharmony_ci          finalResult.push(apiCheck);
22961847f8eSopenharmony_ci        }
23061847f8eSopenharmony_ci      });
23161847f8eSopenharmony_ci      const outputContent: string = JSON.stringify(finalResult, null, 2);
23261847f8eSopenharmony_ci      fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
23361847f8eSopenharmony_ci      const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
23461847f8eSopenharmony_ci      expect(outputContent).eql(expectFileContent);
23561847f8eSopenharmony_ci    });
23661847f8eSopenharmony_ci  });
23761847f8eSopenharmony_ci
23861847f8eSopenharmony_ci  describe('testApiCheckIncrement', function testApiCheckIncrement() {
23961847f8eSopenharmony_ci    const testFileDir: string = path.join(FileUtils.getBaseDirName(), '/test/ut/apiIncrement');
24061847f8eSopenharmony_ci    const outputFileDir: string = path.join(FileUtils.getBaseDirName(), '/test/output/apiIncrement');
24161847f8eSopenharmony_ci    const expectFileDir: string = path.join(FileUtils.getBaseDirName(), '/test/expect/apiIncrement');
24261847f8eSopenharmony_ci    const testFileNames: string[] = fs.readdirSync(testFileDir);
24361847f8eSopenharmony_ci
24461847f8eSopenharmony_ci    testFileNames.forEach((testFileName: string) => {
24561847f8eSopenharmony_ci      const testFilePath: string = path.join(testFileDir, testFileName);
24661847f8eSopenharmony_ci      const testOldFileDir: string = path.join(testFilePath, '/old');
24761847f8eSopenharmony_ci      const testNewFileDir: string = path.join(testFilePath, '/new');
24861847f8eSopenharmony_ci      const baseName: string = path
24961847f8eSopenharmony_ci        .basename(testFileName)
25061847f8eSopenharmony_ci        .replace(/.d.ts/g, '')
25161847f8eSopenharmony_ci        .replace(/.d.ets/g, '');
25261847f8eSopenharmony_ci      const outputFilePath: string = path.join(outputFileDir, `${baseName}.json`);
25361847f8eSopenharmony_ci      const expectFilePath: string = path.join(expectFileDir, `${baseName}.json`);
25461847f8eSopenharmony_ci      it('\ntestFile#' + testFilePath + '\noutput:' + outputFilePath + '\nexpect:' + expectFilePath, function () {
25561847f8eSopenharmony_ci        if (!fs.existsSync(outputFileDir)) {
25661847f8eSopenharmony_ci          fs.mkdirSync(outputFileDir);
25761847f8eSopenharmony_ci        }
25861847f8eSopenharmony_ci        cleanApiCheckResult();
25961847f8eSopenharmony_ci        const files: Array<string> = FileUtils.readFilesInDir(testNewFileDir);
26061847f8eSopenharmony_ci        const checkParam: checkEntryType = {
26161847f8eSopenharmony_ci          filePathArr: files,
26261847f8eSopenharmony_ci          fileRuleArr: ['all'],
26361847f8eSopenharmony_ci          output: './result.json',
26461847f8eSopenharmony_ci          prId: testFilePath,
26561847f8eSopenharmony_ci          isOutExcel: 'true',
26661847f8eSopenharmony_ci          isIncrement: true,
26761847f8eSopenharmony_ci        };
26861847f8eSopenharmony_ci        LocalEntry.checkEntryLocal(checkParam);
26961847f8eSopenharmony_ci        const outputContent: string = JSON.stringify(apiCheckResult, null, 2);
27061847f8eSopenharmony_ci        fs.writeFileSync(outputFilePath, outputContent, StringConstant.UTF8);
27161847f8eSopenharmony_ci        const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
27261847f8eSopenharmony_ci        expect(outputContent).eql(expectFileContent);
27361847f8eSopenharmony_ci      });
27461847f8eSopenharmony_ci    });
27561847f8eSopenharmony_ci  });
27661847f8eSopenharmony_ci
277