this repo has no description
at main 82 lines 3.0 kB view raw
1// test_crossorigin.js — Playwright test for cross-origin demo 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 demo4_crossorigin.html...'); 15 await page.goto('http://localhost:8080/odoc-interactive-extension/demo4_crossorigin.html'); 16 17 // Wait for cells to render and execute (worker init + eval) 18 console.log('Waiting for cells to execute...'); 19 await page.waitForTimeout(15000); 20 21 // Check for cross-origin indicators in console 22 const hasCrossOriginWorker = consoleMessages.some(m => 23 m.includes('9090')); 24 const hasCrossOriginFetch = consoleMessages.some(m => 25 m.includes('Cross-origin import via fetch+eval')); 26 const hasInitFinished = consoleMessages.some(m => 27 m.includes('init() finished')); 28 const hasSetupFinished = consoleMessages.some(m => 29 m.includes('setup() finished')); 30 31 // Check for init_error 32 const hasInitError = consoleMessages.some(m => 33 m.includes('init_error')); 34 35 // Check for correct output in page (x-ocaml uses Shadow DOM, so we 36 // look at worker output messages in the console instead) 37 const hasInt7 = consoleMessages.some(m => 38 m.includes('int = 7')); 39 const hasGreeting = consoleMessages.some(m => 40 m.includes('Hello, Cross-Origin World')); 41 42 console.log(''); 43 console.log('=== Results ==='); 44 console.log(` Worker loaded from port 9090: ${hasCrossOriginWorker ? 'YES' : 'NO'}`); 45 console.log(` Cross-origin fetch+eval used: ${hasCrossOriginFetch ? 'YES' : 'NO'}`); 46 console.log(` Init completed: ${hasInitFinished ? 'YES' : 'NO'}`); 47 console.log(` Setup completed: ${hasSetupFinished ? 'YES' : 'NO'}`); 48 console.log(` Init error: ${hasInitError ? 'YES (BAD)' : 'NO (good)'}`); 49 console.log(` Output "int = 7": ${hasInt7 ? 'YES' : 'NO'}`); 50 console.log(` Output "Hello, Cross-Origin": ${hasGreeting ? 'YES' : 'NO'}`); 51 52 let passed = true; 53 54 if (!hasInitFinished) { 55 console.log('\nFAIL: Worker init did not complete'); 56 passed = false; 57 } 58 if (!hasSetupFinished) { 59 console.log('\nFAIL: Worker setup did not complete'); 60 passed = false; 61 } 62 if (hasInitError) { 63 console.log('\nFAIL: Worker reported init_error'); 64 const errMsg = consoleMessages.find(m => m.includes('init_error')); 65 console.log(` ${errMsg}`); 66 passed = false; 67 } 68 if (!hasInt7 || !hasGreeting) { 69 console.log('\nFAIL: Expected output not found in page'); 70 passed = false; 71 } 72 73 if (passed) { 74 console.log('\nPASS: Cross-origin demo working correctly'); 75 } else { 76 console.log('\n--- Console messages (last 40) ---'); 77 consoleMessages.slice(-40).forEach(m => console.log(` ${m.substring(0, 150)}`)); 78 } 79 80 await browser.close(); 81 process.exit(passed ? 0 : 1); 82})();