Debugger-shouldAvoidSideEffects.js (1256B)
1 // Test shouldAvoidSideEffects flag. 2 3 const g = newGlobal({newCompartment: true}); 4 const dbg = Debugger(g); 5 const gdbg = dbg.addDebuggee(g); 6 7 gdbg.executeInGlobal(` 8 var obj, result, reachedNextLine; 9 `); 10 11 dbg.shouldAvoidSideEffects = false; 12 assertEq(dbg.shouldAvoidSideEffects, false); 13 14 let result = gdbg.executeInGlobal(` 15 result = undefined; 16 reachedNextLine = false; 17 18 obj = createSideEffectfulResolveObject(); 19 result = obj.test; 20 reachedNextLine = true; 21 "finished"; 22 `); 23 assertEq(g.result, 42); 24 assertEq(g.reachedNextLine, true); 25 assertEq(result.return, "finished"); 26 27 dbg.shouldAvoidSideEffects = true; 28 assertEq(dbg.shouldAvoidSideEffects, true); 29 30 result = gdbg.executeInGlobal(` 31 result = undefined; 32 reachedNextLine = false; 33 34 obj = createSideEffectfulResolveObject(); 35 result = obj.test; 36 reachedNextLine = true; 37 "finished"; 38 `); 39 assertEq(g.result, undefined); 40 assertEq(g.reachedNextLine, false); 41 assertEq(result, null); 42 43 // Resolve after abort. 44 dbg.shouldAvoidSideEffects = false; 45 assertEq(dbg.shouldAvoidSideEffects, false); 46 47 result = gdbg.executeInGlobal(` 48 result = undefined; 49 reachedNextLine = false; 50 51 result = obj.test; 52 reachedNextLine = true; 53 "finished"; 54 `); 55 assertEq(g.result, 42); 56 assertEq(g.reachedNextLine, true); 57 assertEq(result.return, "finished");