3 <script src="../../../http/tests/inspector/inspector-test.js"></script>
4 <script src="../../../http/tests/inspector/workspace-test.js"></script>
5 <script src="breakpoint-manager.js"></script>
12 function resetWorkspace(breakpointManager)
14 mockTarget.debuggerModel.reset();
15 InspectorTest.addResult(" Resetting workspace.");
16 breakpointManager._debuggerWorkspaceBinding._reset(mockTarget);
17 breakpointManager._debuggerWorkspaceBinding._networkWorkspaceBinding.reset();
20 function createWorkspace()
22 InspectorTest.createWorkspace(true);
23 mockTarget = InspectorTest.createMockTarget(1);
24 InspectorTest.testTargetManager.addTarget(mockTarget);
27 function createBreakpoint(uiSourceCodeId, lineNumber, condition, enabled)
29 return { sourceFileId: uiSourceCodeId, lineNumber: lineNumber, condition: condition, enabled: enabled };
32 var serializedBreakpoints = [];
33 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
34 serializedBreakpoints.push(createBreakpoint("a.js", 20, "", false));
35 serializedBreakpoints.push(createBreakpoint("b.js", 3, "", true));
38 InspectorTest.setupLiveLocationSniffers();
40 var addUISourceCode = function() {
41 var args = [mockTarget].concat(Array.prototype.slice.call(arguments));
42 return InspectorTest.addUISourceCode.apply(null, args);
44 var createBreakpointManager = function(serializedBreakpoints) {
45 return InspectorTest.createBreakpointManager(InspectorTest.testTargetManager, InspectorTest.testDebuggerWorkspaceBinding, serializedBreakpoints);
48 InspectorTest.runTestSuite([
49 function testSetBreakpoint(next)
51 var breakpointManager = createBreakpointManager();
52 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
53 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", true);
54 InspectorTest.finishBreakpointTest(breakpointManager, next);
57 function testSetDisabledBreakpoint(next)
59 var breakpointManager = createBreakpointManager();
60 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
61 var breakpoint = InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", false);
62 InspectorTest.dumpBreakpointLocations(breakpointManager);
63 InspectorTest.dumpBreakpointStorage(breakpointManager);
64 InspectorTest.addResult(" Enabling breakpoint");
65 breakpoint.setEnabled(true);
66 InspectorTest.finishBreakpointTest(breakpointManager, next);
69 function testSetConditionalBreakpoint(next)
71 var breakpointManager = createBreakpointManager();
72 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
73 var breakpoint = InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "condition", true, step2);
77 InspectorTest.dumpBreakpointLocations(breakpointManager);
78 InspectorTest.dumpBreakpointStorage(breakpointManager);
79 InspectorTest.addResult(" Updating condition");
80 breakpoint.setCondition("");
81 InspectorTest.finishBreakpointTest(breakpointManager, next);
85 function testRestoreBreakpoints(next)
88 var breakpointManager = createBreakpointManager(serializedBreakpoints);
89 addUISourceCode(breakpointManager, "a.js");
90 InspectorTest.finishBreakpointTest(breakpointManager, next);
93 function testRestoreBreakpointsTwice(next)
96 var breakpointManager = createBreakpointManager(serializedBreakpoints);
97 addUISourceCode(breakpointManager, "a.js");
98 addUISourceCode(breakpointManager, "a.js");
99 InspectorTest.finishBreakpointTest(breakpointManager, next);
102 function testRemoveBreakpoints(next)
105 var breakpointManager = createBreakpointManager(serializedBreakpoints);
106 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
107 window.setBreakpointCallback = step2.bind(this);
111 InspectorTest.dumpBreakpointLocations(breakpointManager);
112 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 30, 0, "", true, step3);
117 InspectorTest.dumpBreakpointLocations(breakpointManager);
118 InspectorTest.removeBreakpoint(breakpointManager, uiSourceCode, 30, 0);
119 InspectorTest.removeBreakpoint(breakpointManager, uiSourceCode, 10, 0);
120 InspectorTest.removeBreakpoint(breakpointManager, uiSourceCode, 20, 0);
121 InspectorTest.finishBreakpointTest(breakpointManager, next);
125 function testSetBreakpointThatShifts(next)
128 var breakpointManager = createBreakpointManager();
129 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
130 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true);
131 InspectorTest.finishBreakpointTest(breakpointManager, next);
134 function testSetBreakpointThatShiftsTwice(next)
137 var breakpointManager = createBreakpointManager();
138 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
139 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true, step2);
143 InspectorTest.dumpBreakpointLocations(breakpointManager);
144 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 1015, 0, "", true);
145 InspectorTest.finishBreakpointTest(breakpointManager, next);
149 function testSetBreakpointOutsideScript(next)
152 var breakpointManager = createBreakpointManager();
153 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
154 breakpointManager.setBreakpoint(uiSourceCode, 2500, 0, "", true);
155 InspectorTest.finishBreakpointTest(breakpointManager, next);
158 function testNavigation(next)
161 var breakpointManager = createBreakpointManager(serializedBreakpoints);
162 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
163 window.setBreakpointCallback = step2.bind(this);
167 InspectorTest.dumpBreakpointLocations(breakpointManager);
168 InspectorTest.addResult("\n Navigating to B.");
169 resetWorkspace(breakpointManager);
170 var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js");
171 window.setBreakpointCallback = step3.bind(this);
176 InspectorTest.dumpBreakpointLocations(breakpointManager);
177 InspectorTest.addResult("\n Navigating back to A.");
178 resetWorkspace(breakpointManager);
179 InspectorTest.addResult(" Resolving provisional breakpoint.");
180 InspectorTest.addScript(mockTarget, breakpointManager, "a.js");
181 mockTarget.debuggerModel._breakpointResolved("a.js:10", new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 10, 0));
182 addUISourceCode(breakpointManager, "a.js", false, true);
183 InspectorTest.finishBreakpointTest(breakpointManager, next);
187 function testSourceMapping(next)
189 var shiftingMapping = {
190 rawLocationToUILocation: function(rawLocation)
194 return InspectorTest.uiSourceCodes[rawLocation.scriptId].uiLocation(rawLocation.lineNumber + 10, 0);
197 uiLocationToRawLocation: function(uiSourceCode, lineNumber)
199 return new WebInspector.DebuggerModel.Location(mockTarget, uiSourceCode.url, lineNumber - 10, 0);
202 isIdentity: function()
208 // Source mapping will shift everything 10 lines ahead so that breakpoint 1 clashes with breakpoint 2.
209 var serializedBreakpoints = [];
210 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
211 serializedBreakpoints.push(createBreakpoint("a.js", 20, "", true));
214 var breakpointManager = createBreakpointManager(serializedBreakpoints);
215 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
216 window.setBreakpointCallback = step2.bind(this);
220 window.setBreakpointCallback = step3.bind(this);
225 InspectorTest.dumpBreakpointLocations(breakpointManager);
226 InspectorTest.addResult("\n Toggling source mapping.");
227 mockTarget.debuggerModel.pushSourceMapping(shiftingMapping);
228 InspectorTest.dumpBreakpointLocations(breakpointManager);
229 InspectorTest.addResult("\n Toggling source mapping back.");
230 mockTarget.debuggerModel.disableSourceMapping(shiftingMapping);
231 InspectorTest.finishBreakpointTest(breakpointManager, next);
236 function testProvisionalBreakpointsResolve(next)
238 var serializedBreakpoints = [];
239 serializedBreakpoints.push(createBreakpoint("a.js", 10, "foo == bar", true));
242 var breakpointManager = createBreakpointManager(serializedBreakpoints);
243 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
244 window.setBreakpointCallback = step2.bind(this);
248 InspectorTest.dumpBreakpointLocations(breakpointManager);
249 resetWorkspace(breakpointManager);
250 InspectorTest.addResult(" Resolving provisional breakpoint.");
251 InspectorTest.addScript(mockTarget, breakpointManager, "a.js");
252 mockTarget.debuggerModel._breakpointResolved("a.js:10", new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 11, 0));
253 var breakpoints = breakpointManager.allBreakpoints();
254 InspectorTest.assertEquals(1, breakpoints.length, "Exactly one provisional breakpoint should be registered in breakpoint manager.");
255 InspectorTest.finishBreakpointTest(breakpointManager, next);
259 function testSourceMappingReload(next)
261 function createSourceMapping(uiSourceCodeA, uiSourceCodeB)
264 rawLocationToUILocation: function(rawLocation)
268 return uiSourceCodeB.uiLocation(rawLocation.lineNumber + 10, 0);
271 uiLocationToRawLocation: function(uiSourceCode, lineNumber)
273 return new WebInspector.DebuggerModel.Location(mockTarget, uiSourceCodeA.url, lineNumber - 10, 0);
276 isIdentity: function()
284 // Source mapping will shift everything 10 lines ahead.
285 var serializedBreakpoints = [createBreakpoint("b.js", 20, "foo == bar", true)];
287 var breakpointManager = createBreakpointManager(serializedBreakpoints);
288 InspectorTest.addResult("\n Adding files:");
289 var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
290 var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js", true, true);
292 InspectorTest.addResult("\n Toggling source mapping.");
293 var sourceMapping = createSourceMapping(uiSourceCodeA, uiSourceCodeB);
294 mockTarget.debuggerModel.pushSourceMapping(sourceMapping);
295 breakpointManager._debuggerWorkspaceBinding.setSourceMapping(mockTarget, uiSourceCodeB, sourceMapping);
296 InspectorTest.runAfterPendingBreakpointUpdates(breakpointManager, breakpointActionsPerformedBeforeReload.bind(this));
298 function breakpointActionsPerformedBeforeReload()
300 InspectorTest.dumpBreakpointLocations(breakpointManager);
301 InspectorTest.addResult("\n Reloading:");
302 resetWorkspace(breakpointManager);
304 InspectorTest.addResult("\n Adding files:");
305 InspectorTest.addScript(mockTarget, breakpointManager, "a.js");
306 mockTarget.debuggerModel._breakpointResolved("a.js:10", new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 10, 0));
307 uiSourceCodeA = addUISourceCode(breakpointManager, "a.js", false, true);
308 uiSourceCodeB = addUISourceCode(breakpointManager, "b.js", true, true);
310 InspectorTest.addResult("\n Toggling source mapping.");
311 var sourceMapping = createSourceMapping(uiSourceCodeA, uiSourceCodeB);
312 mockTarget.debuggerModel.pushSourceMapping(sourceMapping);
313 breakpointManager._debuggerWorkspaceBinding.setSourceMapping(mockTarget, uiSourceCodeB, sourceMapping);
314 InspectorTest.runAfterPendingBreakpointUpdates(breakpointManager, breakpointActionsPerformed.bind(this));
317 function breakpointActionsPerformed()
319 InspectorTest.finishBreakpointTest(breakpointManager, next);
323 function testBreakpointInCollectedReload(next)
326 var breakpointManager = createBreakpointManager();
327 InspectorTest.addResult("\n Adding file without script:");
328 var uiSourceCode = addUISourceCode(breakpointManager, "a.js", true, true);
330 InspectorTest.addResult("\n Setting breakpoint:");
331 InspectorTest.setBreakpoint(breakpointManager, uiSourceCode, 10, 0, "", true, step2);
335 InspectorTest.dumpBreakpointLocations(breakpointManager);
336 InspectorTest.addResult("\n Reloading:");
337 resetWorkspace(breakpointManager);
339 InspectorTest.addResult("\n Adding file with script:");
340 var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
342 InspectorTest.addResult("\n Emulating breakpoint resolved event:");
343 mockTarget.debuggerModel._breakpointResolved("a.js:10", new WebInspector.DebuggerModel.Location(mockTarget, "a.js", 10, 0));
345 InspectorTest.addResult("\n Make sure we don't do any unnecessary breakpoint actions:");
346 InspectorTest.runAfterPendingBreakpointUpdates(breakpointManager, breakpointActionsPerformed.bind(this));
348 function breakpointActionsPerformed()
350 InspectorTest.finishBreakpointTest(breakpointManager, next);
360 <body onload="runTest()">
361 <p>Tests BreakpointManager class.</p>