18a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/* 28a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Copyright (C) 2010 Google Inc. All rights reserved. 38a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 48a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Redistribution and use in source and binary forms, with or without 58a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * modification, are permitted provided that the following conditions are 68a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * met: 78a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 88a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Redistributions of source code must retain the above copyright 98a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * notice, this list of conditions and the following disclaimer. 108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Redistributions in binary form must reproduce the above 118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * copyright notice, this list of conditions and the following disclaimer 128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * in the documentation and/or other materials provided with the 138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * distribution. 148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * * Neither the name of Google Inc. nor the names of its 158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * contributors may be used to endorse or promote products derived from 168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * this software without specific prior written permission. 178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * 188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @fileoverview This file contains small testing framework along with the 348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * test suite for the frontend. These tests are a part of the continues build 358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * and are executed by the devtools_sanity_unittest.cc as a part of the 368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Interactive UI Test suite. 378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * FIXME: change field naming style to use trailing underscore. 388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockif (window.domAutomationController) { 418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvar ___interactiveUiTestsMode = true; 438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Test suite for interactive UI tests. 468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @constructor 478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite = function() 498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.controlTaken_ = false; 518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.timerId_ = -1; 528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Reports test failure. 578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} message Failure description. 588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.fail = function(message) 608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (this.controlTaken_) 628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.reportFailure_(message); 638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block else 648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block throw message; 658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Equals assertion tests that expected === actual. 708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} expected Expected object. 718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} actual Actual object. 728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} opt_message User message to print if the test fails. 738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.assertEquals = function(expected, actual, opt_message) 758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (expected !== actual) { 778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var message = "Expected: '" + expected + "', but was '" + actual + "'"; 788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (opt_message) 798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block message = opt_message + "(" + message + ")"; 808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.fail(message); 818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * True assertion tests that value == true. 868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} value Actual object. 878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} opt_message User message to print if the test fails. 888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.assertTrue = function(value, opt_message) 908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.assertEquals(true, !!value, opt_message); 928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Contains assertion tests that string contains substring. 978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} string Outer. 988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} substring Inner. 998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.assertContains = function(string, substring) 1018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (string.indexOf(substring) === -1) 1038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.fail("Expected to: '" + string + "' to contain '" + substring + "'"); 1048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Takes control over execution. 1098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.takeControl = function() 1118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.controlTaken_ = true; 1138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Set up guard timer. 1148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var self = this; 1158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.timerId_ = setTimeout(function() { 1168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block self.reportFailure_("Timeout exceeded: 20 sec"); 1178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 20000); 1188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Releases control over execution. 1238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.releaseControl = function() 1258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (this.timerId_ !== -1) { 1278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block clearTimeout(this.timerId_); 1288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.timerId_ = -1; 1298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 1308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.reportOk_(); 1318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Async tests use this one to report that they are completed. 1368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.reportOk_ = function() 1388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block window.domAutomationController.send("[OK]"); 1408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Async tests use this one to report failures. 1458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.reportFailure_ = function(error) 1478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (this.timerId_ !== -1) { 1498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block clearTimeout(this.timerId_); 1508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.timerId_ = -1; 1518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 1528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block window.domAutomationController.send("[FAILED] " + error); 1538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Runs all global functions starting with "test" as unit tests. 1588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.runTest = function(testName) 1608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block try { 1628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this[testName](); 1638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!this.controlTaken_) 1648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.reportOk_(); 1658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } catch (e) { 1668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.reportFailure_(e); 1678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 1688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} panelName Name of the panel to show. 1738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.showPanel = function(panelName) 1758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Open Scripts panel. 1778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var toolbar = document.getElementById("toolbar"); 1788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var button = toolbar.getElementsByClassName(panelName)[0]; 1798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block button.click(); 1808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.assertEquals(WebInspector.panels[panelName], WebInspector.currentPanel); 1818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 1828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 1858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Overrides the method with specified name until it's called first time. 1868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} receiver An object whose method to override. 1878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} methodName Name of the method to override. 1888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Function} override A function that should be called right after the 1898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * overriden method returns. 1908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {boolean} opt_sticky Whether restore original method after first run 1918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * or not. 1928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 1938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.addSniffer = function(receiver, methodName, override, opt_sticky) 1948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var orig = receiver[methodName]; 1968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (typeof orig !== "function") 1978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.fail("Cannot find method to override: " + methodName); 1988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 1998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block receiver[methodName] = function(var_args) { 2008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block try { 2018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var result = orig.apply(this, arguments); 2028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } finally { 2038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!opt_sticky) 2048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block receiver[methodName] = orig; 2058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 2068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // In case of exception the override won't be called. 2078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block try { 2088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block override.apply(this, arguments); 2098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } catch (e) { 2108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.fail("Exception in overriden method '" + methodName + "': " + e); 2118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 2128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return result; 2138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }; 2148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 2158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testEnableResourcesTab = function() 2188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME once reference is removed downstream. 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 2218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochTestSuite.prototype.testCompletionOnPause = function() 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME once reference is removed downstream. 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 2268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// UI Tests 2288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 2318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Tests that profiler works. 2328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 2338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testProfilerTab = function() 2348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 2358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("profiles"); 2368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var panel = WebInspector.panels.profiles; 2388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 2398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block function findDisplayedNode() { 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block var node = panel.visibleView.profileDataGridTree.children[0]; 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!node) { 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Profile hadn't been queried yet, re-schedule. 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block window.setTimeout(findDisplayedNode, 100); 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 2478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Iterate over displayed functions and search for a function 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // that is called "fib" or "eternal_fib". If found, this will mean 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // that we actually have profiled page's code. 251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block while (node) { 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (node.functionName.indexOf("fib") !== -1) 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block test.releaseControl(); 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block node = node.traverseNextNode(true, null, true); 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block test.fail(); 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block function findVisibleView() { 261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!panel.visibleView) { 262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setTimeout(findVisibleView, 0); 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 26506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen setTimeout(findDisplayedNode, 0); 266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block findVisibleView(); 2698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 2708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 2718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 27406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Tests that heap profiler works. 27506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen */ 27606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian MonsenTestSuite.prototype.testHeapProfiler = function() 27706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 27806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.showPanel("profiles"); 27906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 28006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen var panel = WebInspector.panels.profiles; 28106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen var test = this; 28206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 28306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen function findDisplayedNode() { 28406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen var node = panel.visibleView.dataGrid.children[0]; 28506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!node) { 28606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Profile hadn't been queried yet, re-schedule. 28706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen window.setTimeout(findDisplayedNode, 100); 28806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return; 28906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 29006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 29106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Iterate over displayed functions and find node called "A" 29206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // If found, this will mean that we actually have taken heap snapshot. 29306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen while (node) { 29406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (node.constructorName.indexOf("A") !== -1) { 29506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen test.releaseControl(); 29606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return; 29706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 29806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen node = node.traverseNextNode(false, null, true); 29906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 30006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 30106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen test.fail(); 30206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 30306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 30406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen function findVisibleView() { 30506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!panel.visibleView) { 30606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen setTimeout(findVisibleView, 0); 30706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return; 30806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 30906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen setTimeout(findDisplayedNode, 0); 31006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 31106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 31206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen WebInspector.HeapSnapshotProfileType.prototype.buttonClicked(); 31306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen findVisibleView(); 31406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.takeControl(); 31506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 31606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 31706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 31806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/** 3198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Tests that scripts tab can be open and populated with inspected scripts. 3208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 3218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testShowScriptsTab = function() 3228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 3238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("scripts"); 3248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 3258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // There should be at least main page script. 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this._waitUntilScriptsAreParsed(["debugger_test_page.html"], 3278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function() { 3288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 3298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 3308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait until all scripts are added to the debugger. 3318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 3328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 3338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 3368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Tests that scripts tab is populated with inspected scripts even if it 3378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * hadn't been shown by the moment inspected paged refreshed. 3388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @see http://crbug.com/26312 3398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 3408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh = function() 3418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 3428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 3438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.assertEquals(WebInspector.panels.elements, WebInspector.currentPanel, "Elements panel should be current one."); 3448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 34506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen this.addSniffer(WebInspector.panels.scripts, "reset", waitUntilScriptIsParsed); 3468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Reload inspected page. It will reset the debugger agent. 3488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.evaluateInConsole_( 3498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block "window.location.reload(true);", 35006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen function(resultText) {}); 3518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function waitUntilScriptIsParsed() { 3538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.showPanel("scripts"); 35406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen test._waitUntilScriptsAreParsed(["debugger_test_page.html"], 35506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen function() { 35606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen test.releaseControl(); 35706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }); 3588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 3598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait until all scripts are added to the debugger. 3618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 3628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 3638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 3668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Tests that scripts list contains content scripts. 3678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 3688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testContentScriptIsPresent = function() 3698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 3708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("scripts"); 3718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 3728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._waitUntilScriptsAreParsed( 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ["page_with_content_script.html", "simple_content_script.js"], 3758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function() { 3768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 3778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 3788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait until all scripts are added to the debugger. 3808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 3818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 3828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 3858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Tests that scripts are not duplicaed on Scripts tab switch. 3868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 3878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testNoScriptDuplicatesOnPanelSwitch = function() 3888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 3898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 3908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // There should be two scripts: one for the main page and another 3928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // one which is source of console API(see 3938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // InjectedScript._ensureCommandLineAPIInstalled). 3948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var expectedScriptsCount = 2; 3958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var parsedScripts = []; 3968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("scripts"); 3988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function switchToElementsTab() { 4018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.showPanel("elements"); 4028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block setTimeout(switchToScriptsTab, 0); 4038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function switchToScriptsTab() { 4068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.showPanel("scripts"); 4078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block setTimeout(checkScriptsPanel, 0); 4088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function checkScriptsPanel() { 4118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(!!WebInspector.panels.scripts.visibleView, "No visible script view."); 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block test.assertTrue(test._scriptsAreParsed(["debugger_test_page.html"]), "Some scripts are missing."); 4138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block checkNoDuplicates(); 4148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 4158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function checkNoDuplicates() { 4188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptSelect = document.getElementById("scripts-files"); 4198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var options = scriptSelect.options; 4208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var i = 0; i < options.length; i++) { 4218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptName = options[i].text; 4228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var j = i + 1; j < options.length; j++) 4238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(scriptName !== options[j].text, "Found script duplicates: " + test.optionsToString_(options)); 4248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._waitUntilScriptsAreParsed( 428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ["debugger_test_page.html"], 4298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function() { 4308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block checkNoDuplicates(); 4318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block setTimeout(switchToElementsTab, 0); 4328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 4338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait until all scripts are added to the debugger. 4368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 4378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 4388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// Tests that debugger works correctly if pause event occurs when DevTools 4418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// frontend is being loaded. 4428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testPauseWhenLoadingDevTools = function() 4438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 4448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("scripts"); 4458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 4468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var expectations = { 4488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block functionsOnStack: ["callDebugger"], 4498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineNumber: 8, 4508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineText: " debugger;" 4518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }; 4528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Script execution can already be paused. 4558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (WebInspector.currentPanel.paused) { 45681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch var callFrame = WebInspector.currentPanel._presentationModel.selectedCallFrame; 4578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.assertEquals(expectations.functionsOnStack[0], callFrame.functionName); 4588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var callbackInvoked = false; 4598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this._checkSourceFrameWhenLoaded(expectations, function() { 4608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callbackInvoked = true; 4618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (test.controlTaken_) 4628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 4638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 4648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!callbackInvoked) { 4658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.takeControl(); 4668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 4688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 4698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this._waitForScriptPause( 4718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block { 4728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block functionsOnStack: ["callDebugger"], 4738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineNumber: 8, 4748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineText: " debugger;" 4758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 4768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function() { 4778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 4788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 4798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 4808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 4818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// Tests that pressing "Pause" will pause script execution if the script 4848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block// is already running. 4858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.testPauseWhenScriptIsRunning = function() 4868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 4878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.showPanel("scripts"); 4888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 4898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.evaluateInConsole_( 4918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 'setTimeout("handleClick()" , 0)', 4928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function(resultText) { 4938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText); 4948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block testScriptPauseAfterDelay(); 4958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 4968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 4978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait for some time to make sure that inspected page is running the 4988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // infinite loop. 4998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function testScriptPauseAfterDelay() { 5008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block setTimeout(testScriptPause, 300); 5018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 5028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function testScriptPause() { 5048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // The script should be in infinite loop. Click "Pause" button to 5058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // pause it and wait for the result. 5068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebInspector.panels.scripts.pauseButton.click(); 5078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._waitForScriptPause( 5098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block { 51006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen functionsOnStack: ["handleClick", ""], 5118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineNumber: 5, 5128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block lineText: " while(true) {" 5138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 5148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function() { 5158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.releaseControl(); 5168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 5178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 5188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.takeControl(); 5208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 5218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 5238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 5242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Tests network size. 5252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 5262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochTestSuite.prototype.testNetworkSize = function() 5272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 5282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var test = this; 5292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch function finishResource(resource, finishTime) 5312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 5322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertEquals(221, resource.transferSize, "Incorrect total encoded data length"); 5332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertEquals(25, resource.resourceSize, "Incorrect total data length"); 5342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.releaseControl(); 5352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 5362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.addSniffer(WebInspector.NetworkDispatcher.prototype, "_finishResource", finishResource); 5382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Reload inspected page to sniff network events 5402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.evaluateInConsole_("window.location.reload(true);", function(resultText) {}); 5412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.takeControl(); 5432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}; 5442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/** 5472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Tests network sync size. 5482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 5492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochTestSuite.prototype.testNetworkSyncSize = function() 5502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 5512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var test = this; 5522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch function finishResource(resource, finishTime) 5542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 5552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertEquals(221, resource.transferSize, "Incorrect total encoded data length"); 5562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertEquals(25, resource.resourceSize, "Incorrect total data length"); 5572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.releaseControl(); 5582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 5592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.addSniffer(WebInspector.NetworkDispatcher.prototype, "_finishResource", finishResource); 5612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Send synchronous XHR to sniff network events 5632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.evaluateInConsole_("var xhr = new XMLHttpRequest(); xhr.open(\"GET\", \"chunked\", false); xhr.send(null);", function() {}); 5642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.takeControl(); 5662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}; 5672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/** 5702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Tests network raw headers text. 5712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 5722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochTestSuite.prototype.testNetworkRawHeadersText = function() 5732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 5742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var test = this; 5752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch function finishResource(resource, finishTime) 5772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 5782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var rawResponseHeadersText = resource.rawResponseHeadersText 5792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!rawResponseHeadersText) 5802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.fail("Failure: resource does not have raw response header text"); 5812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertEquals(166, resource.rawResponseHeadersText.length, "Incorrect raw response header text length"); 5822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.releaseControl(); 5832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 5842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.addSniffer(WebInspector.NetworkDispatcher.prototype, "_finishResource", finishResource); 5862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Reload inspected page to sniff network events 5882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.evaluateInConsole_("window.location.reload(true);", function(resultText) {}); 5892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.takeControl(); 5912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}; 5922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/** 5952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Tests network timing. 5962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */ 5972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochTestSuite.prototype.testNetworkTiming = function() 5982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 5992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch var test = this; 6002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch function finishResource(resource, finishTime) 6022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 6032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertTrue(resource.timing.receiveHeadersEnd - resource.timing.connectStart >= 100, 6042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch "Time between receiveHeadersEnd and connectStart should be >=100ms, but was " + 6052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch "receiveHeadersEnd=" + resource.timing.receiveHeadersEnd + ", connectStart=" + resource.timing.connectStart + "."); 6062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.assertTrue(resource.endTime - resource.startTime >= 0.2, 6072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch "Time between endTime and startTime should be >=200ms, but was " + 6082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch "endtime=" + resource.endTime + ", startTime=" + resource.startTime + "."); 6092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.releaseControl(); 6112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 6122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.addSniffer(WebInspector.NetworkDispatcher.prototype, "_finishResource", finishResource); 6142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Reload inspected page to sniff network events 6162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch test.evaluateInConsole_("window.location.reload(true);", function(resultText) {}); 6172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch this.takeControl(); 6192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}; 6202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/** 6238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Serializes options collection to string. 6248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {HTMLOptionsCollection} options 6258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @return {string} 6268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 6278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.optionsToString_ = function(options) 6288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 6298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var names = []; 6308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var i = 0; i < options.length; i++) 6318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block names.push('"' + options[i].text + '"'); 6328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return names.join(","); 6338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 6348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 6378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Ensures that main HTML resource is selected in Scripts panel and that its 6388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * source frame is setup. Invokes the callback when the condition is satisfied. 6398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {HTMLOptionsCollection} options 6408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {function(WebInspector.SourceView,string)} callback 6418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 6428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.showMainPageScriptSource_ = function(scriptName, callback) 6438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 6448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 6458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptSelect = document.getElementById("scripts-files"); 6478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var options = scriptSelect.options; 6488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(options.length, "Scripts list is empty"); 6508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Select page's script if it's not current option. 6528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptResource; 6538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (options[scriptSelect.selectedIndex].text === scriptName) 6548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block scriptResource = options[scriptSelect.selectedIndex].representedObject; 6558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block else { 6568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var pageScriptIndex = -1; 6578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var i = 0; i < options.length; i++) { 6588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (options[i].text === scriptName) { 6598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block pageScriptIndex = i; 6608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block break; 6618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(-1 !== pageScriptIndex, "Script with url " + scriptName + " not found among " + test.optionsToString_(options)); 6648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block scriptResource = options[pageScriptIndex].representedObject; 6658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Current panel is "Scripts". 6678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebInspector.currentPanel._showScriptOrResource(scriptResource); 6688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertEquals(pageScriptIndex, scriptSelect.selectedIndex, "Unexpected selected option index."); 6698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 6708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(scriptResource instanceof WebInspector.Resource, 6728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block "Unexpected resource class."); 6738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(!!scriptResource.url, "Resource URL is null."); 6748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(scriptResource.url.search(scriptName + "$") !== -1, "Main HTML resource should be selected."); 6758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptsPanel = WebInspector.panels.scripts; 6778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var view = scriptsPanel.visibleView; 6798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertTrue(view instanceof WebInspector.SourceView); 6808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!view.sourceFrame._loaded) { 6828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.addSniffer(view, "_sourceFrameSetupFinished", function(event) { 6838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callback(view, scriptResource.url); 6848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 6858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } else 6868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callback(view, scriptResource.url); 6878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 6888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 6908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/* 6918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Evaluates the code in the console as if user typed it manually and invokes 6928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * the callback when the result message is received and added to the console. 6938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} code 6948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {function(string)} callback 6958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 6968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype.evaluateInConsole_ = function(code, callback) 6978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 698e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke WebInspector.showConsole(); 6998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebInspector.console.prompt.text = code; 7008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block WebInspector.console.promptElement.dispatchEvent( TestSuite.createKeyEvent("Enter")); 7018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.addSniffer(WebInspector.ConsoleView.prototype, "addMessage", 7038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function(commandResult) { 7048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callback(commandResult.toMessageElement().textContent); 7058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 7068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 7078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 7108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Checks current execution line against expectations. 7118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {WebInspector.SourceFrame} sourceFrame 7128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {number} lineNumber Expected line number 7138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} lineContent Expected line text 7148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 7158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._checkExecutionLine = function(sourceFrame, lineNumber, lineContent) 7168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 71781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch this.assertEquals(lineNumber, sourceFrame._executionLineNumber + 1, "Unexpected execution line number."); 7188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block this.assertEquals(lineContent, sourceFrame._textModel.line(lineNumber - 1), "Unexpected execution line text."); 7198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 7208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 7238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Checks that all expected scripts are present in the scripts list 7248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * in the Scripts panel. 7258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Array.<string>} expected Regular expressions describing 7268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * expected script names. 7278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @return {boolean} Whether all the scripts are in "scripts-files" select 7288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * box 7298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 7308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._scriptsAreParsed = function(expected) 7318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 7328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var scriptSelect = document.getElementById("scripts-files"); 7338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var options = scriptSelect.options; 7348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7358a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Check that at least all the expected scripts are present. 7368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var missing = expected.slice(0); 7378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var i = 0 ; i < options.length; i++) { 7388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var j = 0; j < missing.length; j++) { 7398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (options[i].text.search(missing[j]) !== -1) { 7408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block missing.splice(j, 1); 7418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block break; 7428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 7438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 7448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 7458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return missing.length === 0; 7468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 7478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 7508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Waits for script pause, checks expectations, and invokes the callback. 7518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} expectations Dictionary of expectations 7528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {function():void} callback 7538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 7548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._waitForScriptPause = function(expectations, callback) 7558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 7568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 7578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Wait until script is paused. 7588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.addSniffer( 759f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebInspector.debuggerModel, 76065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch "_pausedScript", 7615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick function(details) { 7625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick var callFrames = details.callFrames; 7638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var functionsOnStack = []; 7648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var i = 0; i < callFrames.length; i++) 7658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block functionsOnStack.push(callFrames[i].functionName); 7668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.assertEquals(expectations.functionsOnStack.join(","), functionsOnStack.join(","), "Unexpected stack."); 7688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Check that execution line where the script is paused is 7708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // expected one. 7718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._checkSourceFrameWhenLoaded(expectations, callback); 7728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 7738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 7748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 7778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Waits for current source frame to load, checks expectations, and invokes 7788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * the callback. 7798a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {Object} expectations Dictionary of expectations 7808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {function():void} callback 7818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 7828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._checkSourceFrameWhenLoaded = function(expectations, callback) 7838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 7848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 7858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 7862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var frame = WebInspector.currentPanel.visibleView; 787ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 788ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (frame._textViewer) 7898a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block checkExecLine(); 7908a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block else { 7918a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block setTimeout(function() { 7928a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._checkSourceFrameWhenLoaded(expectations, callback); 7938a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }, 100); 7948a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 7958a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function checkExecLine() { 7968a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._checkExecutionLine(frame, expectations.lineNumber, expectations.lineText); 7978a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callback(); 7988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 7998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Waits until all the scripts are parsed and asynchronously executes the code 8048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * in the inspected page. 8058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._executeCodeWhenScriptsAreParsed = function(code, expectedScripts) 8078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 8088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 8098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function executeFunctionInInspectedPage() { 8118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Since breakpoints are ignored in evals' calculate() function is 8128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // execute after zero-timeout so that the breakpoint is hit. 8138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test.evaluateInConsole_( 8148a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 'setTimeout("' + code + '" , 0)', 8158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function(resultText) { 81606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText + ". Code: " + code); 8178a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block }); 8188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 8198a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8208a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block test._waitUntilScriptsAreParsed(expectedScripts, executeFunctionInInspectedPage); 8218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8228a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8248a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Waits until all the scripts are parsed and invokes the callback. 8268a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8278a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.prototype._waitUntilScriptsAreParsed = function(expectedScripts, callback) 8288a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 8298a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var test = this; 8308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8318a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block function waitForAllScripts() { 8328a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (test._scriptsAreParsed(expectedScripts)) 8338a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block callback(); 8348a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block else 83581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch test.addSniffer(WebInspector.panels.scripts, "_addOptionToFilesSelect", waitForAllScripts); 8368a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 8378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8388a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block waitForAllScripts(); 8398a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Key event with given key identifier. 8448a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockTestSuite.createKeyEvent = function(keyIdentifier) 8468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 8478a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block var evt = document.createEvent("KeyboardEvent"); 8488a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block evt.initKeyboardEvent("keydown", true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, ""); 8498a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return evt; 8508a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8518a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8528a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8538a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8548a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Test runner for the test suite. 8558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvar uiTests = {}; 8578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Run each test from the test suit on a fresh instance of the suite. 8618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockuiTests.runAllTests = function() 8638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 8648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // For debugging purposes. 8658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (var name in TestSuite.prototype) { 8668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (name.substring(0, 4) === "test" && typeof TestSuite.prototype[name] === "function") 8678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block uiTests.runTest(name); 8688a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 8698a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8718a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 8728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block/** 8738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * Run specified test on a fresh instance of the test suite. 8748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block * @param {string} name Name of a test method from TestSuite class. 8758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block */ 8768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockuiTests.runTest = function(name) 8778a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 878dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (uiTests._populatedInterface) 879dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch new TestSuite().runTest(name); 880dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch else 881dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch uiTests._pendingTestName = name; 8828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block}; 8838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 884dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch(function() { 885dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 886dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochfunction runTests() 887dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 888dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch uiTests._populatedInterface = true; 889dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch var name = uiTests._pendingTestName; 890dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch delete uiTests._pendingTestName; 891dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (name) 892dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch new TestSuite().runTest(name); 893dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 894dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 895dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvar oldShowElementsPanel = WebInspector.showElementsPanel; 896dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebInspector.showElementsPanel = function() 897dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 898dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch oldShowElementsPanel.call(this); 899dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch runTests(); 900dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 901dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 902dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvar oldShowPanel = WebInspector.showPanel; 903dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWebInspector.showPanel = function(name) 904dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 905dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch oldShowPanel.call(this, name); 906dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch runTests(); 907dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 908dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 909dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch})(); 9108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 9118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 912