"use strict";

var helpers = require("../helpers");
var runMochaJSON = helpers.runMochaJSON;

describe("--timeout", function () {
  it("should allow human-readable string value", function (done) {
    runMochaJSON("options/slow-test", ["--timeout", "1s"], function (err, res) {
      if (err) {
        done(err);
        return;
      }
      expect(res, "to have failed")
        .and("to have passed test count", 1)
        .and("to have failed test count", 1);
      done();
    });
  });

  it("should allow numeric value", function (done) {
    runMochaJSON(
      "options/slow-test",
      ["--timeout", "1000"],
      function (err, res) {
        if (err) {
          done(err);
          return;
        }
        expect(res, "to have failed")
          .and("to have passed test count", 1)
          .and("to have failed test count", 1);
        done();
      },
    );
  });

  it("should allow multiple values", function (done) {
    var fixture = "options/slow-test";
    runMochaJSON(
      fixture,
      ["--timeout", "2s", "--timeout", "1000"],
      function (err, res) {
        if (err) {
          done(err);
          return;
        }
        expect(res, "to have failed")
          .and("to have passed test count", 1)
          .and("to have failed test count", 1);
        done();
      },
    );
  });

  it('should disable timeout with "--inspect"', function (done) {
    var fixture = "options/slow-test";
    runMochaJSON(
      fixture,
      ["--inspect", "--timeout", "200"],
      function (err, res) {
        if (err) {
          done(err);
          return;
        }
        expect(res, "to have passed").and("to have passed test count", 2);
        done();
      },
    );
  });

  it('should disable timeout with "-n inspect"', function (done) {
    var fixture = "options/slow-test";
    runMochaJSON(
      fixture,
      ["-n", "inspect", "--timeout", "200"],
      function (err, res) {
        if (err) {
          done(err);
          return;
        }
        expect(res, "to have passed").and("to have passed test count", 2);
        done();
      },
    );
  });

  it("should complete tests having unref'd async behavior", function (done) {
    runMochaJSON(
      "options/timeout-unref",
      ["--timeout", "0"],
      function (err, res) {
        if (err) {
          done(err);
          return;
        }
        expect(res, "to have passed").and("to have passed test count", 1);
        done();
      },
    );
  });
});
