UNPKG

3.57 kBPlain TextView Raw
1import {EventHandler, EventsManager} from "../src/events-manager";
2import {EventsMatcher} from "../test-kit/drivers/events-matcher";
3import {DirectoryCreatedEvent, FileDeletedEvent, fileSystemEventNames} from "../src/universal";
4import {delayedPromise} from "../src/promise-utils";
5import * as sinon from 'sinon';
6import {expect} from "chai";
7
8describe('EventsManager', () => {
9 let matcher: EventsMatcher;
10 let em: EventsManager;
11
12 const event1 = {type: 'fileDeleted', fullPath: 'foo'} as FileDeletedEvent;
13 const event2 = {type: 'fileDeleted', fullPath: 'bar'} as FileDeletedEvent;
14 const event3 = {type: 'directoryCreated', fullPath: 'baz'} as DirectoryCreatedEvent;
15 const handler = {
16 types: ['fileDeleted'],
17 filter: (e) => e === event1,
18 apply: () => (event3 as any),
19 } as EventHandler<'fileDeleted'>;
20
21 beforeEach('setup', () => {
22 em = new EventsManager();
23 matcher = new EventsMatcher({retries: 15, interval: 2, timeout: 40, noExtraEventsGrace: 10});
24 matcher.track(em.events, ...fileSystemEventNames);
25 });
26
27 describe('delays', async () => {
28 const delay = 50;
29 let delayedManager: EventsManager;
30 let delayedManagerMatcher: EventsMatcher;
31 beforeEach('setup', () => {
32 em = new EventsManager();
33 delayedManager = new EventsManager({delay});
34 delayedManagerMatcher = new EventsMatcher({
35 retries: 15,
36 interval: 2,
37 timeout: 40,
38 noExtraEventsGrace: 10
39 });
40 delayedManagerMatcher.track(delayedManager.events, ...fileSystemEventNames);
41 });
42
43 it('events', async () => {
44 delayedManager.emit(event1); // this will change
45 await delayedManagerMatcher.expect([]);
46 await delayedPromise(delay * 2);
47 await delayedManagerMatcher.expect([event1]);
48 });
49
50 it('handlers', async () => {
51 const spy = sinon.spy();
52 delayedManager.addEventHandler({
53 types: ['fileDeleted'],
54 filter: spy,
55 apply: () => {
56 },
57 });
58 delayedManager.emit(event1); // this will change
59 await expect(spy).to.have.callCount(0);
60 await delayedPromise(delay * 2);
61 await expect(spy).to.have.callCount(1);
62 });
63 });
64
65 it('emits events', async () => {
66 em.emit(event1);
67 await matcher.expect([event1]);
68 });
69
70
71 it('modifies matching events', async () => {
72 em.addEventHandler(handler);
73 em.emit(event1); // this will change
74 em.emit(event2); // this does not match handler
75 await matcher.expect([event3, event2]);
76 });
77
78 it('filters matching events', async () => {
79 em.addEventHandler({
80 types: ['fileDeleted'],
81 filter: (e) => e === event1,
82 apply: () => {
83 }, // don't return an event
84 });
85 em.emit(event1); // this will be filtered
86 em.emit(event2); // this does not match handler
87 await matcher.expect([event2]);
88 });
89
90 it('respects time out (assume clean-up)', async () => {
91 em.addEventHandler(handler, 1);
92 await delayedPromise(10);
93 em.emit(event1);
94 await matcher.expect([event1]);
95 });
96
97
98 it('removes handlers', async () => {
99 em.addEventHandler(handler);
100 em.removeEventHandler(handler);
101 em.emit(event1);
102 await matcher.expect([event1]);
103 });
104});