GitNexus/gitnexus/test/unit/parser-loader.test.ts
abhigyanpatwari 8a100a76d3 test: add test suite with vitest (unit + integration + fixtures)
- 59 test files covering unit and integration tests
- vitest config with coverage thresholds and fork pooling
- Test fixtures (mini-repo + multi-language sample code)
- Add vitest + coverage-v8 to devDependencies
- Add test scripts (test, test:integration, test:all, test:watch, test:coverage)
- Move typescript to devDependencies where it belongs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 20:07:02 +05:30

87 lines
3.1 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { loadParser, loadLanguage } from '../../src/core/tree-sitter/parser-loader.js';
import { SupportedLanguages } from '../../src/config/supported-languages.js';
describe('parser-loader', () => {
describe('loadParser', () => {
it('returns a Parser instance', async () => {
const parser = await loadParser();
expect(parser).toBeDefined();
expect(typeof parser.parse).toBe('function');
});
it('returns the same singleton instance', async () => {
const parser1 = await loadParser();
const parser2 = await loadParser();
expect(parser1).toBe(parser2);
});
});
describe('loadLanguage', () => {
it('loads TypeScript language', async () => {
await expect(loadLanguage(SupportedLanguages.TypeScript)).resolves.not.toThrow();
});
it('loads JavaScript language', async () => {
await expect(loadLanguage(SupportedLanguages.JavaScript)).resolves.not.toThrow();
});
it('loads Python language', async () => {
await expect(loadLanguage(SupportedLanguages.Python)).resolves.not.toThrow();
});
it('loads Java language', async () => {
await expect(loadLanguage(SupportedLanguages.Java)).resolves.not.toThrow();
});
it('loads C language', async () => {
await expect(loadLanguage(SupportedLanguages.C)).resolves.not.toThrow();
});
it('loads C++ language', async () => {
await expect(loadLanguage(SupportedLanguages.CPlusPlus)).resolves.not.toThrow();
});
it('loads C# language', async () => {
await expect(loadLanguage(SupportedLanguages.CSharp)).resolves.not.toThrow();
});
it('loads Go language', async () => {
await expect(loadLanguage(SupportedLanguages.Go)).resolves.not.toThrow();
});
it('loads Rust language', async () => {
await expect(loadLanguage(SupportedLanguages.Rust)).resolves.not.toThrow();
});
it('loads PHP language', async () => {
await expect(loadLanguage(SupportedLanguages.PHP)).resolves.not.toThrow();
});
it('loads TSX grammar for .tsx files', async () => {
// TSX uses a different grammar (TypeScript.tsx vs TypeScript.typescript)
await expect(loadLanguage(SupportedLanguages.TypeScript, 'Component.tsx')).resolves.not.toThrow();
});
it('loads TS grammar for .ts files', async () => {
await expect(loadLanguage(SupportedLanguages.TypeScript, 'utils.ts')).resolves.not.toThrow();
});
it('throws for unsupported language', async () => {
await expect(loadLanguage('ruby' as SupportedLanguages)).rejects.toThrow('Unsupported language');
});
});
describe('Swift optional dependency', () => {
it('handles Swift loading gracefully', async () => {
// Swift is optional — it either loads successfully or throws an error about unsupported language
try {
await loadLanguage(SupportedLanguages.Swift);
// If it succeeds, tree-sitter-swift is installed
} catch (e: any) {
// If it fails, it should be because tree-sitter-swift is not installed
expect(e.message).toContain('Unsupported language');
}
});
});
});