marko/test/autotest.js
Patrick Steele-Idem 5df81440e5 Reorganized tests
2016-05-05 07:56:24 -07:00

88 lines
2.3 KiB
JavaScript

'use strict';
var fs = require('fs');
var enabledTest = process.env.TEST;
var path = require('path');
var assert = require('assert');
var enabledTestNames = enabledTest && enabledTest.split(/[\s*,\s*/]/);
var enabledTests = null;
if (enabledTestNames && enabledTestNames.length > 1) {
enabledTests = {};
enabledTest = null;
enabledTestNames.forEach((testName) => {
enabledTests[testName] = true;
});
}
var fs = require('fs');
var enabledTest = process.env.TEST;
var path = require('path');
var assert = require('assert');
function compareHelper(dir, actual, suffix) {
var actualPath = path.join(dir, 'actual' + suffix);
var expectedPath = path.join(dir, 'expected' + suffix);
var isObject = typeof actual === 'string' ? false : true;
var actualString = isObject ? JSON.stringify(actual, null, 4) : actual;
fs.writeFileSync(actualPath, actualString, { encoding: 'utf8' });
var expectedString;
try {
expectedString = fs.readFileSync(expectedPath, { encoding: 'utf8' });
} catch(e) {
expectedString = isObject ? '"TBD"' : 'TBD';
fs.writeFileSync(expectedPath, expectedString, {encoding: 'utf8'});
}
if (isObject) {
actual = JSON.parse(actualString);
}
var expected = isObject ? JSON.parse(expectedString) : expectedString;
assert.deepEqual(actual, expected);
}
function autoTest(name, dir, run, options, done) {
options = options || {};
var helpers = {
compare(actual, suffix) {
compareHelper(dir, actual, suffix);
}
};
run(dir, helpers, done);
}
exports.scanDir = function(autoTestDir, run, options) {
describe('autotest', function() {
fs.readdirSync(autoTestDir)
.forEach(function(name) {
if (name.charAt(0) === '.') {
return;
}
if (enabledTests && !enabledTests[name]) {
return;
}
var itFunc = it;
if (enabledTest && name === enabledTest) {
itFunc = it.only;
}
var dir = path.join(autoTestDir, name);
itFunc(`[${name}] `, function(done) {
autoTest(name, dir, run, options, done);
});
});
});
};