|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 /** |
|
5 * Tests that the break commands works as they should. |
|
6 */ |
|
7 |
|
8 const TAB_URL = EXAMPLE_URL + "doc_cmd-break.html"; |
|
9 |
|
10 function test() { |
|
11 let gPanel, gDebugger, gThreadClient; |
|
12 let gLineNumber; |
|
13 |
|
14 helpers.addTabWithToolbar(TAB_URL, aOptions => { |
|
15 return helpers.audit(aOptions, [ |
|
16 { |
|
17 setup: 'break', |
|
18 check: { |
|
19 input: 'break', |
|
20 hints: ' add line', |
|
21 markup: 'IIIII', |
|
22 status: 'ERROR', |
|
23 } |
|
24 }, |
|
25 { |
|
26 setup: 'break add', |
|
27 check: { |
|
28 input: 'break add', |
|
29 hints: ' line', |
|
30 markup: 'IIIIIVIII', |
|
31 status: 'ERROR' |
|
32 } |
|
33 }, |
|
34 { |
|
35 setup: 'break add line', |
|
36 check: { |
|
37 input: 'break add line', |
|
38 hints: ' <file> <line>', |
|
39 markup: 'VVVVVVVVVVVVVV', |
|
40 status: 'ERROR' |
|
41 } |
|
42 }, |
|
43 { |
|
44 name: 'open toolbox', |
|
45 setup: function() { |
|
46 return initDebugger(gBrowser.selectedTab).then(([aTab, aDebuggee, aPanel]) => { |
|
47 // Spin the event loop before causing the debuggee to pause, to allow |
|
48 // this function to return first. |
|
49 executeSoon(() => aDebuggee.firstCall()); |
|
50 |
|
51 return waitForSourceAndCaretAndScopes(aPanel, ".html", 1).then(() => { |
|
52 gPanel = aPanel; |
|
53 gDebugger = gPanel.panelWin; |
|
54 gThreadClient = gPanel.panelWin.gThreadClient; |
|
55 gLineNumber = '' + aOptions.window.wrappedJSObject.gLineNumber; |
|
56 }); |
|
57 }); |
|
58 }, |
|
59 post: function() { |
|
60 ok(gThreadClient, "Debugger client exists."); |
|
61 is(gLineNumber, 1, "gLineNumber is correct."); |
|
62 }, |
|
63 }, |
|
64 { |
|
65 name: 'break add line .../doc_cmd-break.html 14', |
|
66 setup: function() { |
|
67 // We have to setup in a function to allow gLineNumber to be initialized. |
|
68 let line = 'break add line ' + TAB_URL + ' ' + gLineNumber; |
|
69 return helpers.setInput(aOptions, line); |
|
70 }, |
|
71 check: { |
|
72 hints: '', |
|
73 status: 'VALID', |
|
74 message: '', |
|
75 args: { |
|
76 file: { value: TAB_URL, message: '' }, |
|
77 line: { value: 1 } |
|
78 } |
|
79 }, |
|
80 exec: { |
|
81 output: 'Added breakpoint' |
|
82 } |
|
83 }, |
|
84 { |
|
85 setup: 'break add line ' + TAB_URL + ' 17', |
|
86 check: { |
|
87 hints: '', |
|
88 status: 'VALID', |
|
89 message: '', |
|
90 args: { |
|
91 file: { value: TAB_URL, message: '' }, |
|
92 line: { value: 17 } |
|
93 } |
|
94 }, |
|
95 exec: { |
|
96 output: 'Added breakpoint' |
|
97 } |
|
98 }, |
|
99 { |
|
100 setup: 'break list', |
|
101 check: { |
|
102 input: 'break list', |
|
103 hints: '', |
|
104 markup: 'VVVVVVVVVV', |
|
105 status: 'VALID' |
|
106 }, |
|
107 exec: { |
|
108 output: [ |
|
109 /Source/, /Remove/, |
|
110 /doc_cmd-break\.html:1/, |
|
111 /doc_cmd-break\.html:1/ |
|
112 ] |
|
113 } |
|
114 }, |
|
115 { |
|
116 name: 'cleanup', |
|
117 setup: function() { |
|
118 let deferred = promise.defer(); |
|
119 gThreadClient.resume(deferred.resolve); |
|
120 return deferred.promise; |
|
121 } |
|
122 }, |
|
123 { |
|
124 setup: 'break del 1', |
|
125 check: { |
|
126 input: 'break del 1', |
|
127 hints: ' -> doc_cmd-break.html:1', |
|
128 markup: 'VVVVVVVVVVI', |
|
129 status: 'ERROR', |
|
130 args: { |
|
131 breakpoint: { |
|
132 status: 'INCOMPLETE', |
|
133 message: 'Value required for \'breakpoint\'.' |
|
134 } |
|
135 } |
|
136 } |
|
137 }, |
|
138 { |
|
139 setup: 'break del doc_cmd-break.html:1', |
|
140 check: { |
|
141 input: 'break del doc_cmd-break.html:1', |
|
142 hints: '', |
|
143 markup: 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV', |
|
144 status: 'VALID', |
|
145 args: { |
|
146 breakpoint: { arg: ' doc_cmd-break.html:1' }, |
|
147 } |
|
148 }, |
|
149 exec: { |
|
150 output: 'Breakpoint removed' |
|
151 } |
|
152 }, |
|
153 { |
|
154 setup: 'break list', |
|
155 check: { |
|
156 input: 'break list', |
|
157 hints: '', |
|
158 markup: 'VVVVVVVVVV', |
|
159 status: 'VALID' |
|
160 }, |
|
161 exec: { |
|
162 output: [ |
|
163 /Source/, /Remove/, |
|
164 /doc_cmd-break\.html:17/ |
|
165 ] |
|
166 } |
|
167 }, |
|
168 { |
|
169 setup: 'break del doc_cmd-break.html:17', |
|
170 check: { |
|
171 input: 'break del doc_cmd-break.html:17', |
|
172 hints: '', |
|
173 markup: 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV', |
|
174 status: 'VALID', |
|
175 args: { |
|
176 breakpoint: { arg: ' doc_cmd-break.html:17' }, |
|
177 } |
|
178 }, |
|
179 exec: { |
|
180 output: 'Breakpoint removed' |
|
181 } |
|
182 }, |
|
183 { |
|
184 setup: 'break list', |
|
185 check: { |
|
186 input: 'break list', |
|
187 hints: '', |
|
188 markup: 'VVVVVVVVVV', |
|
189 status: 'VALID' |
|
190 }, |
|
191 exec: { |
|
192 output: 'No breakpoints set' |
|
193 }, |
|
194 post: function() { |
|
195 return teardown(gPanel, { noTabRemoval: true }); |
|
196 } |
|
197 }, |
|
198 ]); |
|
199 }).then(finish); |
|
200 } |