DeepCodeGeniusWeb-vscode/test/util/commonUtil.test.ts

138 lines
4.2 KiB
TypeScript
Raw Permalink Normal View History

2023-05-31 16:10:53 +08:00
// test/commonUtil.test.ts
import { expect } from 'chai';
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import {
createTempSubdirectory,
CommandRun,
runCommandAndWriteOutput,
runCommandStringAndWriteOutput,
getLanguageIdByFileName,
} from '../../src/util/commonUtil';
import { UiUtilWrapper } from '../../src/util/uiUtil';
import sinon from 'sinon';
describe('commonUtil', () => {
afterEach(() => {
sinon.restore();
});
describe('createTempSubdirectory', () => {
it('should create a temporary subdirectory', () => {
const tempDir = os.tmpdir();
const subdir = 'test-subdir';
const targetDir = createTempSubdirectory(subdir);
expect(targetDir.startsWith(path.join(tempDir, subdir))).to.be.true;
expect(fs.existsSync(targetDir)).to.be.true;
fs.rmdirSync(targetDir, { recursive: true });
});
});
describe('CommandRun', () => {
it('should run a command and capture stdout and stderr', async () => {
const command = 'echo';
const args = ['hello', 'world'];
const options = { shell: true };
const run = new CommandRun();
const result = await run.spawnAsync(command, args, options, undefined, undefined, undefined, undefined);
expect(result.exitCode).to.equal(0);
expect(result.stdout.trim()).to.equal('hello world');
expect(result.stderr).to.equal('');
});
it('should run a command and write output to a file', async () => {
const command = 'echo';
const args = ['hello', 'world'];
const options = { shell: true };
const outputFile = path.join(os.tmpdir(), 'test-output.txt');
const run = new CommandRun();
const result = await run.spawnAsync(command, args, options, undefined, undefined, undefined, outputFile);
expect(result.exitCode).to.equal(0);
expect(result.stdout.trim()).to.equal('hello world');
expect(result.stderr).to.equal('');
expect(fs.readFileSync(outputFile, 'utf-8').trim()).to.equal('hello world');
fs.unlinkSync(outputFile);
});
it('should handle command not found error and output the error message', async () => {
const command = 'nonexistent-command';
const args: string[] = [];
const options = { shell: true };
const run = new CommandRun();
const result = await run.spawnAsync(
command,
args,
options,
undefined,
undefined,
undefined,
undefined
);
expect(result.exitCode).to.not.equal(0);
expect(result.stderr).to.include(`${command}: command not found`);
});
});
describe('runCommandAndWriteOutput', () => {
it('should run a command and write output to a file', async () => {
const command = 'echo';
const args: string[] = ['hello', 'world'];
const outputFile = path.join(os.tmpdir(), 'test-output.txt');
await runCommandAndWriteOutput(command, args, outputFile);
expect(fs.readFileSync(outputFile, 'utf-8').trim()).to.equal('hello world');
fs.unlinkSync(outputFile);
});
});
describe('runCommandStringAndWriteOutput', () => {
it('should run a command string and write output to a file', async () => {
const commandString = 'echo hello world';
const outputFile = path.join(os.tmpdir(), 'test-output.txt');
await runCommandStringAndWriteOutput(commandString, outputFile);
const fileContent = fs.readFileSync(outputFile, 'utf-8').trim();
const parsedContent = JSON.parse(fileContent);
expect(parsedContent.command).to.equal(commandString);
expect(parsedContent.content.trim()).to.equal('hello world');
fs.unlinkSync(outputFile);
});
});
describe('getLanguageIdByFileName', () => {
beforeEach(() => {
sinon.stub(UiUtilWrapper, 'languageId').callsFake(async (fileName: string) => {
const languageIds: { [key: string]: string } = {
'test.py': 'python',
'test.js': 'javascript',
'test.ts': 'typescript',
};
return languageIds[fileName];
});
});
afterEach(() => {
sinon.restore();
});
it('should return the correct language ID for a given file name', async () => {
expect(await getLanguageIdByFileName('test.py')).to.equal('python');
expect(await getLanguageIdByFileName('test.js')).to.equal('javascript');
expect(await getLanguageIdByFileName('test.ts')).to.equal('typescript');
expect(await getLanguageIdByFileName('test.unknown')).to.equal(undefined);
});
});
});