#!/usr/bin/env node
/**
* Comprehensive test script for all search engines
* Tests Bing, Brave, and DuckDuckGo search functionality
*/
import { SearchEngine } from '../dist/search-engine.js';
async function testSearchEngine(query = 'javascript programming', numResults = 3) {
console.log('๐ Testing Web Search MCP Server - All Engines');
console.log('===============================================');
console.log(`Query: "${query}"`);
console.log(`Expected results: ${numResults}`);
console.log('');
const searchEngine = new SearchEngine();
try {
const startTime = Date.now();
const result = await searchEngine.search({
query,
numResults,
timeout: 15000 // 15 second timeout
});
const endTime = Date.now();
console.log(`โก Search completed in ${endTime - startTime}ms`);
console.log(`๐ฏ Engine used: ${result.engine}`);
console.log(`๐ Results found: ${result.results.length}`);
console.log('');
if (result.results.length === 0) {
console.log('โ No results found!');
return false;
}
console.log('๐ Results:');
console.log('===========');
result.results.forEach((item, index) => {
console.log(`${index + 1}. ${item.title}`);
console.log(` ๐ ${item.url}`);
console.log(` ๐ ${item.description.substring(0, 100)}${item.description.length > 100 ? '...' : ''}`);
console.log('');
});
// Validate results
const validResults = result.results.filter(r =>
r.title &&
r.title !== 'No title' &&
r.url &&
r.url.startsWith('http') &&
r.description &&
r.description !== 'No description available'
);
console.log(`โ
Valid results: ${validResults.length}/${result.results.length}`);
if (validResults.length === 0) {
console.log('โ No valid results found!');
return false;
}
return true;
} catch (error) {
console.error('โ Search failed:', error.message);
return false;
} finally {
await searchEngine.closeAll();
}
}
async function runTests() {
console.log('๐งช Running comprehensive search engine tests...');
console.log('================================================');
const testQueries = [
'javascript programming',
'climate change effects',
'machine learning basics'
];
let passedTests = 0;
const totalTests = testQueries.length;
for (let i = 0; i < testQueries.length; i++) {
const query = testQueries[i];
console.log(`\n๐ Test ${i + 1}/${totalTests}: "${query}"`);
console.log('โ'.repeat(50));
const success = await testSearchEngine(query, 5);
if (success) {
passedTests++;
console.log('โ
Test PASSED');
} else {
console.log('โ Test FAILED');
}
if (i < testQueries.length - 1) {
console.log('\nโณ Waiting 2 seconds before next test...');
await new Promise(resolve => setTimeout(resolve, 2000));
}
}
console.log('\n๐ Test Summary');
console.log('===============');
console.log(`Tests passed: ${passedTests}/${totalTests}`);
console.log(`Success rate: ${Math.round((passedTests / totalTests) * 100)}%`);
if (passedTests === totalTests) {
console.log('๐ All tests passed!');
process.exit(0);
} else {
console.log('โ ๏ธ Some tests failed');
process.exit(1);
}
}
// Run tests if this script is executed directly
if (import.meta.url === `file://${process.argv[1]}`) {
runTests().catch(console.error);
}
export { testSearchEngine, runTests };