72 lines
3.3 KiB
JavaScript
72 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* run-tests.js
|
|
* Orchestrates all 4 test cases.
|
|
* Usage: node tests/run-tests.js [--skip-transcode]
|
|
*
|
|
* Options:
|
|
* --skip-transcode Skip test3 (which runs actual FFmpeg x265 encode)
|
|
*/
|
|
|
|
const args = process.argv.slice(2);
|
|
const skipTranscode = args.includes('--skip-transcode');
|
|
|
|
const tests = [
|
|
{ name: 'Test 1 — Film 23.976fps (AC3 ITA + EAC3 ENG)', file: './test-cases/test1-movie-23976fps', heavy: false },
|
|
{ name: 'Test 2 — Anime 25fps DTS ITA (Naruto)', file: './test-cases/test2-anime-25fps', heavy: false },
|
|
{ name: 'Test 3 — Ultrawide 3840x1600 Scale', file: './test-cases/test3-ultrawide', heavy: true },
|
|
{ name: 'Test 4 — Subtitle Extraction (forced + SDH)', file: './test-cases/test4-subtitles', heavy: false },
|
|
{ name: 'Test 5 — Copy/Replace Progress & Subtitle Rules', file: './test-cases/test-copy-and-subtitles', heavy: false },
|
|
];
|
|
|
|
async function main() {
|
|
console.log('╔══════════════════════════════════════════════════════════╗');
|
|
console.log('║ Tdarr Plugin Suite — Test Runner ║');
|
|
console.log('╚══════════════════════════════════════════════════════════╝\n');
|
|
|
|
const results = [];
|
|
|
|
for (const test of tests) {
|
|
if (test.heavy && skipTranscode) {
|
|
console.log(`[SKIP] ${test.name} (--skip-transcode)\n`);
|
|
results.push({ name: test.name, status: 'SKIPPED' });
|
|
continue;
|
|
}
|
|
|
|
console.log(`[RUN] ${test.name}`);
|
|
try {
|
|
const fn = require(test.file);
|
|
await fn();
|
|
results.push({ name: test.name, status: 'PASSED' });
|
|
} catch (err) {
|
|
console.error(`\n[FAIL] ${test.name}\n ${err.message}\n`);
|
|
results.push({ name: test.name, status: 'FAILED', error: err.message });
|
|
}
|
|
}
|
|
|
|
// ── Summary ───────────────────────────────────────────────────────────────
|
|
console.log('\n╔══════════════════════════════════════════════════════════╗');
|
|
console.log('║ SUMMARY ║');
|
|
console.log('╚══════════════════════════════════════════════════════════╝\n');
|
|
|
|
let passed = 0, failed = 0, skipped = 0;
|
|
for (const r of results) {
|
|
const icon = r.status === 'PASSED' ? '[OK]' : r.status === 'SKIPPED' ? '[--]' : '[!!]';
|
|
console.log(` ${icon} ${r.name}`);
|
|
if (r.error) console.log(` Error: ${r.error}`);
|
|
if (r.status === 'PASSED') passed++;
|
|
if (r.status === 'FAILED') failed++;
|
|
if (r.status === 'SKIPPED') skipped++;
|
|
}
|
|
|
|
console.log(`\n Results: ${passed} passed, ${failed} failed, ${skipped} skipped\n`);
|
|
|
|
if (failed > 0) process.exit(1);
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error('Fatal error:', err);
|
|
process.exit(1);
|
|
});
|