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

/**
 * Hitting ESC to open the split console when paused on reload should not stop
 * the pending navigation.
 */

function test() {
  Task.spawn(runTests);
}

function* runTests() {
  let TAB_URL = EXAMPLE_URL + "doc_split-console-paused-reload.html";
  let options = {
    source: TAB_URL,
    line: 1
  };
  let [,, panel] = yield initDebugger(TAB_URL, options);
  let dbgWin = panel.panelWin;
  let sources = dbgWin.DebuggerView.Sources;
  let frames = dbgWin.DebuggerView.StackFrames;
  let toolbox = gDevTools.getToolbox(panel.target);

  yield panel.addBreakpoint({ actor: getSourceActor(sources, TAB_URL), line: 16 });
  info("Breakpoint was set.");
  dbgWin.DebuggerController._target.activeTab.reload();
  info("Page reloaded.");
  yield waitForSourceAndCaretAndScopes(panel, ".html", 16);
  yield ensureThreadClientState(panel, "paused");
  info("Breakpoint was hit.");
  EventUtils.sendMouseEvent({ type: "mousedown" },
    frames.selectedItem.target,
    dbgWin);
  info("The breadcrumb received focus.");

  // This is the meat of the test.
  let jsterm = yield getSplitConsole(toolbox);

  is(dbgWin.gThreadClient.state, "paused", "Execution is still paused.");

  let dbgFrameConsoleEvalResult = yield jsterm.execute("privateVar");

  is(
    dbgFrameConsoleEvalResult.querySelector(".console-string").textContent,
    '"privateVarValue"',
    "Got the expected split console result on paused debugger"
  );

  yield dbgWin.gThreadClient.resume();

  is(dbgWin.gThreadClient.state, "attached", "Execution is resumed.");

  // Get the last evaluation result adopted by the new debugger.
  let mainTargetConsoleEvalResult = yield jsterm.execute("$_");

  is(
    mainTargetConsoleEvalResult.querySelector(".console-string").textContent,
    '"privateVarValue"',
    "Got the expected split console log on $_ executed on resumed debugger"
  );

  yield closeDebuggerAndFinish(panel);
}
