// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.

import { assert, assertThrows } from "jsr:@std/assert@^0.215.0";
import {
  resolveTestDataPath,
  runTestInvalidInputTests,
  runTestValidInputTests,
} from "./_test_utils.ts";
import { test } from "./test.ts";

// GENERAL TESTS //

Deno.test("[ANY] try to test for unknown format", () => {
  assertThrows(
    () => test("foo", ["unknown"]),
    TypeError,
    "Unable to test for unknown front matter format",
  );
});

// YAML //

Deno.test("[YAML] test valid input true", () => {
  runTestValidInputTests("yaml", test);
});

Deno.test("[YAML] test invalid input false", () => {
  runTestInvalidInputTests("yaml", test);
});

Deno.test({
  name: "[YAML] text between horizontal rules should not be recognized",
  async fn() {
    const str = await Deno.readTextFile(
      resolveTestDataPath("./horizontal_rules.md"),
    );

    assert(!test(str));
  },
});

// JSON //

Deno.test("[JSON] test valid input true", () => {
  runTestValidInputTests("json", test);
});

Deno.test("[JSON] test invalid input false", () => {
  runTestInvalidInputTests("json", test);
});

// TOML //

Deno.test("[TOML] test valid input true", () => {
  runTestValidInputTests("toml", test);
});

Deno.test("[TOML] test invalid input false", () => {
  runTestInvalidInputTests("toml", test);
});
