Initial version
This commit is contained in:
115
tests/test-runner-node.js
Normal file
115
tests/test-runner-node.js
Normal file
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
// Node.js Test Runner for Dragon Code V2.6
|
||||
// Loads all dependencies and runs tests in Node environment
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Simulate browser environment
|
||||
global.window = {};
|
||||
|
||||
// Load dependencies
|
||||
function loadScript(filename) {
|
||||
const filepath = path.join(__dirname, '..', filename);
|
||||
const content = fs.readFileSync(filepath, 'utf8');
|
||||
eval(content);
|
||||
}
|
||||
|
||||
// Load all JS files
|
||||
try {
|
||||
loadScript('js/species-data.js');
|
||||
loadScript('js/tags-data.js');
|
||||
loadScript('js/parser.js');
|
||||
loadScript('js/decoder.js');
|
||||
|
||||
// Load test files
|
||||
const testDataPath = path.join(__dirname, 'test-data.js');
|
||||
const testData = fs.readFileSync(testDataPath, 'utf8');
|
||||
eval(testData);
|
||||
|
||||
const testRunnerPath = path.join(__dirname, 'test-runner.js');
|
||||
const testRunner = fs.readFileSync(testRunnerPath, 'utf8');
|
||||
eval(testRunner);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error loading scripts:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Run tests
|
||||
console.log('='.repeat(80));
|
||||
console.log('Dragon Code V2.6 - Automated Test Suite');
|
||||
console.log('='.repeat(80));
|
||||
console.log('');
|
||||
|
||||
const runner = new TestRunner();
|
||||
const results = runner.runAll();
|
||||
const summary = runner.generateSummary();
|
||||
|
||||
console.log('');
|
||||
console.log('='.repeat(80));
|
||||
console.log('DETAILED FAILURES');
|
||||
console.log('='.repeat(80));
|
||||
console.log('');
|
||||
|
||||
// Show only failures
|
||||
let failureCount = 0;
|
||||
results.details.forEach(detail => {
|
||||
if (!detail.passed) {
|
||||
failureCount++;
|
||||
console.log(`[${detail.category.toUpperCase()}] ${detail.test}`);
|
||||
console.log(` Expected: ${JSON.stringify(detail.expected)}`);
|
||||
console.log(` Got: ${detail.actual || 'null'}`);
|
||||
if (detail.error) {
|
||||
console.log(` Error: ${detail.error}`);
|
||||
}
|
||||
console.log('');
|
||||
}
|
||||
});
|
||||
|
||||
if (failureCount === 0) {
|
||||
console.log('🎉 All tests passed! No failures to report.');
|
||||
}
|
||||
|
||||
console.log('');
|
||||
console.log('='.repeat(80));
|
||||
console.log('SUMMARY BY CATEGORY');
|
||||
console.log('='.repeat(80));
|
||||
console.log('');
|
||||
|
||||
// Group by category and show stats
|
||||
const categoryStats = {};
|
||||
results.details.forEach(detail => {
|
||||
if (!categoryStats[detail.category]) {
|
||||
categoryStats[detail.category] = { passed: 0, failed: 0, total: 0 };
|
||||
}
|
||||
categoryStats[detail.category].total++;
|
||||
if (detail.passed) {
|
||||
categoryStats[detail.category].passed++;
|
||||
} else {
|
||||
categoryStats[detail.category].failed++;
|
||||
}
|
||||
});
|
||||
|
||||
for (const [category, stats] of Object.entries(categoryStats)) {
|
||||
const passRate = ((stats.passed / stats.total) * 100).toFixed(1);
|
||||
const status = stats.failed === 0 ? '✓' : '✗';
|
||||
console.log(`${status} ${category.padEnd(20)} ${stats.passed}/${stats.total} (${passRate}%)`);
|
||||
}
|
||||
|
||||
console.log('');
|
||||
console.log('='.repeat(80));
|
||||
|
||||
// Write results to file
|
||||
const outputPath = path.join(__dirname, 'test-results.json');
|
||||
fs.writeFileSync(outputPath, JSON.stringify({
|
||||
summary,
|
||||
results: results.details,
|
||||
categoryStats
|
||||
}, null, 2));
|
||||
|
||||
console.log(`\nDetailed results written to: ${outputPath}`);
|
||||
|
||||
// Exit with error code if tests failed
|
||||
process.exit(results.failed > 0 ? 1 : 0);
|
||||
Reference in New Issue
Block a user