import { defineConfig } from 'vitest/config';
import { resolve } from 'path';

export default defineConfig({
  test: {
    globals: true,
    include: ['./**/__tests__/*.test.ts'],
    setupFiles: [resolve(__dirname, '../../', 'vx/config/vitest/customMatchers.ts')],
  },
  root: __dirname,
  resolve: {
    alias: {
      vest: resolve(__dirname, 'src/vest.ts'),
      vestMocks: resolve(__dirname, 'src/testUtils/vestMocks.ts'),
      testPromise: resolve(__dirname, 'src/testUtils/testPromise.ts'),
      testDummy: resolve(__dirname, 'src/testUtils/testDummy.ts'),
      suiteDummy: resolve(__dirname, 'src/testUtils/suiteDummy.ts'),
      partition: resolve(__dirname, 'src/testUtils/partition.ts'),
      TVestMock: resolve(__dirname, 'src/testUtils/TVestMock.ts'),
      suiteRunResult: resolve(__dirname, 'src/suiteResult/suiteRunResult.ts'),
      suiteResult: resolve(__dirname, 'src/suiteResult/suiteResult.ts'),
      SummaryFailure: resolve(__dirname, 'src/suiteResult/SummaryFailure.ts'),
      SuiteResultTypes: resolve(__dirname, 'src/suiteResult/SuiteResultTypes.ts'),
      Severity: resolve(__dirname, 'src/suiteResult/Severity.ts'),
      useProduceSuiteSummary: resolve(__dirname, 'src/suiteResult/selectors/useProduceSuiteSummary.ts'),
      suiteSelectors: resolve(__dirname, 'src/suiteResult/selectors/suiteSelectors.ts'),
      shouldAddValidProperty: resolve(__dirname, 'src/suiteResult/selectors/shouldAddValidProperty.ts'),
      hasFailuresByTestObjects: resolve(__dirname, 'src/suiteResult/selectors/hasFailuresByTestObjects.ts'),
      collectFailures: resolve(__dirname, 'src/suiteResult/selectors/collectFailures.ts'),
      LazyDraft: resolve(__dirname, 'src/suiteResult/selectors/LazyDraft.ts'),
      shouldSkipDoneRegistration: resolve(__dirname, 'src/suiteResult/done/shouldSkipDoneRegistration.ts'),
      deferDoneCallback: resolve(__dirname, 'src/suiteResult/done/deferDoneCallback.ts'),
      runCallbacks: resolve(__dirname, 'src/suite/runCallbacks.ts'),
      getTypedMethods: resolve(__dirname, 'src/suite/getTypedMethods.ts'),
      createSuite: resolve(__dirname, 'src/suite/createSuite.ts'),
      SuiteWalker: resolve(__dirname, 'src/suite/SuiteWalker.ts'),
      SuiteTypes: resolve(__dirname, 'src/suite/SuiteTypes.ts'),
      validateSuiteParams: resolve(__dirname, 'src/suite/validateParams/validateSuiteParams.ts'),
      skipWhen: resolve(__dirname, 'src/isolates/skipWhen.ts'),
      omitWhen: resolve(__dirname, 'src/isolates/omitWhen.ts'),
      group: resolve(__dirname, 'src/isolates/group.ts'),
      each: resolve(__dirname, 'src/isolates/each.ts'),
      warn: resolve(__dirname, 'src/hooks/warn.ts'),
      include: resolve(__dirname, 'src/hooks/include.ts'),
      optional: resolve(__dirname, 'src/hooks/optional/optional.ts'),
      omitOptionalFields: resolve(__dirname, 'src/hooks/optional/omitOptionalFields.ts'),
      mode: resolve(__dirname, 'src/hooks/optional/mode.ts'),
      OptionalTypes: resolve(__dirname, 'src/hooks/optional/OptionalTypes.ts'),
      Modes: resolve(__dirname, 'src/hooks/optional/Modes.ts'),
      useIsExcluded: resolve(__dirname, 'src/hooks/focused/useIsExcluded.ts'),
      useHasOnliedTests: resolve(__dirname, 'src/hooks/focused/useHasOnliedTests.ts'),
      focused: resolve(__dirname, 'src/hooks/focused/focused.ts'),
      FocusedKeys: resolve(__dirname, 'src/hooks/focused/FocusedKeys.ts'),
      promisify: resolve(__dirname, 'src/exports/promisify.ts'),
      parser: resolve(__dirname, 'src/exports/parser.ts'),
      'enforce@schema': resolve(__dirname, 'src/exports/enforce@schema.ts'),
      'enforce@isURL': resolve(__dirname, 'src/exports/enforce@isURL.ts'),
      'enforce@email': resolve(__dirname, 'src/exports/enforce@email.ts'),
      'enforce@date': resolve(__dirname, 'src/exports/enforce@date.ts'),
      'enforce@compounds': resolve(__dirname, 'src/exports/enforce@compounds.ts'),
      'enforce@compose': resolve(__dirname, 'src/exports/enforce@compose.ts'),
      debounce: resolve(__dirname, 'src/exports/debounce.ts'),
      classnames: resolve(__dirname, 'src/exports/classnames.ts'),
      SuiteSerializer: resolve(__dirname, 'src/exports/SuiteSerializer.ts'),
      ErrorStrings: resolve(__dirname, 'src/errors/ErrorStrings.ts'),
      Runtime: resolve(__dirname, 'src/core/Runtime.ts'),
      test: resolve(__dirname, 'src/core/test/test.ts'),
      'test.memo': resolve(__dirname, 'src/core/test/test.memo.ts'),
      TestTypes: resolve(__dirname, 'src/core/test/TestTypes.ts'),
      verifyTestRun: resolve(__dirname, 'src/core/test/testLevelFlowControl/verifyTestRun.ts'),
      runTest: resolve(__dirname, 'src/core/test/testLevelFlowControl/runTest.ts'),
      shouldUseErrorMessage: resolve(__dirname, 'src/core/test/helpers/shouldUseErrorMessage.ts'),
      nonMatchingSeverityProfile: resolve(__dirname, 'src/core/test/helpers/nonMatchingSeverityProfile.ts'),
      matchingGroupName: resolve(__dirname, 'src/core/test/helpers/matchingGroupName.ts'),
      matchingFieldName: resolve(__dirname, 'src/core/test/helpers/matchingFieldName.ts'),
      VestReconciler: resolve(__dirname, 'src/core/isolate/VestReconciler.ts'),
      VestIsolateType: resolve(__dirname, 'src/core/isolate/VestIsolateType.ts'),
      VestIsolate: resolve(__dirname, 'src/core/isolate/VestIsolate.ts'),
      IsolateReconciler: resolve(__dirname, 'src/core/isolate/IsolateReconciler.ts'),
      isSameProfileTest: resolve(__dirname, 'src/core/isolate/IsolateTest/isSameProfileTest.ts'),
      cancelOverriddenPendingTest: resolve(__dirname, 'src/core/isolate/IsolateTest/cancelOverriddenPendingTest.ts'),
      VestTest: resolve(__dirname, 'src/core/isolate/IsolateTest/VestTest.ts'),
      TestWalker: resolve(__dirname, 'src/core/isolate/IsolateTest/TestWalker.ts'),
      IsolateTestReconciler: resolve(__dirname, 'src/core/isolate/IsolateTest/IsolateTestReconciler.ts'),
      IsolateTest: resolve(__dirname, 'src/core/isolate/IsolateTest/IsolateTest.ts'),
      IsolateSuite: resolve(__dirname, 'src/core/isolate/IsolateSuite/IsolateSuite.ts'),
      IsolateEach: resolve(__dirname, 'src/core/isolate/IsolateEach/IsolateEach.ts'),
      SuiteContext: resolve(__dirname, 'src/core/context/SuiteContext.ts'),
      VestBus: resolve(__dirname, 'src/core/VestBus/VestBus.ts'),
      BusEvents: resolve(__dirname, 'src/core/VestBus/BusEvents.ts'),
      IsolateTestStateMachine: resolve(__dirname, 'src/core/StateMachines/IsolateTestStateMachine.ts'),
      CommonStateMachine: resolve(__dirname, 'src/core/StateMachines/CommonStateMachine.ts')
    }
  },
});