"use strict";

module.exports = () => {
  return {
    files: [
      "index.js",
      "lib/**/*.{js,json}",
      "test/setup.js",
      "test/assertions.js",
      {
        pattern: "test/node-unit/**/*.fixture.js",
        instrument: false,
      },
      {
        pattern: "test/unit/**/*.fixture.js",
        instrument: false,
      },
      "package.json",
      "test/opts/mocha.opts",
      "mocharc.yml",
      "!lib/browser/growl.js",
    ],
    filesWithNoCoverageCalculated: [
      "test/**/*.fixture.js",
      "test/setup.js",
      "test/assertions.js",
      "lib/browser/**/*.js",
    ],
    tests: ["test/unit/**/*.spec.js", "test/node-unit/**/*.spec.js"],
    env: {
      type: "node",
      runner: "node",
    },
    workers: { recycle: true },
    testFramework: { type: "mocha", path: __dirname },
    setup(wallaby) {
      // running mocha instance is not the same as mocha under test,
      // running mocha is the project's source code mocha, mocha under test is instrumented version of the source code
      const runningMocha = wallaby.testFramework;
      runningMocha.timeout(1000);
      // to expose it/describe etc. on the mocha under test
      const MochaUnderTest = require("./");
      const mochaUnderTest = new MochaUnderTest();
      mochaUnderTest.suite.emit(
        MochaUnderTest.Suite.constants.EVENT_FILE_PRE_REQUIRE,
        global,
        "",
        mochaUnderTest,
      );
      require("./test/setup");
    },
    debug: true,
    runMode: "onsave",
  };
};
