UNPKG

11.7 kBJavaScriptView Raw
1'use strict';
2var test = require('tape');
3var copyfiles = require('../');
4var rimraf = require('rimraf');
5var fs = require('fs');
6var mkdirp = require('mkdirp');
7var cp = require('child_process');
8var glob = require('glob');
9
10function after(t) {
11 rimraf('output', function (err) {
12 t.error(err, 'rm out');
13 rimraf('input', function (err) {
14 t.error(err, 'rm input');
15 t.end();
16 });
17 });
18}
19function before(t) {
20 mkdirp('input/other', function (err) {
21 t.error(err, 'rm input');
22 t.end();
23 });
24}
25
26test('normal', function (t) {
27 t.test('setup', before);
28 t.test('copy stuff', function (t) {
29 fs.writeFileSync('input/a.txt', 'a');
30 fs.writeFileSync('input/b.txt', 'b');
31 fs.writeFileSync('input/c.js', 'c');
32 copyfiles(['input/*.txt', 'output'], function (err) {
33 t.error(err, 'copyfiles');
34 fs.readdir('output/input', function (err, files) {
35 t.error(err, 'readdir');
36 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
37 t.end();
38 });
39 });
40 });
41 t.test('teardown', after);
42});
43test('modes', function (t) {
44 t.test('setup', before);
45 t.test('copy stuff', function (t) {
46 fs.writeFileSync('input/a.txt', 'a', {
47 mode: 33261
48 });
49 fs.writeFileSync('input/b.txt', 'b');
50 fs.writeFileSync('input/c.js', 'c');
51 copyfiles(['input/*.txt', 'output'], function (err) {
52 t.error(err, 'copyfiles');
53 fs.readdir('output/input', function (err, files) {
54 t.error(err, 'readdir');
55 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
56 t.equals(fs.statSync('output/input/a.txt').mode, 33261, 'correct mode')
57 t.end();
58 });
59 });
60 });
61 t.test('teardown', after);
62});
63test('exclude', function (t) {
64 t.test('setup', before);
65 t.test('copy stuff', function (t) {
66 fs.writeFileSync('input/a.txt', 'a');
67 fs.writeFileSync('input/b.txt', 'b');
68 fs.writeFileSync('input/c.js.txt', 'c');
69 fs.writeFileSync('input/d.ps.txt', 'd');
70 copyfiles( ['input/*.txt', 'output'], {
71 exclude: ['**/*.js.txt', '**/*.ps.txt']
72 }, function (err) {
73 t.error(err, 'copyfiles');
74 fs.readdir('output/input', function (err, files) {
75 t.error(err, 'readdir');
76 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
77 t.end();
78 });
79 });
80 });
81 t.test('teardown', after);
82});
83test('exclude cl', function (t) {
84 t.test('setup', before);
85 t.test('copy stuff', function (t) {
86 fs.writeFileSync('input/a.txt', 'a');
87 fs.writeFileSync('input/b.txt', 'b');
88 fs.writeFileSync('input/c.js.txt', 'c');
89 fs.writeFileSync('input/d.ps.txt', 'd');
90 cp.spawnSync('./copyfiles', ['-e', '**/*.js.txt', '-e', '**/*.ps.txt', 'input/*.txt', 'output']);
91 fs.readdir('output/input', function (err, files) {
92 t.error(err, 'readdir');
93 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
94 t.end();
95 });
96 });
97 t.test('teardown', after);
98});
99test('all', function (t) {
100 t.test('setup', before);
101 t.test('copy stuff', function (t) {
102 fs.writeFileSync('input/a.txt', 'a');
103 fs.writeFileSync('input/b.txt', 'b');
104 fs.writeFileSync('input/.c.txt', 'c');
105 copyfiles( ['input/*.txt', 'output'], {
106 all: true
107 }, function (err) {
108 t.error(err, 'copyfiles');
109 fs.readdir('output/input', function (err, files) {
110 t.error(err, 'readdir');
111 t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
112 t.end();
113 });
114 });
115 });
116 t.test('teardown', after);
117});
118test('all from cl', function (t) {
119 t.test('setup', before);
120 t.test('copy stuff', function (t) {
121 fs.writeFileSync('input/a.txt', 'a');
122 fs.writeFileSync('input/b.txt', 'b');
123 fs.writeFileSync('input/.c.txt', 'c');
124 cp.spawnSync('./copyfiles', ['-a', 'input/*.txt', 'output']);
125 fs.readdir('output/input', function (err, files) {
126 t.error(err, 'readdir');
127 t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
128 t.end();
129 });
130 });
131 t.test('teardown', after);
132});
133test('error on nothing coppied', function (t) {
134 t.test('setup', before);
135 t.test('copy stuff', function (t) {
136 fs.writeFileSync('input/.c.txt', 'c');
137 var out = cp.spawnSync('./copyfiles', ['-E', 'input/*.txt', 'output']);
138 t.ok(out.status, 'should error');
139 t.end();
140 });
141 t.test('teardown', after);
142});
143test('all from cl 2', function (t) {
144 t.test('setup', before);
145 t.test('copy stuff', function (t) {
146 fs.writeFileSync('input/a.txt', 'a');
147 fs.writeFileSync('input/b.txt', 'b');
148 fs.writeFileSync('input/.c.txt', 'c');
149 cp.spawnSync('./copyfiles', ['--all', 'input/*.txt', 'output']);
150 fs.readdir('output/input', function (err, files) {
151 t.error(err, 'readdir');
152 t.deepEquals(files, ['.c.txt', 'a.txt', 'b.txt'], 'correct number of things');
153 t.end();
154 });
155 });
156 t.test('teardown', after);
157});
158test('soft', function (t) {
159 t.test('setup', before);
160 t.test('copy stuff', function (t) {
161 mkdirp('output/input/other', function(){
162 fs.writeFileSync('input/a.txt', 'inputA');
163 fs.writeFileSync('output/input/a.txt', 'outputA');
164 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
165 fs.writeFileSync('input/b.txt', 'b');
166 fs.writeFileSync('input/other/c.txt', 'inputC');
167 fs.writeFileSync('output/input/other/c.txt', 'outputC');
168 fs.writeFileSync('input/other/d.txt', 'd');
169 copyfiles(['input/**/*.txt', 'output'], {soft:true}, function (err) {
170 t.error(err, 'copyfiles');
171 fs.readdir('output/input', function (err, files) {
172 t.error(err, 'readdir');
173 t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
174 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
175 t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
176 t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
177 t.end();
178 });
179 });
180 })
181 });
182 t.test('teardown', after);
183});
184test('soft from cl', function (t) {
185 t.test('setup', before);
186 t.test('copy stuff', function (t) {
187 mkdirp('output/input/other', function(){
188 fs.writeFileSync('input/a.txt', 'inputA');
189 fs.writeFileSync('output/input/a.txt', 'outputA');
190 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
191 fs.writeFileSync('input/b.txt', 'b');
192 fs.writeFileSync('input/other/c.txt', 'inputC');
193 fs.writeFileSync('output/input/other/c.txt', 'outputC');
194 fs.writeFileSync('input/other/d.txt', 'd');
195 cp.spawnSync('./copyfiles', ['-s', 'input/**/*.txt', 'output']);
196
197 fs.readdir('output/input', function (err, files) {
198 t.error(err, 'readdir');
199 t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
200 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
201 t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
202 t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
203 t.end();
204 });
205 });
206 });
207 t.test('teardown', after);
208});
209test('soft from cl 2', function (t) {
210 t.test('setup', before);
211 t.test('copy stuff', function (t) {
212 mkdirp('output/input/other', function(){
213 fs.writeFileSync('input/a.txt', 'inputA');
214 fs.writeFileSync('output/input/a.txt', 'outputA');
215 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
216 fs.writeFileSync('input/b.txt', 'b');
217 fs.writeFileSync('input/other/c.txt', 'inputC');
218 fs.writeFileSync('output/input/other/c.txt', 'outputC');
219 fs.writeFileSync('input/other/d.txt', 'd');
220 cp.spawnSync('./copyfiles', ['--soft', 'input/**/*.txt', 'output']);
221
222 fs.readdir('output/input', function (err, files) {
223 t.error(err, 'readdir');
224 t.deepEquals(files, ['a.txt', 'b.txt', 'other'], 'correct number of things');
225 t.equal( fs.readFileSync('output/input/a.txt').toString(), 'outputA' )
226 t.equal( fs.readFileSync('output/input/b.txt').toString(), 'b')
227 t.equal( fs.readFileSync('output/input/other/c.txt').toString(), 'outputC')
228 t.end();
229 });
230 });
231 });
232 t.test('teardown', after);
233});
234test('with up', function (t) {
235 t.test('setup', before);
236 t.test('copy stuff', function (t) {
237 fs.writeFileSync('input/a.txt', 'a');
238 fs.writeFileSync('input/b.txt', 'b');
239 fs.writeFileSync('input/c.js', 'c');
240 copyfiles(['input/*.txt', 'output'], 1, function (err) {
241 t.error(err, 'copyfiles');
242 fs.readdir('output', function (err, files) {
243 t.error(err, 'readdir');
244 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
245 t.end();
246 });
247 });
248 });
249 t.test('teardown', after);
250});
251test('with up cl', function (t) {
252 t.test('setup', before);
253 t.test('copy stuff', function (t) {
254 fs.writeFileSync('input/a.txt', 'a');
255 fs.writeFileSync('input/b.txt', 'b');
256 fs.writeFileSync('input/c.js', 'c');
257 cp.spawnSync('./copyfiles', ['-u', '1', 'input/*.txt', 'output']);
258 fs.readdir('output', function (err, files) {
259 t.error(err, 'readdir');
260 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
261 t.end();
262 });
263 });
264 t.test('teardown', after);
265});
266test('with copyup', function (t) {
267 t.test('setup', before);
268 t.test('copy stuff', function (t) {
269 fs.writeFileSync('input/a.txt', 'a');
270 fs.writeFileSync('input/b.txt', 'b');
271 fs.writeFileSync('input/c.js', 'c');
272 cp.spawnSync('./copyup', ['input/*.txt', 'output']);
273 fs.readdir('output', function (err, files) {
274 t.error(err, 'readdir');
275 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
276 t.end();
277 });
278 });
279 t.test('teardown', after);
280});
281test('with up 2', function (t) {
282 t.test('setup', before);
283 t.test('copy stuff', function (t) {
284 fs.writeFileSync('input/other/a.txt', 'a');
285 fs.writeFileSync('input/other/b.txt', 'b');
286 fs.writeFileSync('input/other/c.js', 'c');
287 copyfiles(['input/**/*.txt', 'output'], 2, function (err) {
288 t.error(err, 'copyfiles');
289 fs.readdir('output', function (err, files) {
290 t.error(err, 'readdir');
291 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
292 t.end();
293 });
294 });
295 });
296 t.test('teardown', after);
297});
298test('flatten', function (t) {
299 t.test('setup', before);
300 t.test('copy stuff', function (t) {
301 fs.writeFileSync('input/other/a.txt', 'a');
302 fs.writeFileSync('input/b.txt', 'b');
303 fs.writeFileSync('input/other/c.js', 'c');
304 copyfiles(['input/**/*.txt', 'output'], true, function (err) {
305 t.error(err, 'copyfiles');
306 fs.readdir('output', function (err, files) {
307 t.error(err, 'readdir');
308 t.deepEquals(files, ['a.txt', 'b.txt'], 'correct number of things');
309 t.end();
310 });
311 });
312 });
313 t.test('teardown', after);
314});
315test('follow', function (t) {
316 t.test('setup', before);
317 t.test('copy stuff', function (t) {
318 fs.mkdirSync('input/origin');
319 fs.mkdirSync('input/origin/inner');
320 fs.writeFileSync('input/origin/inner/a.txt', 'a');
321 fs.symlinkSync('origin', 'input/dest');
322 copyfiles(['input/**/*.txt', 'output'], { up: 1, follow: true }, function (err) {
323 t.error(err, 'copyfiles');
324 glob('output/**/*.txt', function (err, files) {
325 t.error(err, 'readdir');
326 t.deepEquals(files, ['output/dest/inner/a.txt', 'output/origin/inner/a.txt'], 'correct number of things');
327 t.end();
328 });
329 });
330 });
331 t.test('teardown', after);
332});