uncloseai.com/simple_tests.js

113 lines
No EOL
3.9 KiB
JavaScript

// Simple tests that don't require DOM or external dependencies
import { promises as fs } from 'fs';
import path from 'path';
const srcDir = './src';
async function runSimpleTests() {
console.log('🧪 Running Simple Tests\n');
let tests = 0;
let passed = 0;
let failed = 0;
function test(description, testFn) {
tests++;
try {
testFn();
console.log(`${description}`);
passed++;
} catch (error) {
console.error(`${description}`);
console.error(` Error: ${error.message}`);
failed++;
}
}
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
// Test 1: Core files exist
test('Core JavaScript files exist', async () => {
const coreFiles = [
'ui.js', 'translation.js', 'tts.js', 'chat.js', 'config.js',
'widget-library.js', 'tts-modal.js', 'translate-modal.js',
'uncloseai-embed-modal.js'
];
for (const file of coreFiles) {
const filePath = path.join(srcDir, file);
try {
await fs.access(filePath);
} catch (error) {
throw new Error(`File ${file} does not exist`);
}
}
});
// Test 2: Language files exist
test('Language files structure is correct', async () => {
const langDir = path.join(srcDir, 'languages');
const files = await fs.readdir(langDir);
const jsFiles = files.filter(f => f.endsWith('.js'));
assert(jsFiles.length >= 18, `Expected at least 18 language files, found ${jsFiles.length}`);
assert(jsFiles.includes('index.js'), 'Missing languages/index.js');
assert(jsFiles.includes('en.js'), 'Missing languages/en.js');
});
// Test 3: File sizes are reasonable
test('UI.js size is reasonable after refactoring', async () => {
const content = await fs.readFile(path.join(srcDir, 'ui.js'), 'utf-8');
const lines = content.split('\n').length;
assert(lines < 600, `UI.js is too large: ${lines} lines (expected < 600)`);
assert(lines > 100, `UI.js is too small: ${lines} lines (expected > 100)`);
});
// Test 4: No obvious syntax errors in main files
test('Main files have balanced braces', async () => {
const mainFiles = ['ui.js', 'translation.js', 'tts.js', 'chat.js'];
for (const file of mainFiles) {
const content = await fs.readFile(path.join(srcDir, file), 'utf-8');
const openBraces = (content.match(/{/g) || []).length;
const closeBraces = (content.match(/}/g) || []).length;
assert(openBraces === closeBraces,
`${file} has mismatched braces: ${openBraces} open, ${closeBraces} close`);
}
});
// Test 5: Export statements exist
test('Key files have export statements', async () => {
const filesWithExports = ['ui.js', 'translation.js', 'tts.js', 'widget-library.js'];
for (const file of filesWithExports) {
const content = await fs.readFile(path.join(srcDir, file), 'utf-8');
assert(content.includes('export'), `${file} has no export statements`);
}
});
// Wait for async tests to complete
await new Promise(resolve => setTimeout(resolve, 100));
console.log('\n📊 Simple Test Results:');
console.log('='.repeat(30));
console.log(`Total tests: ${tests}`);
console.log(`Passed: ${passed}`);
console.log(`Failed: ${failed}`);
if (failed === 0) {
console.log('\n🎉 All simple tests passed!');
process.exit(0);
} else {
console.log('\n💥 Some tests failed.');
process.exit(1);
}
}
runSimpleTests().catch(console.error);