diff --git a/test/copy/ncp/broken-symlink.test.js b/test/copy/ncp/broken-symlink.test.js new file mode 100644 index 0000000..a156eb3 --- /dev/null +++ b/test/copy/ncp/broken-symlink.test.js @@ -0,0 +1,59 @@ +var assert = require('assert') +var fs = require('fs') +var path = require('path') +var os = require('os') +var fse = require(process.cwd()) +var ncp = require('../../../lib/_copy').ncp + +/* global afterEach, beforeEach, describe, it */ + +describe('ncp broken symlink', function () { + var TEST_DIR = path.join(os.tmpdir(), 'fs-extra', 'ncp-broken-symlinks') + var src = path.join(TEST_DIR, 'src') + var out = path.join(TEST_DIR, 'out') + + beforeEach(function (done) { + fse.emptyDir(TEST_DIR, function (err) { + assert.ifError(err) + createFixtures(src, done) + }) + }) + + afterEach(function (done) { + fse.remove(TEST_DIR, done) + }) + + 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')), path.join(src, '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() + }) + }) +}) + +function createFixtures (srcDir, callback) { + fs.mkdir(srcDir, function (err) { + if (err) return callback(err) + + try { + var brokenFile = path.join(srcDir, 'does-not-exist') + var brokenFileLink = path.join(srcDir, 'broken-symlink') + fs.writeFileSync(brokenFile, 'does not matter') + fs.symlinkSync(brokenFile, brokenFileLink, 'file') + } catch (err) { + callback(err) + } + + // break the symlink now + fse.remove(brokenFile, callback) + }) +} diff --git a/test/copy/ncp/fixtures/broken-symlink-fixtures/src/broken-symlink b/test/copy/ncp/fixtures/broken-symlink-fixtures/src/broken-symlink deleted file mode 120000 index cfa0a46..0000000 --- a/test/copy/ncp/fixtures/broken-symlink-fixtures/src/broken-symlink +++ /dev/null @@ -1 +0,0 @@ -does-not-exist \ No newline at end of file diff --git a/test/copy/ncp/ncp.test.js b/test/copy/ncp/ncp.test.js index efc0adb..2994b78 100644 --- a/test/copy/ncp/ncp.test.js +++ b/test/copy/ncp/ncp.test.js @@ -1,11 +1,11 @@ var assert = require('assert') -var fs = require('fs') +// var fs = require('fs') var path = require('path') var rimraf = require('rimraf') var readDirFiles = require('read-dir-files').read // temporary, will remove var ncp = require('../../../lib/_copy').ncp -/* global before, beforeEach, describe, it */ +/* global before, describe, it */ var fixturesDir = path.join(__dirname, 'fixtures') @@ -90,32 +90,6 @@ describe('ncp', function () { }) }) - describe('broken symlink handling', function () { - var fixtures = path.join(fixturesDir, '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() - }) - }) - }) - // see https://github.com/AvianFlu/ncp/issues/71 describe('Issue 71: Odd Async Behaviors', function (cb) { var fixtures = path.join(__dirname, 'fixtures', 'regular-fixtures')