this repo has no description
at main 114 lines 4.5 kB view raw
1// test_multiverse.js — Playwright test for multiverse demo (per-package layout) 2const { chromium } = require('playwright'); 3 4(async () => { 5 const browser = await chromium.launch(); 6 const page = await browser.newPage(); 7 8 const consoleMessages = []; 9 page.on('console', msg => consoleMessages.push(msg.text())); 10 11 const errors = []; 12 page.on('pageerror', err => errors.push(err.message)); 13 14 console.log('Navigating to demo5_multiverse.html...'); 15 await page.goto('http://localhost:8080/odoc-interactive-extension/demo5_multiverse.html'); 16 17 // Wait for cells to render and execute (worker init + universe linking + eval) 18 console.log('Waiting for cells to execute...'); 19 await page.waitForTimeout(15000); 20 21 // Check multiverse-specific behavior in console 22 const hasWorkerFrom9090 = consoleMessages.some(m => 23 m.includes('9090')); 24 const hasStdlibFallback = consoleMessages.some(m => 25 m.includes('stdlib_dcs not found') && m.includes('findlib discovery')); 26 const hasStdlibDiscovered = consoleMessages.some(m => 27 m.includes('Found stdlib dcs via findlib')); 28 const hasDcsRewrite = consoleMessages.some(m => 29 m.includes('Rewriting dcs_url')); 30 const hasUniverseLinking = consoleMessages.some(m => 31 m.includes('universes')); 32 const hasInitFinished = consoleMessages.some(m => 33 m.includes('init() finished')); 34 const hasSetupFinished = consoleMessages.some(m => 35 m.includes('setup() finished')); 36 const hasInitError = consoleMessages.some(m => 37 m.includes('init_error')); 38 39 // Check for correct outputs 40 const hasInt7 = consoleMessages.some(m => 41 m.includes('int = 7')); 42 const hasGreeting = consoleMessages.some(m => 43 m.includes('Hello, Multiverse World')); 44 const hasYojsonLoaded = consoleMessages.some(m => 45 m.includes('Custom #require: yojson loaded')); 46 const hasJsonOutput = consoleMessages.some(m => 47 m.includes('"source": "multiverse"') || m.includes('multiverse')); 48 49 console.log(''); 50 console.log('=== Results ==='); 51 console.log(` Worker loaded from port 9090: ${hasWorkerFrom9090 ? 'YES' : 'NO'}`); 52 console.log(` stdlib_dcs fallback triggered: ${hasStdlibFallback ? 'YES' : 'NO'}`); 53 console.log(` Stdlib discovered via findlib: ${hasStdlibDiscovered ? 'YES' : 'NO'}`); 54 console.log(` dcs_url rewritten to absolute: ${hasDcsRewrite ? 'YES' : 'NO'}`); 55 console.log(` Universe linking used: ${hasUniverseLinking ? 'YES' : 'NO'}`); 56 console.log(` Init completed: ${hasInitFinished ? 'YES' : 'NO'}`); 57 console.log(` Setup completed: ${hasSetupFinished ? 'YES' : 'NO'}`); 58 console.log(` Init error: ${hasInitError ? 'YES (BAD)' : 'NO (good)'}`); 59 console.log(` Output "int = 7": ${hasInt7 ? 'YES' : 'NO'}`); 60 console.log(` Output "Hello, Multiverse": ${hasGreeting ? 'YES' : 'NO'}`); 61 console.log(` Yojson loaded via #require: ${hasYojsonLoaded ? 'YES' : 'NO'}`); 62 console.log(` JSON output with "multiverse": ${hasJsonOutput ? 'YES' : 'NO'}`); 63 64 let passed = true; 65 66 if (!hasStdlibFallback) { 67 console.log('\nFAIL: stdlib_dcs fallback was not triggered (multiverse needs it)'); 68 passed = false; 69 } 70 if (!hasStdlibDiscovered) { 71 console.log('\nFAIL: Stdlib was not discovered via findlib universe linking'); 72 passed = false; 73 } 74 if (!hasDcsRewrite) { 75 console.log('\nFAIL: dcs_url was not rewritten to absolute URL'); 76 passed = false; 77 } 78 if (!hasInitFinished) { 79 console.log('\nFAIL: Worker init did not complete'); 80 passed = false; 81 } 82 if (!hasSetupFinished) { 83 console.log('\nFAIL: Worker setup did not complete'); 84 passed = false; 85 } 86 if (hasInitError) { 87 console.log('\nFAIL: Worker reported init_error'); 88 const errMsg = consoleMessages.find(m => m.includes('init_error')); 89 console.log(` ${errMsg}`); 90 passed = false; 91 } 92 if (!hasInt7) { 93 console.log('\nFAIL: Expected output "int = 7" not found'); 94 passed = false; 95 } 96 if (!hasGreeting) { 97 console.log('\nFAIL: Expected output "Hello, Multiverse World" not found'); 98 passed = false; 99 } 100 if (!hasYojsonLoaded) { 101 console.log('\nFAIL: Yojson was not loaded via #require'); 102 passed = false; 103 } 104 105 if (passed) { 106 console.log('\nPASS: Multiverse demo working correctly'); 107 } else { 108 console.log('\n--- Console messages (last 50) ---'); 109 consoleMessages.slice(-50).forEach(m => console.log(` ${m.substring(0, 200)}`)); 110 } 111 112 await browser.close(); 113 process.exit(passed ? 0 : 1); 114})();