text: const fs = require("fs");
  const { orderBy } = require("natural-orderby");
  const path = require("path");
  
  const testSuiteDirname = "./yaml-test-suite";
  const whitelistForValidTest = [
    "Duplicate YAML directive", // semantic error
    "Missing space in YAML directive", // https://github.com/yaml/yaml-test-suite/issues/38
    "Tag shorthand used in documents but only defined in the first", // semantic error
  ];
  
  const testCases = {};
  const testTagsDirname = path.join(testSuiteDirname, "tags");
  for (const tagName of fs.readdirSync(testTagsDirname)) {
    const testTagDirname = path.join(testTagsDirname, tagName);
    for (const testCaseId of fs.readdirSync(testTagDirname)) {
      const dirname = path.join(testSuiteDirname, testCaseId);
      const title = fs.readFileSync(path.join(dirname, "==="), "utf8").trim();
      const content = fs.readFileSync(path.join(dirname, "in.yaml"), "utf8");
      const isInvalid =
        fs.existsSync(path.join(dirname, "error")) &&
        whitelistForValidTest.indexOf(title) === -1;
      testCases[isInvalid ? `${title} [INVALID]` : title] = {
        input: content,
        output: "()",
      };
    }
  }
  
  const finalTestCases = {};
  for (const title of orderBy(Object.keys(testCases))) {
    finalTestCases[title] = testCases[title];
  }
  
  fs.writeFileSync(
    "./corpus/spec.txt",
    Object.entries(finalTestCases)
      .map(([title, { input, output }]) =>
        [
          "=".repeat(80),
          title,
          "=".repeat(80),
          input,
          "-".repeat(80),
          "",
          output.trim(),
          ""
        ].join("\n")
      )
      .join("\n")
  );
  