-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrun_tests.js
More file actions
98 lines (86 loc) · 2.92 KB
/
Copy pathrun_tests.js
File metadata and controls
98 lines (86 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const fs = require('fs');
const path = require('path');
const vm = require('vm');
// Configuration
const TEST_DIR = path.join(__dirname, 'tests');
const APP_FILES = ['shared.js']; // Files to load into the test context
// Colors for output
const GREEN = '\x1b[32m';
const RED = '\x1b[31m';
const RESET = '\x1b[0m';
const BOLD = '\x1b[1m';
function loadAppCode() {
const context = vm.createContext({
console: console,
// Mock browser globals if needed
window: {},
navigator: {},
global: {}, // Add global for tests that use it
require,
process,
Buffer,
setTimeout,
clearTimeout,
generateUUID: () => 'mock-uuid-' + Math.random().toString(36).substr(2, 9),
fmt: (n) => n,
});
for (const file of APP_FILES) {
const code = fs.readFileSync(path.join(__dirname, file), 'utf8');
try {
vm.runInContext(code, context, { filename: file });
} catch (e) {
console.error(`${RED}Error loading ${file}:${RESET}`, e);
process.exit(1);
}
}
return context;
}
function runTests() {
if (!fs.existsSync(TEST_DIR)) {
console.error(`Test directory ${TEST_DIR} not found.`);
process.exit(1);
}
const testFiles = fs.readdirSync(TEST_DIR).filter(f => f.endsWith('.js'));
let totalPassed = 0;
let totalFailed = 0;
console.log(`${BOLD}Running ${testFiles.length} test files...${RESET}\n`);
for (const file of testFiles) {
console.log(`📄 ${BOLD}${file}${RESET}`);
const context = loadAppCode();
context.__dirname = TEST_DIR;
context.__filename = path.join(TEST_DIR, file);
// Add test helpers to context
context.assert = require('assert');
context.testResults = { passed: 0, failed: 0 };
context.runTest = (name, fn) => {
try {
fn();
console.log(` ${GREEN}✓${RESET} ${name}`);
context.testResults.passed++;
} catch (e) {
console.error(` ${RED}✗${RESET} ${name}`);
console.error(` ${e.message}`);
context.testResults.failed++;
}
};
const testCode = fs.readFileSync(path.join(TEST_DIR, file), 'utf8');
try {
vm.runInContext(testCode, context, { filename: file });
totalPassed += context.testResults.passed;
totalFailed += context.testResults.failed;
} catch (e) {
console.error(`${RED}Error running ${file}:${RESET}`, e);
totalFailed++;
}
console.log(''); // Newline
}
console.log(`${BOLD}Summary:${RESET}`);
console.log(`${GREEN}${totalPassed} passed${RESET}`);
if (totalFailed > 0) {
console.log(`${RED}${totalFailed} failed${RESET}`);
process.exit(1);
} else {
console.log('All tests passed! 🎉');
}
}
runTests();