Files
cv-site/test-parse-fix.mjs
T
2025-11-17 08:34:50 +00:00

157 lines
5.0 KiB
JavaScript
Executable File

#!/usr/bin/env node
import { chromium } from 'playwright';
(async () => {
console.log('🔍 Testing Hyperscript Parse Fix\n');
console.log('═'.repeat(60));
const browser = await chromium.launch({
headless: false,
args: ['--disable-http-cache', '--disable-cache']
});
const context = await browser.newContext({
ignoreHTTPSErrors: true
});
const page = await context.newPage();
// Track all errors
const errors = [];
page.on('console', msg => {
if (msg.type() === 'error') {
const text = msg.text();
errors.push(text);
console.log(' ❌ [ERROR]', text);
}
});
page.on('pageerror', err => {
errors.push(err.message);
console.log(' ❌ [PAGE ERROR]', err.message);
});
// Load page with cache-busting
const url = `http://localhost:1999/?lang=en&_=${Date.now()}`;
console.log(`📄 Loading: ${url}\n`);
try {
await page.goto(url, { waitUntil: 'networkidle', timeout: 10000 });
} catch (e) {
console.log('⚠️ Navigation timeout (server may be starting)');
console.log(' Error:', e.message);
await browser.close();
process.exit(1);
}
await page.waitForTimeout(3000);
console.log('\n' + '═'.repeat(60));
console.log('TEST RESULTS');
console.log('═'.repeat(60) + '\n');
// 1. Check for parse errors
const parseErrors = errors.filter(e =>
e.includes('Expected') ||
e.includes('found') ||
e.toLowerCase().includes('parse')
);
console.log('1. PARSE ERRORS:');
if (parseErrors.length === 0) {
console.log(' ✅ NONE - Parse fix successful!\n');
} else {
console.log(' ❌ FOUND:', parseErrors.length);
parseErrors.forEach(e => console.log(' -', e));
console.log('');
}
// 2. Check hyperscript loaded
const hsLoaded = await page.evaluate(() => typeof window._hyperscript !== 'undefined');
console.log('2. HYPERSCRIPT LIBRARY:', hsLoaded ? '✅ LOADED' : '❌ NOT LOADED\n');
// 3. Check functions._hs file structure
const fileAnalysis = await page.evaluate(async () => {
try {
const response = await fetch('/static/hyperscript/functions._hs');
const text = await response.text();
// Count if/else vs separate if blocks
const hasIfElse = /if currentScroll > 300[\s\S]*?else[\s\S]*?end/.test(text);
const hasSeparateIfs = /if currentScroll > 300[\s\S]*?end[\s\S]*?if currentScroll <= 300/.test(text);
return {
size: text.length,
hasHandleScroll: text.includes('def handleScroll()'),
hasIfElse: hasIfElse,
hasSeparateIfs: hasSeparateIfs,
hasAtBottom: text.includes('if isAtBottom') && text.includes('if not isAtBottom')
};
} catch (e) {
return { error: e.message };
}
});
console.log('3. FILE STRUCTURE:');
console.log(' - Size:', fileAnalysis.size, 'bytes');
console.log(' - Has handleScroll():', fileAnalysis.hasHandleScroll ? '✅' : '❌');
console.log(' - Uses SEPARATE if blocks:', fileAnalysis.hasSeparateIfs ? '✅ (CORRECT)' : '❌');
console.log(' - Uses if/else:', fileAnalysis.hasIfElse ? '❌ (OLD BROKEN)' : '✅');
console.log(' - Has at-bottom blocks:', fileAnalysis.hasAtBottom ? '✅' : '❌');
console.log('');
// 4. Test scroll behavior
console.log('4. TESTING SCROLL BEHAVIOR:');
// Scroll to top first
await page.evaluate(() => window.scrollTo(0, 0));
await page.waitForTimeout(500);
let btnState = await page.evaluate(() => {
const btn = document.querySelector('#back-to-top');
return {
exists: !!btn,
display: window.getComputedStyle(btn).display
};
});
console.log(' - At top (scroll=0): button display =', btnState.display, btnState.display === 'none' ? '✅' : '❌');
// Scroll down
await page.evaluate(() => window.scrollTo(0, 500));
await page.waitForTimeout(500);
btnState = await page.evaluate(() => {
const btn = document.querySelector('#back-to-top');
return {
display: window.getComputedStyle(btn).display
};
});
console.log(' - At 500px: button display =', btnState.display, btnState.display === 'flex' ? '✅' : '❌');
console.log('\n' + '═'.repeat(60));
// Final verdict
const success = parseErrors.length === 0 &&
fileAnalysis.hasSeparateIfs &&
!fileAnalysis.hasIfElse &&
hsLoaded;
if (success) {
console.log('✅ SUCCESS: All tests passed!');
console.log('\n Parse error is FIXED by using separate if blocks');
console.log(' instead of if/else, matching the working version');
console.log(' from git commit 1f7757c');
} else {
console.log('⚠️ ISSUES DETECTED:');
if (parseErrors.length > 0) console.log(' - Parse errors still present');
if (fileAnalysis.hasIfElse) console.log(' - Still using if/else (needs separate ifs)');
if (!hsLoaded) console.log(' - Hyperscript library not loaded');
}
console.log('═'.repeat(60));
console.log('\n💡 Browser kept open for manual verification');
console.log(' Press Ctrl+C to exit\n');
await new Promise(() => {});
})();