123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- var assert = require('assert'),
- fs = require('fs'),
- path = require('path'),
- rimraf = require('rimraf'),
- readDirFiles = require('read-dir-files'),
- util = require('util'),
- ncp = require('../').ncp;
- describe('ncp', function () {
- describe('regular files and directories', function () {
- var fixtures = path.join(__dirname, 'regular-fixtures'),
- src = path.join(fixtures, 'src'),
- out = path.join(fixtures, 'out');
- before(function (cb) {
- rimraf(out, function() {
- ncp(src, out, cb);
- });
- });
- describe('when copying a directory of files', function () {
- it('files are copied correctly', function (cb) {
- readDirFiles(src, 'utf8', function (srcErr, srcFiles) {
- readDirFiles(out, 'utf8', function (outErr, outFiles) {
- assert.ifError(srcErr);
- assert.deepEqual(srcFiles, outFiles);
- cb();
- });
- });
- });
- });
- describe('when copying files using filter', function () {
- before(function (cb) {
- var filter = function(name) {
- return name.substr(name.length - 1) != 'a';
- };
- rimraf(out, function () {
- ncp(src, out, {filter: filter}, cb);
- });
- });
- it('files are copied correctly', function (cb) {
- 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) {
- assert.ifError(outErr);
- assert.deepEqual(srcFiles, outFiles);
- cb();
- });
- });
- });
- });
- describe('when using clobber=false', function () {
- it('the copy is completed successfully', function (cb) {
- ncp(src, out, function() {
- ncp(src, out, {clobber: false}, function(err) {
- assert.ifError(err);
- cb();
- });
- });
- });
- });
- describe('when using transform', function () {
- it('file descriptors are passed correctly', function (cb) {
- ncp(src, out, {
- transform: function(read,write,file) {
- assert.notEqual(file.name, undefined);
- assert.strictEqual(typeof file.mode,'number');
- read.pipe(write);
- }
- }, cb);
- });
- });
- describe('when using rename', function() {
- it('output files are correctly redirected', function(cb) {
- ncp(src, out, {
- rename: function(target) {
- if(path.basename(target) == 'a') return path.resolve(path.dirname(target), 'z');
- return target;
- }
- }, function(err) {
- if(err) return cb(err);
- readDirFiles(src, 'utf8', function (srcErr, srcFiles) {
- readDirFiles(out, 'utf8', function (outErr, outFiles) {
- assert.ifError(srcErr);
- assert.deepEqual(srcFiles.a, outFiles.z);
- cb();
- });
- });
- });
- });
- });
- });
- describe('symlink handling', function () {
- var fixtures = path.join(__dirname, 'symlink-fixtures'),
- src = path.join(fixtures, 'src'),
- out = path.join(fixtures, 'out');
- beforeEach(function (cb) {
- rimraf(out, cb);
- });
- it('copies symlinks by default', function (cb) {
- ncp(src, out, function (err) {
- if (err) return cb(err);
- assert.equal(fs.readlinkSync(path.join(out, 'file-symlink')), 'foo');
- assert.equal(fs.readlinkSync(path.join(out, 'dir-symlink')), 'dir');
- cb();
- })
- });
- it('copies file contents when dereference=true', function (cb) {
- ncp(src, out, { dereference: true }, function (err) {
- var fileSymlinkPath = path.join(out, 'file-symlink');
- assert.ok(fs.lstatSync(fileSymlinkPath).isFile());
- assert.equal(fs.readFileSync(fileSymlinkPath), 'foo contents');
- var dirSymlinkPath = path.join(out, 'dir-symlink');
- assert.ok(fs.lstatSync(dirSymlinkPath).isDirectory());
- assert.deepEqual(fs.readdirSync(dirSymlinkPath), ['bar']);
- cb();
- });
- });
- });
- describe('broken symlink handling', function () {
- var fixtures = path.join(__dirname, 'broken-symlink-fixtures'),
- src = path.join(fixtures, 'src'),
- out = path.join(fixtures, 'out');
- beforeEach(function (cb) {
- rimraf(out, cb);
- });
- it('copies broken symlinks by default', function (cb) {
- ncp(src, out, function (err) {
- if (err) return cb(err);
- assert.equal(fs.readlinkSync(path.join(out, 'broken-symlink')), 'does-not-exist');
- cb();
- })
- });
- it('returns an error when dereference=true', function (cb) {
- ncp(src, out, {dereference: true}, function (err) {
- assert.equal(err.length, 1);
- assert.equal(err[0].code, 'ENOENT');
- cb();
- });
- });
- });
- describe('modified files copies', function () {
- var fixtures = path.join(__dirname, 'modified-files'),
- src = path.join(fixtures, 'src'),
- out = path.join(fixtures, 'out');
- it('if file not exists copy file to target', function(cb) {
- rimraf(out, function() {
- ncp(src, out, {modified: true, clobber: false}, function (err) {
- assert.equal(fs.existsSync(out), true);
- cb();
- });
- });
- });
- it('change source file mtime and copy', function(cb) {
- fs.utimesSync(src+"/a", new Date().getTime()/1000, new Date('2015-01-01 00:00:00').getTime()/1000);
- ncp(src, out, {modified: true, clobber: false}, function (err) {
- fs.stat(out+"/a", function(err, stats) {
- assert.equal(stats.mtime.getTime(), new Date('2015-01-01 00:00:00').getTime());
- cb();
- });
- });
- });
- });
- });
|