55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
var util = require('util');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var chalk = require('chalk');
|
|
|
|
var unescapeStr = (str) => str.replace(/\\\|/g, '\|').replace(/\\\\/g, '\\');
|
|
|
|
module.exports = function (expected, actual) {
|
|
let headers = expected.raw()[0];
|
|
let expected_keys = expected.hashes();
|
|
let diff = [];
|
|
let hasErrors = false;
|
|
|
|
var good = 0, bad = 0;
|
|
|
|
expected_keys.forEach((row, i) => {
|
|
var rowError = false;
|
|
|
|
for (var j in row) {
|
|
if (unescapeStr(row[j]) != actual[i][j]) {
|
|
rowError = true;
|
|
hasErrors = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (rowError) {
|
|
bad++;
|
|
diff.push(Object.assign({}, row, {c_status: 'undefined'}));
|
|
diff.push(Object.assign({}, actual[i], {c_status: 'comment'}));
|
|
} else {
|
|
good++;
|
|
diff.push(row);
|
|
}
|
|
});
|
|
|
|
if (!hasErrors) return null;
|
|
|
|
var s = ['Tables were not identical:'];
|
|
s.push(headers.map(key => ' ' + key).join(' | '));
|
|
diff.forEach((row) => {
|
|
var rowString = '| ';
|
|
headers.forEach((header) => {
|
|
if (!row.c_status) rowString += chalk.green(' ' + row[header] + ' | ');
|
|
else if (row.c_status === 'undefined') rowString += chalk.yellow('(-) ' + row[header] + ' | ');
|
|
else rowString += chalk.red('(+) ' + row[header] + ' | ');
|
|
});
|
|
s.push(rowString);
|
|
});
|
|
|
|
return s.join('\n');
|
|
};
|