Bug 1408929 - Rename and enable browser_webconsole_completion.js in the new console frontend; r=jdescottes. draft
authorNicolas Chevobbe <nchevobbe@mozilla.com>
Fri, 17 Nov 2017 12:14:44 +0100
changeset 699750 57020fe28c5b0dd215c2aa7fd6fd6f61a65eaa74
parent 699617 a77c628829b389ed6ac608eadc88b09eb5115bef
child 740707 552e8056202f46dfbf9006549f2df3f2e7296412
push id89657
push userbmo:nchevobbe@mozilla.com
push dateFri, 17 Nov 2017 16:42:44 +0000
reviewersjdescottes
bugs1408929
milestone59.0a1
Bug 1408929 - Rename and enable browser_webconsole_completion.js in the new console frontend; r=jdescottes. MozReview-Commit-ID: ICu5aJViiW3
devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_completion.js
devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_completion.js
devtools/client/webconsole/new-console-output/test/mochitest/head.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini
@@ -204,16 +204,17 @@ skip-if = true #	Bug 1403188
 [browser_jsterm_autocomplete_helpers.js]
 [browser_jsterm_autocomplete_in_chrome_tab.js]
 [browser_jsterm_autocomplete_in_debugger_stackframe.js]
 [browser_jsterm_autocomplete_inside_text.js]
 [browser_jsterm_autocomplete_nav_and_tab_key.js]
 [browser_jsterm_autocomplete_return_key_no_selection.js]
 [browser_jsterm_autocomplete_return_key.js]
 [browser_jsterm_autocomplete-properties-with-non-alphanumeric-names.js]
+[browser_jsterm_completion.js]
 [browser_jsterm_copy_command.js]
 [browser_jsterm_dollar.js]
 [browser_jsterm_history_persist.js]
 [browser_jsterm_inspect.js]
 [browser_jsterm_no_autocompletion_on_defined_variables.js]
 [browser_jsterm_no_input_and_tab_key_pressed.js]
 [browser_jsterm_no_input_change_and_tab_key_pressed.js]
 [browser_jsterm_popup_close_on_tab_switch.js]
@@ -230,18 +231,16 @@ tags = mcb
 [browser_webconsole_cd_iframe.js]
 [browser_webconsole_certificate_messages.js]
 [browser_webconsole_click_function_to_source.js]
 skip-if = true #	Bug 1406038
 [browser_webconsole_clickable_urls.js]
 [browser_webconsole_closing_after_completion.js]
 [browser_webconsole_closure_inspection.js]
 skip-if = true #	Bug 1405250
-[browser_webconsole_completion.js]
-skip-if = true # Bug 1408929
 [browser_webconsole_console_api_iframe.js]
 skip-if = true # Bug 1408930
 [browser_webconsole_console_dir.js]
 [browser_webconsole_console_dir_uninspectable.js]
 [browser_webconsole_console_group.js]
 [browser_webconsole_console_logging_workers_api.js]
 skip-if = true # Bug 1405252
 [browser_webconsole_console_table.js]
rename from devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_completion.js
rename to devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_completion.js
--- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_completion.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_completion.js
@@ -4,103 +4,69 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 // Tests that code completion works properly.
 
 "use strict";
 
 const TEST_URI = "data:text/html;charset=utf8,<p>test code completion";
 
