async-file-tried 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/coveralls.yml +26 -0
- package/.github/workflows/node.js.yml +30 -0
- package/LICENSE +21 -0
- package/README.md +204 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +417 -0
- package/dist/index.js.map +1 -0
- package/index.ts +472 -0
- package/package.json +54 -0
- package/test/index.test.js +393 -0
- package/test/static-testfiles/append-copy.txt +1 -0
- package/test/static-testfiles/file.txt +0 -0
- package/test/static-testfiles/test.json +3 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for ./dist/index.js
|
|
3
|
+
*
|
|
4
|
+
* usage:
|
|
5
|
+
* $ npm test
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as chai from 'chai';
|
|
9
|
+
import fs from '../dist/index.js';
|
|
10
|
+
|
|
11
|
+
const assert = chai.assert;
|
|
12
|
+
const expect = chai.expect;
|
|
13
|
+
|
|
14
|
+
describe('Tests for async-file-tried', () => {
|
|
15
|
+
|
|
16
|
+
/****************************************
|
|
17
|
+
* TEST INTERFACE
|
|
18
|
+
****************************************/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* THE CONSTANTS
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
it('[1] OBJ: fs.constants shall be an object', () => {
|
|
25
|
+
assert.isObject(fs.constants);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('[2] STR: fs.__dirname shall be a string starting with "/"', () => {
|
|
29
|
+
expect(fs.__dirname.startsWith("/")).to.be.true;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('[3] STR: fs.__filename shall be a string starting with "/" and ends with ".js"', () => {
|
|
33
|
+
expect(fs.__filename.startsWith("/")).to.be.true;
|
|
34
|
+
expect(fs.__filename.endsWith(".js")).to.be.true;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* THE FS/PROMISE FUNCTIONS
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
it('[4] ERR: fs.access shall error when file inaccessible', async () => {
|
|
42
|
+
let [res, err] = await fs.access('', fs.constants.R_OK);
|
|
43
|
+
assert.notEqual(err, null);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('[5] RES: fs.access shall return valid result when file is accessible', async () => {
|
|
47
|
+
let [res, err] = await fs.access('./test/static-testfiles/test.json', fs.constants.R_OK);
|
|
48
|
+
assert.equal(err, null);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('[6] ERR: fs.appendFile shall error when file does not exist', async () => {
|
|
52
|
+
let [res, err] = await fs.appendFile('', 'some text');
|
|
53
|
+
assert.notEqual(err, null);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('[7] RES: fs.appendFile shall return valid result when file was appended', async () => {
|
|
57
|
+
let [res, err] = await fs.appendFile('./test/static-testfiles/append.txt', 'some text');
|
|
58
|
+
assert.equal(err, null);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('[8] ERR: fs.chmod shall error when file does not exist', async () => {
|
|
62
|
+
let [res, err] = await fs.chmod('', '755');
|
|
63
|
+
assert.notEqual(err, null);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('[9] RES: fs.chmod shall return valid result when file rights where changed', async () => {
|
|
67
|
+
let [res, err] = await fs.chmod('./test/static-testfiles/append.txt', '755');
|
|
68
|
+
assert.equal(err, null);
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('[10] ERR: fs.chown shall error when file does not exist', async () => {
|
|
72
|
+
let [res, err] = await fs.chown('', '755');
|
|
73
|
+
assert.notEqual(err, null);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
/*it('[10A] RES: fs.chown shall return valid result when file rights where changed', async () => {
|
|
77
|
+
let [res, err] = await fs.chown('./test/static-testfiles/append.txt', 1541, 999);
|
|
78
|
+
console.log(err);
|
|
79
|
+
assert.equal(err, null);
|
|
80
|
+
});*/
|
|
81
|
+
|
|
82
|
+
it('[11] ERR: fs.copyFile shall error when file does not exist', async () => {
|
|
83
|
+
let [res, err] = await fs.copyFile('', '');
|
|
84
|
+
assert.notEqual(err, null);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('[12] RES: fs.copyFile shall return valid result when file rights was copied', async () => {
|
|
88
|
+
let [res, err] = await fs.copyFile('./test/static-testfiles/append.txt', './test/static-testfiles/append-copy.txt');
|
|
89
|
+
assert.equal(err, null);
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('[13] ERR: fs.link shall error when file does not exist', async () => {
|
|
93
|
+
let [res, err] = await fs.link('', '');
|
|
94
|
+
assert.notEqual(err, null);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('[14] RES: fs.link shall return valid result when link was set', async () => {
|
|
98
|
+
let [res, err] = await fs.link('./test/static-testfiles/append.txt', './test/static-testfiles/hardlinkToFile-append.txt');
|
|
99
|
+
assert.equal(err, null);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('[15] ERR: fs.unlink shall error when file does not exist', async () => {
|
|
103
|
+
let [res, err] = await fs.unlink('');
|
|
104
|
+
assert.notEqual(err, null);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('[16] RES: fs.unlink shall error return valid result when files was removed', async () => {
|
|
108
|
+
let [res, err] = await fs.unlink('./test/static-testfiles/hardlinkToFile-append.txt');
|
|
109
|
+
assert.equal(err, null);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('[17] ERR: fs.symlink shall error when file does not exist', async () => {
|
|
113
|
+
let [res, err] = await fs.symlink('', '', 'file');
|
|
114
|
+
assert.notEqual(err, null);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('[18] RES: fs.symlink shall return valid result when symlink was set', async () => {
|
|
118
|
+
let [res, err] = await fs.symlink('./test/static-testfiles/append.txt', './test/static-testfiles/symlinkToFile-append.txt', 'file');
|
|
119
|
+
assert.equal(err, null);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('[19] ERR: fs.lchmod shall error when file does not exist', async () => {
|
|
123
|
+
let [res, err] = await fs.lchmod('', '755');
|
|
124
|
+
assert.notEqual(err, null);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('[20] RES: fs.lchmod shall return valid result when file rights where changed', async () => {
|
|
128
|
+
let [res, err] = await fs.lchmod('./test/static-testfiles/symlinkToFile-append.txt', '755');
|
|
129
|
+
assert.equal(err, null);
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it('[21] ERR: fs.lchown shall error when file does not exist', async () => {
|
|
133
|
+
let [res, err] = await fs.lchown('', 1541, 1541);
|
|
134
|
+
assert.notEqual(err, null);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
/*
|
|
138
|
+
it('[21A] RES: fs.lchown shall return valid result when file rights where changed', async () => {
|
|
139
|
+
let [res, err] = await fs.lchown('./test/static-testfiles/symlinkToFile-append.txt', 1200, 1201);
|
|
140
|
+
console.log(err);
|
|
141
|
+
assert.equal(err, null);
|
|
142
|
+
});*/
|
|
143
|
+
|
|
144
|
+
it('[22] ERR: fs.lstat shall error when file does not exist', async () => {
|
|
145
|
+
let [res, err] = await fs.lstat('');
|
|
146
|
+
assert.notEqual(err, null);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('[23] RES: fs.lstat shall return valid result when symlink stats where retrieved', async () => {
|
|
150
|
+
let [res, err] = await fs.lstat('./test/static-testfiles/symlinkToFile-append.txt');
|
|
151
|
+
assert.equal(err, null);
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('[24] ERR: fs.readlink shall error when link does not exist', async () => {
|
|
155
|
+
let [res, err] = await fs.readlink('');
|
|
156
|
+
assert.notEqual(err, null);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('[25] RES: fs.lstat shall return valid result when symlink origin was read', async () => {
|
|
160
|
+
let [res, err] = await fs.readlink('./test/static-testfiles/symlinkToFile-append.txt');
|
|
161
|
+
assert.equal(err, null);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('[26] ERR: fs.lutimes shall error when file does not exist', async () => {
|
|
165
|
+
let [res, err] = await fs.lutimes('', '', '');
|
|
166
|
+
assert.notEqual(err, null);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('[27] RES: fs.lutimes shall return valid result when modification date and access time where changed', async () => {
|
|
170
|
+
let [res, err] = await fs.lutimes('./test/static-testfiles/append.txt', new Date(), new Date());
|
|
171
|
+
assert.equal(err, null);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('[28] ERR: fs.mkdir shall error when dirname is empty', async () => {
|
|
175
|
+
let [res, err] = await fs.mkdir('');
|
|
176
|
+
assert.notEqual(err, null);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
it('[29] RES: fs.mkdir shall return valid result when new folder was created', async () => {
|
|
180
|
+
let [res, err] = await fs.mkdir('./test/static-testfiles/my-new-folder');
|
|
181
|
+
assert.equal(err, null);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('[30] ERR: fs.cp shall error when file does not exist', async () => {
|
|
185
|
+
let [res, err] = await fs.cp('', '');
|
|
186
|
+
assert.notEqual(err, null);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('[31] RES: fs.cp shall return valid result when file rights was copied', async () => {
|
|
190
|
+
let [res, err] = await fs.cp('./test/static-testfiles/my-new-folder/', './test/static-testfiles/my-new-folder-copy/', {recursive: true});
|
|
191
|
+
assert.equal(err, null);
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
it('[32] ERR: fs.mkdtemp shall error when dirname is invalid', async () => {
|
|
195
|
+
let [res, err] = await fs.mkdtemp({ });
|
|
196
|
+
assert.notEqual(err, null);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('[33] RES: fs.mkdtemp shall return valid result when new temporary folder was created', async () => {
|
|
200
|
+
let [res, err] = await fs.mkdtemp('./test/static-testfiles/temp-');
|
|
201
|
+
assert.equal(err, null);
|
|
202
|
+
// cleanup
|
|
203
|
+
await fs.rmdir(res);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it('[34] ERR: fs.open shall error when file does not exist', async () => {
|
|
207
|
+
let [res, err] = await fs.open('');
|
|
208
|
+
assert.notEqual(err, null);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it('[35] RES: fs.open shall return valid result when file was opened', async () => {
|
|
212
|
+
let [res, err] = await fs.open('./test/static-testfiles/append.txt', 'r');
|
|
213
|
+
assert.equal(err, null);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('[36] ERR: fs.opendir shall error when file does not exist', async () => {
|
|
217
|
+
let [res, err] = await fs.opendir('');
|
|
218
|
+
assert.notEqual(err, null);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it('[37] RES: fs.opendir shall return valid result when file was opened', async () => {
|
|
222
|
+
let [res, err] = await fs.opendir('./test/static-testfiles', { encoding: "utf8", bufferSize: 64 } );
|
|
223
|
+
assert.equal(err, null);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it('[38] ERR: fs.readFile shall error when file does not exist', async () => {
|
|
227
|
+
let [res, err] = await fs.readFile('');
|
|
228
|
+
assert.notEqual(err, null);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('[39] RES: fs.readFile shall return valid result when file was read', async () => {
|
|
232
|
+
let [res, err] = await fs.readFile('./test/static-testfiles/append.txt' );
|
|
233
|
+
assert.equal(err, null);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('[40] ERR: fs.readdir shall error when directory does not exist', async () => {
|
|
237
|
+
let [res, err] = await fs.readdir('');
|
|
238
|
+
assert.notEqual(err, null);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it('[41] RES: fs.readdir shall return valid result when directory was read', async () => {
|
|
242
|
+
let [res, err] = await fs.readdir('./test/static-testfiles/' );
|
|
243
|
+
assert.equal(err, null);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
it('[42] ERR: fs.realpath shall error when directory does not exist', async () => {
|
|
247
|
+
let [res, err] = await fs.realpath('');
|
|
248
|
+
assert.notEqual(err, null);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
it('[43] RES: fs.realpath shall return valid result when real path was resolved', async () => {
|
|
252
|
+
let [res, err] = await fs.realpath('./test/../' );
|
|
253
|
+
assert.equal(err, null);
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
it('[44] ERR: fs.rename shall error when directory does not exist', async () => {
|
|
257
|
+
let [res, err] = await fs.rename('', '');
|
|
258
|
+
assert.notEqual(err, null);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
it('[45] RES: fs.rename shall return valid result when file was renamed', async () => {
|
|
262
|
+
let [res, err] = await fs.rename('./test/static-testfiles/append.txt', './test/static-testfiles/append-renamed.txt' );
|
|
263
|
+
assert.equal(err, null);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
it('[46] ERR: fs.rm shall error when directory or file does not exist', async () => {
|
|
267
|
+
let [res, err] = await fs.rm('');
|
|
268
|
+
assert.notEqual(err, null);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
it('[47] RES: fs.rm shall return valid result when file was removed', async () => {
|
|
272
|
+
let [res, err] = await fs.rm('./test/static-testfiles/append-renamed.txt' );
|
|
273
|
+
assert.equal(err, null);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
it('[48] ERR: fs.rmdir shall error when directory or file does not exist', async () => {
|
|
277
|
+
let [res, err] = await fs.rmdir('');
|
|
278
|
+
assert.notEqual(err, null);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it('[49] RES: fs.rmdir shall return valid result when directory was removed', async () => {
|
|
282
|
+
let [res, err] = await fs.rmdir('./test/static-testfiles/my-new-folder');
|
|
283
|
+
assert.equal(err, null);
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
it('[50] ERR: fs.stat shall error when directory or file does not exist', async () => {
|
|
287
|
+
let [res, err] = await fs.stat('');
|
|
288
|
+
assert.notEqual(err, null);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('[51] RES: fs.stat shall return valid result when file can be accessed for stats', async () => {
|
|
292
|
+
let [res, err] = await fs.stat('./test/static-testfiles/test.json');
|
|
293
|
+
assert.equal(err, null);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it('[52] ERR: fs.writeFile shall error when filename invalid', async () => {
|
|
297
|
+
let [res, err] = await fs.writeFile('', '');
|
|
298
|
+
assert.notEqual(err, null);
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
it('[53] RES: fs.writeFile shall return valid result when file was written', async () => {
|
|
302
|
+
let [res, err] = await fs.writeFile('./test/static-testfiles/file.txt', 'my text');
|
|
303
|
+
assert.equal(err, null);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
it('[54] ERR: fs.truncate shall error when file does not exist', async () => {
|
|
307
|
+
let [res, err] = await fs.truncate('');
|
|
308
|
+
assert.notEqual(err, null);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
it('[55] RES: fs.truncate shall return valid result when file was shortened', async () => {
|
|
312
|
+
let [res, err] = await fs.truncate('./test/static-testfiles/file.txt', 0);
|
|
313
|
+
assert.equal(err, null);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
it('[56] ERR: fs.utimes shall error when file does not exist', async () => {
|
|
317
|
+
let [res, err] = await fs.utimes('', '', '');
|
|
318
|
+
assert.notEqual(err, null);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
it('[57] RES: fs.utimes shall return valid result when modification date and access time where changed', async () => {
|
|
322
|
+
let [res, err] = await fs.utimes('./test/static-testfiles/file.txt', new Date(), new Date());
|
|
323
|
+
assert.equal(err, null);
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it('[58] RES: fs.watch shall return valid result when modification date and access time where changed', async () => {
|
|
327
|
+
let [res, err] = await fs.watch('./test/static-testfiles/file.txt', (ev, file) => {
|
|
328
|
+
console.log("Watcher: " + file);
|
|
329
|
+
});
|
|
330
|
+
assert.equal(err, null);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* HELPER
|
|
335
|
+
*/
|
|
336
|
+
|
|
337
|
+
it('[59] RES: fs.__resolvePath shall return joined string', async () => {
|
|
338
|
+
let res = fs.__resolvePath(['./', 'folder', 'file.txt']);
|
|
339
|
+
assert.isString(res);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* EXTRAS
|
|
345
|
+
*/
|
|
346
|
+
|
|
347
|
+
it('[60] ERR: fs.asyncHandler shall error when Promise fails', async () => {
|
|
348
|
+
async function stall() {
|
|
349
|
+
await new Promise((resolve, reject) => {
|
|
350
|
+
let x = false;
|
|
351
|
+
if (x) resolve("OK");
|
|
352
|
+
else reject("Error");
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
let [res, err] = await fs.asyncHandler( () => stall());
|
|
356
|
+
assert.notEqual(err, null);
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
it('[61] RES: fs.asyncHandler shall return valid result when Promise resolves', async () => {
|
|
360
|
+
async function stall() {
|
|
361
|
+
await new Promise(resolve => setTimeout(resolve, 2));
|
|
362
|
+
}
|
|
363
|
+
let [res, err] = await fs.asyncHandler( () => stall());
|
|
364
|
+
assert.equal(err, null);
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
it('[62] ERR: fs.writeJson shall error when file does not exist', async () => {
|
|
368
|
+
let [res, err] = await fs.writeJson('', '');
|
|
369
|
+
assert.notEqual(err, null);
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
it('[63] RES: fs.writeJson shall return valid result when JSON was written', async () => {
|
|
373
|
+
let [res, err] = await fs.writeJson('./test/static-testfiles/test.json', { key : "value" });
|
|
374
|
+
assert.equal(err, null);
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
it('[64] ERR: fs.readJson shall error when file does not exist', async () => {
|
|
378
|
+
let [res, err] = await fs.readJson('');
|
|
379
|
+
assert.notEqual(err, null);
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
it('[65] RES: fs.readJson shall return object when JSON was read', async () => {
|
|
383
|
+
let [res, err] = await fs.readJson('./test/static-testfiles/test.json', 'utf8');
|
|
384
|
+
assert.isObject(res);
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
// cleanup symlink from test run:
|
|
390
|
+
await fs.unlink('./test/static-testfiles/symlinkToFile-append.txt');
|
|
391
|
+
|
|
392
|
+
// cleanup symlink from test run:
|
|
393
|
+
await fs.rm('./test/static-testfiles/file.txt');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
some text
|
|
File without changes
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"declaration": true,
|
|
8
|
+
"outDir": "./dist",
|
|
9
|
+
"rootDir": ".",
|
|
10
|
+
"types": ["node"],
|
|
11
|
+
"declarationMap": true,
|
|
12
|
+
"sourceMap": true,
|
|
13
|
+
"skipLibCheck": true
|
|
14
|
+
},
|
|
15
|
+
"include": [
|
|
16
|
+
"index.ts",
|
|
17
|
+
],
|
|
18
|
+
"exclude": [
|
|
19
|
+
"node_modules",
|
|
20
|
+
"test"
|
|
21
|
+
]
|
|
22
|
+
}
|