| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | const fs = require("fs");const crypto = require("crypto");const execSync = require("child_process").execSync;const testManifest = "test/test_manifest.json";const pdfFolder = "test/pdfs/";const gitIgnore = "test/pdfs/.gitignore";if (process.argv.length < 3) {  console.log("\nUsage: node add_test.js FILE\n");  console.log(    `  Add a PDF as a reference test. FILE must be located in ${pdfFolder}`  );  process.exit(1);}const file = process.argv[2];if (!file.startsWith(pdfFolder)) {  throw new Error(`PDF file must be in '${pdfFolder}' directory.`);}if (!fs.existsSync(file)) {  throw new Error(`PDF file does not exist '${file}'.`);}function calculateMD5(pdfFile, callback) {  const hash = crypto.createHash("md5");  const stream = fs.createReadStream(pdfFile);  stream.on("data", function (data) {    hash.update(data);  });  stream.on("error", function (err) {    callback(err);  });  stream.on("end", function () {    const result = hash.digest("hex");    callback(null, result);  });}function getRandomArbitrary(min, max) {  return Math.floor(Math.random() * (max - min) + min);}calculateMD5(file, (err, md5) => {  if (err) {    throw new Error(err);  }  let contents = fs.readFileSync(gitIgnore, "utf8").split("\n");  const randomLine = getRandomArbitrary(10, contents.length - 2);  contents.splice(    randomLine,    0,    "!" + file.substring(file.lastIndexOf("/") + 1)  );  fs.writeFileSync("test/pdfs/.gitignore", contents.join("\n"));  contents = fs.readFileSync(testManifest, "utf8");  const pdf = file.substring(file.lastIndexOf("/") + 1, file.length - 4);  const randomPoint = getRandomArbitrary(100, contents.length - 20);  const bracket = contents.indexOf("},\n", randomPoint);  const out =    contents.substring(0, bracket) +    "},\n" +    `    {  "id": "${pdf}",\n` +    `       "file": "pdfs/${pdf}.pdf",\n` +    `       "md5": "${md5}",\n` +    '       "rounds": 1,\n' +    '       "type": "eq"\n' +    "    " +    contents.substring(bracket);  fs.writeFileSync("test/test_manifest.json", out);  execSync(`git add ${testManifest} ${gitIgnore}`);  execSync(`git add ${file}`);});
 |