mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-02-16 19:33:11 +08:00
Bug fixes:
- utils.js: glob-to-regex conversion now escapes all regex special chars
(+, ^, $, |, (), {}, [], \) before converting * and ? wildcards
- validate-hooks.js: escape sequence processing order corrected —
\\\\ now processed before \\n and \\t to prevent double-processing
- 6 hooks: added process.stdin.setEncoding('utf8') to prevent
multi-byte UTF-8 character corruption at chunk boundaries
(check-console-log, post-edit-format, post-edit-typecheck,
post-edit-console-warn, session-end, evaluate-session)
New tests (37):
- CI validator test suite (tests/ci/validators.test.js):
- validate-agents: 9 tests (real project, frontmatter parsing,
BOM/CRLF, colons in values, missing fields, non-md skip)
- validate-hooks: 13 tests (real project, invalid JSON, invalid
event types, missing fields, async/timeout validation, inline JS
syntax, array commands, legacy format)
- validate-skills: 6 tests (real project, missing SKILL.md, empty
files, non-directory entries)
- validate-commands: 5 tests (real project, empty files, non-md skip)
- validate-rules: 4 tests (real project, empty files)
Total test count: 228 (up from 191)
81 lines
3.2 KiB
JavaScript
81 lines
3.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Run all tests
|
|
*
|
|
* Usage: node tests/run-all.js
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
|
|
const testsDir = __dirname;
|
|
const testFiles = [
|
|
'lib/utils.test.js',
|
|
'lib/package-manager.test.js',
|
|
'lib/session-manager.test.js',
|
|
'lib/session-aliases.test.js',
|
|
'hooks/hooks.test.js',
|
|
'integration/hooks.test.js',
|
|
'ci/validators.test.js'
|
|
];
|
|
|
|
console.log('╔══════════════════════════════════════════════════════════╗');
|
|
console.log('║ Everything Claude Code - Test Suite ║');
|
|
console.log('╚══════════════════════════════════════════════════════════╝');
|
|
console.log();
|
|
|
|
let totalPassed = 0;
|
|
let totalFailed = 0;
|
|
let totalTests = 0;
|
|
|
|
for (const testFile of testFiles) {
|
|
const testPath = path.join(testsDir, testFile);
|
|
|
|
if (!fs.existsSync(testPath)) {
|
|
console.log(`⚠ Skipping ${testFile} (file not found)`);
|
|
continue;
|
|
}
|
|
|
|
console.log(`\n━━━ Running ${testFile} ━━━`);
|
|
|
|
try {
|
|
const output = execSync(`node "${testPath}"`, {
|
|
encoding: 'utf8',
|
|
stdio: ['pipe', 'pipe', 'pipe']
|
|
});
|
|
console.log(output);
|
|
|
|
// Parse results from output
|
|
const passedMatch = output.match(/Passed:\s*(\d+)/);
|
|
const failedMatch = output.match(/Failed:\s*(\d+)/);
|
|
|
|
if (passedMatch) totalPassed += parseInt(passedMatch[1], 10);
|
|
if (failedMatch) totalFailed += parseInt(failedMatch[1], 10);
|
|
|
|
} catch (err) {
|
|
console.log(err.stdout || '');
|
|
console.log(err.stderr || '');
|
|
|
|
// Parse results even on failure
|
|
const output = (err.stdout || '') + (err.stderr || '');
|
|
const passedMatch = output.match(/Passed:\s*(\d+)/);
|
|
const failedMatch = output.match(/Failed:\s*(\d+)/);
|
|
|
|
if (passedMatch) totalPassed += parseInt(passedMatch[1], 10);
|
|
if (failedMatch) totalFailed += parseInt(failedMatch[1], 10);
|
|
}
|
|
}
|
|
|
|
totalTests = totalPassed + totalFailed;
|
|
|
|
console.log('\n╔══════════════════════════════════════════════════════════╗');
|
|
console.log('║ Final Results ║');
|
|
console.log('╠══════════════════════════════════════════════════════════╣');
|
|
console.log(`║ Total Tests: ${String(totalTests).padStart(4)} ║`);
|
|
console.log(`║ Passed: ${String(totalPassed).padStart(4)} ✓ ║`);
|
|
console.log(`║ Failed: ${String(totalFailed).padStart(4)} ${totalFailed > 0 ? '✗' : ' '} ║`);
|
|
console.log('╚══════════════════════════════════════════════════════════╝');
|
|
|
|
process.exit(totalFailed > 0 ? 1 : 0);
|