var assertion = require('assert'); var http = require('http'); var cproc = require('child_process'); var fs = require('fs'); function test(target, tests) { var wrappedTests = tests.map(function(test) { return function() { var desc = test[0]; var f = test[1]; return new Promise(function(resolve, reject) { var assert = function(pred, msg) { assert.ok(pred, msg); }; ['ok', 'equal', 'deepEqual', 'strictEqual', 'deepStrictEqual', 'notEqual', 'notDeepEqual', 'notStrictEqual', 'notDeepStrictEqual', 'fail', 'doesNotThrow', 'throws', ].forEach(function(k) { assert[k] = function(...args) { try { assertion[k].apply(null, args); } catch(e) { reject(e); } }; }); f(resolve, assert); }).catch(function(e) { console.error('Failed:', target + ' ' + desc + '\n', e.stack); }); }; }); var prom = wrappedTests[0](); for (var i = 1; i < wrappedTests.length; i++) { prom = prom.then(wrappedTests[i]); } return prom; } // Test parameters var port = '1111'; var url = 'http://127.0.0.1:' + port + '/'; var server; test('The CLI', [ ['should provide a help message', function(done, assert) { var child = cproc.spawn('node', ['test/cli-test.js']); var buffer = ''; child.stdout.on('data', function(chunk) { buffer += ''+chunk; }); child.stdout.on('end', function() { assert(buffer.startsWith('Usage')); done(); }); }], ['should produce default badges', function(done, assert) { var child = cproc.spawn('node', ['test/cli-test.js', 'cactus', 'grown']); child.stdout.on('data', function(chunk) { var buffer = ''+chunk; assert(buffer.startsWith('= 0 && !isDone) { done(); isDone = true; } }); server.stderr.on('data', function(data) { console.log(''+data); }); }], ['should produce colorscheme badges', function(done, assert) { http.get(url + ':fruit-apple-green.svg', function(res) { var buffer = ''; res.on('data', function(chunk) { buffer += ''+chunk; }); res.on('end', function() { assert(buffer.startsWith('