254 lines
8.7 KiB
JavaScript
254 lines
8.7 KiB
JavaScript
|
var testCase = require('nodeunit').testCase;
|
||
|
var fs = require('fs');
|
||
|
var wrench = require('../lib/wrench');
|
||
|
var path = require('path');
|
||
|
|
||
|
function checkResultHidden(test, files) {
|
||
|
var check = [
|
||
|
'.hidden',
|
||
|
'.hidden.txt',
|
||
|
'bar.txt',
|
||
|
'foo',
|
||
|
path.join('.hidden', 'dolor.md'),
|
||
|
path.join('foo', 'bar'),
|
||
|
path.join('foo', 'dolor.md'),
|
||
|
path.join('foo', 'lorem.txt'),
|
||
|
path.join('foo', 'bar', 'ipsum.js')
|
||
|
];
|
||
|
|
||
|
test.deepEqual(files, check);
|
||
|
}
|
||
|
|
||
|
function checkResultShown(test, files) {
|
||
|
var check = [
|
||
|
'bar.txt',
|
||
|
'foo',
|
||
|
path.join('foo', 'bar'),
|
||
|
path.join('foo', 'dolor.md'),
|
||
|
path.join('foo', 'lorem.txt'),
|
||
|
path.join('foo', 'bar', 'ipsum.js')
|
||
|
];
|
||
|
|
||
|
test.deepEqual(files, check);
|
||
|
}
|
||
|
|
||
|
function checkResultInflate(test, files) {
|
||
|
var check = [
|
||
|
'.hidden',
|
||
|
'bar.txt',
|
||
|
'test',
|
||
|
path.join('.hidden', 'dolor.md')
|
||
|
];
|
||
|
|
||
|
test.deepEqual(files, check);
|
||
|
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), false);
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), false);
|
||
|
}
|
||
|
|
||
|
function checkResultInflateAbsolute(test, files) {
|
||
|
var check = [
|
||
|
'.hidden',
|
||
|
'absolute-bar.txt',
|
||
|
'bar.txt',
|
||
|
'test',
|
||
|
path.join('.hidden', 'dolor.md')
|
||
|
];
|
||
|
|
||
|
test.deepEqual(files, check);
|
||
|
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), false);
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), false);
|
||
|
}
|
||
|
|
||
|
function checkResultDontInflate(test, files) {
|
||
|
var check = [
|
||
|
'.hidden',
|
||
|
'bar.txt',
|
||
|
'test',
|
||
|
path.join('.hidden', 'dolor.md')
|
||
|
];
|
||
|
|
||
|
test.deepEqual(files, check);
|
||
|
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), true);
|
||
|
test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), true);
|
||
|
}
|
||
|
|
||
|
function checkResultPreserveFiles(test, files) {
|
||
|
checkResultHidden(test, files);
|
||
|
var contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', '.hidden.txt')), "utf8");
|
||
|
test.deepEqual(contents, 'hidden file'); // Preserved Content
|
||
|
contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'bar.txt')), "utf8");
|
||
|
test.deepEqual(contents, 'shown file'); // Preserved Content
|
||
|
contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'foo/lorem.txt')), "utf8");
|
||
|
test.deepEqual(contents, 'Lorem ipsum, please preserve my content.'); // Preserved Content
|
||
|
contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'foo/dolor.md')), "utf8");
|
||
|
test.deepEqual(contents, '#dolor sit amet'); // Copied Content
|
||
|
}
|
||
|
|
||
|
function checkResultOverwriteFiles(test, files) {
|
||
|
checkResultHidden(test, files);
|
||
|
var contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', '.hidden.txt')), "utf8");
|
||
|
test.deepEqual(contents, 'just some text for .hidden.txt');
|
||
|
contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'bar.txt')), "utf8");
|
||
|
test.deepEqual(contents, 'just some text for bar.txt');
|
||
|
}
|
||
|
|
||
|
module.exports = testCase({
|
||
|
test_copyDirSyncRecursiveWithoutOptions: function(test) {
|
||
|
var dir = path.join(__dirname, 'shown');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(dir, testdir);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveHidden: function(test) {
|
||
|
var dir = path.join(__dirname, 'shown');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir);
|
||
|
|
||
|
checkResultHidden(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveShown: function(test) {
|
||
|
var dir = path.join(__dirname, 'shown');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: true });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir);
|
||
|
|
||
|
checkResultShown(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveInflate: function(test) {
|
||
|
var dir = path.join(__dirname, 'withsymlinks');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false, inflateSymlinks: true });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir);
|
||
|
|
||
|
checkResultInflate(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveInflateAbsoluteSymlinks: function(test) {
|
||
|
var dir = path.join(__dirname, 'withsymlinks');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
fs.symlinkSync(
|
||
|
path.resolve(__dirname, 'shown/bar.txt'),
|
||
|
path.join(dir, 'absolute-bar.txt')
|
||
|
);
|
||
|
|
||
|
wrench.mkdirSyncRecursive(testdir, 0777);
|
||
|
wrench.copyDirSyncRecursive(dir, testdir, { forceDelete: true, excludeHiddenUnix: false, inflateSymlinks: true });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir);
|
||
|
|
||
|
checkResultInflateAbsolute(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
fs.unlinkSync(path.join(dir, 'absolute-bar.txt'));
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveDontInflate: function(test) {
|
||
|
var dir = path.join(__dirname, 'withsymlinks');
|
||
|
var testdir = path.join(__dirname, 'testdir');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false, inflateSymlinks: false });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir);
|
||
|
|
||
|
checkResultDontInflate(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir);
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursivePreserveFiles: function(test) {
|
||
|
var dir = path.join(__dirname, 'shown'),
|
||
|
testdir1 = path.join(__dirname, 'testdir1'),
|
||
|
testdir2 = path.join(__dirname, 'testdir2');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
// wrench.mkdirSyncRecursive(testdir1, 0777);
|
||
|
wrench.copyDirSyncRecursive(dir, testdir1, { excludeHiddenUnix: false });
|
||
|
wrench.copyDirSyncRecursive(dir, testdir2, { excludeHiddenUnix: false });
|
||
|
|
||
|
fs.writeFileSync(path.join(testdir1, '.hidden.txt'), 'just some text for .hidden.txt');
|
||
|
fs.writeFileSync(path.join(testdir1, 'bar.txt'), 'just some text for bar.txt');
|
||
|
fs.writeFileSync(path.join(testdir1, 'foo/lorem.txt'), 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. ');
|
||
|
fs.writeFileSync(path.join(testdir1, 'foo/dolor.md'), '#dolor sit amet');
|
||
|
|
||
|
wrench.rmdirSyncRecursive(path.join(testdir2, 'foo'));
|
||
|
fs.mkdirSync(path.join(testdir2, 'foo'));
|
||
|
fs.writeFileSync(path.join(testdir2, 'foo/lorem.txt'), 'Lorem ipsum, please preserve my content.');
|
||
|
|
||
|
var err = wrench.copyDirSyncRecursive(testdir1, testdir2, { excludeHiddenUnix: false, preserveFiles: true });
|
||
|
test.equal(err, undefined, 'Error should not be returned');
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir2);
|
||
|
|
||
|
checkResultPreserveFiles(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir1);
|
||
|
wrench.rmdirSyncRecursive(testdir2);
|
||
|
|
||
|
test.done();
|
||
|
},
|
||
|
test_copyDirSyncRecursiveOverwriteFiles: function(test) {
|
||
|
var dir = path.join(__dirname, 'shown'),
|
||
|
testdir1 = path.join(__dirname, 'testdir1'),
|
||
|
testdir2 = path.join(__dirname, 'testdir2');
|
||
|
|
||
|
test.ok(fs.existsSync(dir), 'Folders should exist');
|
||
|
|
||
|
// wrench.mkdirSyncRecursive(testdir1, 0777);
|
||
|
wrench.copyDirSyncRecursive(dir, testdir1, { excludeHiddenUnix: false });
|
||
|
wrench.copyDirSyncRecursive(dir, testdir2, { excludeHiddenUnix: false });
|
||
|
|
||
|
fs.writeFileSync(path.join(testdir1, ".hidden.txt"), 'just some text for .hidden.txt');
|
||
|
fs.writeFileSync(path.join(testdir1, "bar.txt"), 'just some text for bar.txt');
|
||
|
|
||
|
wrench.copyDirSyncRecursive(testdir1, testdir2, { forceDelete: true, excludeHiddenUnix: false, preserveFiles: false });
|
||
|
|
||
|
var files = wrench.readdirSyncRecursive(testdir2);
|
||
|
|
||
|
checkResultOverwriteFiles(test, files);
|
||
|
|
||
|
wrench.rmdirSyncRecursive(testdir1);
|
||
|
wrench.rmdirSyncRecursive(testdir2);
|
||
|
|
||
|
test.done();
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
// vim: et ts=4 sw=4
|