import fs from 'fs';
import path from 'path';

import dedent from 'dedent';
import yaml from 'js-yaml';

interface OneLinerTestCase {
  case: string;
  code: string;
  error: string | undefined;
  errorStart: string | undefined;
  result: string | undefined;
  skip: boolean;
}

export function loadYamlCases(...pathParts: string[]): OneLinerTestCase[] {
  const cases = yaml.load(
    fs.readFileSync(path.resolve(...pathParts), 'utf-8'),
  ) as OneLinerTestCase[];

  return cases.map((caseDef: OneLinerTestCase): OneLinerTestCase => {
    return {
      ...caseDef,
      code: dedent(caseDef.code),
      error: caseDef.error !== undefined ? dedent(caseDef.error) : undefined,
      errorStart: caseDef.errorStart !== undefined ? dedent(caseDef.errorStart) : undefined,
    };
  });
}
