universal-test-runner.js•2.09 kB
const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');
const PACKAGES = [
'mcp-types', 'server', 'tools-cas', 'tools-constants',
'tools-data-io', 'tools-distributed', 'tools-export',
'tools-external', 'tools-graphing-calculator', 'tools-ml',
'tools-nli', 'tools-orchestrator', 'tools-plot',
'tools-quantum', 'tools-report', 'tools-signal',
'tools-statmech', 'tools-tensor', 'tools-units',
'validation', 'python-worker'
];
// Check for flags
const coverageFlag = process.argv.includes('--coverage') ? ' --coverage' : '';
const watchFlag = process.argv.includes('--watch') ? ' --watch' : '';
function runPackageTests(pkg) {
const pkgPath = path.join(__dirname, '..', 'packages', pkg);
const testDir = path.join(pkgPath, 'test');
// Create test directory if missing
if (!fs.existsSync(testDir)) {
fs.mkdirSync(testDir, { recursive: true });
}
// Create basic test if missing
const testFile = path.join(testDir, 'basic.test.js');
if (!fs.existsSync(testFile)) {
fs.writeFileSync(testFile, 'test("Basic test", () => expect(true).toBe(true));');
}
// Run tests using local Jest installation
try {
console.log(`🔧 Running tests for ${pkg}`);
execSync(`node node_modules/jest/bin/jest.js ${testDir} --config="${path.join(__dirname, '..', 'jest.config.base.json')}"${coverageFlag}${watchFlag}`, {
stdio: 'inherit',
cwd: path.join(__dirname, '..')
});
console.log(`✅ ${pkg} tests passed\n`);
return true;
} catch (error) {
console.error(`❌ ${pkg} tests failed: ${error.message}`);
return false;
}
}
console.log('🚀 Starting universal test suite for Phys-MCP');
const results = PACKAGES.map(runPackageTests);
const passed = results.filter(success => success).length;
console.log(`\n📊 Test Summary:`);
console.log(`✅ ${passed}/${PACKAGES.length} packages passed`);
console.log(`❌ ${PACKAGES.length - passed}/${PACKAGES.length} packages failed`);
console.log('🏁 Test suite completed');
process.exit(passed === PACKAGES.length ? 0 : 1);