/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

requestLongerTimeout(5);

/**
 * Whitelisting this test.
 * As part of bug 1077403, the leaking uncaught rejection should be fixed.
 */
thisTestLeaksUncaughtRejectionsAndShouldBeFixed("Error: Shader Editor is " +
  "still waiting for a WebGL context to be created.");

function performChecks(target) {
  return Task.spawn(function* () {
    let toolIds = gDevTools.getToolDefinitionArray()
                           .filter(def => def.isTargetSupported(target))
                           .map(def => def.id);

    let toolbox;
    for (let index = 0; index < toolIds.length; index++) {
      let toolId = toolIds[index];

      info("About to open " + index + "/" + toolId);
      toolbox = yield gDevTools.showToolbox(target, toolId);
      ok(toolbox, "toolbox exists for " + toolId);
      is(toolbox.currentToolId, toolId, "currentToolId should be " + toolId);

      let panel = toolbox.getCurrentPanel();
      ok(panel.isReady, toolId + " panel should be ready");
    }

    yield toolbox.destroy();
  });
}

function test() {
  Task.spawn(function* () {
    toggleAllTools(true);
    let tab = yield addTab("about:blank");
    let target = TargetFactory.forTab(tab);
    yield target.makeRemote();
    yield performChecks(target);
    gBrowser.removeCurrentTab();
    toggleAllTools(false);
    finish();
  }, console.error);
}
