You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

113 lines
3.6 KiB

var assert = require('assert')
var path = require('path')
var rimraf = require('rimraf')
var fs = require('../')
var TEST_DIR = ''
var FIXTURES_DIR = 'test/fixtures'
// makes fs.rename return cross-device error.
var mock_fs = {}
mock_fs.rename = function(src, dest, cb) {
setTimeout(function() {
var err = new Error()
err.code = 'EXDEV'
cb(err)
}, 10)
}
describe("move", function() {
it("should rename a file on the same device", function (done) {
fs.move(FIXTURES_DIR + '/a-file', FIXTURES_DIR + '/a-file-dest', function (err) {
assert.ifError(err)
fs.readFile(FIXTURES_DIR + "/a-file-dest", 'utf8', function (err, contents) {
assert.ifError(err)
assert.strictEqual(contents, "sonic the hedgehog\n")
// move it back
fs.move(FIXTURES_DIR + "/a-file-dest", FIXTURES_DIR + "/a-file", done)
})
})
})
it("should not overwrite if clobber = false", function (done) {
fs.move(FIXTURES_DIR + "/a-file", FIXTURES_DIR + "/a-folder/another-file", {clobber: false}, function (err) {
assert.ok(err && err.code === 'EEXIST', "throw EEXIST")
done()
})
})
it("should not create directory structure if mkdirp is false", function (done) {
fs.move(FIXTURES_DIR + "/a-file", FIXTURES_DIR + "/does/not/exist/a-file-dest", {mkdirp: false}, function (err) {
assert.strictEqual(err.code, 'ENOENT')
done()
})
})
it("should create directory structure by default", function (done) {
fs.move(FIXTURES_DIR + "/a-file", FIXTURES_DIR + "/does/not/exist/a-file-dest", function (err) {
assert.ifError(err)
fs.readFile(FIXTURES_DIR + "/does/not/exist/a-file-dest", 'utf8', function (err, contents) {
assert.ifError(err)
assert.strictEqual(contents, "sonic the hedgehog\n")
// move it back
fs.move(FIXTURES_DIR + "/does/not/exist/a-file-dest", FIXTURES_DIR + "/a-file", function(err) {
assert.ifError(err)
rimraf(FIXTURES_DIR + "/does", done)
})
})
})
})
it("should work across devices", function (done) {
var oldRename = fs.rename
fs.rename = mock_fs.rename
fs.move(FIXTURES_DIR + "/a-file", FIXTURES_DIR + "/a-file-dest", function (err) {
assert.ifError(err)
fs.readFile(FIXTURES_DIR + "/a-file-dest", 'utf8', function (err, contents) {
assert.ifError(err)
assert.strictEqual(contents, "sonic the hedgehog\n")
// move it back
fs.move(FIXTURES_DIR + "/a-file-dest", FIXTURES_DIR + "/a-file", done)
//restore
fs.rename = oldRename
})
})
})
it("should move folders", function (done) {
fs.move(FIXTURES_DIR + "/a-folder", FIXTURES_DIR + "/a-folder-dest", function (err) {
assert.ifError(err)
fs.readFile(FIXTURES_DIR + "/a-folder-dest/another-file", 'utf8', function (err, contents) {
assert.ifError(err)
assert.strictEqual(contents, "tails\n")
// move it back
fs.move(FIXTURES_DIR + "/a-folder-dest", FIXTURES_DIR + "/a-folder", done)
})
})
})
it("should move folders across devices", function (done) {
var oldRename = fs.rename
fs.rename = mock_fs.rename
fs.move(FIXTURES_DIR + "/a-folder", FIXTURES_DIR + "/a-folder-dest", function (err) {
assert.ifError(err)
fs.readFile(FIXTURES_DIR + "/a-folder-dest/another-folder/file3", 'utf8', function (err, contents) {
assert.ifError(err)
assert.strictEqual(contents, "knuckles\n")
// move it back
fs.move(FIXTURES_DIR + "/a-folder-dest", FIXTURES_DIR + "/a-folder", done)
//restore
fs.rename = oldRename
})
})
})
})