ba44b435e7
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
87 lines
3.4 KiB
JavaScript
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();
|