browser_webconsole_completion.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
  2. /* Any copyright is dedicated to the Public Domain.
  3. * http://creativecommons.org/publicdomain/zero/1.0/ */
  4. // Tests that code completion works properly.
  5. "use strict";
  6. const TEST_URI = "data:text/html;charset=utf8,<p>test code completion";
  7. var jsterm;
  8. add_task(function* () {
  9. yield loadTab(TEST_URI);
  10. let hud = yield openConsole();
  11. jsterm = hud.jsterm;
  12. let input = jsterm.inputNode;
  13. // Test typing 'docu'.
  14. input.value = "docu";
  15. input.setSelectionRange(4, 4);
  16. yield complete(jsterm.COMPLETE_HINT_ONLY);
  17. is(input.value, "docu", "'docu' completion (input.value)");
  18. is(jsterm.completeNode.value, " ment", "'docu' completion (completeNode)");
  19. // Test typing 'docu' and press tab.
  20. input.value = "docu";
  21. input.setSelectionRange(4, 4);
  22. yield complete(jsterm.COMPLETE_FORWARD);
  23. is(input.value, "document", "'docu' tab completion");
  24. is(input.selectionStart, 8, "start selection is alright");
  25. is(input.selectionEnd, 8, "end selection is alright");
  26. is(jsterm.completeNode.value.replace(/ /g, ""), "", "'docu' completed");
  27. // Test typing 'window.Ob' and press tab. Just 'window.O' is
  28. // ambiguous: could be window.Object, window.Option, etc.
  29. input.value = "window.Ob";
  30. input.setSelectionRange(9, 9);
  31. yield complete(jsterm.COMPLETE_FORWARD);
  32. is(input.value, "window.Object", "'window.Ob' tab completion");
  33. // Test typing 'document.getElem'.
  34. input.value = "document.getElem";
  35. input.setSelectionRange(16, 16);
  36. yield complete(jsterm.COMPLETE_FORWARD);
  37. is(input.value, "document.getElem", "'document.getElem' completion");
  38. is(jsterm.completeNode.value, " entsByTagNameNS",
  39. "'document.getElem' completion");
  40. // Test pressing tab another time.
  41. yield jsterm.complete(jsterm.COMPLETE_FORWARD);
  42. is(input.value, "document.getElem", "'document.getElem' completion");
  43. is(jsterm.completeNode.value, " entsByTagName",
  44. "'document.getElem' another tab completion");
  45. // Test pressing shift_tab.
  46. complete(jsterm.COMPLETE_BACKWARD);
  47. is(input.value, "document.getElem", "'document.getElem' untab completion");
  48. is(jsterm.completeNode.value, " entsByTagNameNS",
  49. "'document.getElem' completion");
  50. jsterm.clearOutput();
  51. input.value = "docu";
  52. yield complete(jsterm.COMPLETE_HINT_ONLY);
  53. is(jsterm.completeNode.value, " ment", "'docu' completion");
  54. yield jsterm.execute();
  55. is(jsterm.completeNode.value, "", "clear completion on execute()");
  56. // Test multi-line completion works
  57. input.value = "console.log('one');\nconsol";
  58. yield complete(jsterm.COMPLETE_HINT_ONLY);
  59. is(jsterm.completeNode.value, " \n e",
  60. "multi-line completion");
  61. // Test non-object autocompletion.
  62. input.value = "Object.name.sl";
  63. yield complete(jsterm.COMPLETE_HINT_ONLY);
  64. is(jsterm.completeNode.value, " ice", "non-object completion");
  65. // Test string literal autocompletion.
  66. input.value = "'Asimov'.sl";
  67. yield complete(jsterm.COMPLETE_HINT_ONLY);
  68. is(jsterm.completeNode.value, " ice", "string literal completion");
  69. jsterm = null;
  70. });
  71. function complete(type) {
  72. let updated = jsterm.once("autocomplete-updated");
  73. jsterm.complete(type);
  74. return updated;
  75. }