run-comprehensive-tests.jsโข4.35 kB
#!/usr/bin/env node
import { execSync } from 'child_process';
import { existsSync } from 'fs';
async function runAllTests() {
console.log('๐งช Running comprehensive test suite for language support changes...\n');
const tests = [
{
name: 'Rust Unit Tests',
command: 'cd rust-core && cargo test',
critical: true
},
{
name: 'TypeScript Unit Tests',
command: 'npm test',
critical: true
},
{
name: 'Comprehensive Language Support',
command: 'node tests/test-comprehensive-language-support.js',
critical: true
},
{
name: 'File Extension Mapping',
command: 'node tests/test-file-extension-mapping.js',
critical: true
},
{
name: 'Existing Language Detection',
command: 'node tests/test-lang-detect.js',
critical: false
},
{
name: 'Tree-sitter Debug',
command: 'node tests/test-tree-sitter-debug.js',
critical: false
}
];
let passed = 0;
let failed = 0;
const results = [];
for (const test of tests) {
console.log(`๐ Running: ${test.name}`);
console.log(` Command: ${test.command}`);
try {
const output = execSync(test.command, {
encoding: 'utf-8',
timeout: 60000, // 60 second timeout
maxBuffer: 1024 * 1024 * 10 // 10MB buffer
});
console.log(` โ
PASSED`);
if (output.includes('โ') || output.includes('FAIL')) {
console.log(` โ ๏ธ Warning: Output contains failure indicators`);
console.log(' Output excerpt:', output.split('\n').slice(-5).join('\n'));
}
passed++;
results.push({ name: test.name, status: 'passed', critical: test.critical });
} catch (error) {
console.log(` โ FAILED`);
console.log(` Error: ${error.message}`);
if (error.stdout) {
console.log(' Stdout:', error.stdout.split('\n').slice(-3).join('\n'));
}
if (error.stderr) {
console.log(' Stderr:', error.stderr.split('\n').slice(-3).join('\n'));
}
failed++;
results.push({
name: test.name,
status: 'failed',
error: error.message,
critical: test.critical
});
// Stop on critical test failures
if (test.critical) {
console.log(`\n๐ฅ Critical test failed: ${test.name}`);
console.log(' Stopping test execution due to critical failure.\n');
break;
}
}
console.log('');
}
// Final summary
console.log('๐ Test Suite Summary:');
console.log(` โ
Passed: ${passed}`);
console.log(` โ Failed: ${failed}`);
console.log(` ๐ Success Rate: ${Math.round((passed / (passed + failed)) * 100)}%`);
console.log('\n๐ Detailed Results:');
results.forEach(result => {
const icon = result.status === 'passed' ? 'โ
' : 'โ';
const critical = result.critical ? ' (CRITICAL)' : '';
console.log(` ${icon} ${result.name}${critical}`);
if (result.error) {
console.log(` Error: ${result.error}`);
}
});
// Check if we can build
console.log('\n๐จ Testing build process...');
try {
console.log(' Building Rust core...');
execSync('cd rust-core && cargo build', { encoding: 'utf-8' });
console.log(' โ
Rust build successful');
console.log(' Building TypeScript...');
execSync('npm run build', { encoding: 'utf-8' });
console.log(' โ
TypeScript build successful');
} catch (buildError) {
console.log(' โ Build failed:', buildError.message);
failed++;
}
// Overall assessment
const criticalFailures = results.filter(r => r.status === 'failed' && r.critical).length;
if (criticalFailures === 0 && passed > failed) {
console.log('\n๐ All critical tests passed! Changes are ready for commit.');
console.log(' โจ Language support expansion appears successful.');
process.exit(0);
} else {
console.log('\nโ ๏ธ Some tests failed. Review failures before committing.');
if (criticalFailures > 0) {
console.log(` ๐ฅ ${criticalFailures} critical failure(s) detected.`);
}
process.exit(1);
}
}
runAllTests().catch(error => {
console.error('๐ฅ Test runner failed:', error);
process.exit(1);
});