diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js')
-rw-r--r-- | devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js b/devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js new file mode 100644 index 000000000..bdd4f7179 --- /dev/null +++ b/devtools/client/webconsole/test/browser_console_copy_entire_message_context_menu.js @@ -0,0 +1,97 @@ +/* -*- 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/ */ + +/* globals goDoCommand */ + +"use strict"; + +// Test copying of the entire console message when right-clicked +// with no other text selected. See Bug 1100562. + +add_task(function* () { + let hud; + let outputNode; + let contextMenu; + + const TEST_URI = "http://example.com/browser/devtools/client/webconsole/test/test-console.html"; + + const { tab, browser } = yield loadTab(TEST_URI); + hud = yield openConsole(tab); + outputNode = hud.outputNode; + contextMenu = hud.iframeWindow.document.getElementById("output-contextmenu"); + + registerCleanupFunction(() => { + hud = outputNode = contextMenu = null; + }); + + hud.jsterm.clearOutput(); + + yield ContentTask.spawn(browser, {}, function* () { + let button = content.document.getElementById("testTrace"); + button.click(); + }); + + let results = yield waitForMessages({ + webconsole: hud, + messages: [ + { + text: "bug 1100562", + category: CATEGORY_WEBDEV, + severity: SEVERITY_LOG, + lines: 1, + }, + { + name: "console.trace output", + consoleTrace: true, + lines: 3, + }, + ] + }); + + outputNode.focus(); + + for (let result of results) { + let message = [...result.matched][0]; + + yield waitForContextMenu(contextMenu, message, () => { + let copyItem = contextMenu.querySelector("#cMenu_copy"); + copyItem.doCommand(); + + let controller = top.document.commandDispatcher + .getControllerForCommand("cmd_copy"); + is(controller.isCommandEnabled("cmd_copy"), true, "cmd_copy is enabled"); + }); + + let clipboardText; + + yield waitForClipboardPromise( + () => goDoCommand("cmd_copy"), + (str) => { + clipboardText = str; + return message.textContent == clipboardText; + } + ); + + ok(clipboardText, "Clipboard text was found and saved"); + + let lines = clipboardText.split("\n"); + ok(lines.length > 0, "There is at least one newline in the message"); + is(lines.pop(), "", "There is a newline at the end"); + is(lines.length, result.lines, `There are ${result.lines} lines in the message`); + + // Test the first line for "timestamp message repeat file:line" + let firstLine = lines.shift(); + ok(/^[\d:.]+ .+ \d+ .+:\d+$/.test(firstLine), + "The message's first line has the right format"); + + // Test the remaining lines (stack trace) for "TABfunctionName sourceURL:line:col" + for (let line of lines) { + ok(/^\t.+ .+:\d+:\d+$/.test(line), "The stack trace line has the right format"); + } + } + + yield closeConsole(tab); + yield finishTest(); +}); |