Bug 1319049 - fix RegExp previewer for worker debugging;r=ochameau
MozReview-Commit-ID: D8hRGV0MWoZ
--- a/devtools/client/debugger/test/mochitest/browser_dbg_worker-console-04.js
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_worker-console-04.js
@@ -1,23 +1,28 @@
-// Check that the date previewer works in the console of a worker debugger.
+// Check that the date and regexp previewers work in the console of a worker debugger.
"use strict";
const TAB_URL = EXAMPLE_URL + "doc_WorkerActor.attachThread-tab.html";
const WORKER_URL = "code_WorkerActor.attachThread-worker.js";
add_task(function* testPausedByConsole() {
let {client, tab, workerClient, toolbox} =
yield initWorkerDebugger(TAB_URL, WORKER_URL);
info("Check Date objects can be used in the console");
let jsterm = yield getSplitConsole(toolbox);
let executed = yield jsterm.execute("new Date(0)");
ok(executed.textContent.includes("1970-01-01T00:00:00.000Z"),
"Text for message appeared correct");
+ info("Check RegExp objects can be used in the console");
+ executed = yield jsterm.execute("new RegExp('.*')");
+ ok(executed.textContent.includes("/.*/"),
+ "Text for message appeared correct");
+
terminateWorkerInTab(tab, WORKER_URL);
yield waitForWorkerClose(workerClient);
yield gDevTools.closeToolbox(TargetFactory.forWorker(workerClient));
yield close(client);
yield removeTab(tab);
});
--- a/devtools/client/webconsole/test/browser.ini
+++ b/devtools/client/webconsole/test/browser.ini
@@ -79,17 +79,16 @@ support-files =
test-console.html
test-console-workers.html
test-console-table.html
test-console-output-02.html
test-console-output-03.html
test-console-output-04.html
test-console-output-dom-elements.html
test-console-output-events.html
- test-console-output-regexp.html
test-console-column.html
test-consoleiframes.html
test-console-trace-async.html
test-certificate-messages.html
test-cu-reporterror.js
test-data.json
test-data.json^headers^
test-duplicate-error.html
--- a/devtools/client/webconsole/test/browser_webconsole_output_regexp.js
+++ b/devtools/client/webconsole/test/browser_webconsole_output_regexp.js
@@ -1,26 +1,25 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
-// Test the webconsole output for various types of objects.
+// Test the webconsole output for a regexp object.
"use strict";
-const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
- "test/test-console-output-regexp.html";
+const TEST_URI = "data:text/html;charset=utf8,<p>test regexp output";
var inputTests = [
// 0
{
input: "/foo/igym",
output: "/foo/gimy",
- printOutput: "Error: source called",
+ printOutput: "/foo/gimy",
inspectable: true,
},
];
function test() {
requestLongerTimeout(2);
Task.spawn(function* () {
let {tab} = yield loadTab(TEST_URI);
deleted file mode 100644
--- a/devtools/client/webconsole/test/test-console-output-regexp.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE HTML>
-<html dir="ltr" lang="en-US">
-<head>
- <meta charset="utf-8">
- <title>Test the web console output for RegExp</title>
- <!--
- - Any copyright is dedicated to the Public Domain.
- - http://creativecommons.org/publicdomain/zero/1.0/
- -->
-</head>
-<body>
- <p>hello world!</p>
-
- <script type="text/javascript">
-Object.defineProperty(RegExp.prototype, "flags", {
- get: function() { throw Error("flags called"); }
-})
-Object.defineProperty(RegExp.prototype, "source", {
- get: function() { throw Error("source called"); },
-})
- </script>
-</body>
-</html>
--- a/devtools/server/actors/object.js
+++ b/devtools/server/actors/object.js
@@ -1153,17 +1153,21 @@ DebuggerServer.ObjectActorPreviewers = {
};
}
}
return true;
}],
RegExp: [function ({obj, hooks}, grip) {
- let str = RegExp.prototype.toString.call(obj.unsafeDereference());
+ let str = DevToolsUtils.callPropertyOnObject(obj, "toString");
+ if (typeof str != "string") {
+ return false;
+ }
+
grip.displayString = hooks.createValueGrip(str);
return true;
}],
Date: [function ({obj, hooks}, grip) {
let time = DevToolsUtils.callPropertyOnObject(obj, "getTime");
if (typeof time != "number") {
return false;