/* vim: set ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const AUTOCOMPLETION_PREF = "devtools.editor.autocomplete";

// Test to make sure that different autocompletion modes can be created,
// switched, and destroyed.  This doesn't test the actual autocompletion
// popups, only their integration with the editor.
function test() {
  waitForExplicitFinish();
  setup((ed, win) => {
    let edWin = ed.container.contentWindow.wrappedJSObject;
    testJS(ed, edWin);
    testCSS(ed, edWin);
    testPref(ed, edWin);
    teardown(ed, win);
  });
}

function testJS(ed, win) {
  ok(!ed.getOption("autocomplete"), "Autocompletion is not set");
  ok(!win.tern, "Tern is not defined on the window");

  ed.setMode(Editor.modes.js);
  ed.setOption("autocomplete", true);

  ok(ed.getOption("autocomplete"), "Autocompletion is set");
  ok(win.tern, "Tern is defined on the window");
}

function testCSS(ed, win) {
  ok(ed.getOption("autocomplete"), "Autocompletion is set");
  ok(win.tern, "Tern is currently defined on the window");

  ed.setMode(Editor.modes.css);
  ed.setOption("autocomplete", true);

  ok(ed.getOption("autocomplete"), "Autocompletion is still set");
  ok(!win.tern, "Tern is no longer defined on the window");
}

function testPref(ed, win) {
  ed.setMode(Editor.modes.js);
  ed.setOption("autocomplete", true);

  ok(ed.getOption("autocomplete"), "Autocompletion is set");
  ok(win.tern, "Tern is defined on the window");

  info("Preffing autocompletion off");
  Services.prefs.setBoolPref(AUTOCOMPLETION_PREF, false);

  ok(ed.getOption("autocomplete"), "Autocompletion is still set");
  ok(!win.tern, "Tern is no longer defined on the window");

  Services.prefs.clearUserPref(AUTOCOMPLETION_PREF);
}
