var Q = require('q'); var glob = require('glob'); var fs = require('fs'); var path = require('path'); var spawn = require('child_process').spawn; var util = require('./util'); module.exports = function(gulp, plugins, config) { return function() { return util.forEachSubDirSequential( config.dest, function(dir) { var testDir = path.join(dir, 'test'); var relativeMasterTestFile = 'test/_all_tests.dart'; var testFiles = [].slice.call(glob.sync('**/*.server.spec.dart', { cwd: testDir })); if (testFiles.length == 0) { // No test files found return Q.resolve(); } var header = ['library _all_tests;', '']; var main = ['main() {']; testFiles.forEach(function(fileName, index) { header.push('import "' + fileName + '" as test_' + index + ';'); main.push(' test_' + index + '.main();'); }); header.push(''); main.push('}'); var absMasterTestFile = path.join(dir, relativeMasterTestFile); fs.writeFileSync(absMasterTestFile, header.concat(main).join('\n')); var defer = Q.defer(); var done = defer.makeNodeResolver(); util.processToPromise(spawn('dart', ['-c', relativeMasterTestFile], { stdio: 'inherit', cwd: dir })).then( function() { done(); }, function(error) { done(error); } ); return defer.promise; } ); }; };