123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- 'use strict';
- var test = require('tape');
- var copyfiles = require('../');
- var rimraf = require('rimraf');
- var fs = require('fs');
- var _mkdirp = require('mkdirp');
- var cp = require('child_process');
- var glob = require('glob');
- const mkdirp = (path, cb) => {
- _mkdirp(path).then(()=>{
- cb();
- }, cb);
- }
- function after(t) {
- rimraf('output', function (err) {
- t.error(err, 'rm out');
- rimraf('input', function (err) {
- t.error(err, 'rm input');
- t.end();
- });
- });
- }
- function before(t) {
- mkdirp('input/other', function (err) {
- t.error(err, 'rm input');
- t.end();
- });
- }
- test('normal', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js', 'c');
- copyfiles(['input/*.txt', 'output'], function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('modes', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a', {
- mode: 33261
- });
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js', 'c');
- copyfiles(['input/*.txt', 'output'], function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.equals(fs.statSync('output/input/a.txt').mode, 33261, 'correct mode')
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('exclude', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js.txt', 'c');
- fs.writeFileSync('input/d.ps.txt', 'd');
- copyfiles( ['input/*.txt', 'output'], {
- exclude: ['**/*.js.txt', '**/*.ps.txt']
- }, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('exclude cl', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js.txt', 'c');
- fs.writeFileSync('input/d.ps.txt', 'd');
- cp.spawnSync('./copyfiles', ['-e', '**/*.js.txt', '-e', '**/*.ps.txt', 'input/*.txt', 'output']);
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- t.test('teardown', after);
- });
- test('all', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/.c.txt', 'c');
- copyfiles( ['input/*.txt', 'output'], {
- all: true
- }, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('all from cl', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/.c.txt', 'c');
- cp.spawnSync('./copyfiles', ['-a', 'input/*.txt', 'output']);
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- t.test('teardown', after);
- });
- test('error on nothing coppied', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/.c.txt', 'c');
- var out = cp.spawnSync('./copyfiles', ['-E', 'input/*.txt', 'output']);
- t.ok(out.status, 'should error');
- t.end();
- });
- t.test('teardown', after);
- });
- test('all from cl 2', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/.c.txt', 'c');
- cp.spawnSync('./copyfiles', ['--all', 'input/*.txt', 'output']);
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- t.test('teardown', after);
- });
- test('soft', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- mkdirp('output/input/other', function(){
- fs.writeFileSync('input/a.txt', 'inputA');
- fs.writeFileSync('output/input/a.txt', 'outputA');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/other/c.txt', 'inputC');
- fs.writeFileSync('output/input/other/c.txt', 'outputC');
- fs.writeFileSync('input/other/d.txt', 'd');
- copyfiles(['input/**/*.txt', 'output'], {soft:true}, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
- t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
- t.end();
- });
- });
- })
- });
- t.test('teardown', after);
- });
- test('soft from cl', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- mkdirp('output/input/other', function(){
- fs.writeFileSync('input/a.txt', 'inputA');
- fs.writeFileSync('output/input/a.txt', 'outputA');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/other/c.txt', 'inputC');
- fs.writeFileSync('output/input/other/c.txt', 'outputC');
- fs.writeFileSync('input/other/d.txt', 'd');
- cp.spawnSync('./copyfiles', ['-s', 'input/**/*.txt', 'output']);
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
- t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('soft from cl 2', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- mkdirp('output/input/other', function(){
- fs.writeFileSync('input/a.txt', 'inputA');
- fs.writeFileSync('output/input/a.txt', 'outputA');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/other/c.txt', 'inputC');
- fs.writeFileSync('output/input/other/c.txt', 'outputC');
- fs.writeFileSync('input/other/d.txt', 'd');
- cp.spawnSync('./copyfiles', ['--soft', 'input/**/*.txt', 'output']);
- fs.readdir('output/input', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
- t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
- t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
- t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('with up', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js', 'c');
- copyfiles(['input/*.txt', 'output'], 1, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('with up cl', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js', 'c');
- cp.spawnSync('./copyfiles', ['-u', '1', 'input/*.txt', 'output']);
- fs.readdir('output', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- t.test('teardown', after);
- });
- test('with copyup', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/c.js', 'c');
- cp.spawnSync('./copyup', ['input/*.txt', 'output']);
- fs.readdir('output', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- t.test('teardown', after);
- });
- test('with up 2', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/other/a.txt', 'a');
- fs.writeFileSync('input/other/b.txt', 'b');
- fs.writeFileSync('input/other/c.js', 'c');
- copyfiles(['input/**/*.txt', 'output'], 2, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('flatten', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.writeFileSync('input/other/a.txt', 'a');
- fs.writeFileSync('input/b.txt', 'b');
- fs.writeFileSync('input/other/c.js', 'c');
- copyfiles(['input/**/*.txt', 'output'], true, function (err) {
- t.error(err, 'copyfiles');
- fs.readdir('output', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
- test('follow', function (t) {
- t.test('setup', before);
- t.test('copy stuff', function (t) {
- fs.mkdirSync('input/origin');
- fs.mkdirSync('input/origin/inner');
- fs.writeFileSync('input/origin/inner/a.txt', 'a');
- fs.symlinkSync('origin', 'input/dest');
- copyfiles(['input/**/*.txt', 'output'], { up: 1, follow: true }, function (err) {
- t.error(err, 'copyfiles');
- glob('output/**/*.txt', function (err, files) {
- t.error(err, 'readdir');
- t.deepEquals(files, ['output/dest/inner/a.txt', 'output/origin/inner/a.txt'], 'correct number of things');
- t.end();
- });
- });
- });
- t.test('teardown', after);
- });
|