summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/browser_console_history_persist.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/webconsole/test/browser_console_history_persist.js')
-rw-r--r--devtools/client/webconsole/test/browser_console_history_persist.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser_console_history_persist.js b/devtools/client/webconsole/test/browser_console_history_persist.js
new file mode 100644
index 000000000..61c4cbf4d
--- /dev/null
+++ b/devtools/client/webconsole/test/browser_console_history_persist.js
@@ -0,0 +1,119 @@
+/* -*- 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 that console command input is persisted across toolbox loads.
+// See Bug 943306.
+
+"use strict";
+
+requestLongerTimeout(2);
+
+const TEST_URI = "data:text/html;charset=utf-8,Web Console test for " +
+ "persisting history - bug 943306";
+const INPUT_HISTORY_COUNT = 10;
+
+add_task(function* () {
+ info("Setting custom input history pref to " + INPUT_HISTORY_COUNT);
+ Services.prefs.setIntPref("devtools.webconsole.inputHistoryCount",
+ INPUT_HISTORY_COUNT);
+
+ // First tab: run a bunch of commands and then make sure that you can
+ // navigate through their history.
+ yield loadTab(TEST_URI);
+ let hud1 = yield openConsole();
+ is(JSON.stringify(hud1.jsterm.history), "[]",
+ "No history on first tab initially");
+ yield populateInputHistory(hud1);
+ is(JSON.stringify(hud1.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9"]',
+ "First tab has populated history");
+
+ // Second tab: Just make sure that you can navigate through the history
+ // generated by the first tab.
+ yield loadTab(TEST_URI);
+ let hud2 = yield openConsole();
+ is(JSON.stringify(hud2.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9"]',
+ "Second tab has populated history");
+ yield testNaviatingHistoryInUI(hud2);
+ is(JSON.stringify(hud2.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9",""]',
+ "An empty entry has been added in the second tab due to history perusal");
+
+ // Third tab: Should have the same history as first tab, but if we run a
+ // command, then the history of the first and second shouldn't be affected
+ yield loadTab(TEST_URI);
+ let hud3 = yield openConsole();
+ is(JSON.stringify(hud3.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9"]',
+ "Third tab has populated history");
+
+ // Set input value separately from execute so UP arrow accurately navigates
+ // history.
+ hud3.jsterm.setInputValue('"hello from third tab"');
+ hud3.jsterm.execute();
+
+ is(JSON.stringify(hud1.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9"]',
+ "First tab history hasn't changed due to command in third tab");
+ is(JSON.stringify(hud2.jsterm.history),
+ '["0","1","2","3","4","5","6","7","8","9",""]',
+ "Second tab history hasn't changed due to command in third tab");
+ is(JSON.stringify(hud3.jsterm.history),
+ '["1","2","3","4","5","6","7","8","9","\\"hello from third tab\\""]',
+ "Third tab has updated history (and purged the first result) after " +
+ "running a command");
+
+ // Fourth tab: Should have the latest command from the third tab, followed
+ // by the rest of the history from the first tab.
+ yield loadTab(TEST_URI);
+ let hud4 = yield openConsole();
+ is(JSON.stringify(hud4.jsterm.history),
+ '["1","2","3","4","5","6","7","8","9","\\"hello from third tab\\""]',
+ "Fourth tab has most recent history");
+
+ yield hud4.jsterm.clearHistory();
+ is(JSON.stringify(hud4.jsterm.history), "[]",
+ "Clearing history for a tab works");
+
+ yield loadTab(TEST_URI);
+ let hud5 = yield openConsole();
+ is(JSON.stringify(hud5.jsterm.history), "[]",
+ "Clearing history carries over to a new tab");
+
+ info("Clearing custom input history pref");
+ Services.prefs.clearUserPref("devtools.webconsole.inputHistoryCount");
+});
+
+/**
+ * Populate the history by running the following commands:
+ * [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ */
+function* populateInputHistory(hud) {
+ let jsterm = hud.jsterm;
+
+ for (let i = 0; i < INPUT_HISTORY_COUNT; i++) {
+ // Set input value separately from execute so UP arrow accurately navigates
+ // history.
+ jsterm.setInputValue(i);
+ jsterm.execute();
+ }
+}
+
+/**
+ * Check pressing up results in history traversal like:
+ * [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
+ */
+function* testNaviatingHistoryInUI(hud) {
+ let jsterm = hud.jsterm;
+ jsterm.focus();
+
+ // Count backwards from original input and make sure that pressing up
+ // restores this.
+ for (let i = INPUT_HISTORY_COUNT - 1; i >= 0; i--) {
+ EventUtils.synthesizeKey("VK_UP", {});
+ is(jsterm.getInputValue(), i, "Pressing up restores last input");
+ }
+}