/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Tests that the highlight command actually creates a highlighter

const TEST_PAGE = "data:text/html;charset=utf-8,<div></div>";

function test() {
  return Task.spawn(function* () {
    let options = yield helpers.openTab(TEST_PAGE);
    yield helpers.openToolbar(options);

    info("highlighting the body node");
    yield runCommand("highlight body", options);
    is(yield getHighlighterNumber(), 1, "The highlighter element exists for body");

    info("highlighting the div node");
    yield runCommand("highlight div", options);
    is(yield getHighlighterNumber(), 1, "The highlighter element exists for div");

    info("highlighting the body node again, asking to keep the div");
    yield runCommand("highlight body --keep", options);
    is(yield getHighlighterNumber(), 2, "2 highlighter elements have been created");

    info("unhighlighting all nodes");
    yield runCommand("unhighlight", options);
    is(yield getHighlighterNumber(), 0, "All highlighters have been removed");

    yield helpers.closeToolbar(options);
    yield helpers.closeTab(options);
  }).then(finish, helpers.handleError);
}

function getHighlighterNumber() {
  return ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
    const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
    return require("devtools/shared/gcli/commands/highlight").highlighters.length;
  });
}

function* runCommand(cmd, options) {
  yield helpers.audit(options, [{ setup: cmd, exec: {} }]);
}