Add test files: fixtures, generators, spec parser, validation

This commit is contained in:
2026-01-30 07:12:55 +00:00
parent 86ee9e595a
commit 088c3b8355

149
test/generators.spec.ts Normal file
View File

@@ -0,0 +1,149 @@
import { generateCode, getOutputFileName, getLanguageExtension } from '../src/generators/code-generator.js';
import { generateCompletion, getCompletionFileName } from '../src/generators/completion-generator.js';
import { generateManPage, generateReadmeSection } from '../src/generators/docs-generator.js';
import { testSpec } from './fixtures.js';
describe('Code Generator', () => {
describe('Python generation', () => {
it('should generate Python code', () => {
const result = generateCode(testSpec, 'python');
expect(result.success).toBe(true);
expect(result.code).toBeDefined();
expect(result.code).toContain('argparse');
expect(result.code).toContain('test-cli');
});
it('should include version info', () => {
const result = generateCode(testSpec, 'python');
expect(result.code).toContain('1.0.0');
});
});
describe('Go generation', () => {
it('should generate Go code', () => {
const result = generateCode(testSpec, 'go');
expect(result.success).toBe(true);
expect(result.code).toBeDefined();
expect(result.code).toContain('flag');
expect(result.code).toContain('test-cli');
});
});
describe('Rust generation', () => {
it('should generate Rust code', () => {
const result = generateCode(testSpec, 'rust');
expect(result.success).toBe(true);
expect(result.code).toBeDefined();
expect(result.code).toContain('test-cli');
});
});
describe('Node.js Commander generation', () => {
it('should generate Node.js Commander code', () => {
const result = generateCode(testSpec, 'node-commander');
expect(result.success).toBe(true);
expect(result.code).toBeDefined();
expect(result.code).toContain('commander');
});
});
describe('Node.js Yargs generation', () => {
it('should generate Node.js Yargs code', () => {
const result = generateCode(testSpec, 'node-yargs');
expect(result.success).toBe(true);
expect(result.code).toBeDefined();
expect(result.code).toContain('yargs');
});
});
describe('file naming', () => {
it('should return correct extension for each language', () => {
expect(getLanguageExtension('python')).toBe('.py');
expect(getLanguageExtension('go')).toBe('.go');
expect(getLanguageExtension('rust')).toBe('.rs');
expect(getLanguageExtension('node-commander')).toBe('.ts');
expect(getLanguageExtension('node-yargs')).toBe('.ts');
});
it('should return correct output file name', () => {
expect(getOutputFileName(testSpec, 'python')).toBe('test-cli.py');
expect(getOutputFileName(testSpec, 'go')).toBe('test-cli.go');
expect(getOutputFileName(testSpec, 'rust')).toBe('test-cli.rs');
});
});
});
describe('Completion Generator', () => {
describe('bash completion', () => {
it('should generate bash completion script', () => {
const result = generateCompletion(testSpec, 'bash');
expect(result.success).toBe(true);
expect(result.script).toBeDefined();
expect(result.script).toContain('test-cli');
expect(result.script).toContain('start');
expect(result.script).toContain('stop');
});
});
describe('zsh completion', () => {
it('should generate zsh completion script', () => {
const result = generateCompletion(testSpec, 'zsh');
expect(result.success).toBe(true);
expect(result.script).toBeDefined();
expect(result.script).toContain('test-cli');
});
});
describe('fish completion', () => {
it('should generate fish completion script', () => {
const result = generateCompletion(testSpec, 'fish');
expect(result.success).toBe(true);
expect(result.script).toBeDefined();
expect(result.script).toContain('test-cli');
});
});
describe('file naming', () => {
it('should return correct completion file name', () => {
expect(getCompletionFileName(testSpec, 'bash')).toBe('_test-cli.bash');
expect(getCompletionFileName(testSpec, 'zsh')).toBe('_test-cli.zsh');
expect(getCompletionFileName(testSpec, 'fish')).toBe('_test-cli.fish');
});
});
});
describe('Docs Generator', () => {
describe('man page', () => {
it('should generate man page', () => {
const result = generateManPage(testSpec);
expect(result.success).toBe(true);
expect(result.content).toBeDefined();
expect(result.content).toContain('test-cli');
expect(result.content).toContain('1');
expect(result.content).toContain('start');
expect(result.content).toContain('stop');
});
});
describe('README section', () => {
it('should generate README section', () => {
const result = generateReadmeSection(testSpec);
expect(result.success).toBe(true);
expect(result.content).toBeDefined();
expect(result.content).toContain('test-cli');
expect(result.content).toContain('## test-cli');
expect(result.content).toContain('### Commands');
});
});
});