summaryrefslogtreecommitdiff
path: root/node_modules/ncp/test/ncp.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/ncp/test/ncp.js')
-rw-r--r--node_modules/ncp/test/ncp.js197
1 files changed, 197 insertions, 0 deletions
diff --git a/node_modules/ncp/test/ncp.js b/node_modules/ncp/test/ncp.js
new file mode 100644
index 0000000..bc6df22
--- /dev/null
+++ b/node_modules/ncp/test/ncp.js
@@ -0,0 +1,197 @@
+
+
+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();
+ });
+ });
+ });
+
+ });
+}); \ No newline at end of file