summaryrefslogtreecommitdiffstats
path: root/webkit/glue/devtools/js/tests.js
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/devtools/js/tests.js')
-rw-r--r--webkit/glue/devtools/js/tests.js2660
1 files changed, 1303 insertions, 1357 deletions
diff --git a/webkit/glue/devtools/js/tests.js b/webkit/glue/devtools/js/tests.js
index 1b7e01b..ba832c9 100644
--- a/webkit/glue/devtools/js/tests.js
+++ b/webkit/glue/devtools/js/tests.js
@@ -1,6 +1,32 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
/**
@@ -18,9 +44,10 @@ var ___interactiveUiTestsMode = true;
* Test suite for interactive UI tests.
* @constructor
*/
-TestSuite = function() {
- this.controlTaken_ = false;
- this.timerId_ = -1;
+TestSuite = function()
+{
+ this.controlTaken_ = false;
+ this.timerId_ = -1;
};
@@ -28,29 +55,29 @@ TestSuite = function() {
* Reports test failure.
* @param {string} message Failure description.
*/
-TestSuite.prototype.fail = function(message) {
- if (this.controlTaken_) {
- this.reportFailure_(message);
- } else {
- throw message;
- }
+TestSuite.prototype.fail = function(message)
+{
+ if (this.controlTaken_)
+ this.reportFailure_(message);
+ else
+ throw message;
};
/**
- * Equals assertion tests that expected == actual.
+ * Equals assertion tests that expected === actual.
* @param {Object} expected Expected object.
* @param {Object} actual Actual object.
* @param {string} opt_message User message to print if the test fails.
*/
-TestSuite.prototype.assertEquals = function(expected, actual, opt_message) {
- if (expected != actual) {
- var message = 'Expected: "' + expected + '", but was "' + actual + '"';
- if (opt_message) {
- message = opt_message + '(' + message + ')';
+TestSuite.prototype.assertEquals = function(expected, actual, opt_message)
+{
+ if (expected !== actual) {
+ var message = "Expected: '" + expected + "', but was '" + actual + "'";
+ if (opt_message)
+ message = opt_message + "(" + message + ")";
+ this.fail(message);
}
- this.fail(message);
- }
};
@@ -59,8 +86,9 @@ TestSuite.prototype.assertEquals = function(expected, actual, opt_message) {
* @param {Object} value Actual object.
* @param {string} opt_message User message to print if the test fails.
*/
-TestSuite.prototype.assertTrue = function(value, opt_message) {
- this.assertEquals(true, !!value, opt_message);
+TestSuite.prototype.assertTrue = function(value, opt_message)
+{
+ this.assertEquals(true, !!value, opt_message);
};
@@ -69,83 +97,87 @@ TestSuite.prototype.assertTrue = function(value, opt_message) {
* @param {string} string Outer.
* @param {string} substring Inner.
*/
-TestSuite.prototype.assertContains = function(string, substring) {
- if (string.indexOf(substring) == -1) {
- this.fail('Expected to: "' + string + '" to contain "' + substring + '"');
- }
+TestSuite.prototype.assertContains = function(string, substring)
+{
+ if (string.indexOf(substring) === -1)
+ this.fail("Expected to: '" + string + "' to contain '" + substring + "'");
};
/**
* Takes control over execution.
*/
-TestSuite.prototype.takeControl = function() {
- this.controlTaken_ = true;
- // Set up guard timer.
- var self = this;
- this.timerId_ = setTimeout(function() {
- self.reportFailure_('Timeout exceeded: 20 sec');
- }, 20000);
+TestSuite.prototype.takeControl = function()
+{
+ this.controlTaken_ = true;
+ // Set up guard timer.
+ var self = this;
+ this.timerId_ = setTimeout(function() {
+ self.reportFailure_("Timeout exceeded: 20 sec");
+ }, 20000);
};
/**
* Releases control over execution.
*/
-TestSuite.prototype.releaseControl = function() {
- if (this.timerId_ != -1) {
- clearTimeout(this.timerId_);
- this.timerId_ = -1;
- }
- this.reportOk_();
+TestSuite.prototype.releaseControl = function()
+{
+ if (this.timerId_ !== -1) {
+ clearTimeout(this.timerId_);
+ this.timerId_ = -1;
+ }
+ this.reportOk_();
};
/**
* Async tests use this one to report that they are completed.
*/
-TestSuite.prototype.reportOk_ = function() {
- window.domAutomationController.send('[OK]');
+TestSuite.prototype.reportOk_ = function()
+{
+ window.domAutomationController.send("[OK]");
};
/**
* Async tests use this one to report failures.
*/
-TestSuite.prototype.reportFailure_ = function(error) {
- if (this.timerId_ != -1) {
- clearTimeout(this.timerId_);
- this.timerId_ = -1;
- }
- window.domAutomationController.send('[FAILED] ' + error);
+TestSuite.prototype.reportFailure_ = function(error)
+{
+ if (this.timerId_ !== -1) {
+ clearTimeout(this.timerId_);
+ this.timerId_ = -1;
+ }
+ window.domAutomationController.send("[FAILED] " + error);
};
/**
- * Runs all global functions starting with 'test' as unit tests.
+ * Runs all global functions starting with "test" as unit tests.
*/
-TestSuite.prototype.runTest = function(testName) {
- try {
- this[testName]();
- if (!this.controlTaken_) {
- this.reportOk_();
+TestSuite.prototype.runTest = function(testName)
+{
+ try {
+ this[testName]();
+ if (!this.controlTaken_)
+ this.reportOk_();
+ } catch (e) {
+ this.reportFailure_(e);
}
- } catch (e) {
- this.reportFailure_(e);
- }
};
/**
* @param {string} panelName Name of the panel to show.
*/
-TestSuite.prototype.showPanel = function(panelName) {
- // Open Scripts panel.
- var toolbar = document.getElementById('toolbar');
- var button = toolbar.getElementsByClassName(panelName)[0];
- button.click();
- this.assertEquals(WebInspector.panels[panelName],
- WebInspector.currentPanel);
+TestSuite.prototype.showPanel = function(panelName)
+{
+ // Open Scripts panel.
+ var toolbar = document.getElementById("toolbar");
+ var button = toolbar.getElementsByClassName(panelName)[0];
+ button.click();
+ this.assertEquals(WebInspector.panels[panelName], WebInspector.currentPanel);
};
@@ -158,29 +190,27 @@ TestSuite.prototype.showPanel = function(panelName) {
* @param {boolean} opt_sticky Whether restore original method after first run
* or not.
*/
-TestSuite.prototype.addSniffer = function(receiver, methodName, override,
- opt_sticky) {
- var orig = receiver[methodName];
- if (typeof orig != 'function') {
- this.fail('Cannot find method to override: ' + methodName);
- }
- var test = this;
- receiver[methodName] = function(var_args) {
- try {
- var result = orig.apply(this, arguments);
- } finally {
- if (!opt_sticky) {
- receiver[methodName] = orig;
- }
- }
- // In case of exception the override won't be called.
- try {
- override.apply(this, arguments);
- } catch (e) {
- test.fail('Exception in overriden method "' + methodName + '": ' + e);
- }
- return result;
- };
+TestSuite.prototype.addSniffer = function(receiver, methodName, override, opt_sticky)
+{
+ var orig = receiver[methodName];
+ if (typeof orig !== "function")
+ this.fail("Cannot find method to override: " + methodName);
+ var test = this;
+ receiver[methodName] = function(var_args) {
+ try {
+ var result = orig.apply(this, arguments);
+ } finally {
+ if (!opt_sticky)
+ receiver[methodName] = orig;
+ }
+ // In case of exception the override won't be called.
+ try {
+ override.apply(this, arguments);
+ } catch (e) {
+ test.fail("Exception in overriden method '" + methodName + "': " + e);
+ }
+ return result;
+ };
};
@@ -190,19 +220,20 @@ TestSuite.prototype.addSniffer = function(receiver, methodName, override,
/**
* Tests that the real injected host is present in the context.
*/
-TestSuite.prototype.testHostIsPresent = function() {
- this.assertTrue(typeof InspectorFrontendHost == 'object' &&
- !InspectorFrontendHost.isStub);
+TestSuite.prototype.testHostIsPresent = function()
+{
+ this.assertTrue(typeof InspectorFrontendHost === "object" && !InspectorFrontendHost.isStub);
};
/**
- * Tests elements tree has an 'HTML' root.
+ * Tests elements tree has an "HTML" root.
*/
-TestSuite.prototype.testElementsTreeRoot = function() {
- var doc = WebInspector.domAgent.document;
- this.assertEquals('HTML', doc.documentElement.nodeName);
- this.assertTrue(doc.documentElement.hasChildNodes());
+TestSuite.prototype.testElementsTreeRoot = function()
+{
+ var doc = WebInspector.domAgent.document;
+ this.assertEquals("HTML", doc.documentElement.nodeName);
+ this.assertTrue(doc.documentElement.hasChildNodes());
};
@@ -210,244 +241,240 @@ TestSuite.prototype.testElementsTreeRoot = function() {
* Tests that main resource is present in the system and that it is
* the only resource.
*/
-TestSuite.prototype.testMainResource = function() {
- var tokens = [];
- var resources = WebInspector.resources;
- for (var id in resources) {
- tokens.push(resources[id].lastPathComponent);
- }
- this.assertEquals('simple_page.html', tokens.join(','));
+TestSuite.prototype.testMainResource = function()
+{
+ var tokens = [];
+ var resources = WebInspector.resources;
+ for (var id in resources)
+ tokens.push(resources[id].lastPathComponent);
+ this.assertEquals("simple_page.html", tokens.join(","));
};
/**
* Tests that resources tab is enabled when corresponding item is selected.
*/
-TestSuite.prototype.testEnableResourcesTab = function() {
- this.showPanel('resources');
+TestSuite.prototype.testEnableResourcesTab = function()
+{
+ this.showPanel("resources");
- var test = this;
- this.addSniffer(WebInspector, 'updateResource',
- function(identifier, payload) {
- test.assertEquals('simple_page.html', payload.lastPathComponent);
- WebInspector.panels.resources.refresh();
- WebInspector.panels.resources.revealAndSelectItem(
- WebInspector.resources[identifier]);
+ var test = this;
+ this.addSniffer(WebInspector, "updateResource",
+ function(identifier, payload) {
+ test.assertEquals("simple_page.html", payload.lastPathComponent);
+ WebInspector.panels.resources.refresh();
+ WebInspector.panels.resources.revealAndSelectItem(WebInspector.resources[identifier]);
- test.releaseControl();
- });
+ test.releaseControl();
+ });
- // Following call should lead to reload that we capture in the
- // addResource override.
- WebInspector.panels.resources._enableResourceTracking();
+ // Following call should lead to reload that we capture in the
+ // addResource override.
+ WebInspector.panels.resources._enableResourceTracking();
- // We now have some time to report results to controller.
- this.takeControl();
+ // We now have some time to report results to controller.
+ this.takeControl();
};
/**
* Tests that correct content length is reported for resources.
*/
-TestSuite.prototype.testResourceContentLength = function() {
- this.showPanel('resources');
- var test = this;
-
- var png = false;
- var html = false;
- this.addSniffer(WebInspector, 'updateResource',
- function(identifier, payload) {
- if (!payload.didLengthChange)
- return;
- var resource = WebInspector.resources[identifier];
- if (!resource || !resource.url)
- return;
- if (resource.url.search('image.html$') != -1) {
- var expectedLength = 87;
- test.assertTrue(
- resource.contentLength <= expectedLength,
- 'image.html content length is greater thatn expected.');
- if (expectedLength == resource.contentLength) {
- html = true;
- }
- } else if (resource.url.search('image.png') != -1) {
- var expectedLength = 257796;
- test.assertTrue(
- resource.contentLength <= expectedLength,
- 'image.png content length is greater than expected.');
- if (expectedLength == resource.contentLength) {
- png = true;
- }
- }
- if (html && png) {
- // Wait 1 second before releasing control to check that the content
- // lengths are not updated anymore.
- setTimeout(function() {
- test.releaseControl();
- }, 1000);
- }
- }, true);
-
- // Make sure resource tracking is on.
- WebInspector.panels.resources._enableResourceTracking();
- // Reload inspected page to update all resources.
- test.evaluateInConsole_(
- 'window.location.reload(true);',
- function(resultText) {
- test.assertEquals('undefined', resultText,
- 'Unexpected result of reload().');
- });
-
- // We now have some time to report results to controller.
- this.takeControl();
+TestSuite.prototype.testResourceContentLength = function()
+{
+ this.showPanel("resources");
+ var test = this;
+
+ var png = false;
+ var html = false;
+ this.addSniffer(WebInspector, "updateResource",
+ function(identifier, payload) {
+ if (!payload.didLengthChange)
+ return;
+ var resource = WebInspector.resources[identifier];
+ if (!resource || !resource.url)
+ return;
+ if (resource.url.search("image.html$") !== -1) {
+ var expectedLength = 87;
+ test.assertTrue(
+ resource.contentLength <= expectedLength,
+ "image.html content length is greater thatn expected.");
+ if (expectedLength === resource.contentLength)
+ html = true;
+ } else if (resource.url.search("image.png") !== -1) {
+ var expectedLength = 257796;
+ test.assertTrue(
+ resource.contentLength <= expectedLength,
+ "image.png content length is greater than expected.");
+ if (expectedLength === resource.contentLength)
+ png = true;
+ }
+ if (html && png) {
+ // Wait 1 second before releasing control to check that the content
+ // lengths are not updated anymore.
+ setTimeout(function() {
+ test.releaseControl();
+ }, 1000);
+ }
+ }, true);
+
+ // Make sure resource tracking is on.
+ WebInspector.panels.resources._enableResourceTracking();
+ // Reload inspected page to update all resources.
+ test.evaluateInConsole_(
+ "window.location.reload(true);",
+ function(resultText) {
+ test.assertEquals("undefined", resultText, "Unexpected result of reload().");
+ });
+
+ // We now have some time to report results to controller.
+ this.takeControl();
};
/**
* Tests resource headers.
*/
-TestSuite.prototype.testResourceHeaders = function() {
- this.showPanel('resources');
-
- var test = this;
-
- var responseOk = false;
- var timingOk = false;
-
- this.addSniffer(WebInspector, 'updateResource',
- function(identifier, payload) {
- var resource = this.resources[identifier];
- if (!resource || resource.mainResource) {
- // We are only interested in secondary resources in this test.
- return;
- }
-
- var requestHeaders = JSON.stringify(resource.requestHeaders);
- test.assertContains(requestHeaders, 'Accept');
-
- if (payload.didResponseChange) {
- var responseHeaders = JSON.stringify(resource.responseHeaders);
- test.assertContains(responseHeaders, 'Content-type');
- test.assertContains(responseHeaders, 'Content-Length');
- test.assertTrue(typeof resource.responseReceivedTime != 'undefined');
- responseOk = true;
- }
-
- if (payload.didTimingChange) {
- test.assertTrue(typeof resource.startTime != 'undefined');
- timingOk = true;
- }
-
- if (payload.didCompletionChange) {
- test.assertTrue(responseOk);
- test.assertTrue(timingOk);
- test.assertTrue(typeof resource.endTime != 'undefined');
- test.releaseControl();
- }
- }, true);
+TestSuite.prototype.testResourceHeaders = function()
+{
+ this.showPanel("resources");
+
+ var test = this;
+
+ var responseOk = false;
+ var timingOk = false;
+
+ this.addSniffer(WebInspector, "updateResource",
+ function(identifier, payload) {
+ var resource = this.resources[identifier];
+ if (!resource || resource.mainResource) {
+ // We are only interested in secondary resources in this test.
+ return;
+ }
+
+ var requestHeaders = JSON.stringify(resource.requestHeaders);
+ test.assertContains(requestHeaders, "Accept");
+
+ if (payload.didResponseChange) {
+ var responseHeaders = JSON.stringify(resource.responseHeaders);
+ test.assertContains(responseHeaders, "Content-type");
+ test.assertContains(responseHeaders, "Content-Length");
+ test.assertTrue(typeof resource.responseReceivedTime !== "undefined");
+ responseOk = true;
+ }
+
+ if (payload.didTimingChange) {
+ test.assertTrue(typeof resource.startTime !== "undefined");
+ timingOk = true;
+ }
+
+ if (payload.didCompletionChange) {
+ test.assertTrue(responseOk);
+ test.assertTrue(timingOk);
+ test.assertTrue(typeof resource.endTime !== "undefined");
+ test.releaseControl();
+ }
+ }, true);
- WebInspector.panels.resources._enableResourceTracking();
- this.takeControl();
+ WebInspector.panels.resources._enableResourceTracking();
+ this.takeControl();
};
/**
* Tests the mime type of a cached (HTTP 304) resource.
*/
-TestSuite.prototype.testCachedResourceMimeType = function() {
- this.showPanel('resources');
-
- var test = this;
- var hasReloaded = false;
-
- this.addSniffer(WebInspector, 'updateResource',
- function(identifier, payload) {
- var resource = this.resources[identifier];
- if (!resource || resource.mainResource) {
- // We are only interested in secondary resources in this test.
- return;
- }
-
- if (payload.didResponseChange) {
- // Test server uses a default mime type for JavaScript files.
- test.assertEquals('text/html', payload.mimeType);
- if (!hasReloaded) {
- hasReloaded = true;
- // Reload inspected page to update all resources.
- test.evaluateInConsole_(
- 'window.location.reload(true);',
- function() {});
- } else {
- test.releaseControl();
- }
- }
+TestSuite.prototype.testCachedResourceMimeType = function()
+{
+ this.showPanel("resources");
+
+ var test = this;
+ var hasReloaded = false;
+
+ this.addSniffer(WebInspector, "updateResource",
+ function(identifier, payload) {
+ var resource = this.resources[identifier];
+ if (!resource || resource.mainResource) {
+ // We are only interested in secondary resources in this test.
+ return;
+ }
+
+ if (payload.didResponseChange) {
+ // Test server uses a default mime type for JavaScript files.
+ test.assertEquals("text/html", payload.mimeType);
+ if (!hasReloaded) {
+ hasReloaded = true;
+ // Reload inspected page to update all resources.
+ test.evaluateInConsole_("window.location.reload(true);", function() {});
+ } else
+ test.releaseControl();
+ }
- }, true);
+ }, true);
- WebInspector.panels.resources._enableResourceTracking();
- this.takeControl();
+ WebInspector.panels.resources._enableResourceTracking();
+ this.takeControl();
};
/**
* Tests that profiler works.
*/
-TestSuite.prototype.testProfilerTab = function() {
- this.showPanel('profiles');
-
- var test = this;
- this.addSniffer(WebInspector.panels.profiles, 'addProfileHeader',
- function(typeOrProfile, profile) {
- if (!profile) {
- profile = typeOrProfile;
- }
- var panel = WebInspector.panels.profiles;
- panel.showProfile(profile);
- var node = panel.visibleView.profileDataGridTree.children[0];
- // Iterate over displayed functions and search for a function
- // that is called 'fib' or 'eternal_fib'. If found, it will mean
- // that we actually have profiled page's code.
- while (node) {
- if (node.functionName.indexOf('fib') != -1) {
- test.releaseControl();
- }
- node = node.traverseNextNode(true, null, true);
- }
-
- test.fail();
- });
- var ticksCount = 0;
- var tickRecord = '\nt,';
- this.addSniffer(RemoteProfilerAgent, 'didGetLogLines',
- function(posIgnored, log) {
- var pos = 0;
- while ((pos = log.indexOf(tickRecord, pos)) != -1) {
- pos += tickRecord.length;
- ticksCount++;
- }
- if (ticksCount > 100) {
- InspectorBackend.stopProfiling();
- }
- }, true);
+TestSuite.prototype.testProfilerTab = function()
+{
+ this.showPanel("profiles");
+
+ var test = this;
+ this.addSniffer(WebInspector.panels.profiles, "addProfileHeader",
+ function(typeOrProfile, profile) {
+ if (!profile)
+ profile = typeOrProfile;
+ var panel = WebInspector.panels.profiles;
+ panel.showProfile(profile);
+ var node = panel.visibleView.profileDataGridTree.children[0];
+ // Iterate over displayed functions and search for a function
+ // that is called "fib" or "eternal_fib". If found, it will mean
+ // that we actually have profiled page's code.
+ while (node) {
+ if (node.functionName.indexOf("fib") !== -1)
+ test.releaseControl();
+ node = node.traverseNextNode(true, null, true);
+ }
- InspectorBackend.startProfiling();
- this.takeControl();
+ test.fail();
+ });
+ var ticksCount = 0;
+ var tickRecord = "\nt,";
+ this.addSniffer(RemoteProfilerAgent, "didGetLogLines",
+ function(posIgnored, log) {
+ var pos = 0;
+ while ((pos = log.indexOf(tickRecord, pos)) !== -1) {
+ pos += tickRecord.length;
+ ticksCount++;
+ }
+ if (ticksCount > 100)
+ InspectorBackend.stopProfiling();
+ }, true);
+
+ InspectorBackend.startProfiling();
+ this.takeControl();
};
/**
* Tests that scripts tab can be open and populated with inspected scripts.
*/
-TestSuite.prototype.testShowScriptsTab = function() {
- this.showPanel('scripts');
- var test = this;
- // There should be at least main page script.
- this._waitUntilScriptsAreParsed(['debugger_test_page.html$'],
- function() {
- test.releaseControl();
- });
- // Wait until all scripts are added to the debugger.
- this.takeControl();
+TestSuite.prototype.testShowScriptsTab = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+ // There should be at least main page script.
+ this._waitUntilScriptsAreParsed(["debugger_test_page.html$"],
+ function() {
+ test.releaseControl();
+ });
+ // Wait until all scripts are added to the debugger.
+ this.takeControl();
};
@@ -456,275 +483,261 @@ TestSuite.prototype.testShowScriptsTab = function() {
* hadn't been shown by the moment inspected paged refreshed.
* @see http://crbug.com/26312
*/
-TestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh =
- function() {
- var test = this;
- this.assertEquals(WebInspector.panels.elements,
- WebInspector.currentPanel, 'Elements panel should be current one.');
-
- this.addSniffer(devtools.DebuggerAgent.prototype, 'reset',
- waitUntilScriptIsParsed);
-
- // Reload inspected page. It will reset the debugger agent.
- test.evaluateInConsole_(
- 'window.location.reload(true);',
- function(resultText) {
- test.assertEquals('undefined', resultText,
- 'Unexpected result of reload().');
- });
-
- function waitUntilScriptIsParsed() {
- var parsed = devtools.tools.getDebuggerAgent().parsedScripts_;
- for (var id in parsed) {
- var url = parsed[id].getUrl();
- if (url && url.search('debugger_test_page.html$') != -1) {
- checkScriptsPanel();
- return;
- }
+TestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh = function()
+{
+ var test = this;
+ this.assertEquals(WebInspector.panels.elements, WebInspector.currentPanel, "Elements panel should be current one.");
+
+ this.addSniffer(devtools.DebuggerAgent.prototype, "reset", waitUntilScriptIsParsed);
+
+ // Reload inspected page. It will reset the debugger agent.
+ test.evaluateInConsole_(
+ "window.location.reload(true);",
+ function(resultText) {
+ test.assertEquals("undefined", resultText, "Unexpected result of reload().");
+ });
+
+ function waitUntilScriptIsParsed() {
+ var parsed = devtools.tools.getDebuggerAgent().parsedScripts_;
+ for (var id in parsed) {
+ var url = parsed[id].getUrl();
+ if (url && url.search("debugger_test_page.html$") !== -1) {
+ checkScriptsPanel();
+ return;
+ }
+ }
+ test.addSniffer(devtools.DebuggerAgent.prototype, "addScriptInfo_", waitUntilScriptIsParsed);
}
- test.addSniffer(devtools.DebuggerAgent.prototype, 'addScriptInfo_',
- waitUntilScriptIsParsed);
- }
-
- function checkScriptsPanel() {
- test.showPanel('scripts');
- test.assertTrue(test._scriptsAreParsed(['debugger_test_page.html$']),
- 'Inspected script not found in the scripts list');
- test.releaseControl();
- }
-
- // Wait until all scripts are added to the debugger.
- this.takeControl();
+
+ function checkScriptsPanel() {
+ test.showPanel("scripts");
+ test.assertTrue(test._scriptsAreParsed(["debugger_test_page.html$"]), "Inspected script not found in the scripts list");
+ test.releaseControl();
+ }
+
+ // Wait until all scripts are added to the debugger.
+ this.takeControl();
};
/**
* Tests that scripts list contains content scripts.
*/
-TestSuite.prototype.testContentScriptIsPresent = function() {
- this.showPanel('scripts');
- var test = this;
+TestSuite.prototype.testContentScriptIsPresent = function()
+{
+ this.showPanel("scripts");
+ var test = this;
- test._waitUntilScriptsAreParsed(
- ['page_with_content_script.html$', 'simple_content_script.js$'],
- function() {
- test.releaseControl();
- });
+ test._waitUntilScriptsAreParsed(
+ ["page_with_content_script.html$", "simple_content_script.js$"],
+ function() {
+ test.releaseControl();
+ });
- // Wait until all scripts are added to the debugger.
- this.takeControl();
+ // Wait until all scripts are added to the debugger.
+ this.takeControl();
};
/**
* Tests that scripts are not duplicaed on Scripts tab switch.
*/
-TestSuite.prototype.testNoScriptDuplicatesOnPanelSwitch = function() {
- var test = this;
+TestSuite.prototype.testNoScriptDuplicatesOnPanelSwitch = function()
+{
+ var test = this;
- // There should be two scripts: one for the main page and another
- // one which is source of console API(see
- // InjectedScript._ensureCommandLineAPIInstalled).
- var expectedScriptsCount = 2;
- var parsedScripts = [];
+ // There should be two scripts: one for the main page and another
+ // one which is source of console API(see
+ // InjectedScript._ensureCommandLineAPIInstalled).
+ var expectedScriptsCount = 2;
+ var parsedScripts = [];
- this.showPanel('scripts');
+ this.showPanel("scripts");
- function switchToElementsTab() {
- test.showPanel('elements');
- setTimeout(switchToScriptsTab, 0);
- }
+ function switchToElementsTab() {
+ test.showPanel("elements");
+ setTimeout(switchToScriptsTab, 0);
+ }
- function switchToScriptsTab() {
- test.showPanel('scripts');
- setTimeout(checkScriptsPanel, 0);
- }
+ function switchToScriptsTab() {
+ test.showPanel("scripts");
+ setTimeout(checkScriptsPanel, 0);
+ }
- function checkScriptsPanel() {
- test.assertTrue(!!WebInspector.panels.scripts.visibleView,
- 'No visible script view.');
- test.assertTrue(test._scriptsAreParsed(['debugger_test_page.html$']),
- 'Some scripts are missing.');
- checkNoDuplicates();
- test.releaseControl();
- }
+ function checkScriptsPanel() {
+ test.assertTrue(!!WebInspector.panels.scripts.visibleView, "No visible script view.");
+ test.assertTrue(test._scriptsAreParsed(["debugger_test_page.html$"]), "Some scripts are missing.");
+ checkNoDuplicates();
+ test.releaseControl();
+ }
- function checkNoDuplicates() {
- var scriptSelect = document.getElementById('scripts-files');
- var options = scriptSelect.options;
- for (var i = 0; i < options.length; i++) {
- var scriptName = options[i].text;
- for (var j = i + 1; j < options.length; j++) {
- test.assertTrue(scriptName != options[j].text,
- 'Found script duplicates: ' + test.optionsToString_(options));
- }
+ function checkNoDuplicates() {
+ var scriptSelect = document.getElementById("scripts-files");
+ var options = scriptSelect.options;
+ for (var i = 0; i < options.length; i++) {
+ var scriptName = options[i].text;
+ for (var j = i + 1; j < options.length; j++)
+ test.assertTrue(scriptName !== options[j].text, "Found script duplicates: " + test.optionsToString_(options));
+ }
}
- }
- test._waitUntilScriptsAreParsed(
- ['debugger_test_page.html$'],
- function() {
- checkNoDuplicates();
- setTimeout(switchToElementsTab, 0);
- });
+ test._waitUntilScriptsAreParsed(
+ ["debugger_test_page.html$"],
+ function() {
+ checkNoDuplicates();
+ setTimeout(switchToElementsTab, 0);
+ });
- // Wait until all scripts are added to the debugger.
- this.takeControl();
+ // Wait until all scripts are added to the debugger.
+ this.takeControl();
};
/**
* Tests that a breakpoint can be set.
*/
-TestSuite.prototype.testSetBreakpoint = function() {
- var test = this;
- this.showPanel('scripts');
-
- var breakpointLine = 12;
-
- this._waitUntilScriptsAreParsed(['debugger_test_page.html'],
- function() {
- test.showMainPageScriptSource_(
- 'debugger_test_page.html',
- function(view, url) {
- view._addBreakpoint(breakpointLine);
- // Force v8 execution.
- RemoteToolsAgent.executeVoidJavaScript();
- test.waitForSetBreakpointResponse_(url, breakpointLine,
- function() {
- test.releaseControl();
- });
- });
- });
+TestSuite.prototype.testSetBreakpoint = function()
+{
+ var test = this;
+ this.showPanel("scripts");
- this.takeControl();
+ var breakpointLine = 12;
+
+ this._waitUntilScriptsAreParsed(["debugger_test_page.html"],
+ function() {
+ test.showMainPageScriptSource_(
+ "debugger_test_page.html",
+ function(view, url) {
+ view._addBreakpoint(breakpointLine);
+ // Force v8 execution.
+ RemoteToolsAgent.executeVoidJavaScript();
+ test.waitForSetBreakpointResponse_(url, breakpointLine,
+ function() {
+ test.releaseControl();
+ });
+ });
+ });
+
+ this.takeControl();
};
/**
* Tests that pause on exception works.
*/
-TestSuite.prototype.testPauseOnException = function() {
- this.showPanel('scripts');
- var test = this;
-
- // TODO(yurys): remove else branch once the states are supported.
- if (WebInspector.ScriptsPanel.PauseOnExceptionsState) {
- while (WebInspector.currentPanel.pauseOnExceptionButton.state !=
- WebInspector.ScriptsPanel.PauseOnExceptionsState.
- PauseOnUncaughtExceptions) {
- WebInspector.currentPanel.pauseOnExceptionButton.element.click();
- }
- } else {
- // Make sure pause on exceptions is on.
- if (!WebInspector.currentPanel.pauseOnExceptionButton.toggled) {
- WebInspector.currentPanel.pauseOnExceptionButton.element.click();
+TestSuite.prototype.testPauseOnException = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ // TODO(yurys): remove else branch once the states are supported.
+ if (WebInspector.ScriptsPanel.PauseOnExceptionsState) {
+ while (WebInspector.currentPanel.pauseOnExceptionButton.state !== WebInspector.ScriptsPanel.PauseOnExceptionsState.PauseOnUncaughtExceptions)
+ WebInspector.currentPanel.pauseOnExceptionButton.element.click();
+ } else {
+ // Make sure pause on exceptions is on.
+ if (!WebInspector.currentPanel.pauseOnExceptionButton.toggled)
+ WebInspector.currentPanel.pauseOnExceptionButton.element.click();
}
- }
-
- this._executeCodeWhenScriptsAreParsed(
- 'handleClick()',
- ['pause_on_exception.html$']);
-
- this._waitForScriptPause(
- {
- functionsOnStack: ['throwAnException', 'handleClick',
- '(anonymous function)'],
- lineNumber: 6,
- lineText: ' return unknown_var;'
- },
- function() {
- test.releaseControl();
- });
- this.takeControl();
+ this._executeCodeWhenScriptsAreParsed("handleClick()", ["pause_on_exception.html$"]);
+
+ this._waitForScriptPause(
+ {
+ functionsOnStack: ["throwAnException", "handleClick", "(anonymous function)"],
+ lineNumber: 6,
+ lineText: " return unknown_var;"
+ },
+ function() {
+ test.releaseControl();
+ });
+
+ this.takeControl();
};
// Tests that debugger works correctly if pause event occurs when DevTools
// frontend is being loaded.
-TestSuite.prototype.testPauseWhenLoadingDevTools = function() {
- this.showPanel('scripts');
- var test = this;
-
- var expectations = {
- functionsOnStack: ['callDebugger'],
- lineNumber: 8,
- lineText: ' debugger;'
- };
-
-
- // Script execution can already be paused.
- if (WebInspector.currentPanel.paused) {
- var callFrame =
- WebInspector.currentPanel.sidebarPanes.callstack.selectedCallFrame;
- this.assertEquals(expectations.functionsOnStack[0],
- callFrame.functionName);
- var callbackInvoked = false;
- this._checkSourceFrameWhenLoaded(expectations, function() {
- callbackInvoked = true;
- if (test.controlTaken_) {
+TestSuite.prototype.testPauseWhenLoadingDevTools = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ var expectations = {
+ functionsOnStack: ["callDebugger"],
+ lineNumber: 8,
+ lineText: " debugger;"
+ };
+
+
+ // Script execution can already be paused.
+ if (WebInspector.currentPanel.paused) {
+ var callFrame = WebInspector.currentPanel.sidebarPanes.callstack.selectedCallFrame;
+ this.assertEquals(expectations.functionsOnStack[0], callFrame.functionName);
+ var callbackInvoked = false;
+ this._checkSourceFrameWhenLoaded(expectations, function() {
+ callbackInvoked = true;
+ if (test.controlTaken_)
+ test.releaseControl();
+ });
+ if (!callbackInvoked) {
+ test.takeControl();
+ }
+ return;
+ }
+
+ this._waitForScriptPause(
+ {
+ functionsOnStack: ["callDebugger"],
+ lineNumber: 8,
+ lineText: " debugger;"
+ },
+ function() {
test.releaseControl();
- }
});
- if (!callbackInvoked) {
- test.takeControl();
- }
- return;
- }
-
- this._waitForScriptPause(
- {
- functionsOnStack: ['callDebugger'],
- lineNumber: 8,
- lineText: ' debugger;'
- },
- function() {
- test.releaseControl();
- });
- this.takeControl();
+ this.takeControl();
};
-// Tests that pressing 'Pause' will pause script execution if the script
+// Tests that pressing "Pause" will pause script execution if the script
// is already running.
-TestSuite.prototype.testPauseWhenScriptIsRunning = function() {
- this.showPanel('scripts');
- var test = this;
-
- test.evaluateInConsole_(
- 'setTimeout("handleClick()" , 0)',
- function(resultText) {
- test.assertTrue(!isNaN(resultText),
- 'Failed to get timer id: ' + resultText);
- testScriptPauseAfterDelay();
- });
-
- // Wait for some time to make sure that inspected page is running the
- // infinite loop.
- function testScriptPauseAfterDelay() {
- setTimeout(testScriptPause, 300);
- }
-
- function testScriptPause() {
- // The script should be in infinite loop. Click 'Pause' button to
- // pause it and wait for the result.
- WebInspector.panels.scripts.pauseButton.click();
-
- test._waitForScriptPause(
- {
- functionsOnStack: ['handleClick', '(anonymous function)'],
- lineNumber: 5,
- lineText: ' while(true) {'
- },
- function() {
- test.releaseControl();
+TestSuite.prototype.testPauseWhenScriptIsRunning = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ test.evaluateInConsole_(
+ 'setTimeout("handleClick()" , 0)',
+ function(resultText) {
+ test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText);
+ testScriptPauseAfterDelay();
});
- }
- this.takeControl();
+ // Wait for some time to make sure that inspected page is running the
+ // infinite loop.
+ function testScriptPauseAfterDelay() {
+ setTimeout(testScriptPause, 300);
+ }
+
+ function testScriptPause() {
+ // The script should be in infinite loop. Click "Pause" button to
+ // pause it and wait for the result.
+ WebInspector.panels.scripts.pauseButton.click();
+
+ test._waitForScriptPause(
+ {
+ functionsOnStack: ["handleClick", "(anonymous function)"],
+ lineNumber: 5,
+ lineText: " while(true) {"
+ },
+ function() {
+ test.releaseControl();
+ });
+ }
+
+ this.takeControl();
};
@@ -733,12 +746,12 @@ TestSuite.prototype.testPauseWhenScriptIsRunning = function() {
* @param {HTMLOptionsCollection} options
* @return {string}
*/
-TestSuite.prototype.optionsToString_ = function(options) {
- var names = [];
- for (var i = 0; i < options.length; i++) {
- names.push('"' + options[i].text + '"');
- }
- return names.join(',');
+TestSuite.prototype.optionsToString_ = function(options)
+{
+ var names = [];
+ for (var i = 0; i < options.length; i++)
+ names.push('"' + options[i].text + '"');
+ return names.join(",");
};
@@ -748,56 +761,51 @@ TestSuite.prototype.optionsToString_ = function(options) {
* @param {HTMLOptionsCollection} options
* @param {function(WebInspector.SourceView,string)} callback
*/
-TestSuite.prototype.showMainPageScriptSource_ = function(scriptName, callback) {
- var test = this;
-
- var scriptSelect = document.getElementById('scripts-files');
- var options = scriptSelect.options;
-
- test.assertTrue(options.length, 'Scripts list is empty');
-
- // Select page's script if it's not current option.
- var scriptResource;
- if (options[scriptSelect.selectedIndex].text === scriptName) {
- scriptResource = options[scriptSelect.selectedIndex].representedObject;
- } else {
- var pageScriptIndex = -1;
- for (var i = 0; i < options.length; i++) {
- if (options[i].text === scriptName) {
- pageScriptIndex = i;
- break;
- }
+TestSuite.prototype.showMainPageScriptSource_ = function(scriptName, callback)
+{
+ var test = this;
+
+ var scriptSelect = document.getElementById("scripts-files");
+ var options = scriptSelect.options;
+
+ test.assertTrue(options.length, "Scripts list is empty");
+
+ // Select page's script if it's not current option.
+ var scriptResource;
+ if (options[scriptSelect.selectedIndex].text === scriptName)
+ scriptResource = options[scriptSelect.selectedIndex].representedObject;
+ else {
+ var pageScriptIndex = -1;
+ for (var i = 0; i < options.length; i++) {
+ if (options[i].text === scriptName) {
+ pageScriptIndex = i;
+ break;
+ }
+ }
+ test.assertTrue(-1 !== pageScriptIndex, "Script with url " + scriptName + " not found among " + test.optionsToString_(options));
+ scriptResource = options[pageScriptIndex].representedObject;
+
+ // Current panel is "Scripts".
+ WebInspector.currentPanel._showScriptOrResource(scriptResource);
+ test.assertEquals(pageScriptIndex, scriptSelect.selectedIndex, "Unexpected selected option index.");
}
- test.assertTrue(-1 !== pageScriptIndex,
- 'Script with url ' + scriptName + ' not found among ' +
- test.optionsToString_(options));
- scriptResource = options[pageScriptIndex].representedObject;
-
- // Current panel is 'Scripts'.
- WebInspector.currentPanel._showScriptOrResource(scriptResource);
- test.assertEquals(pageScriptIndex, scriptSelect.selectedIndex,
- 'Unexpected selected option index.');
- }
-
- test.assertTrue(scriptResource instanceof WebInspector.Resource,
- 'Unexpected resource class.');
- test.assertTrue(!!scriptResource.url, 'Resource URL is null.');
- test.assertTrue(
- scriptResource.url.search(scriptName + '$') != -1,
- 'Main HTML resource should be selected.');
-
- var scriptsPanel = WebInspector.panels.scripts;
-
- var view = scriptsPanel.visibleView;
- test.assertTrue(view instanceof WebInspector.SourceView);
-
- if (!view.sourceFrame._loaded) {
- test.addSniffer(view, '_sourceFrameSetupFinished', function(event) {
- callback(view, scriptResource.url);
- });
- } else {
- callback(view, scriptResource.url);
- }
+
+ test.assertTrue(scriptResource instanceof WebInspector.Resource,
+ "Unexpected resource class.");
+ test.assertTrue(!!scriptResource.url, "Resource URL is null.");
+ test.assertTrue(scriptResource.url.search(scriptName + "$") !== -1, "Main HTML resource should be selected.");
+
+ var scriptsPanel = WebInspector.panels.scripts;
+
+ var view = scriptsPanel.visibleView;
+ test.assertTrue(view instanceof WebInspector.SourceView);
+
+ if (!view.sourceFrame._loaded) {
+ test.addSniffer(view, "_sourceFrameSetupFinished", function(event) {
+ callback(view, scriptResource.url);
+ });
+ } else
+ callback(view, scriptResource.url);
};
@@ -807,168 +815,145 @@ TestSuite.prototype.showMainPageScriptSource_ = function(scriptName, callback) {
* @param {string} code
* @param {function(string)} callback
*/
-TestSuite.prototype.evaluateInConsole_ = function(code, callback) {
- WebInspector.console.visible = true;
- WebInspector.console.prompt.text = code;
- WebInspector.console.promptElement.dispatchEvent(
- TestSuite.createKeyEvent('Enter'));
+TestSuite.prototype.evaluateInConsole_ = function(code, callback)
+{
+ WebInspector.console.visible = true;
+ WebInspector.console.prompt.text = code;
+ WebInspector.console.promptElement.dispatchEvent( TestSuite.createKeyEvent("Enter"));
- this.addSniffer(WebInspector.ConsoleView.prototype, 'addMessage',
- function(commandResult) {
- callback(commandResult.toMessageElement().textContent);
- });
+ this.addSniffer(WebInspector.ConsoleView.prototype, "addMessage",
+ function(commandResult) {
+ callback(commandResult.toMessageElement().textContent);
+ });
};
/*
- * Waits for 'setbreakpoint' response, checks that corresponding breakpoint
+ * Waits for "setbreakpoint" response, checks that corresponding breakpoint
* was successfully set and invokes the callback if it was.
* @param {string} scriptUrl
* @param {number} breakpointLine
* @param {function()} callback
*/
-TestSuite.prototype.waitForSetBreakpointResponse_ = function(scriptUrl,
- breakpointLine,
- callback) {
- var test = this;
- test.addSniffer(
- devtools.DebuggerAgent.prototype,
- 'handleSetBreakpointResponse_',
- function(msg) {
- var bps = this.urlToBreakpoints_[scriptUrl];
- test.assertTrue(!!bps, 'No breakpoints for line ' + breakpointLine);
- var line = devtools.DebuggerAgent.webkitToV8LineNumber_(breakpointLine);
- test.assertTrue(!!bps[line].getV8Id(),
- 'Breakpoint id was not assigned.');
- callback();
- });
+TestSuite.prototype.waitForSetBreakpointResponse_ = function(scriptUrl, breakpointLine, callback)
+{
+ var test = this;
+ test.addSniffer(
+ devtools.DebuggerAgent.prototype,
+ "handleSetBreakpointResponse_",
+ function(msg) {
+ var bps = this.urlToBreakpoints_[scriptUrl];
+ test.assertTrue(!!bps, "No breakpoints for line " + breakpointLine);
+ var line = devtools.DebuggerAgent.webkitToV8LineNumber_(breakpointLine);
+ test.assertTrue(!!bps[line].getV8Id(), "Breakpoint id was not assigned.");
+ callback();
+ });
};
/**
* Tests eval on call frame.
*/
-TestSuite.prototype.testEvalOnCallFrame = function() {
- this.showPanel('scripts');
-
- var breakpointLine = 16;
-
- var test = this;
- this.addSniffer(devtools.DebuggerAgent.prototype, 'handleScriptsResponse_',
- function(msg) {
- test.showMainPageScriptSource_(
- 'debugger_test_page.html',
- function(view, url) {
- view._addBreakpoint(breakpointLine);
- // Force v8 execution.
- RemoteToolsAgent.executeVoidJavaScript();
- test.waitForSetBreakpointResponse_(url, breakpointLine,
- setBreakpointCallback);
- });
- });
+TestSuite.prototype.testEvalOnCallFrame = function()
+{
+ this.showPanel("scripts");
- function setBreakpointCallback() {
- // Since breakpoints are ignored in evals' calculate() function is
- // execute after zero-timeout so that the breakpoint is hit.
- test.evaluateInConsole_(
- 'setTimeout("calculate(123)" , 0)',
- function(resultText) {
- test.assertTrue(!isNaN(resultText),
- 'Failed to get timer id: ' + resultText);
- waitForBreakpointHit();
- });
- }
+ var breakpointLine = 16;
- function waitForBreakpointHit() {
- test.addSniffer(
- devtools.DebuggerAgent.prototype,
- 'handleBacktraceResponse_',
+ var test = this;
+ this.addSniffer(devtools.DebuggerAgent.prototype, "handleScriptsResponse_",
function(msg) {
- test.assertEquals(2, this.callFrames_.length,
- 'Unexpected stack depth on the breakpoint. ' +
- JSON.stringify(msg));
- test.assertEquals('calculate', this.callFrames_[0].functionName,
- 'Unexpected top frame function.');
- // Evaluate 'e+1' where 'e' is an argument of 'calculate' function.
- test.evaluateInConsole_(
- 'e+1',
- function(resultText) {
- test.assertEquals('124', resultText, 'Unexpected "e+1" value.');
- test.releaseControl();
+ test.showMainPageScriptSource_(
+ "debugger_test_page.html",
+ function(view, url) {
+ view._addBreakpoint(breakpointLine);
+ // Force v8 execution.
+ RemoteToolsAgent.executeVoidJavaScript();
+ test.waitForSetBreakpointResponse_(url, breakpointLine, setBreakpointCallback);
});
});
- }
- this.takeControl();
+ function setBreakpointCallback() {
+ // Since breakpoints are ignored in evals' calculate() function is
+ // execute after zero-timeout so that the breakpoint is hit.
+ test.evaluateInConsole_(
+ 'setTimeout("calculate(123)" , 0)',
+ function(resultText) {
+ test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText);
+ waitForBreakpointHit();
+ });
+ }
+
+ function waitForBreakpointHit() {
+ test.addSniffer(
+ devtools.DebuggerAgent.prototype,
+ "handleBacktraceResponse_",
+ function(msg) {
+ test.assertEquals(2, this.callFrames_.length, "Unexpected stack depth on the breakpoint. " + JSON.stringify(msg));
+ test.assertEquals("calculate", this.callFrames_[0].functionName, "Unexpected top frame function.");
+ // Evaluate "e+1" where "e" is an argument of "calculate" function.
+ test.evaluateInConsole_(
+ "e+1",
+ function(resultText) {
+ test.assertEquals("124", resultText, 'Unexpected "e+1" value.');
+ test.releaseControl();
+ });
+ });
+ }
+
+ this.takeControl();
};
/**
* Tests that console auto completion works when script execution is paused.
*/
-TestSuite.prototype.testCompletionOnPause = function() {
- this.showPanel('scripts');
- var test = this;
- this._executeCodeWhenScriptsAreParsed(
- 'handleClick()',
- ['completion_on_pause.html$']);
-
- this._waitForScriptPause(
- {
- functionsOnStack: ['innerFunction', 'handleClick',
- '(anonymous function)'],
- lineNumber: 9,
- lineText: ' debugger;'
- },
- showConsole);
-
- function showConsole() {
- test.addSniffer(WebInspector.console, 'afterShow', testLocalsCompletion);
- WebInspector.showConsole();
- }
-
- function testLocalsCompletion() {
- checkCompletions(
- 'th',
- ['parameter1', 'closureLocal', 'p', 'createClosureLocal'],
- testThisCompletion);
- }
-
- function testThisCompletion() {
- checkCompletions(
- 'this.',
- ['field1', 'field2', 'm'],
- testFieldCompletion);
- }
-
- function testFieldCompletion() {
- checkCompletions(
- 'this.field1.',
- ['id', 'name'],
- function() {
- test.releaseControl();
- });
- }
-
- function checkCompletions(expression, expectedProperties, callback) {
- test.addSniffer(WebInspector.console, '_reportCompletions',
- function(bestMatchOnly, completionsReadyCallback, dotNotation,
- bracketNotation, prefix, result, isException) {
- test.assertTrue(!isException,
- 'Exception while collecting completions');
- for (var i = 0; i < expectedProperties.length; i++) {
- var name = expectedProperties[i];
- test.assertTrue(result[name], 'Name ' + name +
- ' not found among the completions: ' +
- JSON.stringify(result));
- }
- setTimeout(callback, 0);
- });
- WebInspector.console.prompt.text = expression;
- WebInspector.console.prompt.autoCompleteSoon();
- }
+TestSuite.prototype.testCompletionOnPause = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+ this._executeCodeWhenScriptsAreParsed("handleClick()", ["completion_on_pause.html$"]);
+
+ this._waitForScriptPause(
+ {
+ functionsOnStack: ["innerFunction", "handleClick", "(anonymous function)"],
+ lineNumber: 9,
+ lineText: " debugger;"
+ },
+ showConsole);
+
+ function showConsole() {
+ test.addSniffer(WebInspector.console, "afterShow", testLocalsCompletion);
+ WebInspector.showConsole();
+ }
+
+ function testLocalsCompletion() {
+ checkCompletions("th", ["parameter1", "closureLocal", "p", "createClosureLocal"], testThisCompletion);
+ }
+
+ function testThisCompletion() {
+ checkCompletions("this.", ["field1", "field2", "m"], testFieldCompletion);
+ }
+
+ function testFieldCompletion() {
+ checkCompletions("this.field1.", ["id", "name"], function() { test.releaseControl(); });
+ }
+
+ function checkCompletions(expression, expectedProperties, callback) {
+ test.addSniffer(WebInspector.console, "_reportCompletions",
+ function(bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix, result, isException) {
+ test.assertTrue(!isException, "Exception while collecting completions");
+ for (var i = 0; i < expectedProperties.length; i++) {
+ var name = expectedProperties[i];
+ test.assertTrue(result[name], "Name " + name + " not found among the completions: " + JSON.stringify(result));
+ }
+ setTimeout(callback, 0);
+ });
+ WebInspector.console.prompt.text = expression;
+ WebInspector.console.prompt.autoCompleteSoon();
+ }
- this.takeControl();
+ this.takeControl();
};
@@ -976,61 +961,58 @@ TestSuite.prototype.testCompletionOnPause = function() {
* Tests that inspected page doesn't hang on reload if it contains a syntax
* error and DevTools window is open.
*/
-TestSuite.prototype.testAutoContinueOnSyntaxError = function() {
- this.showPanel('scripts');
- var test = this;
-
- function checkScriptsList() {
- var scriptSelect = document.getElementById('scripts-files');
- var options = scriptSelect.options;
- // There should be only console API source (see
- // InjectedScript._ensureCommandLineAPIInstalled) since the page script
- // contains a syntax error.
- for (var i = 0 ; i < options.length; i++) {
- if (options[i].text.search('script_syntax_error.html$') != -1) {
- test.fail('Script with syntax error should not be in the list of ' +
- 'parsed scripts.');
- }
+TestSuite.prototype.testAutoContinueOnSyntaxError = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ function checkScriptsList() {
+ var scriptSelect = document.getElementById("scripts-files");
+ var options = scriptSelect.options;
+ // There should be only console API source (see
+ // InjectedScript._ensureCommandLineAPIInstalled) since the page script
+ // contains a syntax error.
+ for (var i = 0 ; i < options.length; i++) {
+ if (options[i].text.search("script_syntax_error.html$") !== -1)
+ test.fail("Script with syntax error should not be in the list of parsed scripts.");
+ }
}
- }
-
- this.addSniffer(devtools.DebuggerAgent.prototype, 'handleScriptsResponse_',
- function(msg) {
- checkScriptsList();
- // Reload inspected page.
- test.evaluateInConsole_(
- 'window.location.reload(true);',
- function(resultText) {
- test.assertEquals('undefined', resultText,
- 'Unexpected result of reload().');
- waitForExceptionEvent();
- });
- });
-
- function waitForExceptionEvent() {
- var exceptionCount = 0;
- test.addSniffer(
- devtools.DebuggerAgent.prototype,
- 'handleExceptionEvent_',
+ this.addSniffer(devtools.DebuggerAgent.prototype, "handleScriptsResponse_",
function(msg) {
- exceptionCount++;
- test.assertEquals(1, exceptionCount, 'Too many exceptions.');
- test.assertEquals(undefined, msg.getBody().script,
- 'Unexpected exception: ' + JSON.stringify(msg));
- test.releaseControl();
- });
+ checkScriptsList();
- // Check that the script is not paused on parse error.
- test.addSniffer(
- WebInspector,
- 'pausedScript',
- function(callFrames) {
- test.fail('Script execution should not pause on syntax error.');
+ // Reload inspected page.
+ test.evaluateInConsole_(
+ "window.location.reload(true);",
+ function(resultText) {
+ test.assertEquals("undefined", resultText, "Unexpected result of reload().");
+ waitForExceptionEvent();
+ });
});
- }
- this.takeControl();
+ function waitForExceptionEvent() {
+ var exceptionCount = 0;
+ test.addSniffer(
+ devtools.DebuggerAgent.prototype,
+ "handleExceptionEvent_",
+ function(msg) {
+ exceptionCount++;
+ test.assertEquals(1, exceptionCount, "Too many exceptions.");
+ test.assertEquals(undefined, msg.getBody().script, "Unexpected exception: " + JSON.stringify(msg));
+ test.releaseControl();
+ });
+
+ // Check that the script is not paused on parse error.
+ test.addSniffer(
+ WebInspector,
+ "pausedScript",
+ function(callFrames) {
+ test.fail("Script execution should not pause on syntax error.");
+ });
+ }
+
+ this.takeControl();
};
@@ -1040,12 +1022,10 @@ TestSuite.prototype.testAutoContinueOnSyntaxError = function() {
* @param {number} lineNumber Expected line number
* @param {string} lineContent Expected line text
*/
-TestSuite.prototype._checkExecutionLine = function(sourceFrame, lineNumber,
- lineContent) {
- this.assertEquals(lineNumber, sourceFrame.executionLine,
- 'Unexpected execution line number.');
- this.assertEquals(lineContent, sourceFrame._textModel.line(lineNumber - 1),
- 'Unexpected execution line text.');
+TestSuite.prototype._checkExecutionLine = function(sourceFrame, lineNumber, lineContent)
+{
+ this.assertEquals(lineNumber, sourceFrame.executionLine, "Unexpected execution line number.");
+ this.assertEquals(lineContent, sourceFrame._textModel.line(lineNumber - 1), "Unexpected execution line text.");
}
@@ -1054,24 +1034,25 @@ TestSuite.prototype._checkExecutionLine = function(sourceFrame, lineNumber,
* in the Scripts panel.
* @param {Array.<string>} expected Regular expressions describing
* expected script names.
- * @return {boolean} Whether all the scripts are in 'scripts-files' select
+ * @return {boolean} Whether all the scripts are in "scripts-files" select
* box
*/
-TestSuite.prototype._scriptsAreParsed = function(expected) {
- var scriptSelect = document.getElementById('scripts-files');
- var options = scriptSelect.options;
-
- // Check that at least all the expected scripts are present.
- var missing = expected.slice(0);
- for (var i = 0 ; i < options.length; i++) {
- for (var j = 0; j < missing.length; j++) {
- if (options[i].text.search(missing[j]) != -1) {
- missing.splice(j, 1);
- break;
- }
+TestSuite.prototype._scriptsAreParsed = function(expected)
+{
+ var scriptSelect = document.getElementById("scripts-files");
+ var options = scriptSelect.options;
+
+ // Check that at least all the expected scripts are present.
+ var missing = expected.slice(0);
+ for (var i = 0 ; i < options.length; i++) {
+ for (var j = 0; j < missing.length; j++) {
+ if (options[i].text.search(missing[j]) !== -1) {
+ missing.splice(j, 1);
+ break;
+ }
+ }
}
- }
- return missing.length == 0;
+ return missing.length === 0;
};
@@ -1080,26 +1061,24 @@ TestSuite.prototype._scriptsAreParsed = function(expected) {
* @param {Object} expectations Dictionary of expectations
* @param {function():void} callback
*/
-TestSuite.prototype._waitForScriptPause = function(expectations, callback) {
- var test = this;
- // Wait until script is paused.
- test.addSniffer(
- WebInspector,
- 'pausedScript',
- function(callFrames) {
- var functionsOnStack = [];
- for (var i = 0; i < callFrames.length; i++) {
- functionsOnStack.push(callFrames[i].functionName);
- }
+TestSuite.prototype._waitForScriptPause = function(expectations, callback)
+{
+ var test = this;
+ // Wait until script is paused.
+ test.addSniffer(
+ WebInspector,
+ "pausedScript",
+ function(callFrames) {
+ var functionsOnStack = [];
+ for (var i = 0; i < callFrames.length; i++)
+ functionsOnStack.push(callFrames[i].functionName);
- test.assertEquals(
- expectations.functionsOnStack.join(','),
- functionsOnStack.join(','), 'Unexpected stack.');
+ test.assertEquals(expectations.functionsOnStack.join(","), functionsOnStack.join(","), "Unexpected stack.");
- // Check that execution line where the script is paused is
- // expected one.
- test._checkSourceFrameWhenLoaded(expectations, callback);
- });
+ // Check that execution line where the script is paused is
+ // expected one.
+ test._checkSourceFrameWhenLoaded(expectations, callback);
+ });
};
@@ -1109,23 +1088,22 @@ TestSuite.prototype._waitForScriptPause = function(expectations, callback) {
* @param {Object} expectations Dictionary of expectations
* @param {function():void} callback
*/
-TestSuite.prototype._checkSourceFrameWhenLoaded = function(
- expectations, callback) {
- var test = this;
-
- var frame = WebInspector.currentPanel.visibleView.sourceFrame;
- if (frame._loaded) {
- checkExecLine();
- } else {
- setTimeout(function() {
- test._checkSourceFrameWhenLoaded(expectations, callback);
- }, 100);
- }
- function checkExecLine() {
- test._checkExecutionLine(frame, expectations.lineNumber,
- expectations.lineText);
- callback();
- }
+TestSuite.prototype._checkSourceFrameWhenLoaded = function(expectations, callback)
+{
+ var test = this;
+
+ var frame = WebInspector.currentPanel.visibleView.sourceFrame;
+ if (frame._loaded)
+ checkExecLine();
+ else {
+ setTimeout(function() {
+ test._checkSourceFrameWhenLoaded(expectations, callback);
+ }, 100);
+ }
+ function checkExecLine() {
+ test._checkExecutionLine(frame, expectations.lineNumber, expectations.lineText);
+ callback();
+ }
};
@@ -1134,18 +1112,17 @@ TestSuite.prototype._checkSourceFrameWhenLoaded = function(
* @param {Array.<Object|Function>} Array [expectations1,action1,expectations2,
* action2,...,actionN].
*/
-TestSuite.prototype._performSteps = function(actions) {
- var test = this;
- var i = 0;
- function doNextAction() {
- if (i > 0) {
- actions[i++]();
- }
- if (i < actions.length - 1) {
- test._waitForScriptPause(actions[i++], doNextAction);
+TestSuite.prototype._performSteps = function(actions)
+{
+ var test = this;
+ var i = 0;
+ function doNextAction() {
+ if (i > 0)
+ actions[i++]();
+ if (i < actions.length - 1)
+ test._waitForScriptPause(actions[i++], doNextAction);
}
- }
- doNextAction();
+ doNextAction();
};
@@ -1153,165 +1130,164 @@ TestSuite.prototype._performSteps = function(actions) {
* Waits until all the scripts are parsed and asynchronously executes the code
* in the inspected page.
*/
-TestSuite.prototype._executeCodeWhenScriptsAreParsed = function(
- code, expectedScripts) {
- var test = this;
+TestSuite.prototype._executeCodeWhenScriptsAreParsed = function(code, expectedScripts)
+{
+ var test = this;
- function executeFunctionInInspectedPage() {
- // Since breakpoints are ignored in evals' calculate() function is
- // execute after zero-timeout so that the breakpoint is hit.
- test.evaluateInConsole_(
- 'setTimeout("' + code + '" , 0)',
- function(resultText) {
- test.assertTrue(!isNaN(resultText),
- 'Failed to get timer id: ' + resultText);
- });
- }
+ function executeFunctionInInspectedPage() {
+ // Since breakpoints are ignored in evals' calculate() function is
+ // execute after zero-timeout so that the breakpoint is hit.
+ test.evaluateInConsole_(
+ 'setTimeout("' + code + '" , 0)',
+ function(resultText) {
+ test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText);
+ });
+ }
- test._waitUntilScriptsAreParsed(
- expectedScripts, executeFunctionInInspectedPage);
+ test._waitUntilScriptsAreParsed(expectedScripts, executeFunctionInInspectedPage);
};
/**
* Waits until all the scripts are parsed and invokes the callback.
*/
-TestSuite.prototype._waitUntilScriptsAreParsed = function(
- expectedScripts, callback) {
- var test = this;
+TestSuite.prototype._waitUntilScriptsAreParsed = function(expectedScripts, callback)
+{
+ var test = this;
- function waitForAllScripts() {
- if (test._scriptsAreParsed(expectedScripts)) {
- callback();
- } else {
- test.addSniffer(WebInspector, 'parsedScriptSource', waitForAllScripts);
+ function waitForAllScripts() {
+ if (test._scriptsAreParsed(expectedScripts))
+ callback();
+ else
+ test.addSniffer(WebInspector, "parsedScriptSource", waitForAllScripts);
}
- }
- waitForAllScripts();
+ waitForAllScripts();
};
/**
- * Waits until all debugger scripts are parsed and executes 'a()' in the
+ * Waits until all debugger scripts are parsed and executes "a()" in the
* inspected page.
*/
-TestSuite.prototype._executeFunctionForStepTest = function() {
- this._executeCodeWhenScriptsAreParsed(
- 'a()',
- ['debugger_step.html$', 'debugger_step.js$']);
+TestSuite.prototype._executeFunctionForStepTest = function()
+{
+ this._executeCodeWhenScriptsAreParsed("a()", ["debugger_step.html$", "debugger_step.js$"]);
};
/**
* Tests step over in the debugger.
*/
-TestSuite.prototype.testStepOver = function() {
- this.showPanel('scripts');
- var test = this;
-
- this._executeFunctionForStepTest();
-
- this._performSteps([
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 3,
- lineText: ' debugger;'
- },
- function() {
- document.getElementById('scripts-step-over').click();
- },
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 5,
- lineText: ' var y = fact(10);'
- },
- function() {
- document.getElementById('scripts-step-over').click();
- },
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 6,
- lineText: ' return y;'
- },
- function() {
- test.releaseControl();
- }
- ]);
+TestSuite.prototype.testStepOver = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ this._executeFunctionForStepTest();
+
+ this._performSteps([
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 3,
+ lineText: " debugger;"
+ },
+ function() {
+ document.getElementById("scripts-step-over").click();
+ },
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 5,
+ lineText: " var y = fact(10);"
+ },
+ function() {
+ document.getElementById("scripts-step-over").click();
+ },
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 6,
+ lineText: " return y;"
+ },
+ function() {
+ test.releaseControl();
+ }
+ ]);
- test.takeControl();
+ test.takeControl();
};
/**
* Tests step out in the debugger.
*/
-TestSuite.prototype.testStepOut = function() {
- this.showPanel('scripts');
- var test = this;
-
- this._executeFunctionForStepTest();
-
- this._performSteps([
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 3,
- lineText: ' debugger;'
- },
- function() {
- document.getElementById('scripts-step-out').click();
- },
- {
- functionsOnStack: ['a','(anonymous function)'],
- lineNumber: 8,
- lineText: ' printResult(result);'
- },
- function() {
- test.releaseControl();
- }
- ]);
+TestSuite.prototype.testStepOut = function()
+{
+ this.showPanel("scripts");
+ var test = this;
- test.takeControl();
+ this._executeFunctionForStepTest();
+
+ this._performSteps([
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 3,
+ lineText: " debugger;"
+ },
+ function() {
+ document.getElementById("scripts-step-out").click();
+ },
+ {
+ functionsOnStack: ["a","(anonymous function)"],
+ lineNumber: 8,
+ lineText: " printResult(result);"
+ },
+ function() {
+ test.releaseControl();
+ }
+ ]);
+
+ test.takeControl();
};
/**
* Tests step in in the debugger.
*/
-TestSuite.prototype.testStepIn = function() {
- this.showPanel('scripts');
- var test = this;
-
- this._executeFunctionForStepTest();
-
- this._performSteps([
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 3,
- lineText: ' debugger;'
- },
- function() {
- document.getElementById('scripts-step-over').click();
- },
- {
- functionsOnStack: ['d','a','(anonymous function)'],
- lineNumber: 5,
- lineText: ' var y = fact(10);'
- },
- function() {
- document.getElementById('scripts-step-into').click();
- },
- {
- functionsOnStack: ['fact','d','a','(anonymous function)'],
- lineNumber: 15,
- lineText: ' return r;'
- },
- function() {
- test.releaseControl();
- }
- ]);
+TestSuite.prototype.testStepIn = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ this._executeFunctionForStepTest();
+
+ this._performSteps([
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 3,
+ lineText: " debugger;"
+ },
+ function() {
+ document.getElementById("scripts-step-over").click();
+ },
+ {
+ functionsOnStack: ["d","a","(anonymous function)"],
+ lineNumber: 5,
+ lineText: " var y = fact(10);"
+ },
+ function() {
+ document.getElementById("scripts-step-into").click();
+ },
+ {
+ functionsOnStack: ["fact","d","a","(anonymous function)"],
+ lineNumber: 15,
+ lineText: " return r;"
+ },
+ function() {
+ test.releaseControl();
+ }
+ ]);
- test.takeControl();
+ test.takeControl();
};
@@ -1321,19 +1297,18 @@ TestSuite.prototype.testStepIn = function() {
* @param {number} resultType
* @param {Node} opt_ancestor Context node. If not specified documentElement
* will be used
- * @return {XPathResult} Type of returned value is determined by 'resultType' parameter
- */
-
-TestSuite.prototype._evaluateXpath = function(
- xpath, resultType, opt_ancestor) {
- if (!opt_ancestor) {
- opt_ancestor = document.documentElement;
- }
- try {
- return document.evaluate(xpath, opt_ancestor, null, resultType, null);
- } catch(e) {
- this.fail('Error in expression: "' + xpath + '".' + e);
- }
+ * @return {XPathResult} Type of returned value is determined by "resultType" parameter
+ */
+
+TestSuite.prototype._evaluateXpath = function(xpath, resultType, opt_ancestor)
+{
+ if (!opt_ancestor)
+ opt_ancestor = document.documentElement;
+ try {
+ return document.evaluate(xpath, opt_ancestor, null, resultType, null);
+ } catch(e) {
+ this.fail('Error in expression: "' + xpath + '".' + e);
+ }
};
@@ -1344,11 +1319,11 @@ TestSuite.prototype._evaluateXpath = function(
* will be used
* @return {?Node}
*/
-TestSuite.prototype._findNode = function(xpath, opt_ancestor) {
- var result = this._evaluateXpath(xpath, XPathResult.FIRST_ORDERED_NODE_TYPE,
- opt_ancestor).singleNodeValue;
- this.assertTrue(!!result, 'Cannot find node on path: ' + xpath);
- return result;
+TestSuite.prototype._findNode = function(xpath, opt_ancestor)
+{
+ var result = this._evaluateXpath(xpath, XPathResult.FIRST_ORDERED_NODE_TYPE, opt_ancestor).singleNodeValue;
+ this.assertTrue(!!result, "Cannot find node on path: " + xpath);
+ return result;
};
@@ -1359,11 +1334,11 @@ TestSuite.prototype._findNode = function(xpath, opt_ancestor) {
* will be used
* @return {?string}
*/
-TestSuite.prototype._findText = function(xpath, opt_ancestor) {
- var result = this._evaluateXpath(xpath, XPathResult.STRING_TYPE,
- opt_ancestor).stringValue;
- this.assertTrue(!!result, 'Cannot find text on path: ' + xpath);
- return result;
+TestSuite.prototype._findText = function(xpath, opt_ancestor)
+{
+ var result = this._evaluateXpath(xpath, XPathResult.STRING_TYPE, opt_ancestor).stringValue;
+ this.assertTrue(!!result, "Cannot find text on path: " + xpath);
+ return result;
};
@@ -1374,9 +1349,9 @@ TestSuite.prototype._findText = function(xpath, opt_ancestor) {
* will be used
* @return {XPathResult} Iterator over the nodes
*/
-TestSuite.prototype._nodeIterator = function(xpath, opt_ancestor) {
- return this._evaluateXpath(xpath, XPathResult.ORDERED_NODE_ITERATOR_TYPE,
- opt_ancestor);
+TestSuite.prototype._nodeIterator = function(xpath, opt_ancestor)
+{
+ return this._evaluateXpath(xpath, XPathResult.ORDERED_NODE_ITERATOR_TYPE, opt_ancestor);
};
@@ -1385,39 +1360,30 @@ TestSuite.prototype._nodeIterator = function(xpath, opt_ancestor) {
* @param {Node} scopeSectionDiv The section div
* @param {Object} expectations Expectations dictionary
*/
-TestSuite.prototype._checkScopeSectionDiv = function(
- scopeSectionDiv, expectations) {
- var scopeTitle = this._findText(
- './div[@class="header"]/div[@class="title"]/text()', scopeSectionDiv);
- this.assertEquals(expectations.title, scopeTitle,
- 'Unexpected scope section title.');
- if (!expectations.properties) {
- return;
- }
- this.assertTrue(scopeSectionDiv.hasStyleClass('expanded'), 'Section "' +
- scopeTitle + '" is collapsed.');
-
- var propertyIt = this._nodeIterator('./ol/li',
- scopeSectionDiv);
- var propertyLi;
- var foundProps = [];
- while (propertyLi = propertyIt.iterateNext()) {
- var name = this._findText('./span[@class="name"]/text()', propertyLi);
- var value = this._findText('./span[@class="value"]/text()', propertyLi);
- this.assertTrue(!!name, 'Invalid variable name: "' + name + '"');
- this.assertTrue(name in expectations.properties,
- 'Unexpected property: ' + name);
- this.assertEquals(expectations.properties[name], value,
- 'Unexpected "' + name + '" property value.');
- delete expectations.properties[name];
- foundProps.push(name + ' = ' + value);
- }
-
- // Check that all expected properties were found.
- for (var p in expectations.properties) {
- this.fail('Property "' + p + '" was not found in scope "' + scopeTitle +
- '". Found properties: "' + foundProps.join(',') + '"');
- }
+TestSuite.prototype._checkScopeSectionDiv = function(scopeSectionDiv, expectations)
+{
+ var scopeTitle = this._findText('./div[@class="header"]/div[@class="title"]/text()', scopeSectionDiv);
+ this.assertEquals(expectations.title, scopeTitle, "Unexpected scope section title.");
+ if (!expectations.properties)
+ return;
+ this.assertTrue(scopeSectionDiv.hasStyleClass("expanded"), 'Section "' + scopeTitle + '" is collapsed.');
+
+ var propertyIt = this._nodeIterator("./ol/li", scopeSectionDiv);
+ var propertyLi;
+ var foundProps = [];
+ while (propertyLi = propertyIt.iterateNext()) {
+ var name = this._findText('./span[@class="name"]/text()', propertyLi);
+ var value = this._findText('./span[@class="value"]/text()', propertyLi);
+ this.assertTrue(!!name, 'Invalid variable name: "' + name + '"');
+ this.assertTrue(name in expectations.properties, "Unexpected property: " + name);
+ this.assertEquals(expectations.properties[name], value, 'Unexpected "' + name + '" property value.');
+ delete expectations.properties[name];
+ foundProps.push(name + " = " + value);
+ }
+
+ // Check that all expected properties were found.
+ for (var p in expectations.properties)
+ this.fail('Property "' + p + '" was not found in scope "' + scopeTitle + '". Found properties: "' + foundProps.join(",") + '"');
};
@@ -1428,110 +1394,103 @@ TestSuite.prototype._checkScopeSectionDiv = function(
* filter
* @param {Function} callback
*/
-TestSuite.prototype._expandScopeSections = function(filter, callback) {
- var sections = WebInspector.currentPanel.sidebarPanes.scopechain.sections;
+TestSuite.prototype._expandScopeSections = function(filter, callback)
+{
+ var sections = WebInspector.currentPanel.sidebarPanes.scopechain.sections;
- var toBeUpdatedCount = 0;
- function updateListener() {
- --toBeUpdatedCount;
- if (toBeUpdatedCount == 0) {
- // Report when all scopes are expanded and populated.
- callback();
+ var toBeUpdatedCount = 0;
+ function updateListener() {
+ --toBeUpdatedCount;
+ if (toBeUpdatedCount === 0) {
+ // Report when all scopes are expanded and populated.
+ callback();
+ }
}
- }
- // Global scope is always the last one.
- for (var i = 0; i < sections.length - 1; i++) {
- var section = sections[i];
- if (!filter(sections, i)) {
- continue;
+ // Global scope is always the last one.
+ for (var i = 0; i < sections.length - 1; i++) {
+ var section = sections[i];
+ if (!filter(sections, i))
+ continue;
+ ++toBeUpdatedCount;
+ var populated = section.populated;
+
+ this._hookGetPropertiesCallback(updateListener,
+ function() {
+ section.expand();
+ if (populated) {
+ // Make sure "updateProperties" callback will be called at least once
+ // after it was overridden.
+ section.update();
+ }
+ });
}
- ++toBeUpdatedCount;
- var populated = section.populated;
-
- this._hookGetPropertiesCallback(updateListener,
- function() {
- section.expand();
- if (populated) {
- // Make sure 'updateProperties' callback will be called at least once
- // after it was overridden.
- section.update();
- }
- });
- }
};
/**
* Tests that scopes can be expanded and contain expected data.
*/
-TestSuite.prototype.testExpandScope = function() {
- this.showPanel('scripts');
- var test = this;
-
- this._executeCodeWhenScriptsAreParsed(
- 'handleClick()',
- ['debugger_closure.html$']);
-
- this._waitForScriptPause(
- {
- functionsOnStack: ['innerFunction', 'handleClick',
- '(anonymous function)'],
- lineNumber: 8,
- lineText: ' debugger;'
- },
- expandAllSectionsExceptGlobal);
-
- // Expanding Global scope takes for too long so we skeep it.
- function expandAllSectionsExceptGlobal() {
- test._expandScopeSections(function(sections, i) {
- return i < sections.length - 1;
- },
- examineScopes /* When all scopes are expanded and populated check
- them. */);
- }
-
- // Check scope sections contents.
- function examineScopes() {
- var scopeVariablesSection = test._findNode('//div[@id="scripts-sidebar"]/' +
- 'div[div[@class="title"]/text()="Scope Variables"]');
- var expectedScopes = [
- {
- title: 'Local',
- properties: {
- x:2009,
- innerFunctionLocalVar:2011,
- 'this': 'global',
- }
- },
- {
- title: 'Closure',
- properties: {
- n:'TextParam',
- makeClosureLocalVar:'local.TextParam',
- }
- },
- {
- title: 'Global',
- },
- ];
- var it = test._nodeIterator('./div[@class="body"]/div',
- scopeVariablesSection);
- var scopeIndex = 0;
- var scopeDiv;
- while (scopeDiv = it.iterateNext()) {
- test.assertTrue(scopeIndex < expectedScopes.length,
- 'Too many scopes.');
- test._checkScopeSectionDiv(scopeDiv, expectedScopes[scopeIndex]);
- ++scopeIndex;
+TestSuite.prototype.testExpandScope = function()
+{
+ this.showPanel("scripts");
+ var test = this;
+
+ this._executeCodeWhenScriptsAreParsed("handleClick()", ["debugger_closure.html$"]);
+
+ this._waitForScriptPause(
+ {
+ functionsOnStack: ["innerFunction", "handleClick", "(anonymous function)"],
+ lineNumber: 8,
+ lineText: " debugger;"
+ },
+ expandAllSectionsExceptGlobal);
+
+ // Expanding Global scope takes for too long so we skeep it.
+ function expandAllSectionsExceptGlobal() {
+ test._expandScopeSections(function(sections, i) {
+ return i < sections.length - 1;
+ },
+ examineScopes /* When all scopes are expanded and populated check them. */);
}
- test.assertEquals(expectedScopes.length, scopeIndex,
- 'Unexpected number of scopes.');
- test.releaseControl();
- }
+ // Check scope sections contents.
+ function examineScopes() {
+ var scopeVariablesSection = test._findNode('//div[@id="scripts-sidebar"]/div[div[@class="title"]/text()="Scope Variables"]');
+ var expectedScopes = [
+ {
+ title: "Local",
+ properties: {
+ x:"2009",
+ innerFunctionLocalVar:"2011",
+ "this": "global",
+ }
+ },
+ {
+ title: "Closure",
+ properties: {
+ n:"TextParam",
+ makeClosureLocalVar:"local.TextParam",
+ }
+ },
+ {
+ title: "Global",
+ },
+ ];
+ var it = test._nodeIterator('./div[@class="body"]/div', scopeVariablesSection);
+ var scopeIndex = 0;
+ var scopeDiv;
+ while (scopeDiv = it.iterateNext()) {
+ test.assertTrue(scopeIndex < expectedScopes.length, "Too many scopes.");
+ test._checkScopeSectionDiv(scopeDiv, expectedScopes[scopeIndex]);
+ ++scopeIndex;
+ }
+ test.assertEquals(expectedScopes.length, scopeIndex, "Unexpected number of scopes.");
- test.takeControl();
+ test.releaseControl();
+ }
+
+ test.takeControl();
};
@@ -1543,43 +1502,42 @@ TestSuite.prototype.testExpandScope = function() {
* of failure.
* @return {TreeElement}
*/
-TestSuite.prototype._findChildProperty = function(
- parent, childName, objectPath) {
- var children = parent.children;
- for (var i = 0; i < children.length; i++) {
- var treeElement = children[i];
- var property = treeElement.property;
- if (property.name == childName) {
- return treeElement;
+TestSuite.prototype._findChildProperty = function(parent, childName, objectPath)
+{
+ var children = parent.children;
+ for (var i = 0; i < children.length; i++) {
+ var treeElement = children[i];
+ var property = treeElement.property;
+ if (property.name === childName)
+ return treeElement;
}
- }
- this.fail('Cannot find property "' + childName + '" in ' + objectPath);
+ this.fail('Cannot find property "' + childName + '" in ' + objectPath);
};
/**
* Executes the 'code' with InjectedScriptAccess.getProperties overriden
* so that all callbacks passed to InjectedScriptAccess.getProperties are
- * extended with the 'hook'.
+ * extended with the "hook".
* @param {Function} hook The hook function.
* @param {Function} code A code snippet to be executed.
*/
-TestSuite.prototype._hookGetPropertiesCallback = function(hook, code) {
- var accessor = InjectedScriptAccess.prototype;
- var orig = accessor.getProperties;
- accessor.getProperties = function(objectProxy,
- ignoreHasOwnProperty, abbreviate, callback) {
- orig.call(this, objectProxy, ignoreHasOwnProperty, abbreviate,
- function() {
- callback.apply(this, arguments);
- hook();
- });
- };
- try {
- code();
- } finally {
- accessor.getProperties = orig;
- }
+TestSuite.prototype._hookGetPropertiesCallback = function(hook, code)
+{
+ var accessor = InjectedScriptAccess.prototype;
+ var orig = accessor.getProperties;
+ accessor.getProperties = function(objectProxy, ignoreHasOwnProperty, abbreviate, callback) {
+ orig.call(this, objectProxy, ignoreHasOwnProperty, abbreviate,
+ function() {
+ callback.apply(this, arguments);
+ hook();
+ });
+ };
+ try {
+ code();
+ } finally {
+ accessor.getProperties = orig;
+ }
};
@@ -1587,262 +1545,250 @@ TestSuite.prototype._hookGetPropertiesCallback = function(hook, code) {
* Tests that all elements in prototype chain of an object have expected
* intrinic proprties(__proto__, constructor, prototype).
*/
-TestSuite.prototype.testDebugIntrinsicProperties = function() {
- this.showPanel('scripts');
- var test = this;
-
- this._executeCodeWhenScriptsAreParsed(
- 'handleClick()',
- ['debugger_intrinsic_properties.html$']);
-
- this._waitForScriptPause(
- {
- functionsOnStack: ['callDebugger', 'handleClick',
- '(anonymous function)'],
- lineNumber: 29,
- lineText: ' debugger;'
- },
- expandLocalScope);
-
- var localScopeSection = null;
- function expandLocalScope() {
- test._expandScopeSections(function(sections, i) {
- if (i == 0) {
- test.assertTrue(sections[i].object.isLocal, 'Scope #0 is not Local.');
- localScopeSection = sections[i];
- return true;
- }
- return false;
- },
- examineLocalScope);
- }
-
- function examineLocalScope() {
- var scopeExpectations = [
- 'a', 'Object', [
- 'constructor', 'function Child()', [
- 'constructor', 'function Function()', null,
- 'name', 'Child', null,
- 'prototype', 'Object', [
- 'childProtoField', '21', null
- ]
- ],
+TestSuite.prototype.testDebugIntrinsicProperties = function()
+{
+ this.showPanel("scripts");
+ var test = this;
- '__proto__', 'Object', [
- '__proto__', 'Object', [
- '__proto__', 'Object', [
- '__proto__', 'null', null,
- 'constructor', 'function Object()', null,
- ],
- 'constructor', 'function Parent()', [
- 'name', 'Parent', null,
- 'prototype', 'Object', [
- 'parentProtoField', '11', null,
- ]
+ this._executeCodeWhenScriptsAreParsed("handleClick()", ["debugger_intrinsic_properties.html$"]);
+
+ this._waitForScriptPause(
+ {
+ functionsOnStack: ["callDebugger", "handleClick", "(anonymous function)"],
+ lineNumber: 29,
+ lineText: " debugger;"
+ },
+ expandLocalScope);
+
+ var localScopeSection = null;
+ function expandLocalScope() {
+ test._expandScopeSections(function(sections, i) {
+ if (i === 0) {
+ test.assertTrue(sections[i].object.isLocal, "Scope #0 is not Local.");
+ localScopeSection = sections[i];
+ return true;
+ }
+ return false;
+ },
+ examineLocalScope);
+ }
+
+ function examineLocalScope() {
+ var scopeExpectations = [
+ "a", "Object", [
+ "constructor", "function Child()", [
+ "constructor", "function Function()", null,
+ "name", "Child", null,
+ "prototype", "Object", [
+ "childProtoField", 21, null
+ ]
+ ],
+
+ "__proto__", "Object", [
+ "__proto__", "Object", [
+ "__proto__", "Object", [
+ "__proto__", "null", null,
+ "constructor", "function Object()", null,
+ ],
+ "constructor", "function Parent()", [
+ "name", "Parent", null,
+ "prototype", "Object", [
+ "parentProtoField", 11, null,
+ ]
+ ],
+ "parentProtoField", 11, null,
+ ],
+ "constructor", "function Child()", null,
+ "childProtoField", 21, null,
],
- 'parentProtoField', '11', null,
- ],
- 'constructor', 'function Child()', null,
- 'childProtoField', '21', null,
- ],
-
- 'parentField', '10', null,
- 'childField', '20', null,
- ]
- ];
-
- checkProperty(
- localScopeSection.propertiesTreeOutline,
- '<Local Scope>',
- scopeExpectations);
- }
-
- var propQueue = [];
- var index = 0;
- var expectedFinalIndex = 8;
-
- function expandAndCheckNextProperty() {
- if (index == propQueue.length) {
- test.assertEquals(expectedFinalIndex, index,
- 'Unexpected number of expanded objects.');
- test.releaseControl();
- return;
+
+ "parentField", 10, null,
+ "childField", 20, null,
+ ]
+ ];
+
+ checkProperty(localScopeSection.propertiesTreeOutline, "<Local Scope>", scopeExpectations);
}
- // Read next property data from the queue.
- var treeElement = propQueue[index].treeElement;
- var path = propQueue[index].path;
- var expectations = propQueue[index].expectations;
- index++;
+ var propQueue = [];
+ var index = 0;
+ var expectedFinalIndex = 8;
- // Expand the property.
- test._hookGetPropertiesCallback(function() {
- checkProperty(treeElement, path, expectations);
- },
- function() {
- treeElement.expand();
- });
- }
-
- function checkProperty(treeElement, path, expectations) {
- for (var i = 0; i < expectations.length; i += 3) {
- var name = expectations[i];
- var description = expectations[i+1];
- var value = expectations[i+2];
-
- var propertyPath = path + '.' + name;
- var propertyTreeElement = test._findChildProperty(
- treeElement, name, path);
- test.assertTrue(propertyTreeElement,
- 'Property "' + propertyPath + '" not found.');
- test.assertEquals(description,
- propertyTreeElement.property.value.description,
- 'Unexpected "' + propertyPath + '" description.');
- if (value) {
- // Schedule property content check.
- propQueue.push({
- treeElement: propertyTreeElement,
- path: propertyPath,
- expectations: value,
- });
- }
+ function expandAndCheckNextProperty() {
+ if (index === propQueue.length) {
+ test.assertEquals(expectedFinalIndex, index, "Unexpected number of expanded objects.");
+ test.releaseControl();
+ return;
+ }
+
+ // Read next property data from the queue.
+ var treeElement = propQueue[index].treeElement;
+ var path = propQueue[index].path;
+ var expectations = propQueue[index].expectations;
+ index++;
+
+ // Expand the property.
+ test._hookGetPropertiesCallback(function() {
+ checkProperty(treeElement, path, expectations);
+ },
+ function() {
+ treeElement.expand();
+ });
+ }
+
+ function checkProperty(treeElement, path, expectations) {
+ for (var i = 0; i < expectations.length; i += 3) {
+ var name = expectations[i];
+ var description = expectations[i+1];
+ var value = expectations[i+2];
+
+ var propertyPath = path + "." + name;
+ var propertyTreeElement = test._findChildProperty(treeElement, name, path);
+ test.assertTrue(propertyTreeElement, 'Property "' + propertyPath + '" not found.');
+ test.assertEquals(description, propertyTreeElement.property.value.description, 'Unexpected "' + propertyPath + '" description.');
+ if (value) {
+ // Schedule property content check.
+ propQueue.push({
+ treeElement: propertyTreeElement,
+ path: propertyPath,
+ expectations: value,
+ });
+ }
+ }
+ // Check next property in the queue.
+ expandAndCheckNextProperty();
}
- // Check next property in the queue.
- expandAndCheckNextProperty();
- }
- test.takeControl();
+ test.takeControl();
};
/**
- * Tests 'Pause' button will pause debugger when a snippet is evaluated.
+ * Tests "Pause" button will pause debugger when a snippet is evaluated.
*/
-TestSuite.prototype.testPauseInEval = function() {
- this.showPanel('scripts');
+TestSuite.prototype.testPauseInEval = function()
+{
+ this.showPanel("scripts");
- var test = this;
+ var test = this;
- var pauseButton = document.getElementById('scripts-pause');
- pauseButton.click();
+ var pauseButton = document.getElementById("scripts-pause");
+ pauseButton.click();
- devtools.tools.evaluateJavaScript('fib(10)');
+ devtools.tools.evaluateJavaScript("fib(10)");
- this.addSniffer(WebInspector, 'pausedScript',
- function() {
- test.releaseControl();
- });
+ this.addSniffer(WebInspector, "pausedScript",
+ function() {
+ test.releaseControl();
+ });
- test.takeControl();
+ test.takeControl();
};
/**
* Key event with given key identifier.
*/
-TestSuite.createKeyEvent = function(keyIdentifier) {
- var evt = document.createEvent('KeyboardEvent');
- evt.initKeyboardEvent('keydown', true /* can bubble */, true /* can cancel */,
- null /* view */, keyIdentifier, "");
- return evt;
+TestSuite.createKeyEvent = function(keyIdentifier)
+{
+ var evt = document.createEvent("KeyboardEvent");
+ evt.initKeyboardEvent("keydown", true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, "");
+ return evt;
};
/**
* Tests console eval.
*/
-TestSuite.prototype.testConsoleEval = function() {
- var test = this;
- this.evaluateInConsole_('123',
- function(resultText) {
- test.assertEquals('123', resultText);
- test.releaseControl();
- });
+TestSuite.prototype.testConsoleEval = function()
+{
+ var test = this;
+ this.evaluateInConsole_("123",
+ function(resultText) {
+ test.assertEquals("123", resultText);
+ test.releaseControl();
+ });
- this.takeControl();
+ this.takeControl();
};
/**
* Tests console log.
*/
-TestSuite.prototype.testConsoleLog = function() {
- WebInspector.console.visible = true;
- var messages = WebInspector.console.messages;
- var index = 0;
-
- var test = this;
- var assertNext = function(line, message, opt_class, opt_count, opt_substr) {
- var elem = messages[index++].toMessageElement();
- var clazz = elem.getAttribute('class');
- var expectation = (opt_count || '') + 'console_test_page.html:' +
- line + message;
- if (opt_substr) {
- test.assertContains(elem.textContent, expectation);
- } else {
- test.assertEquals(expectation, elem.textContent);
- }
- if (opt_class) {
- test.assertContains(clazz, 'console-' + opt_class);
- }
- };
-
- assertNext('5', 'log', 'log-level');
- assertNext('7', 'debug', 'log-level');
- assertNext('9', 'info', 'log-level');
- assertNext('11', 'warn', 'warning-level');
- assertNext('13', 'error', 'error-level');
- assertNext('15', 'Message format number 1, 2 and 3.5');
- assertNext('17', 'Message format for string');
- assertNext('19', 'Object Object');
- assertNext('22', 'repeated', 'log-level', 5);
- assertNext('26', 'count: 1');
- assertNext('26', 'count: 2');
- assertNext('29', 'group', 'group-title');
- index++;
- assertNext('33', 'timer:', 'log-level', '', true);
- assertNext('35', '1 2 3', 'log-level');
- assertNext('37', 'HTMLDocument', 'log-level');
- assertNext('39', '<html>', 'log-level', '', true);
+TestSuite.prototype.testConsoleLog = function()
+{
+ WebInspector.console.visible = true;
+ var messages = WebInspector.console.messages;
+ var index = 0;
+
+ var test = this;
+ var assertNext = function(line, message, opt_class, opt_count, opt_substr) {
+ var elem = messages[index++].toMessageElement();
+ var clazz = elem.getAttribute("class");
+ var expectation = (opt_count || '') + 'console_test_page.html:' + line + message;
+ if (opt_substr)
+ test.assertContains(elem.textContent, expectation);
+ else
+ test.assertEquals(expectation, elem.textContent);
+ if (opt_class)
+ test.assertContains(clazz, "console-" + opt_class);
+ };
+
+ assertNext("5", "log", "log-level");
+ assertNext("7", "debug", "log-level");
+ assertNext("9", "info", "log-level");
+ assertNext("11", "warn", "warning-level");
+ assertNext("13", "error", "error-level");
+ assertNext("15", "Message format number 1, 2 and 3.5");
+ assertNext("17", "Message format for string");
+ assertNext("19", "Object Object");
+ assertNext("22", "repeated", "log-level", 5);
+ assertNext("26", "count: 1");
+ assertNext("26", "count: 2");
+ assertNext("29", "group", "group-title");
+ index++;
+ assertNext("33", "timer:", "log-level", "", true);
+ assertNext("35", "1 2 3", "log-level");
+ assertNext("37", "HTMLDocument", "log-level");
+ assertNext("39", "<html>", "log-level", "", true);
};
/**
* Tests eval of global objects.
*/
-TestSuite.prototype.testEvalGlobal = function() {
- WebInspector.console.visible = true;
-
- var inputs = ['foo', 'foobar'];
- var expectations = ['foo', 'fooValue',
- 'foobar', 'ReferenceError: foobar is not defined'];
-
- // Do not change code below - simply add inputs and expectations above.
- var initEval = function(input) {
- WebInspector.console.prompt.text = input;
- WebInspector.console.promptElement.dispatchEvent(
- TestSuite.createKeyEvent('Enter'));
- };
- var test = this;
- var messagesCount = 0;
- var inputIndex = 0;
- this.addSniffer(WebInspector.ConsoleView.prototype, 'addMessage',
- function(commandResult) {
- messagesCount++;
- if (messagesCount == expectations.length) {
- var messages = WebInspector.console.messages;
- for (var i = 0; i < expectations; ++i) {
- var elem = messages[i++].toMessageElement();
- test.assertEquals(elem.textContent, expectations[i]);
- }
- test.releaseControl();
- } else if (messagesCount % 2 == 0) {
- initEval(inputs[inputIndex++]);
- }
- }, true);
+TestSuite.prototype.testEvalGlobal = function()
+{
+ WebInspector.console.visible = true;
+
+ var inputs = ["foo", "foobar"];
+ var expectations = ["foo", "fooValue", "foobar", "ReferenceError: foobar is not defined"];
+
+ // Do not change code below - simply add inputs and expectations above.
+ var initEval = function(input) {
+ WebInspector.console.prompt.text = input;
+ WebInspector.console.promptElement.dispatchEvent( TestSuite.createKeyEvent("Enter"));
+ };
+ var test = this;
+ var messagesCount = 0;
+ var inputIndex = 0;
+ this.addSniffer(WebInspector.ConsoleView.prototype, "addMessage",
+ function(commandResult) {
+ messagesCount++;
+ if (messagesCount === expectations.length) {
+ var messages = WebInspector.console.messages;
+ for (var i = 0; i < expectations; ++i) {
+ var elem = messages[i++].toMessageElement();
+ test.assertEquals(elem.textContent, expectations[i]);
+ }
+ test.releaseControl();
+ } else if (messagesCount % 2 === 0)
+ initEval(inputs[inputIndex++]);
+ }, true);
- initEval(inputs[inputIndex++]);
- this.takeControl();
+ initEval(inputs[inputIndex++]);
+ this.takeControl();
};
@@ -1850,36 +1796,36 @@ TestSuite.prototype.testEvalGlobal = function() {
* Tests that Storage panel can be open and that local DOM storage is added
* to the panel.
*/
-TestSuite.prototype.testShowStoragePanel = function() {
- var test = this;
- this.addSniffer(WebInspector.panels.storage, 'addDOMStorage',
- function(storage) {
- var orig = storage.getEntries;
- storage.getEntries = function(callback) {
- orig.call(this, function(entries) {
- callback(entries);
- test.releaseControl();
- });
- };
- try {
- WebInspector.currentPanel.selectDOMStorage(storage.id);
- storage.getEntries = orig;
- } catch (e) {
- test.fail('Exception in selectDOMStorage: ' + e);
- }
- });
- this.showPanel('storage');
-
- // Access localStorage so that it's pushed to the frontend.
- this.evaluateInConsole_(
- 'setTimeout("localStorage.x = 10" , 0)',
- function(resultText) {
- test.assertTrue(!isNaN(resultText),
- 'Failed to get timer id: ' + resultText);
- });
-
- // Wait until DOM storage is added to the panel.
- this.takeControl();
+TestSuite.prototype.testShowStoragePanel = function()
+{
+ var test = this;
+ this.addSniffer(WebInspector.panels.storage, "addDOMStorage",
+ function(storage) {
+ var orig = storage.getEntries;
+ storage.getEntries = function(callback) {
+ orig.call(this, function(entries) {
+ callback(entries);
+ test.releaseControl();
+ });
+ };
+ try {
+ WebInspector.currentPanel.selectDOMStorage(storage.id);
+ storage.getEntries = orig;
+ } catch (e) {
+ test.fail("Exception in selectDOMStorage: " + e);
+ }
+ });
+ this.showPanel("storage");
+
+ // Access localStorage so that it's pushed to the frontend.
+ this.evaluateInConsole_(
+ 'setTimeout("localStorage.x = 10" , 0)',
+ function(resultText) {
+ test.assertTrue(!isNaN(resultText), "Failed to get timer id: " + resultText);
+ });
+
+ // Wait until DOM storage is added to the panel.
+ this.takeControl();
};
@@ -1892,14 +1838,13 @@ var uiTests = {};
/**
* Run each test from the test suit on a fresh instance of the suite.
*/
-uiTests.runAllTests = function() {
- // For debugging purposes.
- for (var name in TestSuite.prototype) {
- if (name.substring(0, 4) == 'test' &&
- typeof TestSuite.prototype[name] == 'function') {
- uiTests.runTest(name);
+uiTests.runAllTests = function()
+{
+ // For debugging purposes.
+ for (var name in TestSuite.prototype) {
+ if (name.substring(0, 4) === "test" && typeof TestSuite.prototype[name] === "function")
+ uiTests.runTest(name);
}
- }
};
@@ -1907,8 +1852,9 @@ uiTests.runAllTests = function() {
* Run specified test on a fresh instance of the test suite.
* @param {string} name Name of a test method from TestSuite class.
*/
-uiTests.runTest = function(name) {
- new TestSuite().runTest(name);
+uiTests.runTest = function(name)
+{
+ new TestSuite().runTest(name);
};