-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
212 lines (186 loc) · 4.23 KB
/
test.js
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
'use strict';
const {promisify} = require('util');
const {lstat, mkdir, writeFile} = require('graceful-fs');
const rmfr = require('.');
const test = require('tape');
const promisifiedLstat = promisify(lstat);
const promisifiedMkdir = promisify(mkdir);
const promisifiedWriteFile = promisify(writeFile);
test('rmfr()', async t => {
await Promise.all([
promisifiedWriteFile('tmp_file', ''),
promisifiedMkdir('tmp_dir')
]);
await rmfr('tmp_file');
try {
await promisifiedLstat('tmp_file');
t.fail('File not removed.');
} catch ({code}) {
t.equal(
code,
'ENOENT',
'should remove a file.'
);
}
await rmfr('tmp_d*', {});
t.ok(
(await promisifiedLstat('tmp_dir')).isDirectory(),
'should disable `glob` option by default.'
);
await rmfr('../{tmp_d*,test.js}', {
glob: {
cwd: 'node_modules',
ignore: __filename
}
});
try {
await promisifiedLstat('../{tmp_d*,package.json}');
t.fail('Directory not removed.');
} catch ({code}) {
t.equal(
code,
'ENOENT',
'should support glob.'
);
}
t.ok(
(await promisifiedLstat(__filename)).isFile(),
'should support glob options.'
);
await rmfr('test.js', {
glob: {
cwd: 'this/directory/does/not/exist'
}
});
t.ok(
(await promisifiedLstat(__filename)).isFile(),
'should consider `cwd` even if the path contains no special characters.'
);
const error = new Error('_');
try {
await rmfr('.gitignore', {unlink: (path, cb) => cb(error)});
t.fail('Unexpectedly succeeded.');
} catch (err) {
t.equal(
err,
error,
'should fail when an error occurs while calling rimraf.'
);
}
try {
await rmfr();
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'Expected 1 or 2 arguments (<string>[, <Object>]), but got no arguments.',
'should fail when it takes no arguments.'
);
}
try {
await rmfr('<', {o: 'O'}, '/');
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'Expected 1 or 2 arguments (<string>[, <Object>]), but got 3 arguments.',
'should fail when it takes too many arguments.'
);
}
try {
await rmfr(['1'], {glob: true});
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'rimraf: path should be a string',
'should fail when the first argument is not a string.'
);
}
try {
await rmfr('foo', 1);
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.ok(
/^Expected an option object passed to rimraf.*, but got 1 \(number\)\./.test(message),
'should fail when the second argument is not an object.'
);
}
try {
await rmfr('foo', {chmod: new Set(['a'])});
t.fail('Unexpectedly succeeded.');
} catch ({name}) {
t.equal(
name,
'TypeError',
'should fail when it takes an invalid option.'
);
}
try {
await rmfr('foo', {
maxBusyTries: 'foo',
emfileWait: 'bar',
glob: 'baz'
});
t.fail('Unexpectedly succeeded.');
} catch ({name}) {
t.equal(
name,
'TypeError',
'should fail when it takes invalid options.'
);
}
try {
await rmfr('foo', {
glob: {
stat: true
}
});
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'rmfr doesn\'t support `stat` option in `glob` option, but got true (boolean).',
'should fail when it takes unsupported glob option.'
);
}
try {
await rmfr('foo', {
glob: {
nosort: false
}
});
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'rmfr doesn\'t allow `nosort` option in `glob` option to be disabled, but `false` was passed to it.',
'should fail when the forcedly enabled option is disabled.'
);
}
try {
await rmfr('foo', {disableGlob: true});
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'rmfr doesn\'t support `disableGlob` option, but a value true (boolean) was provided. rmfr disables glob feature by default.',
'should fail when `disableGlob` option is provided.'
);
}
try {
await rmfr('foo', {
glob: {
ignore: new WeakSet()
}
});
t.fail('Unexpectedly succeeded.');
} catch ({message}) {
t.equal(
message,
'node-glob expected `ignore` option to be an array or string, but got WeakSet {}.',
'should fail when it takes invalid glob options.'
);
}
t.end();
});