"use strict"; const fs = require("fs"); const path = require("path"); module.exports = function checkArrayExpectation(testDirectory, object, kind, filename, upperCaseKind, done) { if(!done) { done = upperCaseKind; upperCaseKind = filename; filename = `${kind}s`; } let array = object[`${kind}s`].slice().sort(); if(kind === "warning") array = array.filter(item => !/from UglifyJs/.test(item)); if(fs.existsSync(path.join(testDirectory, `${filename}.js`))) { const expectedFilename = path.join(testDirectory, `${filename}.js`); const expected = require(expectedFilename); if(expected.length < array.length) return done(new Error(`More ${kind}s while compiling than expected:\n\n${array.join("\n\n")}. Check expected warnings: ${filename}`)), true; else if(expected.length > array.length) return done(new Error(`Less ${kind}s while compiling than expected:\n\n${array.join("\n\n")}. Check expected warnings: ${filename}`)), true; for(let i = 0; i < array.length; i++) { if(Array.isArray(expected[i])) { for(let j = 0; j < expected[i].length; j++) { if(!expected[i][j].test(array[i])) return done(new Error(`${upperCaseKind} ${i}: ${array[i]} doesn't match ${expected[i][j].toString()}`)), true; } } else if(!expected[i].test(array[i])) return done(new Error(`${upperCaseKind} ${i}: ${array[i]} doesn't match ${expected[i].toString()}`)), true; } } else if(array.length > 0) { return done(new Error(`${upperCaseKind}s while compiling:\n\n${array.join("\n\n")}`)), true; } }