forked from jamesshore/lets_code_javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmv.js
More file actions
130 lines (104 loc) · 3.84 KB
/
mv.js
File metadata and controls
130 lines (104 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
var shell = require('..');
var assert = require('assert'),
path = require('path'),
fs = require('fs');
// Node shims for < v0.7
fs.existsSync = fs.existsSync || path.existsSync;
shell.config.silent = true;
function numLines(str) {
return typeof str === 'string' ? str.match(/\n/g).length : 0;
}
shell.rm('-rf', 'tmp');
shell.mkdir('tmp');
// Prepare tmp/
shell.cp('resources/*', 'tmp');
//
// Invalids
//
shell.mv();
assert.ok(shell.error());
shell.mv('file1');
assert.ok(shell.error());
shell.mv('-f');
assert.ok(shell.error());
shell.mv('-Z', 'tmp/file1', 'tmp/file1'); // option not supported
assert.ok(shell.error());
assert.equal(fs.existsSync('tmp/file1'), true);
shell.mv('asdfasdf', 'tmp'); // source does not exist
assert.ok(shell.error());
assert.equal(numLines(shell.error()), 1);
assert.equal(fs.existsSync('tmp/asdfasdf'), false);
shell.mv('asdfasdf1', 'asdfasdf2', 'tmp'); // sources do not exist
assert.ok(shell.error());
assert.equal(numLines(shell.error()), 2);
assert.equal(fs.existsSync('tmp/asdfasdf1'), false);
assert.equal(fs.existsSync('tmp/asdfasdf2'), false);
shell.mv('asdfasdf1', 'asdfasdf2', 'tmp/file1'); // too many sources (dest is file)
assert.ok(shell.error());
shell.mv('tmp/file1', 'tmp/file2'); // dest already exists
assert.ok(shell.error());
shell.mv('tmp/file1', 'tmp/file2', 'tmp/a_file'); // too many sources (exist, but dest is file)
assert.ok(shell.error());
assert.equal(fs.existsSync('tmp/a_file'), false);
shell.mv('tmp/file*', 'tmp/file1'); // can't use wildcard when dest is file
assert.ok(shell.error());
assert.equal(fs.existsSync('tmp/file1'), true);
assert.equal(fs.existsSync('tmp/file2'), true);
assert.equal(fs.existsSync('tmp/file1.js'), true);
assert.equal(fs.existsSync('tmp/file2.js'), true);
//
// Valids
//
shell.cd('tmp');
// handles self OK
shell.mkdir('tmp2');
shell.mv('*', 'tmp2'); // has to handle self (tmp2 --> tmp2) without throwing error
assert.ok(shell.error()); // there's an error, but not fatal
assert.equal(fs.existsSync('tmp2/file1'), true); // moved OK
shell.mv('tmp2/*', '.'); // revert
assert.equal(fs.existsSync('file1'), true); // moved OK
shell.mv('file1', 'file3'); // one source
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1'), false);
assert.equal(fs.existsSync('file3'), true);
shell.mv('file3', 'file1'); // revert
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1'), true);
// two sources
shell.rm('-rf', 't');
shell.mkdir('-p', 't');
shell.mv('file1', 'file2', 't');
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1'), false);
assert.equal(fs.existsSync('file2'), false);
assert.equal(fs.existsSync('t/file1'), true);
assert.equal(fs.existsSync('t/file2'), true);
shell.mv('t/*', '.'); // revert
assert.equal(fs.existsSync('file1'), true);
assert.equal(fs.existsSync('file2'), true);
// two sources, array style
shell.rm('-rf', 't');
shell.mkdir('-p', 't');
shell.mv(['file1', 'file2'], 't'); // two sources
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1'), false);
assert.equal(fs.existsSync('file2'), false);
assert.equal(fs.existsSync('t/file1'), true);
assert.equal(fs.existsSync('t/file2'), true);
shell.mv('t/*', '.'); // revert
assert.equal(fs.existsSync('file1'), true);
assert.equal(fs.existsSync('file2'), true);
shell.mv('file*.js', 't'); // wildcard
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1.js'), false);
assert.equal(fs.existsSync('file2.js'), false);
assert.equal(fs.existsSync('t/file1.js'), true);
assert.equal(fs.existsSync('t/file2.js'), true);
shell.mv('t/*', '.'); // revert
assert.equal(fs.existsSync('file1.js'), true);
assert.equal(fs.existsSync('file2.js'), true);
shell.mv('-f', 'file1', 'file2'); // dest exists, but -f given
assert.equal(shell.error(), null);
assert.equal(fs.existsSync('file1'), false);
assert.equal(fs.existsSync('file2'), true);
shell.exit(123);