Files
cv-site/tests/mjs/33-keyboard-shortcuts-refactored.test.mjs
T
juanatsap ba44b435e7 refactor: Major hyperscript refactoring and JS elimination
Inline Hyperscript Refactoring:
- Body tag keyboard handlers: 20→8 lines (using helper functions)
- Zoom control handlers: 85→35 lines (using zoom._hs)
- PDF modal card selection: 90→6 lines (3 identical blocks eliminated)

New Hyperscript Files:
- zoom._hs: handleZoomInput, handleZoomReset, initZoomControl
- pdf-modal._hs: selectPdfCard, handlePdfCardKey

JavaScript Elimination (232 lines removed):
- cv-functions.js: REMOVED - hyperscript defs are globally available
- scroll-at-bottom-handler.js: REMOVED - duplicate of handleScroll()
- footer-buttons-interaction.js: REMOVED - moved to hyperscript

Added Tests:
- 32-hyperscript-multi-src.test.mjs: Verifies multi-file loading
- 33-keyboard-shortcuts-refactored.test.mjs: Keyboard shortcuts
- 34-hyperscript-refactor-comprehensive.test.mjs: Full test suite

Key Findings:
- No hyperscript multi-file bug in 0.9.14
- Hyperscript def statements are globally accessible
- Previous refactoring failures were syntax errors, not library bugs
2025-11-30 05:58:44 +00:00

87 lines
3.4 KiB
JavaScript

/**
* Test keyboard shortcuts after refactoring to use external helper functions
*/
import puppeteer from 'puppeteer';
const BASE_URL = 'http://localhost:1999';
async function testKeyboardShortcuts() {
console.log('🧪 KEYBOARD SHORTCUTS TEST (Refactored)\n');
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox']
});
const page = await browser.newPage();
const errors = [];
page.on('pageerror', err => errors.push(err.message));
page.on('console', msg => {
if (msg.type() === 'error') errors.push(msg.text());
});
try {
await page.goto(BASE_URL, { waitUntil: 'networkidle2', timeout: 15000 });
// Test '?' shortcut - opens modal
console.log("Testing '?' shortcut...");
await page.keyboard.press('?');
await new Promise(r => setTimeout(r, 400));
const modalOpen = await page.evaluate(() => {
const m = document.getElementById('shortcuts-modal');
return m && m.open;
});
console.log(` '?' opens modal: ${modalOpen ? '✅ PASS' : '❌ FAIL'}`);
// Close modal
if (modalOpen) {
await page.keyboard.press('Escape');
await new Promise(r => setTimeout(r, 200));
}
// Test 'V' shortcut - toggles theme
console.log("Testing 'V' shortcut...");
const vBefore = await page.evaluate(() => document.getElementById('themeToggle')?.checked);
await page.keyboard.press('v');
await new Promise(r => setTimeout(r, 400));
const vAfter = await page.evaluate(() => document.getElementById('themeToggle')?.checked);
const vWorks = vBefore !== vAfter;
console.log(` 'V' toggles theme: ${vWorks ? '✅ PASS' : '❌ FAIL'} (${vBefore}${vAfter})`);
// Test 'L' shortcut - toggles length
console.log("Testing 'L' shortcut...");
const lBefore = await page.evaluate(() => document.getElementById('lengthToggle')?.checked);
await page.keyboard.press('l');
await new Promise(r => setTimeout(r, 400));
const lAfter = await page.evaluate(() => document.getElementById('lengthToggle')?.checked);
const lWorks = lBefore !== lAfter;
console.log(` 'L' toggles length: ${lWorks ? '✅ PASS' : '❌ FAIL'} (${lBefore}${lAfter})`);
// Test 'I' shortcut - toggles icons
console.log("Testing 'I' shortcut...");
const iBefore = await page.evaluate(() => document.getElementById('iconToggle')?.checked);
await page.keyboard.press('i');
await new Promise(r => setTimeout(r, 400));
const iAfter = await page.evaluate(() => document.getElementById('iconToggle')?.checked);
const iWorks = iBefore !== iAfter;
console.log(` 'I' toggles icons: ${iWorks ? '✅ PASS' : '❌ FAIL'} (${iBefore}${iAfter})`);
// Summary
console.log('\n=== SUMMARY ===');
const allPass = modalOpen && vWorks && lWorks && iWorks;
console.log(`All shortcuts work: ${allPass ? '✅ ALL PASS' : '❌ SOME FAILED'}`);
console.log(`Console errors: ${errors.length ? errors.join(', ') : 'None'}`);
await browser.close();
process.exit(allPass && errors.length === 0 ? 0 : 1);
} catch (error) {
console.error('Test error:', error.message);
await browser.close();
process.exit(1);
}
}
testKeyboardShortcuts();