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

/**
 * Test breaking in code and jumping to the debugger before
 * the debugger UI has been initialized.
 */

const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";

function test() {
  Task.spawn(function*() {
    const tab = yield getTab(TAB_URL);
    const target = TargetFactory.forTab(tab);
    const toolbox = yield gDevTools.showToolbox(target, "webconsole");

    is(toolbox.currentToolId, "webconsole", "Console is the current panel");

    toolbox.target.on('thread-paused', Task.async(function*() {
      // Wait for the toolbox to handle the event and switch tools
      yield waitForTick();

      is(toolbox.currentToolId, "jsdebugger", "Debugger is the current panel");

      // Wait until it's actually fully loaded
      yield toolbox.loadTool("jsdebugger");

      const panel = toolbox.getCurrentPanel();
      const queries = panel.panelWin.require('./content/queries');
      const getState = panel.panelWin.DebuggerController.getState;

      is(panel.panelWin.gThreadClient.state, "paused",
         "Thread is still paused");

      yield waitForSourceAndCaret(panel, "debugger-statement.html", 16);
      is(queries.getSelectedSource(getState()).url, TAB_URL,
         "Selected source is the current tab url");
      is(queries.getSelectedSourceOpts(getState()).line, 16,
         "Line 16 is highlighted in the editor");

      resumeDebuggerThenCloseAndFinish(panel);
    }));

    callInTab(tab, "runDebuggerStatement");
  });
};
