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