69 lines
2.1 KiB
JavaScript
69 lines
2.1 KiB
JavaScript
|
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);
|
||
|
}
|
||
|
|
||
|
let 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(file, callback) {
|
||
|
var hash = crypto.createHash('md5');
|
||
|
var stream = fs.createReadStream(file);
|
||
|
stream.on('data', function (data) {
|
||
|
hash.update(data);
|
||
|
});
|
||
|
stream.on('error', function (err) {
|
||
|
callback(err);
|
||
|
});
|
||
|
stream.on('end', function() {
|
||
|
var 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');
|
||
|
let randomLine = getRandomArbitrary(10, contents.length - 2);
|
||
|
contents.splice(randomLine, 0, '!' + file.substr(file.lastIndexOf('/') + 1));
|
||
|
fs.writeFileSync('test/pdfs/.gitignore', contents.join('\n'));
|
||
|
|
||
|
contents = fs.readFileSync(testManifest, 'utf8');
|
||
|
let pdf = file.substring(file.lastIndexOf('/') + 1, file.length - 4);
|
||
|
let randomPoint = getRandomArbitrary(100, contents.length - 20);
|
||
|
let bracket = contents.indexOf('},\n', randomPoint);
|
||
|
let out = contents.substr(0, bracket) +
|
||
|
'},\n' +
|
||
|
` { "id": "${pdf}",\n` +
|
||
|
` "file": "pdfs/${pdf}.pdf",\n` +
|
||
|
` "md5": "${md5}",\n` +
|
||
|
' "rounds": 1,\n' +
|
||
|
' "type": "eq"\n' +
|
||
|
' ' +
|
||
|
contents.substr(bracket);
|
||
|
fs.writeFileSync('test/test_manifest.json', out);
|
||
|
execSync(`git add ${testManifest} ${gitIgnore}`);
|
||
|
execSync(`git add ${file}`);
|
||
|
});
|