MIRROR: javascript for 🐜's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 58 lines 1.3 kB view raw
1// test_closure.js - Test closure scoping across async boundaries 2 3let results = []; 4 5// Test 1: Sync push 6results.push('1. sync'); 7 8// Test 2: setTimeout with closure 9setTimeout(() => { 10 results.push('4. timeout 50ms'); 11}, 50); 12 13setTimeout(() => { 14 results.push('3. timeout 10ms'); 15}, 10); 16 17// Test 3: Promise with closure 18Promise.resolve('2. promise').then(v => { 19 results.push(v); 20}); 21 22// Test 4: queueMicrotask with closure 23queueMicrotask(() => { 24 results.push('2. microtask'); 25}); 26 27// Test 5: Nested closure 28const outer = 'outer-value'; 29setTimeout(() => { 30 const inner = 'inner-value'; 31 setTimeout(() => { 32 results.push(`5. nested: ${outer}, ${inner}`); 33 }, 10); 34}, 60); 35 36// Final timeout to print results 37setTimeout(() => { 38 console.log('Results length:', results.length); 39 console.log('Results:'); 40 for (let i = 0; i < results.length; i++) { 41 console.log(' ', results[i]); 42 } 43 44 // Expected order: 45 // 1. sync 46 // 2. promise (microtask) 47 // 2. microtask (microtask) 48 // 3. timeout 10ms 49 // 4. timeout 50ms 50 // 5. nested: outer-value, inner-value 51 52 console.log('\nExpected 6 items, got:', results.length); 53 if (results.length === 6) { 54 console.log('✓ PASS: All closures captured correctly'); 55 } else { 56 console.log('✗ FAIL: Missing items - closure bug'); 57 } 58}, 200);