/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */

import { RuleTester as TypeScriptRuleTester } from '@typescript-eslint/rule-tester';
import { RuleTester } from '@typescript-eslint/utils/ts-eslint';

import { themeableComponents } from '../src/util/theme-support';
import {
  FIXTURE,
  fixture,
} from './fixture';


// Register themed components from test fixture
themeableComponents.initialize(FIXTURE);

TypeScriptRuleTester.itOnly = fit;
TypeScriptRuleTester.itSkip = xit;

export const tsRuleTester = new TypeScriptRuleTester({
  parser: '@typescript-eslint/parser',
  defaultFilenames: {
    ts: fixture('src/test.ts'),
    tsx: 'n/a',
  },
  parserOptions: {
    project: fixture('tsconfig.json'),
  },
});

class HtmlRuleTester extends RuleTester {
  run(name: string, rule: any, tests: { valid: any[], invalid: any[] }) {
    super.run(name, rule, {
      valid: tests.valid.map((test) => ({
        filename: fixture('test.html'),
        ...test,
      })),
      invalid: tests.invalid.map((test) => ({
        filename: fixture('test.html'),
        ...test,
      })),
    });
  }
}

export const htmlRuleTester = new HtmlRuleTester({
  parser: require.resolve('@angular-eslint/template-parser'),
});