breakpoint-12.js (1987B)
1 // Removing a global as a debuggee forgets all its breakpoints. 2 3 4 var dbgA = new Debugger; 5 var logA = ''; 6 7 var dbgB = new Debugger; 8 var logB = ''; 9 10 var g1 = newGlobal({newCompartment: true}); 11 g1.eval('function g1f() { print("Weltuntergang"); }'); 12 var DOAg1 = dbgA.addDebuggee(g1); 13 var DOAg1f = DOAg1.getOwnPropertyDescriptor('g1f').value; 14 DOAg1f.script.setBreakpoint(0, { hit: () => { logA += '1'; } }); 15 16 var DOBg1 = dbgB.addDebuggee(g1); 17 var DOBg1f = DOBg1.getOwnPropertyDescriptor('g1f').value; 18 DOBg1f.script.setBreakpoint(0, { hit: () => { logB += '1'; } }); 19 20 21 var g2 = newGlobal({newCompartment: true}); 22 g2.eval('function g2f() { print("Mokushi"); }'); 23 24 var DOAg2 = dbgA.addDebuggee(g2); 25 var DOAg2f = DOAg2.getOwnPropertyDescriptor('g2f').value; 26 DOAg2f.script.setBreakpoint(0, { hit: () => { logA += '2'; } }); 27 28 var DOBg2 = dbgB.addDebuggee(g2); 29 var DOBg2f = DOBg2.getOwnPropertyDescriptor('g2f').value; 30 DOBg2f.script.setBreakpoint(0, { hit: () => { logB += '2'; } }); 31 32 assertEq(logA, ''); 33 assertEq(logB, ''); 34 g1.g1f(); 35 g2.g2f(); 36 assertEq(logA, '12'); 37 assertEq(logB, '12'); 38 logA = logB = ''; 39 40 // Removing a global as a debuggee should make its breakpoint not hit. 41 dbgA.removeDebuggee(g2); 42 dbgB.removeDebuggee(g1); 43 assertEq(logA, ''); 44 assertEq(logB, ''); 45 g1.g1f(); 46 g2.g2f(); 47 assertEq(logA, '1'); 48 assertEq(logB, '2'); 49 logA = logB = ''; 50 51 // Adding the global back as a debuggee should not resurrect its breakpoints. 52 dbgA.addDebuggee(g2); 53 dbgB.addDebuggee(g1); 54 assertEq(logA, ''); 55 assertEq(logB, ''); 56 g1.g1f(); 57 g2.g2f(); 58 assertEq(logA, '1'); 59 assertEq(logB, '2'); 60 logA = logB = ''; 61 62 // But, we can set them again, and it all works. 63 DOAg2f.script.setBreakpoint(0, { hit: () => { logA += '2'; } }); 64 assertEq(logA, ''); 65 assertEq(logB, ''); 66 g2.g2f(); 67 g1.g1f(); 68 assertEq(logA, '21'); 69 assertEq(logB, '2'); 70 logA = logB = ''; 71 72 DOBg1f.script.setBreakpoint(0, { hit: () => { logB += '1'; } }); 73 assertEq(logA, ''); 74 assertEq(logB, ''); 75 g2.g2f(); 76 g1.g1f(); 77 assertEq(logA, '21'); 78 assertEq(logB, '21');