-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
104 lines (88 loc) · 2.44 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
'use strict';
const {lstat} = require('fs');
const {promisify} = require('util');
const {resolve} = require('path');
const prepareWrite = require('.');
const rmfr = require('rmfr');
const test = require('tape');
const promisifiedLstat = promisify(lstat);
test('prepareWrite()', async t => {
t.plan(12);
await rmfr('tmp');
(async () => {
await prepareWrite('tmp/0/1');
t.ok(
(await promisifiedLstat('tmp/0')).isDirectory(),
'should create a parent directory of the file.'
);
t.ok(
(await promisifiedLstat('tmp')).isDirectory(),
'should create ancestor directories of the file.'
);
})().catch(t.fail);
(async () => {
await prepareWrite(__filename);
t.pass('should create nothing when parent directories already exist.');
})().catch(t.fail);
(async () => {
try {
await prepareWrite(resolve('index.js', 'foo'));
} catch ({code}) {
t.equal(code, 'EEXIST', 'should fail when it cannot create directories.');
}
})().catch(t.fail);
(async () => {
try {
await prepareWrite(__dirname);
} catch (err) {
t.equal(
err.toString(),
`Error: Tried to create a file as ${
__dirname
}, but a directory with the same name already exists.`,
'should fail when a diretory already exists in the target path.'
);
t.equal(err.code, 'EISDIR', 'should add an appropriate `code` property to the error.');
t.equal(err.path, __dirname, 'should add an appropriate `path` property to the error.');
t.equal(err.syscall, 'open', 'should add an appropriate `syscall` property to the error.');
}
})().catch(t.fail);
(async () => {
try {
await prepareWrite(/^/u);
} catch (err) {
t.equal(
err.toString(),
'TypeError: Expected a file path (<string>), but got /^/u (regexp).',
'should fail when it takes a non-string argument.'
);
}
})().catch(t.fail);
try {
await prepareWrite('');
} catch (err) {
t.equal(
err.toString(),
'Error: Expected a file path (<string>), but got \'\' (empty string).',
'should fail when it takes an empty string.'
);
}
try {
await prepareWrite();
} catch (err) {
t.equal(
err.toString(),
'RangeError: Expected 1 argument (<string>), but got no arguments instead.',
'should fail when it takes no arguments.'
);
}
try {
await prepareWrite('a', 'b');
} catch (err) {
t.equal(
err.toString(),
'RangeError: Expected 1 argument (<string>), but got 2 arguments instead.',
'should fail when it takes too many arguments.'
);
}
});