-var jsterm;
-
-add_task(function* () {
-  yield loadTab(TEST_URI);
-
-  let hud = yield openConsole();
-
-  jsterm = hud.jsterm;
+add_task(async function () {
+  let {jsterm} = await openNewTabAndConsole(TEST_URI);
   let input = jsterm.inputNode;
 
   // Test typing 'docu'.
-  input.value = "docu";
-  input.setSelectionRange(4, 4);
-  yield complete(jsterm.COMPLETE_HINT_ONLY);
-
+  await jstermSetValueAndComplete(jsterm, "docu");
   is(input.value, "docu", "'docu' completion (input.value)");
   is(jsterm.completeNode.value, "    ment", "'docu' completion (completeNode)");
 
   // Test typing 'docu' and press tab.
-  input.value = "docu";
-  input.setSelectionRange(4, 4);
-  yield complete(jsterm.COMPLETE_FORWARD);
-
+  await jstermSetValueAndComplete(jsterm, "docu", undefined, jsterm.COMPLETE_FORWARD);
   is(input.value, "document", "'docu' tab completion");
   is(input.selectionStart, 8, "start selection is alright");
   is(input.selectionEnd, 8, "end selection is alright");
   is(jsterm.completeNode.value.replace(/ /g, ""), "", "'docu' completed");
 
   // Test typing 'window.Ob' and press tab.  Just 'window.O' is
   // ambiguous: could be window.Object, window.Option, etc.
-  input.value = "window.Ob";
-  input.setSelectionRange(9, 9);
-  yield complete(jsterm.COMPLETE_FORWARD);
-
+  await jstermSetValueAndComplete(jsterm, "window.Ob", undefined, jsterm.COMPLETE_FORWARD);
   is(input.value, "window.Object", "'window.Ob' tab completion");
 
   // Test typing 'document.getElem'.
-  input.value = "document.getElem";
-  input.setSelectionRange(16, 16);
-  yield complete(jsterm.COMPLETE_FORWARD);
-
+  await jstermSetValueAndComplete(
+    jsterm, "document.getElem", undefined, jsterm.COMPLETE_FORWARD);
   is(input.value, "document.getElem", "'document.getElem' completion");
   is(jsterm.completeNode.value, "                entsByTagNameNS",
      "'document.getElem' completion");
 
   // Test pressing tab another time.
-  yield jsterm.complete(jsterm.COMPLETE_FORWARD);
-
+  await jsterm.complete(jsterm.COMPLETE_FORWARD);
   is(input.value, "document.getElem", "'document.getElem' completion");
   is(jsterm.completeNode.value, "                entsByTagName",
      "'document.getElem' another tab completion");
 
   // Test pressing shift_tab.
-  complete(jsterm.COMPLETE_BACKWARD);
-
+  await jstermComplete(jsterm, jsterm.COMPLETE_BACKWARD);
   is(input.value, "document.getElem", "'document.getElem' untab completion");
   is(jsterm.completeNode.value, "                entsByTagNameNS",
      "'document.getElem' completion");
 
   jsterm.clearOutput();
 
-  input.value = "docu";
-  yield complete(jsterm.COMPLETE_HINT_ONLY);
+  await jstermSetValueAndComplete(jsterm, "docu");
+  is(jsterm.completeNode.value, "    ment", "'docu' completion");
 
-  is(jsterm.completeNode.value, "    ment", "'docu' completion");
-  yield jsterm.execute();
+  await jsterm.execute();
   is(jsterm.completeNode.value, "", "clear completion on execute()");
 
   // Test multi-line completion works
-  input.value = "console.log('one');\nconsol";
-  yield complete(jsterm.COMPLETE_HINT_ONLY);
-
+  await jstermSetValueAndComplete(jsterm, "console.log('one');\nconsol");
   is(jsterm.completeNode.value, "                   \n      e",
      "multi-line completion");
 
   // Test non-object autocompletion.
-  input.value = "Object.name.sl";
-  yield complete(jsterm.COMPLETE_HINT_ONLY);
-
+  await jstermSetValueAndComplete(jsterm, "Object.name.sl");
   is(jsterm.completeNode.value, "              ice", "non-object completion");
 
   // Test string literal autocompletion.
-  input.value = "'Asimov'.sl";
-  yield complete(jsterm.COMPLETE_HINT_ONLY);
-
+  await jstermSetValueAndComplete(jsterm, "'Asimov'.sl");
   is(jsterm.completeNode.value, "           ice", "string literal completion");
-
-  jsterm = null;
 });
-
-function complete(type) {
-  let updated = jsterm.once("autocomplete-updated");
-  jsterm.complete(type);
-  return updated;
-}
--- a/devtools/client/webconsole/new-console-output/test/mochitest/head.js
+++ b/devtools/client/webconsole/new-console-output/test/mochitest/head.js
@@ -294,26 +294,50 @@ function hasFocus(node) {
 /**
  * Set the value of the JsTerm and its caret position, and fire a completion request.
  *
  * @param {JsTerm} jsterm
  * @param {String} value : The value to set the jsterm to.
  * @param {Integer} caretIndexOffset : A number that will be added to value.length
  *                  when setting the caret. A negative number will place the caret
  *                  in (end - offset) position. Default to 0 (caret set at the end)
+ * @param {Integer} completionType : One of the following jsterm property
+ *                   - COMPLETE_FORWARD
+ *                   - COMPLETE_BACKWARD
+ *                   - COMPLETE_HINT_ONLY
+ *                   - COMPLETE_PAGEUP
+ *                   - COMPLETE_PAGEDOWN
+ *                  Will default to COMPLETE_HINT_ONLY.
  * @returns {Promise} resolves when the jsterm is completed.
  */
-function jstermSetValueAndComplete(jsterm, value, caretIndexOffset = 0) {
+function jstermSetValueAndComplete(jsterm, value, caretIndexOffset = 0, completionType) {
   const {inputNode} = jsterm;
   inputNode.value = value;
   let index = value.length + caretIndexOffset;
   inputNode.setSelectionRange(index, index);
 
+  return jstermComplete(jsterm, completionType);
+}
+
+/**
+ * Fires a completion request on the jsterm with the specified completionType
+ *
+ * @param {JsTerm} jsterm
+ * @param {Integer} completionType : One of the following jsterm property
+ *                   - COMPLETE_FORWARD
+ *                   - COMPLETE_BACKWARD
+ *                   - COMPLETE_HINT_ONLY
+ *                   - COMPLETE_PAGEUP
+ *                   - COMPLETE_PAGEDOWN
+ *                  Will default to COMPLETE_HINT_ONLY.
+ * @returns {Promise} resolves when the jsterm is completed.
+ */
+function jstermComplete(jsterm, completionType = jsterm.COMPLETE_HINT_ONLY) {
   const updated = jsterm.once("autocomplete-updated");
-  jsterm.complete(jsterm.COMPLETE_HINT_ONLY);
+  jsterm.complete(completionType);
   return updated;
 }
 
 /**
  * Open the JavaScript debugger.
  *
  * @param object options
  *        Options for opening the debugger: