Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: webkit/glue/devtools/js/tests.js

Issue 149246: DevTools: Add more sanity tests. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/glue/devtools/js/devtools.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 5
6 /** 6 /**
7 * @fileoverview This file contains small testing framework along with the 7 * @fileoverview This file contains small testing framework along with the
8 * test suite for the frontend. These tests are a part of the continues build 8 * test suite for the frontend. These tests are a part of the continues build
9 * and are executed by the devtools_sanity_unittest.cc as a part of the 9 * and are executed by the devtools_sanity_unittest.cc as a part of the
10 * Interactive UI Test suite. 10 * Interactive UI Test suite.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 for (var name in this) { 72 for (var name in this) {
73 if (name.substring(0, 4) == 'test' && 73 if (name.substring(0, 4) == 'test' &&
74 typeof this[name] == 'function') { 74 typeof this[name] == 'function') {
75 this.runTest(name); 75 this.runTest(name);
76 } 76 }
77 } 77 }
78 }; 78 };
79 79
80 80
81 /** 81 /**
82 * Async tests use this one to report that they are completed.
83 */
84 TestSuite.prototype.reportOk = function() {
85 window.domAutomationController.send('[OK]');
86 };
87
88
89 /**
90 * Manual controller for async tests. 82 * Manual controller for async tests.
91 * @constructor. 83 * @constructor.
92 */ 84 */
93 TestSuite.Controller = function() { 85 TestSuite.Controller = function() {
94 this.controlTaken_ = false; 86 this.controlTaken_ = false;
95 this.timerId_ = -1; 87 this.timerId_ = -1;
96 }; 88 };
97 89
98 90
99 /** 91 /**
100 * Takes control over execution. 92 * Takes control over execution.
101 */ 93 */
102 TestSuite.Controller.prototype.takeControl = function() { 94 TestSuite.Controller.prototype.takeControl = function() {
103 this.controlTaken_ = true; 95 this.controlTaken_ = true;
104 // Set up guard timer. 96 // Set up guard timer.
105 var self = this; 97 var self = this;
106 this.timerId_ = setTimeout(function() { 98 this.timerId_ = setTimeout(function() {
107 self.reportFailure('Timeout exceeded: 20 sec'); 99 self.reportFailure_('Timeout exceeded: 20 sec');
108 }, 20000); 100 }, 20000);
109 }; 101 };
110 102
111 103
112 /** 104 /**
105 * Releases control over execution.
106 */
107 TestSuite.Controller.prototype.releaseControl = function() {
108 this.controlTaken_ = false;
109 if (this.timerId_ != -1) {
110 this.timerId_ = -1;
111 clearTimeout(this.timerId_);
112 }
113 this.reportOk_();
114 };
115
116
117 /**
113 * Async tests use this one to report that they are completed. 118 * Async tests use this one to report that they are completed.
114 */ 119 */
115 TestSuite.Controller.prototype.reportOk = function() { 120 TestSuite.Controller.prototype.reportOk_ = function() {
116 if (this.timerId_ != -1) {
117 this.timerId_ = -1;
118 clearTimeout(this.timerId_);
119 }
120 window.domAutomationController.send('[OK]'); 121 window.domAutomationController.send('[OK]');
121 }; 122 };
122 123
123 124
124 /** 125 /**
125 * Async tests use this one to report failures. 126 * Async tests use this one to report failures.
126 */ 127 */
127 TestSuite.Controller.prototype.reportFailure = function(error) { 128 TestSuite.Controller.prototype.reportFailure_ = function(error) {
128 if (this.timerId_ != -1) { 129 if (this.timerId_ != -1) {
129 this.timerId_ = -1; 130 this.timerId_ = -1;
130 clearTimeout(this.timerId_); 131 clearTimeout(this.timerId_);
131 } 132 }
132 window.domAutomationController.send('[FAILED] ' + error); 133 window.domAutomationController.send('[FAILED] ' + error);
133 }; 134 };
134 135
135 136
136 /** 137 /**
137 * Runs all global functions starting with 'test' as unit tests. 138 * Runs all global functions starting with 'test' as unit tests.
138 */ 139 */
139 TestSuite.prototype.runTest = function(testName) { 140 TestSuite.prototype.runTest = function(testName) {
140 var controller = new TestSuite.Controller(); 141 var controller = new TestSuite.Controller();
141 try { 142 try {
142 this[testName](controller); 143 this[testName](controller);
143 if (!controller.controlTaken_) { 144 if (!controller.controlTaken_) {
144 controller.reportOk(); 145 controller.reportOk_();
145 } 146 }
146 } catch (e) { 147 } catch (e) {
147 controller.reportFailure(e); 148 controller.reportFailure_(e);
148 } 149 }
149 }; 150 };
150 151
151 152
152 /** 153 /**
153 * @param {string} panelName Name of the panel to show. 154 * @param {string} panelName Name of the panel to show.
154 */ 155 */
155 TestSuite.prototype.showPanel = function(panelName) { 156 TestSuite.prototype.showPanel = function(panelName) {
156 // Open Scripts panel. 157 // Open Scripts panel.
157 var toolbar = document.getElementById('toolbar'); 158 var toolbar = document.getElementById('toolbar');
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 209
209 var test = this; 210 var test = this;
210 var oldAddResource = WebInspector.addResource; 211 var oldAddResource = WebInspector.addResource;
211 WebInspector.addResource = function(identifier, payload) { 212 WebInspector.addResource = function(identifier, payload) {
212 WebInspector.addResource = oldAddResource; 213 WebInspector.addResource = oldAddResource;
213 oldAddResource.call(this, identifier, payload); 214 oldAddResource.call(this, identifier, payload);
214 test.assertEquals('simple_page.html', payload.lastPathComponent); 215 test.assertEquals('simple_page.html', payload.lastPathComponent);
215 WebInspector.panels.resources.refresh(); 216 WebInspector.panels.resources.refresh();
216 WebInspector.resources[identifier]._resourcesTreeElement.select(); 217 WebInspector.resources[identifier]._resourcesTreeElement.select();
217 218
218 controller.reportOk(); 219 controller.releaseControl();
219 }; 220 };
220 221
221 // Following call should lead to reload that we capture in the 222 // Following call should lead to reload that we capture in the
222 // addResource override. 223 // addResource override.
223 WebInspector.panels.resources._enableResourceTracking(); 224 WebInspector.panels.resources._enableResourceTracking();
224 225
225 // We now have some time to report results to controller. 226 // We now have some time to report results to controller.
226 controller.takeControl(); 227 controller.takeControl();
227 }; 228 };
228 229
229 230
230 /** 231 /**
232 * Tests resource headers.
233 */
234 TestSuite.prototype.testResourceHeaders = function(controller) {
235 this.showPanel('resources');
236
237 var test = this;
238 var oldAddResource = WebInspector.addResource;
239 var oldUpdateResource = WebInspector.updateResource;
240
241 var requestOk = false;
242 var responseOk = false;
243 var timingOk = false;
244
245 WebInspector.addResource = function(identifier, payload) {
246 oldAddResource.call(this, identifier, payload);
247 var resource = this.resources[identifier];
248 if (resource.mainResource) {
249 // We are only interested in secondary resources in this test.
250 return;
251 }
252
253 var requestHeaders = JSON.stringify(resource.requestHeaders);
254 test.assertContains(requestHeaders, 'Accept');
255 requestOk = true;
256 };
257
258 WebInspector.updateResource = function(identifier, payload) {
259 oldUpdateResource.call(this, identifier, payload);
260 var resource = this.resources[identifier];
261 if (resource.mainResource) {
262 // We are only interested in secondary resources in this test.
263 return;
264 }
265
266 if (payload.didResponseChange) {
267 var responseHeaders = JSON.stringify(resource.responseHeaders);
268 test.assertContains(responseHeaders, 'Content-type');
269 test.assertContains(responseHeaders, 'Content-Length');
270 test.assertTrue(typeof resource.responseReceivedTime != 'undefnied');
271 responseOk = true;
272 }
273
274 if (payload.didTimingChange) {
275 test.assertTrue(typeof resource.startTime != 'undefnied');
276 timingOk = true;
277 }
278
279 if (payload.didCompletionChange) {
280 test.assertTrue(requestOk);
281 test.assertTrue(responseOk);
282 test.assertTrue(timingOk);
283 test.assertTrue(typeof resource.endTime != 'undefnied');
284 controller.releaseControl();
285 }
286 };
287
288 WebInspector.panels.resources._enableResourceTracking();
289 controller.takeControl();
290 };
291
292
293 /**
231 * Test that profiler works. 294 * Test that profiler works.
232 */ 295 */
233 TestSuite.prototype.testProfilerTab = function(controller) { 296 TestSuite.prototype.testProfilerTab = function(controller) {
234 this.showPanel('profiles'); 297 this.showPanel('profiles');
235 298
299 var test = this;
236 var oldAddProfile = WebInspector.addProfile; 300 var oldAddProfile = WebInspector.addProfile;
237 WebInspector.addProfile = function(profile) { 301 WebInspector.addProfile = function(profile) {
238 WebInspector.addProfile = oldAddProfile; 302 WebInspector.addProfile = oldAddProfile;
239 oldAddProfile.call(this, profile); 303 oldAddProfile.call(this, profile);
240 304
241 var panel = WebInspector.panels.profiles; 305 var panel = WebInspector.panels.profiles;
242 panel.showProfile(profile); 306 panel.showProfile(profile);
243 var node = panel.visibleView.profileDataGridTree.children[0]; 307 var node = panel.visibleView.profileDataGridTree.children[0];
244 // Iterate over displayed functions and search for a function 308 // Iterate over displayed functions and search for a function
245 // that is called 'fib' or 'eternal_fib'. If found, it will mean 309 // that is called 'fib' or 'eternal_fib'. If found, it will mean
246 // that we actually have profiled page's code. 310 // that we actually have profiled page's code.
247 while (node) { 311 while (node) {
248 if (node.functionName.indexOf("fib") != -1) { 312 if (node.functionName.indexOf("fib") != -1) {
249 controller.reportOk(); 313 controller.releaseControl();
250 } 314 }
251 node = node.traverseNextNode(true, null, true); 315 node = node.traverseNextNode(true, null, true);
252 } 316 }
253 317
254 controller.reportFailure(); 318 test.fail();
255 }; 319 };
256 320
257 InspectorController.startProfiling(); 321 InspectorController.startProfiling();
258 window.setTimeout('InspectorController.stopProfiling();', 1000); 322 window.setTimeout('InspectorController.stopProfiling();', 1000);
259 controller.takeControl(); 323 controller.takeControl();
260 }; 324 };
261 325
262 326
263 /** 327 /**
264 * Tests that scripts tab can be open and populated with inspected scripts. 328 * Tests that scripts tab can be open and populated with inspected scripts.
265 */ 329 */
266 TestSuite.prototype.testShowScriptsTab = function(controller) { 330 TestSuite.prototype.testShowScriptsTab = function(controller) {
267 var parsedDebuggerTestPageHtml = false; 331 var parsedDebuggerTestPageHtml = false;
268 var parsedDebuggerTestJs = false; 332 var parsedDebuggerTestJs = false;
269 333
270 // Intercept parsedScriptSource calls to check that all expected scripts are 334 // Intercept parsedScriptSource calls to check that all expected scripts are
271 // added to the debugger. 335 // added to the debugger.
272 var self = this; 336 var test = this;
273 var originalParsedScriptSource = WebInspector.parsedScriptSource; 337 var originalParsedScriptSource = WebInspector.parsedScriptSource;
274 WebInspector.parsedScriptSource = function(sourceID, sourceURL, source, 338 WebInspector.parsedScriptSource = function(sourceID, sourceURL, source,
275 startingLine) { 339 startingLine) {
276 if (sourceURL.search(/debugger_test_page.html$/) != -1) { 340 if (sourceURL.search(/debugger_test_page.html$/) != -1) {
277 if (parsedDebuggerTestPageHtml) { 341 if (parsedDebuggerTestPageHtml) {
278 controller.reportFailure('Unexpected parse event: ' + sourceURL); 342 test.fail('Unexpected parse event: ' + sourceURL);
279 return;
280 } 343 }
281 parsedDebuggerTestPageHtml = true; 344 parsedDebuggerTestPageHtml = true;
282 } else if (sourceURL.search(/debugger_test.js$/) != -1) { 345 } else if (sourceURL.search(/debugger_test.js$/) != -1) {
283 if (parsedDebuggerTestJs) { 346 if (parsedDebuggerTestJs) {
284 controller.reportFailure('Unexpected parse event: ' + sourceURL); 347 test.fail('Unexpected parse event: ' + sourceURL);
285 return;
286 } 348 }
287 parsedDebuggerTestJs = true; 349 parsedDebuggerTestJs = true;
288 } else { 350 } else {
289 controller.reportFailure('Unexpected script URL: ' + sourceURL); 351 test.fail('Unexpected script URL: ' + sourceURL);
290 } 352 }
291 originalParsedScriptSource.apply(this, arguments); 353 originalParsedScriptSource.apply(this, arguments);
292 354
293 if (!WebInspector.panels.scripts.visibleView) { 355 if (!WebInspector.panels.scripts.visibleView) {
294 controller.reportFailure('No visible script view: ' + sourceURL); 356 test.fail('No visible script view: ' + sourceURL);
295 return;
296 } 357 }
297 358
298 if (parsedDebuggerTestJs && parsedDebuggerTestPageHtml) { 359 if (parsedDebuggerTestJs && parsedDebuggerTestPageHtml) {
299 controller.reportOk(); 360 controller.releaseControl();
300 } 361 }
301 controller.reportOk();
302 }; 362 };
303 363
304 this.showPanel('scripts'); 364 this.showPanel('scripts');
305 365
306 // Wait until all scripts are added to the debugger. 366 // Wait until all scripts are added to the debugger.
307 controller.takeControl(); 367 controller.takeControl();
308 }; 368 };
309 369
310 370
311 TestSuite.ConsoleEnter = {
312 keyIdentifier : 'Enter',
313 preventDefault : function() {},
314 stopPropagation : function() {}
315 };
316
317
318 /** 371 /**
372 * Key event with given key identifier.
373 */
374 TestSuite.KeyEvent = function(key) {
375 this.keyIdentifier = key;
376 };
377 TestSuite.KeyEvent.prototype.preventDefault = function() {};
378 TestSuite.KeyEvent.prototype.stopPropagation = function() {};
379
380
381 /**
319 * Tests console eval. 382 * Tests console eval.
320 */ 383 */
321 TestSuite.prototype.testConsoleEval = function(controller) { 384 TestSuite.prototype.testConsoleEval = function(controller) {
322 var test = this; 385 var test = this;
323 var originalConsoleAddMessage = WebInspector.Console.prototype.addMessage; 386 var originalConsoleAddMessage = WebInspector.Console.prototype.addMessage;
324 WebInspector.Console.prototype.addMessage = function(commandResult) { 387 WebInspector.Console.prototype.addMessage = function(commandResult) {
325 originalConsoleAddMessage.call(this, commandResult); 388 originalConsoleAddMessage.call(this, commandResult);
326 WebInspector.Console.prototype.addMessage = originalConsoleAddMessage; 389 WebInspector.Console.prototype.addMessage = originalConsoleAddMessage;
327 test.assertEquals('123', commandResult.toMessageElement().textContent); 390 test.assertEquals('123', commandResult.toMessageElement().textContent);
328 controller.reportOk(); 391 controller.releaseControl();
329 }; 392 };
330 393
331 WebInspector.console.visible = true; 394 WebInspector.console.visible = true;
332 WebInspector.console.prompt.text = '123'; 395 WebInspector.console.prompt.text = '123';
333 WebInspector.console.promptElement.handleKeyEvent(TestSuite.ConsoleEnter); 396 WebInspector.console.promptElement.handleKeyEvent(
397 new TestSuite.KeyEvent('Enter'));
334 398
335 controller.takeControl(); 399 controller.takeControl();
336 }; 400 };
337 401
338 402
339 /** 403 /**
340 * Tests console log. 404 * Tests console log.
341 */ 405 */
342 TestSuite.prototype.testConsoleLog = function(controller) { 406 TestSuite.prototype.testConsoleLog = function(controller) {
343 WebInspector.console.visible = true; 407 WebInspector.console.visible = true;
(...skipping 26 matching lines...) Expand all
370 assertNext('19', 'Object Object'); 434 assertNext('19', 'Object Object');
371 assertNext('22', 'repeated', 'log', 5); 435 assertNext('22', 'repeated', 'log', 5);
372 assertNext('26', 'count: 1'); 436 assertNext('26', 'count: 1');
373 assertNext('26', 'count: 2'); 437 assertNext('26', 'count: 2');
374 assertNext('29', 'group', 'group-title'); 438 assertNext('29', 'group', 'group-title');
375 index++; 439 index++;
376 assertNext('33', 'timer:', 'log', '', true); 440 assertNext('33', 'timer:', 'log', '', true);
377 }; 441 };
378 442
379 443
444 /**
445 * Tests eval of global objects.
446 */
447 TestSuite.prototype.testEvalGlobal = function(controller) {
448 var test = this;
449 var originalConsoleAddMessage = WebInspector.Console.prototype.addMessage;
450 WebInspector.Console.prototype.addMessage = function(commandResult) {
451 originalConsoleAddMessage.call(this, commandResult);
452 WebInspector.Console.prototype.addMessage = originalConsoleAddMessage;
453 test.assertEquals('fooValue', commandResult.toMessageElement().textContent);
454 controller.releaseControl();
455 };
456
457 WebInspector.console.visible = true;
458 WebInspector.console.prompt.text = 'foo';
459 WebInspector.console.promptElement.handleKeyEvent(
460 new TestSuite.KeyEvent('Enter'));
461
462 controller.takeControl();
463 };
464
465
466 /**
467 * Tests eval on call frame.
468 */
469 TestSuite.prototype.testEvalCallFrame = function(controller) {
470 };
471
472
380 var uiTests = new TestSuite(); 473 var uiTests = new TestSuite();
381 } 474 }
OLDNEW
« no previous file with comments | « webkit/glue/devtools/js/devtools.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698