зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1005870 - Adding a copy() command to the console;r=robcee
This commit is contained in:
Родитель
58b9ea190d
Коммит
cd68187d3f
|
@ -144,6 +144,7 @@ skip-if = buildapp == 'mulet' || e10s # Bug 1042253 - webconsole e10s tests (exp
|
||||||
[browser_console_clear_on_reload.js]
|
[browser_console_clear_on_reload.js]
|
||||||
[browser_console_click_focus.js]
|
[browser_console_click_focus.js]
|
||||||
[browser_console_consolejsm_output.js]
|
[browser_console_consolejsm_output.js]
|
||||||
|
[browser_console_copy_command.js]
|
||||||
[browser_console_dead_objects.js]
|
[browser_console_dead_objects.js]
|
||||||
skip-if = e10s # Bug 1042253 - webconsole tests disabled with e10s
|
skip-if = e10s # Bug 1042253 - webconsole tests disabled with e10s
|
||||||
[browser_console_copy_entire_message_context_menu.js]
|
[browser_console_copy_entire_message_context_menu.js]
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
// Tests that the `copy` console helper works as intended.
|
||||||
|
|
||||||
|
let gWebConsole, gJSTerm;
|
||||||
|
|
||||||
|
let TEXT = "Lorem ipsum dolor sit amet, consectetur adipisicing " +
|
||||||
|
"elit, sed do eiusmod tempor incididunt ut labore et dolore magna " +
|
||||||
|
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco " +
|
||||||
|
"laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure " +
|
||||||
|
"dolor in reprehenderit in voluptate velit esse cillum dolore eu " +
|
||||||
|
"fugiat nulla pariatur. Excepteur sint occaecat cupidatat non " +
|
||||||
|
"proident, sunt in culpa qui officia deserunt mollit anim id est laborum." +
|
||||||
|
new Date();
|
||||||
|
|
||||||
|
let ID = "select-me";
|
||||||
|
|
||||||
|
add_task(function* init() {
|
||||||
|
yield loadTab("data:text/html;charset=utf-8," +
|
||||||
|
"<body>" +
|
||||||
|
" <div>" +
|
||||||
|
" <h1>Testing copy command</h1>" +
|
||||||
|
" <p>This is some example text</p>" +
|
||||||
|
" <p id='select-me'>"+TEXT+"</p>" +
|
||||||
|
" </div>" +
|
||||||
|
" <div><p></p></div>" +
|
||||||
|
"</body>");
|
||||||
|
|
||||||
|
gWebConsole = yield openConsole();
|
||||||
|
gJSTerm = gWebConsole.jsterm;
|
||||||
|
});
|
||||||
|
|
||||||
|
add_task(function* test_copy() {
|
||||||
|
let RANDOM = Math.random();
|
||||||
|
let string = "Text: " + RANDOM;
|
||||||
|
let obj = {a: 1, b: "foo", c: RANDOM};
|
||||||
|
|
||||||
|
let samples = [[RANDOM, RANDOM],
|
||||||
|
[JSON.stringify(string), string],
|
||||||
|
[obj.toSource(), JSON.stringify(obj, null, " ")],
|
||||||
|
["$('#" + ID + "')", content.document.getElementById(ID).outerHTML]
|
||||||
|
];
|
||||||
|
for (let [source, reference] of samples) {
|
||||||
|
let deferredResult = promise.defer();
|
||||||
|
|
||||||
|
SimpleTest.waitForClipboard(
|
||||||
|
"" + reference,
|
||||||
|
() => {
|
||||||
|
let command = "copy(" + source + ")";
|
||||||
|
info("Attempting to copy: " + source);
|
||||||
|
info("Executing command: " + command);
|
||||||
|
gJSTerm.execute(command, msg => {
|
||||||
|
is(msg, undefined, "Command success: " + command);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
deferredResult.resolve,
|
||||||
|
deferredResult.reject);
|
||||||
|
|
||||||
|
yield deferredResult.promise;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
add_task(function* cleanup() {
|
||||||
|
gWebConsole = gJSTerm = null;
|
||||||
|
gBrowser.removeTab(gBrowser.selectedTab);
|
||||||
|
finishTest();
|
||||||
|
});
|
|
@ -3282,6 +3282,9 @@ JSTerm.prototype = {
|
||||||
case "help":
|
case "help":
|
||||||
this.hud.owner.openLink(HELP_URL);
|
this.hud.owner.openLink(HELP_URL);
|
||||||
break;
|
break;
|
||||||
|
case "copyValueToClipboard":
|
||||||
|
clipboardHelper.copyString(helperResult.value);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1752,6 +1752,33 @@ function JSTermHelpers(aOwner)
|
||||||
// inert by coercing it to a String.
|
// inert by coercing it to a String.
|
||||||
return String(Cu.waiveXrays(aValue));
|
return String(Cu.waiveXrays(aValue));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy the String representation of a value to the clipboard.
|
||||||
|
*
|
||||||
|
* @param any aValue
|
||||||
|
* A value you want to copy as a string.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
aOwner.sandbox.copy = function JSTH_copy(aValue)
|
||||||
|
{
|
||||||
|
let payload;
|
||||||
|
try {
|
||||||
|
if (aValue instanceof Ci.nsIDOMElement) {
|
||||||
|
payload = aValue.outerHTML;
|
||||||
|
} else if (typeof aValue == "string") {
|
||||||
|
payload = aValue;
|
||||||
|
} else {
|
||||||
|
payload = JSON.stringify(aValue, null, " ");
|
||||||
|
}
|
||||||
|
} catch (ex) {
|
||||||
|
payload = "/* " + ex + " */";
|
||||||
|
}
|
||||||
|
aOwner.helperResult = {
|
||||||
|
type: "copyValueToClipboard",
|
||||||
|
value: payload,
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
exports.JSTermHelpers = JSTermHelpers;
|
exports.JSTermHelpers = JSTermHelpers;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче