Blame devtools/client/sourceeditor/test/browser_editor_autocomplete_events.js

Packit f0b94e
/* vim: set ts=2 et sw=2 tw=80: */
Packit f0b94e
/* Any copyright is dedicated to the Public Domain.
Packit f0b94e
   http://creativecommons.org/publicdomain/zero/1.0/ */
Packit f0b94e
Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
const {InspectorFront} = require("devtools/shared/fronts/inspector");
Packit f0b94e
const TEST_URI = "data:text/html;charset=UTF-8,<html><body><bar></bar>" +
Packit f0b94e
                 "
<body></html>";
Packit f0b94e
Packit f0b94e
add_task(function* () {
Packit f0b94e
  yield addTab(TEST_URI);
Packit f0b94e
  yield runTests();
Packit f0b94e
});
Packit f0b94e
Packit f0b94e
function* runTests() {
Packit f0b94e
  let target = TargetFactory.forTab(gBrowser.selectedTab);
Packit f0b94e
  yield target.makeRemote();
Packit f0b94e
  let inspector = InspectorFront(target.client, target.form);
Packit f0b94e
  let walker = yield inspector.getWalker();
Packit f0b94e
  let {ed, win, edWin} = yield setup(null, {
Packit f0b94e
    autocomplete: true,
Packit f0b94e
    mode: Editor.modes.css,
Packit f0b94e
    autocompleteOpts: {walker: walker, cssProperties: getClientCssProperties()}
Packit f0b94e
  });
Packit f0b94e
  yield testMouse(ed, edWin);
Packit f0b94e
  yield testKeyboard(ed, edWin);
Packit f0b94e
  yield testKeyboardCycle(ed, edWin);
Packit f0b94e
  yield testKeyboardCycleForPrefixedString(ed, edWin);
Packit f0b94e
  yield testKeyboardCSSComma(ed, edWin);
Packit f0b94e
  teardown(ed, win);
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function* testKeyboard(ed, win) {
Packit f0b94e
  ed.focus();
Packit f0b94e
  ed.setText("b");
Packit f0b94e
  ed.setCursor({line: 1, ch: 1});
Packit f0b94e
Packit f0b94e
  let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
Packit f0b94e
Packit f0b94e
  let autocompleteKey =
Packit f0b94e
    Editor.keyFor("autocompletion", { noaccel: true }).toUpperCase();
Packit f0b94e
  EventUtils.synthesizeKey("VK_" + autocompleteKey, { ctrlKey: true }, win);
Packit f0b94e
Packit f0b94e
  info("Waiting for popup to be opened");
Packit f0b94e
  yield popupOpened;
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey("VK_RETURN", { }, win);
Packit f0b94e
  is(ed.getText(), "bar", "Editor text has been updated");
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function* testKeyboardCycle(ed, win) {
Packit f0b94e
  ed.focus();
Packit f0b94e
  ed.setText("b");
Packit f0b94e
  ed.setCursor({line: 1, ch: 1});
Packit f0b94e
Packit f0b94e
  let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
Packit f0b94e
Packit f0b94e
  let autocompleteKey =
Packit f0b94e
    Editor.keyFor("autocompletion", { noaccel: true }).toUpperCase();
Packit f0b94e
  EventUtils.synthesizeKey("VK_" + autocompleteKey, { ctrlKey: true }, win);
Packit f0b94e
Packit f0b94e
  info("Waiting for popup to be opened");
Packit f0b94e
  yield popupOpened;
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey("VK_DOWN", { }, win);
Packit f0b94e
  is(ed.getText(), "bar", "Editor text has been updated");
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey("VK_DOWN", { }, win);
Packit f0b94e
  is(ed.getText(), "body", "Editor text has been updated");
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey("VK_DOWN", { }, win);
Packit f0b94e
  is(ed.getText(), "#baz", "Editor text has been updated");
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function* testKeyboardCycleForPrefixedString(ed, win) {
Packit f0b94e
  ed.focus();
Packit f0b94e
  ed.setText("#b");
Packit f0b94e
  ed.setCursor({line: 1, ch: 2});
Packit f0b94e
Packit f0b94e
  let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
Packit f0b94e
Packit f0b94e
  let autocompleteKey =
Packit f0b94e
    Editor.keyFor("autocompletion", { noaccel: true }).toUpperCase();
Packit f0b94e
  EventUtils.synthesizeKey("VK_" + autocompleteKey, { ctrlKey: true }, win);
Packit f0b94e
Packit f0b94e
  info("Waiting for popup to be opened");
Packit f0b94e
  yield popupOpened;
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey("VK_DOWN", { }, win);
Packit f0b94e
  is(ed.getText(), "#baz", "Editor text has been updated");
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function* testKeyboardCSSComma(ed, win) {
Packit f0b94e
  ed.focus();
Packit f0b94e
  ed.setText("b");
Packit f0b94e
  ed.setCursor({line: 1, ch: 1});
Packit f0b94e
Packit f0b94e
  let isPopupOpened = false;
Packit f0b94e
  let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
Packit f0b94e
  popupOpened.then(() => {
Packit f0b94e
    isPopupOpened = true;
Packit f0b94e
  });
Packit f0b94e
Packit f0b94e
  EventUtils.synthesizeKey(",", { }, win);
Packit f0b94e
Packit f0b94e
  yield wait(500);
Packit f0b94e
Packit f0b94e
  ok(!isPopupOpened, "Autocompletion shouldn't be opened");
Packit f0b94e
}
Packit f0b94e
Packit f0b94e
function* testMouse(ed, win) {
Packit f0b94e
  ed.focus();
Packit f0b94e
  ed.setText("b");
Packit f0b94e
  ed.setCursor({line: 1, ch: 1});
Packit f0b94e
Packit f0b94e
  let popupOpened = ed.getAutocompletionPopup().once("popup-opened");
Packit f0b94e
Packit f0b94e
  let autocompleteKey =
Packit f0b94e
    Editor.keyFor("autocompletion", { noaccel: true }).toUpperCase();
Packit f0b94e
  EventUtils.synthesizeKey("VK_" + autocompleteKey, { ctrlKey: true }, win);
Packit f0b94e
Packit f0b94e
  info("Waiting for popup to be opened");
Packit f0b94e
  yield popupOpened;
Packit f0b94e
  ed.getAutocompletionPopup()._list.children[2].click();
Packit f0b94e
  is(ed.getText(), "#baz", "Editor text has been updated");
Packit f0b94e
}