* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { expect } from 'chai';
import path from 'path';
import fs from 'fs';
import { JSDocModifierImpl } from '../../src/core/entry';
describe('testSingleFile', function () {
const testFileDir = path.join(__dirname, '..', '/ut/');
const outputFileDir = path.join(__dirname, '..', '/output/testSingleFile/');
const expectFileDir = path.join(__dirname, '..', '/expect/');
const testFileNames = fs.readdirSync(testFileDir);
const argLen = process.argv.length;
testFileNames.forEach((testFileName) => {
const testFilePath = path.join(testFileDir, testFileName);
const outputFilePath = path.join(outputFileDir, testFileName);
const expectFilePath = path.join(expectFileDir, testFileName);
const baseName: string = path.basename(testFileName, '.d.ts');
const expectReportFilePath: string = path.join(expectFileDir, `${baseName}.json`);
const outputReportFilePath: string = path.join(outputFileDir, `${baseName}.json`);
it('testFile#' + testFilePath, async function () {
if (fs.existsSync(outputFilePath)) {
fs.rmSync(outputFilePath);
}
const inputParams = [];
inputParams.push('-s');
inputParams.push('-i');
inputParams.push(testFilePath);
inputParams.push('-o');
inputParams.push(outputFilePath);
inputParams.push('-t');
process.argv.splice(argLen, inputParams.length, ...inputParams);
const testEntry = new JSDocModifierImpl();
await testEntry.start();
const outputFileContent: string = fs.readFileSync(outputFilePath, 'utf-8').replace(/\r\n/g, '\n');
const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
expect(outputFileContent).eql(expectFileContent);
const outputReportContent: string = fs.readFileSync(outputReportFilePath, 'utf-8').replace(/\r\n/g, '\n');
const expectReportContent: string = fs.readFileSync(expectReportFilePath, 'utf-8').replace(/\r\n/g, '\n');
expect(outputReportContent).eql(expectReportContent);
});
});
});
describe('testMultiFiles', function () {
const testFileDir = path.join(__dirname, '..', '/ut/');
const outFileDir = path.join(__dirname, '..', '/output/testMultiFiles/');
const expectFileDir = path.join(__dirname, '..', '/expect/');
before(async function () {
this.timeout(10000);
const inputParams = [];
inputParams.push('-s');
inputParams.push('-i');
inputParams.push(testFileDir);
inputParams.push('-o');
inputParams.push(outFileDir);
inputParams.push('-t');
process.argv.splice(process.argv.length, 0, ...inputParams);
const testEntry = new JSDocModifierImpl();
await testEntry.start();
});
const testFileNames = fs.readdirSync(testFileDir);
testFileNames.forEach((testFileName) => {
const testFilePath = path.join(testFileDir, testFileName);
const outputFilePath = path.join(outFileDir, testFileName);
const expectFilePath = path.join(expectFileDir, testFileName);
it('testDir#' + testFilePath, function () {
const outputFileContent: string = fs.readFileSync(outputFilePath, 'utf-8').replace(/\r\n/g, '\n');
const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
expect(outputFileContent).eql(expectFileContent);
});
});
});
describe('testBundleSingleFile', function () {
const testFileDir = path.join(__dirname, '..', '/ut/');
const outFileDir = path.join(__dirname, '..', '/output/testBundleSingleFile/');
const expectFileDir = path.join(__dirname, '..', '/expect/');
const testFileNames = fs.readdirSync(testFileDir);
const nodeExecute = process.execPath;
const { execFileSync } = require('child_process');
testFileNames.forEach((testFileName) => {
const testFilePath = path.join(testFileDir, testFileName);
const outputFilePath = path.join(outFileDir, testFileName);
const expectFilePath = path.join(expectFileDir, testFileName);
it('bundle_file#' + testFileName, function () {
if (fs.existsSync(outputFilePath)) {
fs.rmSync(outputFilePath);
}
execFileSync(nodeExecute, [
'build/bundle.js', '-s',
'-i', `${testFilePath}`,
'-o', `${outputFilePath}`,
'-t'
]);
const outputFileContent: string = fs.readFileSync(outputFilePath, 'utf-8').replace(/\r\n/g, '\n');
const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
expect(outputFileContent).eql(expectFileContent);
});
});
});
describe('testBundleMultiFiles', function () {
const testFileDir = path.join(__dirname, '..', '/ut/');
const outFileDir = path.join(__dirname, '..', '/output/testBundleMultiFiles/');
const expectFileDir = path.join(__dirname, '..', '/expect/');
const nodeExecute = process.execPath;
const { execFileSync } = require('child_process');
before(function () {
this.timeout(10000);
execFileSync(nodeExecute, [
'build/bundle.js', '-s',
'-i', `${testFileDir}`,
'-o', `${outFileDir}`,
'-t'
]);
});
const testFileNames = fs.readdirSync(testFileDir);
testFileNames.forEach((testFileName) => {
const outputFilePath = path.join(outFileDir, testFileName);
const expectFilePath = path.join(expectFileDir, testFileName);
it('bundle_dir#' + testFileName, function () {
const outputFileContent: string = fs.readFileSync(outputFilePath, 'utf-8').replace(/\r\n/g, '\n');
const expectFileContent: string = fs.readFileSync(expectFilePath, 'utf-8').replace(/\r\n/g, '\n');
expect(outputFileContent).eql(expectFileContent);
});
});
});