/* -*- 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/ */

// Check that the variables view sidebar can be closed by pressing Escape in the
// web console.

"use strict";

const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
                 "test/test-eval-in-stackframe.html";

function test() {
  let hud;

  Task.spawn(runner).then(finishTest);

  function* runner() {
    let {tab} = yield loadTab(TEST_URI);
    hud = yield openConsole(tab);
    let jsterm = hud.jsterm;
    let result;
    let vview;
    let msg;

    yield openSidebar("fooObj",
                      'testProp: "testValue"',
                      { name: "testProp", value: "testValue" });

    let prop = result.matchedProp;
    ok(prop, "matched the |testProp| property in the variables view");

    vview.window.focus();

    let sidebarClosed = jsterm.once("sidebar-closed");
    EventUtils.synthesizeKey("VK_ESCAPE", {});
    yield sidebarClosed;

    jsterm.clearOutput();

    yield openSidebar("window.location",
                      "Location \u2192 http://example.com/browser/",
                      { name: "host", value: "example.com" });

    vview.window.focus();

    msg.scrollIntoView();
    sidebarClosed = jsterm.once("sidebar-closed");
    EventUtils.synthesizeKey("VK_ESCAPE", {});
    yield sidebarClosed;

    function* openSidebar(objName, expectedText, expectedObj) {
      msg = yield jsterm.execute(objName);
      ok(msg, "output message found");

      let anchor = msg.querySelector("a");
      let body = msg.querySelector(".message-body");
      ok(anchor, "object anchor");
      ok(body, "message body");
      ok(body.textContent.includes(expectedText), "message text check");

      msg.scrollIntoView();
      yield EventUtils.synthesizeMouse(anchor, 2, 2, {}, hud.iframeWindow);

      let vviewVar = yield jsterm.once("variablesview-fetched");
      vview = vviewVar._variablesView;
      ok(vview, "variables view object exists");

      [result] = yield findVariableViewProperties(vviewVar, [
        expectedObj,
      ], { webconsole: hud });
    }
  }
}
