@testim/testim-cli
Version:
Command line interface for running Testing on you CI
118 lines (106 loc) • 3.28 kB
JavaScript
var spawn = require('child_process').spawn
, findit = require('findit')
, path = require('path')
, hashish = require('hashish')
, fs = require('fs')
, http = require('http')
, net = require('net')
, assert = require('assert')
, multiparty = require('../')
, mkdirp = require('mkdirp')
, STANDALONE_PATH = path.join(__dirname, 'standalone')
, server = http.createServer()
, PORT = 13532
, FIXTURE_PATH = path.join(__dirname, 'fixture')
, TMP_PATH = path.join(__dirname, 'tmp')
mkdirp.sync(TMP_PATH);
describe("fixtures", function() {
before(function(done) {
server.listen(PORT, done);
});
var fixtures = [];
findit
.sync(path.join(FIXTURE_PATH, 'js'))
.forEach(function(jsPath) {
if (!/\.js$/.test(jsPath)) return;
var group = path.basename(jsPath, '.js');
hashish.forEach(require(jsPath), function(fixture, name) {
it(group + '/' + name, createTest({
name : group + '/' + name,
fixture : fixture,
}));
});
});
});
describe("standalone", function() {
findit
.sync(STANDALONE_PATH)
.forEach(function(jsPath) {
if (!/\.js$/.test(jsPath)) return;
it(path.basename(jsPath, '.js'), function(done) {
var child = spawn(process.execPath, [jsPath], { stdio: 'inherit' });
child.on('error', function(err) {
done(err);
});
child.on('exit', function(code) {
if (code) return done(new Error("exited with code " + code));
done();
});
});
});
});
function createTest(fixture) {
var name = fixture.name;
fixture = fixture.fixture;
return function(done) {
uploadFixture(name, function(err, parts) {
if (err) return done(err);
fixture.forEach(function(expectedPart, i) {
var parsedPart = parts[i];
assert.equal(parsedPart.type, expectedPart.type);
assert.equal(parsedPart.name, expectedPart.name);
if (parsedPart.type === 'file') {
var file = parsedPart.value;
assert.equal(file.originalFilename, expectedPart.filename);
if(expectedPart.sha1) assert.strictEqual(file.hash, expectedPart.sha1);
if(expectedPart.size) assert.strictEqual(file.size, expectedPart.size);
}
});
done();
});
};
}
function uploadFixture(name, cb) {
server.once('request', function(req, res) {
var parts = [];
var form = new multiparty.Form({
autoFields: true,
autoFiles: true,
});
form.uploadDir = TMP_PATH;
form.hash = "sha1";
form.on('error', callback);
form.on('file', function(name, value) {
parts.push({type: 'file', name: name, value: value});
});
form.on('field', function(name, value) {
parts.push({type: 'field', name: name, value: value});
});
form.on('close', function() {
res.end('OK');
callback(null, parts);
});
form.parse(req);
function callback() {
var realCallback = cb;
cb = function() {};
realCallback.apply(null, arguments);
}
});
var socket = net.createConnection(PORT);
var file = fs.createReadStream(FIXTURE_PATH + '/http/' + name);
file.pipe(socket, {end: false});
socket.on('data', function () {
socket.end();
});
}