var assert = require('assert'), path = require('path'), rimraf = require('rimraf'), vows = require('vows'), readDirFiles = require('read-dir-files'), ncp = require('../').ncp; var fixtures = path.join(__dirname, 'fixtures'), src = path.join(fixtures, 'src'), out = path.join(fixtures, 'out'); vows.describe('ncp').addBatch({ 'When copying a directory of files': { topic: function () { var cb = this.callback; rimraf(out, function () { ncp(src, out, cb); }); }, 'files should be copied': { topic: function () { var cb = this.callback; readDirFiles(src, 'utf8', function (srcErr, srcFiles) { readDirFiles(out, 'utf8', function (outErr, outFiles) { cb(outErr, srcFiles, outFiles); }); }); }, 'and the destination should match the source': function (err, srcFiles, outFiles) { assert.isNull(err); assert.deepEqual(srcFiles, outFiles); } } } }).addBatch({ 'When copying files using filter': { topic: function() { var cb = this.callback; var filter = function(name) { return name.substr(name.length - 1) != 'a' } rimraf(out, function () { ncp(src, out, {filter: filter}, cb); }); }, 'it should copy files': { topic: function () { var cb = this.callback; readDirFiles(src, 'utf8', function (srcErr, srcFiles) { function filter(files) { for (var fileName in files) { var curFile = files[fileName]; if (curFile instanceof Object) return filter(curFile); if (fileName.substr(fileName.length - 1) == 'a') delete files[fileName]; } } filter(srcFiles); readDirFiles(out, 'utf8', function (outErr, outFiles) { cb(outErr, srcFiles, outFiles); }); }); }, 'and destination files should match source files that pass filter': function (err, srcFiles, outFiles) { assert.isNull(err); assert.deepEqual(srcFiles, outFiles); } } } }).addBatch({ 'When copying files using transform': { 'it should pass file descriptors along to transform functions': function() { ncp(src, out, { transform: function(read,write,file) { assert.notEqual(file.name, undefined); assert.strictEqual(typeof file.mode,'number'); read.pipe(write); } }, function(){}); } } }).export(module);