UNPKG

2.58 kBPlain TextView Raw
1import * as Promise from 'bluebird';
2import {expect} from 'chai';
3import {
4 assertFileSystemContract,
5 ignoredDir,
6 ignoredFile,
7 dirName,
8 fileName,
9 content
10} from './implementation-suite'
11import {SlowFs} from '../test-kit/drivers/slow-fs';
12import {MemoryFileSystem, TimeoutFileSystem, FileSystem} from '../src/universal';
13
14describe('the timeout file system imeplementation', () => {
15 const timeout = 200;
16 const accuracyFactor = 0.9;
17
18 assertFileSystemContract(() =>
19 Promise.resolve(new TimeoutFileSystem(timeout , new MemoryFileSystem(undefined, [ignoredDir, ignoredFile]))),
20 {interval:1, noExtraEventsGrace:10, timeout:30}
21 );
22
23 describe(`delayed timeout test`, () => {
24 let fs: FileSystem;
25 let startTimestamp: number;
26 let endTimestamp: number;
27 const delay = timeout * 2;
28
29 beforeEach(() => {
30 startTimestamp = Date.now();
31 fs = new TimeoutFileSystem(timeout, new SlowFs(delay));
32 });
33
34 it(`ensureDirectory exit before delay is over`, () => {
35 return expect(fs.ensureDirectory(dirName)).to.eventually.be.rejectedWith('timed out')
36 .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
37 });
38
39 it(`saveFile exit before delay is over`, () => {
40 return expect(fs.saveFile(`${dirName}\\${fileName}`, '#goodnessSquad')).to.eventually.be.rejectedWith('timed out')
41 .then(() => expect(startTimestamp-Date.now()).to.be.below(delay));
42 });
43
44 it(`deleteFile exit before delay is over`, () => {
45 return expect(fs.deleteFile(`${dirName}\\${fileName}`)).to.eventually.be.rejectedWith('timed out')
46 .then(() => expect(startTimestamp-Date.now()).to.be.below(delay));
47 });
48
49 it(`deleteDirectory exit before delay is over`, () => {
50 return expect(fs.deleteDirectory(dirName)).to.eventually.be.rejectedWith('timed out')
51 .then(()=>expect(startTimestamp-Date.now()).to.be.below(delay));
52 });
53
54 it(`loadTextFile exit before delay is over`, () => {
55 return expect(fs.loadTextFile(dirName)).to.eventually.be.rejectedWith('timed out')
56 .then(() => expect(startTimestamp-Date.now()).to.be.below(delay));
57 });
58
59 it(`loadDirectoryTree exit before delay is over`, () => {
60 return expect(fs.loadDirectoryTree()).to.eventually.be.rejectedWith('timed out')
61 .then(() => expect(startTimestamp-Date.now()).to.be.below(delay));
62 });
63 });
64});