3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
10 var uiSourceCodes = {};
13 var defaultMapping = {
14 rawLocationToUILocation: function(rawLocation)
16 return uiSourceCodes[rawLocation.scriptId].uiLocation(rawLocation.lineNumber, 0);
19 uiLocationToRawLocation: function(uiSourceCode, lineNumber)
21 if (!uiSourceCodes[uiSourceCode.url])
23 return new WebInspector.DebuggerModel.Location(mockTarget, uiSourceCode.url, lineNumber, 0);
26 isIdentity: function()
32 var shiftingMapping = {
33 rawLocationToUILocation: function(rawLocation)
37 return uiSourceCodes[rawLocation.scriptId].uiLocation(rawLocation.lineNumber + 10, 0);
40 uiLocationToRawLocation: function(uiSourceCode, lineNumber)
42 return new WebInspector.DebuggerModel.Location(mockTarget, uiSourceCode.url, lineNumber - 10, 0);
45 isIdentity: function()
51 function createSourceMapping(uiSourceCodeA, uiSourceCodeB)
54 rawLocationToUILocation: function(rawLocation)
58 return uiSourceCodeB.uiLocation(rawLocation.lineNumber + 10, 0);
61 uiLocationToRawLocation: function(uiSourceCode, lineNumber)
63 return new WebInspector.DebuggerModel.Location(mockTarget, uiSourceCodeA.url, lineNumber - 10, 0);
66 isIdentity: function()
75 function DebuggerModelMock(sourceMapping)
77 mockTarget.debuggerModel = this;
79 this._sourceMapping = sourceMapping;
80 this._breakpoints = {};
83 DebuggerModelMock.prototype = {
89 _addScript: function(scriptId, url)
91 this._scripts[scriptId] = new WebInspector.Script(mockTarget, scriptId, url);
92 this._scripts[scriptId].pushSourceMapping(this._sourceMapping);
95 _scriptForURL: function(url)
97 for (var scriptId in this._scripts) {
98 var script = this._scripts[scriptId];
99 if (script.sourceURL === url)
104 _scheduleSetBeakpointCallback: function(callback, breakpointId, locations)
106 setTimeout(innerCallback.bind(this), 0);
108 function innerCallback()
111 callback(breakpointId, locations);
112 if (window.setBreakpointCallback) {
113 var savedCallback = window.setBreakpointCallback;
114 delete window.setBreakpointCallback;
120 setBreakpointByURL: function(url, lineNumber, columnNumber, condition, callback)
122 InspectorTest.addResult(" debuggerModel.setBreakpoint(" + [url, lineNumber, condition].join(":") + ")");
124 var breakpointId = url + ":" + lineNumber;
125 if (this._breakpoints[breakpointId]) {
126 this._scheduleSetBeakpointCallback(callback, null);
129 this._breakpoints[breakpointId] = true;
132 var script = this._scriptForURL(url);
134 var location = new WebInspector.DebuggerModel.Location(mockTarget, script.scriptId, lineNumber, 0);
135 locations.push(location);
138 this._scheduleSetBeakpointCallback(callback, breakpointId, locations);
141 setBreakpointByScriptLocation: function(location, condition, callback)
143 InspectorTest.addResult(" debuggerModel.setBreakpoint(" + [location.scriptId, location.lineNumber, condition].join(":") + ")");
145 var breakpointId = location.scriptId + ":" + location.lineNumber;
146 if (this._breakpoints[breakpointId]) {
147 this._scheduleSetBeakpointCallback(callback, null);
150 this._breakpoints[breakpointId] = true;
152 if (location.lineNumber >= 2000) {
153 this._scheduleSetBeakpointCallback(callback, breakpointId, []);
156 if (location.lineNumber >= 1000) {
157 var shiftedLocation = new WebInspector.DebuggerModel.Location(mockTarget, location.scriptId, location.lineNumber + 10, location.columnNumber);
158 this._scheduleSetBeakpointCallback(callback, breakpointId, [shiftedLocation]);
162 this._scheduleSetBeakpointCallback(callback, breakpointId, [WebInspector.DebuggerModel.Location.fromPayload(mockTarget, location)]);
165 removeBreakpoint: function(breakpointId, callback)
167 InspectorTest.addResult(" debuggerModel.removeBreakpoint(" + breakpointId + ")");
168 delete this._breakpoints[breakpointId];
173 setBreakpointsActive: function() { },
175 createLiveLocation: function(rawLocation, updateDelegate)
177 return this._scripts[rawLocation.scriptId].createLiveLocation(rawLocation, updateDelegate);
180 scriptForId: function(scriptId)
182 return this._scripts[scriptId];
187 InspectorTest.addResult(" Resetting debugger.");
191 pushSourceMapping: function(sourceMapping)
193 for (var scriptId in this._scripts)
194 this._scripts[scriptId].pushSourceMapping(sourceMapping);
197 disableSourceMapping: function(sourceMapping)
199 sourceMapping._disabled = true;
200 for (var scriptId in this._scripts)
201 this._scripts[scriptId].updateLocations();
204 DebuggerModelMock.prototype.__proto__ = WebInspector.Object.prototype;
207 get: function() { return []; },
208 set: function(breakpoints) { }
211 function resetWorkspace(breakpointManager)
213 InspectorTest.addResult(" Resetting workspace.");
214 breakpointManager._networkWorkspaceBinding.reset();
215 breakpointManager._debuggerProjectDelegate.reset();
218 function breakpointAdded(event)
220 var breakpoint = event.data.breakpoint;
221 var uiLocation = event.data.uiLocation;
222 InspectorTest.addResult(" breakpointAdded(" + [uiLocation.uiSourceCode.originURL(), uiLocation.lineNumber, uiLocation.columnNumber, breakpoint.condition(), breakpoint.enabled()].join(", ") + ")");
225 function breakpointRemoved(event)
227 var uiLocation = event.data.uiLocation;
228 InspectorTest.addResult(" breakpointRemoved(" + [uiLocation.uiSourceCode.originURL(), uiLocation.lineNumber, uiLocation.columnNumber].join(", ") + ")");
231 InspectorTest.addSniffer(WebInspector.Script.prototype, "createLiveLocation", function(rawLocation)
233 InspectorTest.addResult(" Location created: " + rawLocation.scriptId + ":" + rawLocation.lineNumber);
235 InspectorTest.addSniffer(WebInspector.Script.Location.prototype, "dispose", function()
237 InspectorTest.addResult(" Location disposed: " + this._rawLocation.scriptId + ":" + this._rawLocation.lineNumber);
240 function addUISourceCode(breakpointManager, url, doNotSetSourceMapping, doNotAddScript)
243 breakpointManager._debuggerModel._addScript(url, url);
244 InspectorTest.addResult(" Adding UISourceCode: " + url);
245 var contentProvider = new WebInspector.StaticContentProvider(WebInspector.resourceTypes.Script, "");
246 var uiSourceCode = breakpointManager._networkWorkspaceBinding.addFileForURL(url, contentProvider);
247 uiSourceCodes[url] = uiSourceCode;
248 if (!doNotSetSourceMapping)
249 uiSourceCode.setSourceMapping(defaultMapping);
253 function addTemporaryUISourceCode(breakpointManager, url)
255 breakpointManager._debuggerModel._addScript(url, url);
256 InspectorTest.addResult(" Adding temporary UISourceCode: " + url);
257 var contentProvider = new WebInspector.StaticContentProvider(WebInspector.resourceTypes.Script, "");
258 var path = breakpointManager._debuggerProjectDelegate.addContentProvider("", url, url, contentProvider);
259 var uiSourceCode = workspace.uiSourceCode("debugger:", path);
260 uiSourceCode.setSourceMapping(defaultMapping);
261 uiSourceCodes[url] = uiSourceCode;
265 function createBreakpoint(uiSourceCodeId, lineNumber, condition, enabled)
267 return { sourceFileId: uiSourceCodeId, lineNumber: lineNumber, condition: condition, enabled: enabled };
270 var serializedBreakpoints = [];
271 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
272 serializedBreakpoints.push(createBreakpoint("a.js", 20, "", false));
273 serializedBreakpoints.push(createBreakpoint("b.js", 3, "", true));
275 function createBreakpointManager(persistentBreakpoints, sourceMapping)
277 persistentBreakpoints = persistentBreakpoints || [];
279 get: function() { return persistentBreakpoints; },
280 set: function(breakpoints) { persistentBreakpoints = breakpoints; }
283 var sourceMapping = sourceMapping || defaultMapping;
284 var debuggerModel = new DebuggerModelMock(sourceMapping);
285 workspace = new WebInspector.Workspace();
286 var breakpointManager = new WebInspector.BreakpointManager(setting, debuggerModel, workspace);
287 breakpointManager._networkWorkspaceBinding = new WebInspector.NetworkWorkspaceBinding(workspace);
288 breakpointManager._debuggerProjectDelegate = new WebInspector.DebuggerProjectDelegate(workspace, "debugger:", WebInspector.projectTypes.Debugger);
289 breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.BreakpointAdded, breakpointAdded);
290 breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.BreakpointRemoved, breakpointRemoved);
291 InspectorTest.addResult(" Created breakpoints manager");
292 dumpBreakpointStorage(breakpointManager);
293 return breakpointManager;
296 function setBreakpoint(breakpointManager, uiSourceCode, lineNumber, columnNumber, condition, enabled)
298 InspectorTest.addResult(" Setting breakpoint at " + uiSourceCode.originURL() + ":" + lineNumber + ":" + columnNumber + " enabled:" + enabled + " condition:" + condition);
299 return breakpointManager.setBreakpoint(uiSourceCode, lineNumber, columnNumber, condition, enabled);
302 function removeBreakpoint(breakpointManager, uiSourceCode, lineNumber, columnNumber)
304 InspectorTest.addResult(" Removing breakpoint at " + uiSourceCode.originURL() + ":" + lineNumber + ":" + columnNumber);
305 breakpointManager.findBreakpoint(uiSourceCode, lineNumber, columnNumber).remove();
308 function dumpBreakpointStorage(breakpointManager)
310 var breakpoints = breakpointManager._storage._setting.get();
311 InspectorTest.addResult(" Dumping Storage");
312 for (var i = 0; i < breakpoints.length; ++i)
313 InspectorTest.addResult(" " + breakpoints[i].sourceFileId + ":" + breakpoints[i].lineNumber + " enabled:" + breakpoints[i].enabled + " condition:" + breakpoints[i].condition);
316 function dumpBreakpointLocations(breakpointManager)
318 var allBreakpointLocations = breakpointManager.allBreakpointLocations();
319 InspectorTest.addResult(" Dumping Breakpoint Locations");
320 var lastUISourceCode = null;
323 function dumpLocations(uiSourceCode, locations)
325 InspectorTest.addResult(" UISourceCode (url='" + uiSourceCode.url + "', uri='" + uiSourceCode.uri() + "')");
326 for (var i = 0; i < locations.length; ++i)
327 InspectorTest.addResult(" Location: (" + locations[i].lineNumber + ", " + locations[i].columnNumber + ")");
330 for (var i = 0; i < allBreakpointLocations.length; ++i) {
331 var uiLocation = allBreakpointLocations[i].uiLocation;
332 var uiSourceCode = uiLocation.uiSourceCode;
333 if (lastUISourceCode && lastUISourceCode != uiSourceCode) {
334 dumpLocations(uiSourceCode, locations);
337 lastUISourceCode = uiSourceCode;
338 locations.push(uiLocation);
340 if (lastUISourceCode)
341 dumpLocations(lastUISourceCode, locations);
344 function resetBreakpointManager(breakpointManager, next)
346 dumpBreakpointStorage(breakpointManager);
347 InspectorTest.addResult(" Resetting breakpoint manager");
348 breakpointManager.removeAllBreakpoints();
349 breakpointManager.removeProvisionalBreakpointsForTest();
354 InspectorTest.runTestSuite([
355 function testSetBreakpoint(next)
357 var breakpointManager = createBreakpointManager();
358 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
359 setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", true);
360 window.setBreakpointCallback = step2.bind(this);
364 dumpBreakpointLocations(breakpointManager);
365 resetBreakpointManager(breakpointManager, step3);
370 dumpBreakpointLocations(breakpointManager);
375 function testSetDisabledBreakpoint(next)
377 var breakpointManager = createBreakpointManager();
378 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
379 var breakpoint = setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", false);
380 dumpBreakpointLocations(breakpointManager);
381 dumpBreakpointStorage(breakpointManager);
382 InspectorTest.addResult(" Enabling breakpoint");
383 breakpoint.setEnabled(true);
384 window.setBreakpointCallback = step2.bind(this);
388 dumpBreakpointLocations(breakpointManager);
389 resetBreakpointManager(breakpointManager, step3);
394 dumpBreakpointLocations(breakpointManager);
399 function testSetConditionalBreakpoint(next)
401 var breakpointManager = createBreakpointManager();
402 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
403 var breakpoint = setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "condition", true);
404 window.setBreakpointCallback = step2.bind(this);
408 dumpBreakpointLocations(breakpointManager);
409 dumpBreakpointStorage(breakpointManager);
410 InspectorTest.addResult(" Updating condition");
411 breakpoint.setCondition("");
412 window.setBreakpointCallback = step3.bind(this);
417 dumpBreakpointLocations(breakpointManager);
418 resetBreakpointManager(breakpointManager, step4);
423 dumpBreakpointLocations(breakpointManager);
428 function testRestoreBreakpoints(next)
430 var breakpointManager = createBreakpointManager(serializedBreakpoints);
431 addUISourceCode(breakpointManager, "a.js");
432 window.setBreakpointCallback = step2.bind(this);
436 dumpBreakpointLocations(breakpointManager);
437 resetBreakpointManager(breakpointManager, step3);
442 dumpBreakpointLocations(breakpointManager);
447 function testRestoreBreakpointsTwice(next)
449 var breakpointManager = createBreakpointManager(serializedBreakpoints);
450 addUISourceCode(breakpointManager, "a.js");
451 addUISourceCode(breakpointManager, "a.js");
452 window.setBreakpointCallback = step2.bind(this);
456 dumpBreakpointLocations(breakpointManager);
457 resetBreakpointManager(breakpointManager, step3);
462 dumpBreakpointLocations(breakpointManager);
467 function testRemoveBreakpoints(next)
469 var breakpointManager = createBreakpointManager(serializedBreakpoints);
470 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
471 window.setBreakpointCallback = step2.bind(this);
475 dumpBreakpointLocations(breakpointManager);
476 setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", true);
477 window.setBreakpointCallback = step3.bind(this);
482 dumpBreakpointLocations(breakpointManager);
483 removeBreakpoint(breakpointManager, uiSourceCode, 30, 0);
484 removeBreakpoint(breakpointManager, uiSourceCode, 10, 0);
485 removeBreakpoint(breakpointManager, uiSourceCode, 20, 0);
486 dumpBreakpointLocations(breakpointManager);
487 resetBreakpointManager(breakpointManager, step4);
492 dumpBreakpointLocations(breakpointManager);
497 function testSetBreakpointThatShifts(next)
499 var breakpointManager = createBreakpointManager();
500 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
501 setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true);
502 window.setBreakpointCallback = step2.bind(this);
506 dumpBreakpointLocations(breakpointManager);
507 resetBreakpointManager(breakpointManager, step3);
512 dumpBreakpointLocations(breakpointManager);
517 function testSetBreakpointThatShiftsTwice(next)
519 var breakpointManager = createBreakpointManager();
520 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
521 setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true);
522 window.setBreakpointCallback = step2.bind(this);
526 dumpBreakpointLocations(breakpointManager);
527 setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true);
528 window.setBreakpointCallback = step3.bind(this);
533 dumpBreakpointLocations(breakpointManager);
534 resetBreakpointManager(breakpointManager, step4);
539 dumpBreakpointLocations(breakpointManager);
544 function testSetBreakpointOutsideScript(next)
546 var breakpointManager = createBreakpointManager([]);
547 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
548 breakpointManager.setBreakpoint(uiSourceCode, 2500, 0, "", true);
549 window.setBreakpointCallback = step2.bind(this);
553 dumpBreakpointLocations(breakpointManager);
554 resetBreakpointManager(breakpointManager, step3);
559 dumpBreakpointLocations(breakpointManager);
564 function testNavigation(next)
566 var breakpointManager = createBreakpointManager(serializedBreakpoints);
567 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
568 window.setBreakpointCallback = step2.bind(this);
572 dumpBreakpointLocations(breakpointManager);
573 InspectorTest.addResult("\n Navigating to B.");
574 breakpointManager._debuggerModel.reset();
575 resetWorkspace(breakpointManager);
576 var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js");
577 window.setBreakpointCallback = step3.bind(this);
582 dumpBreakpointLocations(breakpointManager);
583 InspectorTest.addResult("\n Navigating back to A.");
584 breakpointManager._debuggerModel.reset();
585 resetWorkspace(breakpointManager);
586 InspectorTest.addResult(" Resolving provisional breakpoint.");
587 addTemporaryUISourceCode(breakpointManager, "a.js");
588 var eventData = { breakpointId: "a.js:10", location: new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 11, 5)};
589 breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
590 addUISourceCode(breakpointManager, "a.js");
591 window.setBreakpointCallback = step4.bind(this);
596 dumpBreakpointLocations(breakpointManager);
597 resetBreakpointManager(breakpointManager, step5);
602 dumpBreakpointLocations(breakpointManager);
607 function testSourceMapping(next)
609 // Source mapping will shift everthing 10 lines ahead so that breakpoint 1 clashed with breakpoint 2.
610 var serializedBreakpoints = [];
611 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
612 serializedBreakpoints.push(createBreakpoint("a.js", 20, "", true));
614 var breakpointManager = createBreakpointManager(serializedBreakpoints);
615 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
616 window.setBreakpointCallback = step2.bind(this);
620 window.setBreakpointCallback = step3.bind(this);
625 dumpBreakpointLocations(breakpointManager);
626 InspectorTest.addResult("\n Toggling source mapping.");
627 breakpointManager._debuggerModel.pushSourceMapping(shiftingMapping);
628 dumpBreakpointLocations(breakpointManager);
629 InspectorTest.addResult("\n Toggling source mapping back.");
630 breakpointManager._debuggerModel.disableSourceMapping(shiftingMapping);
631 dumpBreakpointLocations(breakpointManager);
632 resetBreakpointManager(breakpointManager, step4);
637 dumpBreakpointLocations(breakpointManager);
642 function testProvisionalBreakpointsResolve(next)
644 var serializedBreakpoints = [];
645 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
647 var breakpointManager = createBreakpointManager(serializedBreakpoints);
648 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
649 window.setBreakpointCallback = step2.bind(this);
653 dumpBreakpointLocations(breakpointManager);
654 breakpointManager._debuggerModel.reset();
655 resetWorkspace(breakpointManager);
656 InspectorTest.addResult(" Resolving provisional breakpoint.");
657 addTemporaryUISourceCode(breakpointManager, "a.js")
658 var eventData = { breakpointId: "a.js:10", location: new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 11, 5)};
659 breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
660 var breakpoints = breakpointManager.allBreakpoints();
661 InspectorTest.assertEquals(breakpoints.length, 1, "Exactly one provisional breakpoint should be registered in breakpoint manager.");
662 dumpBreakpointLocations(breakpointManager);
663 resetBreakpointManager(breakpointManager, step3);
668 dumpBreakpointLocations(breakpointManager);
673 function testSourceMappingReload(next)
675 // Source mapping will shift everthing 10 lines ahead.
676 var serializedBreakpoints = [createBreakpoint("b.js", 20, "foo == bar", true)];
677 var breakpointManager = createBreakpointManager(serializedBreakpoints);
678 InspectorTest.addResult("\n Adding files:");
679 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
680 var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js", true, true);
682 InspectorTest.addResult("\n Toggling source mapping.");
683 var sourceMapping = createSourceMapping(uiSourceCodeA, uiSourceCodeB);
684 breakpointManager._debuggerModel.pushSourceMapping(sourceMapping);
685 window.setBreakpointCallback = provisionalBreakpointSet.bind(this);
686 uiSourceCodeB.setSourceMapping(sourceMapping);
688 function provisionalBreakpointSet()
690 window.setBreakpointCallback = step2.bind(this);
695 dumpBreakpointLocations(breakpointManager);
696 InspectorTest.addResult("\n Reloading:");
697 breakpointManager._debuggerModel.reset();
698 resetWorkspace(breakpointManager);
700 InspectorTest.addResult("\n Adding files:");
701 addTemporaryUISourceCode(breakpointManager, "a.js");
702 var eventData = { breakpointId: "a.js:10", location: new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 10, 5)};
703 breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
704 uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
705 uiSourceCodeB = addUISourceCode(breakpointManager, "b.js", true, true);
707 InspectorTest.addResult("\n Toggling source mapping.");
708 var sourceMapping = createSourceMapping(uiSourceCodeA, uiSourceCodeB);
709 breakpointManager._debuggerModel.pushSourceMapping(sourceMapping);
710 window.setBreakpointCallback = provisionalBreakpointSetAfterReload.bind(this);
711 uiSourceCodeB.setSourceMapping(sourceMapping);
714 function provisionalBreakpointSetAfterReload()
716 window.setBreakpointCallback = step3.bind(this);
721 dumpBreakpointLocations(breakpointManager);
722 resetBreakpointManager(breakpointManager, step4);
727 dumpBreakpointLocations(breakpointManager);
732 function testBreakpointInCollectedReload(next)
734 var breakpointManager = createBreakpointManager();
735 InspectorTest.addResult("\n Adding file without script:");
736 var uiSourceCode = addUISourceCode(breakpointManager, "a.js", true, true);
738 InspectorTest.addResult("\n Setting breakpoint:");
739 setBreakpoint(breakpointManager, uiSourceCode, 10, 0, "", true);
740 window.setBreakpointCallback = step2.bind(this);
744 dumpBreakpointLocations(breakpointManager);
745 InspectorTest.addResult("\n Reloading:");
746 breakpointManager._debuggerModel.reset();
747 resetWorkspace(breakpointManager);
749 InspectorTest.addResult("\n Adding file with script:");
750 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
752 InspectorTest.addResult("\n Emulating breakpoint resolved event:");
753 var eventData = { breakpointId: "a.js:10", location: new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 10, 5)};
754 breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
756 InspectorTest.addResult("\n Waiting for breakpoint to be set in debugger again:");
757 window.setBreakpointCallback = step3.bind(this);
762 dumpBreakpointLocations(breakpointManager);
763 resetBreakpointManager(breakpointManager, step4);
768 dumpBreakpointLocations(breakpointManager);
779 <body onload="runTest()">
780 <p>Tests BreakpointManager class.</p>