/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const TWO_SPACES_CODE = [
  "/*",
  " * tricky comment block",
  " */",
  "div {",
  "  color: red;",
  "  background: blue;",
  "}",
  "     ",
  "span {",
  "  padding-left: 10px;",
  "}",
].join("\n");

const FOUR_SPACES_CODE = [
  "var obj = {",
  "    addNumbers: function() {",
  "        var x = 5;",
  "        var y = 18;",
  "        return x + y;",
  "    },",
  "   ",
  "    /*",
  "     * Do some stuff to two numbers",
  "     * ",
  "     * @param x",
  "     * @param y",
  "     * ",
  "     * @return the result of doing stuff",
  "     */",
  "    subtractNumbers: function(x, y) {",
  "        var x += 7;",
  "        var y += 18;",
  "        var result = x - y;",
  "        result %= 2;",
  "    }",
  "}",
].join("\n");

const TABS_CODE = [
  "/*",
  " * tricky comment block",
  " */",
  "div {",
  "\tcolor: red;",
  "\tbackground: blue;",
  "}",
  "",
  "span {",
  "\tpadding-left: 10px;",
  "}",
].join("\n");

const NONE_CODE = [
  "var x = 0;",
  "           // stray thing",
  "var y = 9;",
  "    ",
  "",
].join("\n");

async function test() {
  waitForExplicitFinish();

  const { ed, win } = await setup();
  is(ed.getOption("indentUnit"), 2, "2 spaces before code added");
  is(ed.getOption("indentWithTabs"), false, "spaces is default");

  ed.setText(NONE_CODE);
  is(ed.getOption("indentUnit"), 2, "2 spaces after un-detectable code");
  is(
    ed.getOption("indentWithTabs"),
    false,
    "spaces still set after un-detectable code"
  );

  ed.setText(FOUR_SPACES_CODE);
  is(ed.getOption("indentUnit"), 4, "4 spaces detected in 4 space code");
  is(ed.getOption("indentWithTabs"), false, "spaces detected in 4 space code");

  ed.setText(TWO_SPACES_CODE);
  is(ed.getOption("indentUnit"), 2, "2 spaces detected in 2 space code");
  is(ed.getOption("indentWithTabs"), false, "spaces detected in 2 space code");

  ed.setText(TABS_CODE);
  is(ed.getOption("indentUnit"), 2, "2 space indentation unit");
  is(
    ed.getOption("indentWithTabs"),
    true,
    "tabs detected in majority tabs code"
  );

  teardown(ed, win);
}
