mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
113 lines
3.3 KiB
JavaScript
113 lines
3.3 KiB
JavaScript
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var enabledTest = process.env.TEST;
|
|
var updateExpectations = process.env.hasOwnProperty('UPDATE_EXPECTATIONS');
|
|
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;
|
|
});
|
|
}
|
|
|
|
function compareHelper(dir, actual, prefix, suffix) {
|
|
var actualPath = path.join(dir, prefix + 'actual' + suffix);
|
|
var expectedPath = path.join(dir, prefix + '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'});
|
|
}
|
|
|
|
actual = isObject ? JSON.parse(actualString) : actualString.replace(/\r?\n$/, '');
|
|
|
|
var expected = isObject ? JSON.parse(expectedString) : expectedString.replace(/\r?\n$/, '');
|
|
|
|
try {
|
|
assert.deepEqual(actual, expected);
|
|
} catch(e) {
|
|
if (updateExpectations) {
|
|
fs.writeFileSync(expectedPath, actualString, { encoding: 'utf8' });
|
|
} else {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
|
|
function autoTest(name, dir, run, options, done) {
|
|
options = options || {};
|
|
|
|
var helpers = {
|
|
compare(actual, prefix, suffix) {
|
|
if (typeof prefix === 'object') {
|
|
var options = prefix;
|
|
prefix = options.prefix;
|
|
suffix = options.suffix;
|
|
} else if (arguments.length === 2) {
|
|
suffix = prefix;
|
|
prefix = null;
|
|
}
|
|
compareHelper(dir, actual, prefix || '', suffix || '');
|
|
}
|
|
};
|
|
|
|
run(dir, helpers, done);
|
|
}
|
|
|
|
exports.scanDir = function(autoTestDir, run, options) {
|
|
var testGroup = path.basename(autoTestDir);
|
|
var describeFunc = describe;
|
|
|
|
if(enabledTest && testGroup === enabledTest) {
|
|
describeFunc = describe.only;
|
|
}
|
|
|
|
describeFunc('autotest', function() {
|
|
if(options && options.timeout) {
|
|
this.timeout(options.timeout);
|
|
}
|
|
fs.readdirSync(autoTestDir)
|
|
.forEach(function(name) {
|
|
if (name.charAt(0) === '.') {
|
|
return;
|
|
}
|
|
|
|
if (name.endsWith('.skip')) {
|
|
return;
|
|
}
|
|
|
|
if (enabledTests && !enabledTests[name] && !enabledTests[testGroup] && !enabledTests[testGroup+'/'+name]) {
|
|
return;
|
|
}
|
|
|
|
var itFunc = it;
|
|
|
|
if (enabledTest && (name === enabledTest || testGroup+'/'+name === enabledTest)) {
|
|
itFunc = it.only;
|
|
}
|
|
|
|
var dir = path.join(autoTestDir, name);
|
|
|
|
itFunc(`[${name}] `, function(done) {
|
|
autoTest(name, dir, run, options, done);
|
|
});
|
|
|
|
});
|
|
});
|
|
};
|