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

/**
 * Tests that large files are treated differently in the debugger:
 *   1) No parsing to determine current symbol is attempted when
 *      starting a search
 */

const TAB_URL = EXAMPLE_URL + "doc_function-search.html";

function test() {
  let options = {
    source: EXAMPLE_URL + "code_function-search-01.js",
    line: 1
  };
  initDebugger(TAB_URL, options).then(([aTab, aDebuggee, aPanel]) => {
    const gTab = aTab;
    const gDebuggee = aDebuggee;
    const gPanel = aPanel;
    const gDebugger = gPanel.panelWin;

    const gEditor = gDebugger.DebuggerView.editor;
    const gSources = gDebugger.DebuggerView.Sources;
    const Filtering = gDebugger.DebuggerView.Filtering;

    // Setting max size so that code_function-search-01.js will be
    // considered a large file on first load
    gDebugger.DebuggerView.LARGE_FILE_SIZE = 1;

    function testLargeFile() {
      ok(gEditor.getText().length > gDebugger.DebuggerView.LARGE_FILE_SIZE,
         "First source is considered a large file.");
      is(gEditor.getMode().name, "javascript",
         "Editor is syntax highlighting.");
      ok(gEditor.getText().includes("First source!"),
         "Editor text contents appears to be correct.");

      // Press ctrl+f with the cursor in a token
      gEditor.focus();
      gEditor.setCursor({ line: 3, ch: 10});
      synthesizeKeyFromKeyTag(gDebugger.document.getElementById("tokenSearchKey"));
      is(Filtering._searchbox.value, "#",
        "Search box is NOT prefilled with current token");
    }

    function testSmallFile() {
      ok(gEditor.getText().length < gDebugger.DebuggerView.LARGE_FILE_SIZE,
         "Second source is considered a small file.");
      is(gEditor.getMode().name, "javascript",
         "Editor is syntax highlighting.");
      ok(gEditor.getText().includes("First source!"),
         "Editor text contents appears to be correct.");

      // Press ctrl+f with the cursor in a token
      gEditor.focus();
      gEditor.setCursor({ line: 3, ch: 10});
      synthesizeKeyFromKeyTag(gDebugger.document.getElementById("tokenSearchKey"));
      is(Filtering._searchbox.value, "#test",
        "Search box is prefilled with current token");
    }

    Task.spawn(function* () {
      yield testLargeFile();

      info("Making it appear as a small file and then reselecting 01.js");
      gDebugger.DebuggerView.LARGE_FILE_SIZE = 1000;
      gSources.selectedIndex = 1;
      yield waitForSourceShown(gPanel, "-02.js");
      gSources.selectedIndex = 0;
      yield waitForSourceShown(gPanel, "-01.js");

      yield testSmallFile();

      closeDebuggerAndFinish(gPanel);
    });
  });
}
