@@ -12,6 +12,291 @@ describe('Event Emitter Tests', () => {
1212 expect ( actual ) . to . be . instanceOf ( EventEmitter ) ;
1313 } )
1414
15+ it ( 'Should match' , async ( ) => {
16+ const emitter = new EventEmitter ( )
17+
18+ emitter . on ( 'match something' , x => { } )
19+ emitter . on ( / m a t c h ( s o m e t h i n g ) / g, x => { } )
20+ emitter . on ( / m a t c h ( s o m e ) ( t h i n g ) / i, x => { } )
21+ emitter . on ( / m a t c h ( s o m e ) ( t h i n g ) / i, x => { } )
22+ emitter . on ( 'no mas' , x => { } )
23+ emitter . on ( / n o m a s / g, x => { } )
24+
25+ const matches = emitter . match ( 'match something' )
26+
27+ expect ( matches . get ( 'match something' ) ?. pattern ) . to . equal ( 'match something' )
28+ expect ( matches . get ( '/match (something)/g' ) ?. pattern ) . to . equal ( '/match (something)/g' )
29+ expect ( matches . get ( '/match (some)(thing)/i' ) ?. pattern ) . to . equal ( '/match (some)(thing)/i' )
30+
31+ expect ( matches . get ( '/match (something)/g' ) ?. data . args . length ) . to . equal ( 1 )
32+ expect ( matches . get ( '/match (some)(thing)/i' ) ?. data . args . length ) . to . equal ( 2 )
33+ } )
34+
35+ it ( 'Should emit' , async ( ) => {
36+ const emitter = new EventEmitter < {
37+ 'trigger basic something' : [ number ] ,
38+ '/trigger basic something/' : [ number ] ,
39+ 'trigger advance something' : [ number ] ,
40+ 'trigger incomplete something' : [ number ]
41+ } >
42+
43+ const triggered : number [ ] = [ ]
44+ emitter . on ( 'trigger basic something' , async ( x ) => {
45+ expect ( x ) . to . equal ( 1 )
46+ triggered . push ( 1 )
47+ } , 1 )
48+
49+ emitter . on < '/trigger basic something/' > ( / t r i g g e r b a s i c s o m e t h i n g / , async x => {
50+ expect ( x ) . to . equal ( 1 )
51+ triggered . push ( 2 )
52+ } , 2 )
53+
54+ emitter . on ( 'trigger basic something' , async x => {
55+ expect ( x ) . to . equal ( 1 )
56+ triggered . push ( 3 )
57+ } , 3 )
58+
59+ emitter . on ( / t r i g g e r b a s i c s o m e t h i n g / , async x => {
60+ expect ( x ) . to . equal ( 1 )
61+ triggered . push ( 4 )
62+ } , 4 )
63+
64+ await emitter . emit ( 'trigger basic something' , 1 )
65+
66+ expect ( triggered . length ) . to . equal ( 4 )
67+ expect ( triggered [ 0 ] ) . to . equal ( 4 )
68+ expect ( triggered [ 1 ] ) . to . equal ( 3 )
69+ expect ( triggered [ 2 ] ) . to . equal ( 2 )
70+ expect ( triggered [ 3 ] ) . to . equal ( 1 )
71+ } )
72+
73+ it ( 'Should call all listeners' , async ( ) => {
74+ const emitter = new EventEmitter
75+
76+ const triggered : number [ ] = [ ]
77+ emitter . on ( 'trigger basic something' , async x => {
78+ expect ( x ) . to . equal ( 1 )
79+ triggered . push ( 1 )
80+ } )
81+
82+ emitter . on ( 'trigger basic something' , async x => {
83+ expect ( x ) . to . equal ( 1 )
84+ triggered . push ( 2 )
85+ } )
86+
87+ emitter . on ( 'trigger basic something' , async x => {
88+ expect ( x ) . to . equal ( 1 )
89+ triggered . push ( 3 )
90+ } )
91+
92+ await emitter . emit ( 'trigger basic something' , 1 )
93+
94+ expect ( triggered . length ) . to . equal ( 3 )
95+ expect ( triggered [ 0 ] ) . to . equal ( 1 )
96+ expect ( triggered [ 1 ] ) . to . equal ( 2 )
97+ expect ( triggered [ 2 ] ) . to . equal ( 3 )
98+ } )
99+
100+ it ( 'Should have meta' , async ( ) => {
101+ const emitter = new EventEmitter
102+
103+ const triggered : number [ ] = [ ]
104+ emitter . on ( / ^ t r i g g e r b a s i c ( .+ ) $ / , async function something1 ( ) {
105+ expect ( emitter . event ?. event ) . to . equal ( 'trigger basic something' )
106+ expect ( emitter . event ?. pattern ) . to . equal ( '/^trigger basic (.+)$/' )
107+ expect ( emitter . event ?. data . args [ 0 ] ) . to . equal ( 'something' )
108+ triggered . push ( 1 )
109+ } , 2 )
110+
111+ emitter . on ( / t r i g g e r ( .+ ) s o m e t h i n g $ / , async function something2 ( ) {
112+ expect ( emitter . event ?. event ) . to . equal ( 'trigger basic something' )
113+ expect ( emitter . event ?. pattern ) . to . equal ( '/trigger (.+) something$/' )
114+ expect ( emitter . event ?. data . args [ 0 ] ) . to . equal ( 'basic' )
115+ triggered . push ( 2 )
116+ } , 1 )
117+
118+ const actual = await emitter . emit ( 'trigger basic something' , 1 )
119+
120+ expect ( triggered . length ) . to . equal ( 2 )
121+ expect ( triggered [ 0 ] ) . to . equal ( 1 )
122+ expect ( triggered [ 1 ] ) . to . equal ( 2 )
123+ expect ( actual . code ) . to . equal ( 200 )
124+ } )
125+
126+ it ( 'Should emit advanced event' , async ( ) => {
127+ const emitter = new EventEmitter
128+
129+ const triggered : number [ ] = [ ]
130+ emitter . on ( 'trigger advance something' , async x => {
131+ expect ( x ) . to . equal ( 1 )
132+ triggered . push ( 1 )
133+ } )
134+
135+ emitter . on ( / t r i g g e r ( a d v a n c e ) s o m e t h i n g / , async x => {
136+ expect ( x ) . to . equal ( 1 )
137+ triggered . push ( 2 )
138+ expect ( emitter . event ?. data . args [ 0 ] ) . to . equal ( 'advance' )
139+ } , 2 )
140+
141+ const actual = await emitter . emit ( 'trigger advance something' , 1 )
142+
143+ expect ( triggered . length ) . to . equal ( 2 )
144+ expect ( triggered [ 0 ] ) . to . equal ( 2 )
145+ expect ( triggered [ 1 ] ) . to . equal ( 1 )
146+ expect ( actual . code ) . to . equal ( 200 )
147+ } )
148+
149+ it ( 'Should emit incomplete event' , async ( ) => {
150+ const emitter = new EventEmitter
151+
152+ const triggered : number [ ] = [ ]
153+ emitter . on ( 'trigger incomplete something' , async x => {
154+ triggered . push ( 1 )
155+ } )
156+
157+ emitter . on ( / t r i g g e r ( i n c o m p l e t e ) s o m e t h i n g / , async x => {
158+ expect ( x ) . to . equal ( 1 )
159+ triggered . push ( 2 )
160+ return false
161+ } , 2 )
162+
163+ const actual = await emitter . emit ( 'trigger incomplete something' , 1 )
164+
165+ expect ( triggered . length ) . to . equal ( 1 )
166+ expect ( triggered [ 0 ] ) . to . equal ( 2 )
167+ expect ( actual . code ) . to . equal ( 309 )
168+ } )
169+
170+ it ( 'Should unbind' , async ( ) => {
171+ const emitter = new EventEmitter
172+ let listener = async x => {
173+ triggered . push ( 1 )
174+ }
175+
176+ const triggered : number [ ] = [ ]
177+ emitter . on ( 'trigger unbind something' , listener )
178+
179+ emitter . clear ( 'trigger unbind something' )
180+ const actual = await emitter . emit ( 'trigger unbind something' )
181+
182+ expect ( triggered . length ) . to . equal ( 0 )
183+ expect ( actual . code ) . to . equal ( 404 )
184+
185+ let listener2 = async x => {
186+ triggered . push ( 2 )
187+ }
188+
189+ emitter . on ( 'trigger unbind something' , listener )
190+ emitter . on ( 'trigger unbind something' , listener2 )
191+ emitter . unbind ( 'trigger unbind something' , listener )
192+
193+ const actual2 = await emitter . emit ( 'trigger unbind something' )
194+
195+ expect ( triggered . length ) . to . equal ( 1 )
196+ expect ( triggered [ 0 ] ) . to . equal ( 2 )
197+ expect ( actual2 . code ) . to . equal ( 200 )
198+ } )
199+
200+ it ( 'Should nest' , async ( ) => {
201+ const emitter = new EventEmitter < {
202+ 'on something' : [ number ] ,
203+ 'on something else' : [ number ]
204+ } > ( ) ;
205+
206+ emitter . on ( 'on something' , async x => {
207+ expect ( emitter . event ?. event ) . to . equal ( 'on something' )
208+ const actual = await emitter . emit ( 'on something else' , x + 1 )
209+ expect ( actual . code ) . to . equal ( 200 )
210+ } )
211+
212+ emitter . on ( 'on something else' , x => {
213+ expect ( emitter . event ?. event ) . to . equal ( 'on something else' )
214+ } )
215+
216+ await emitter . emit ( 'on something' , 1 )
217+ } )
218+
219+ it ( 'Should listen to regexp' , async ( ) => {
220+ const emitter = new EventEmitter
221+
222+ let triggered = 0
223+ emitter . on ( 'GET /components/heyo/beans' , async x => {
224+ expect ( emitter . event ?. event ) . to . equal ( 'GET /components/heyo/beans' )
225+ triggered ++
226+ } )
227+
228+ emitter . on ( / ^ G E T \s \/ c o m p o n e n t s \/ ( .* ) \/ * $ / , async x => {
229+ expect ( emitter . event ?. event ) . to . equal ( 'GET /components/heyo/beans' )
230+ triggered ++
231+ expect ( emitter . event ?. data . args [ 0 ] ) . to . equal ( 'heyo/beans' )
232+ } )
233+
234+ await emitter . emit ( 'GET /components/heyo/beans' , 1 )
235+
236+ expect ( triggered ) . to . equal ( 2 )
237+ } )
238+
239+ it ( 'Should asyncronously emit' , async ( ) => {
240+ const emitter = new EventEmitter ( ) ;
241+
242+ const actual : number [ ] = [ ]
243+
244+ emitter . on ( 'async test' , async ( ) => {
245+ actual . push ( 1 )
246+ } )
247+
248+ emitter . on ( 'async test' , async ( ) => {
249+ actual . push ( 2 )
250+ } )
251+
252+ emitter . on ( 'async test' , async ( ) => {
253+ actual . push ( 3 )
254+ } )
255+
256+ await emitter . emit ( 'async test' , 0 )
257+
258+ expect ( actual . length ) . to . equal ( 3 )
259+ } )
260+
261+ it ( 'Should allow middleware' , async ( ) => {
262+ const emitter1 = new EventEmitter
263+ const emitter2 = new EventEmitter
264+
265+ const triggered : number [ ] = [ ]
266+ emitter1 . on ( 'trigger basic something' , async x => {
267+ expect ( x ) . to . equal ( 1 )
268+ triggered . push ( 1 )
269+ } , 1 )
270+
271+ emitter2 . on ( 'trigger basic something' , async x => {
272+ expect ( x ) . to . equal ( 1 )
273+ triggered . push ( 2 )
274+ } , 2 )
275+
276+ emitter1 . use ( emitter2 )
277+
278+ await emitter1 . emit ( 'trigger basic something' , 1 )
279+
280+ expect ( triggered . length ) . to . equal ( 2 )
281+ expect ( triggered [ 0 ] ) . to . equal ( 2 )
282+ expect ( triggered [ 1 ] ) . to . equal ( 1 )
283+ } )
284+
285+ it ( 'Should handle clearing a non-existent event gracefully' , ( ) => {
286+ const emitter = new EventEmitter ( ) ;
287+ expect ( emitter . listeners [ 'non-existent event' ] ) . to . be . undefined ;
288+ emitter . clear ( 'non-existent event' ) ;
289+ expect ( emitter . listeners [ 'non-existent event' ] ) . to . be . undefined ;
290+ } )
291+
292+ it ( 'Should return empty matches when no patterns match' , ( ) => {
293+ const emitter = new EventEmitter ( ) ;
294+ emitter . on ( 'exampleEvent' , async ( ) => { } ) ;
295+ emitter . on ( / r e g e x E v e n t / , async ( ) => { } ) ;
296+ const matches = emitter . match ( 'nonMatchingEvent' ) ;
297+ expect ( matches . size ) . to . equal ( 0 ) ;
298+ } )
299+
15300 it ( 'Should hook' , async ( ) => {
16301 const emitter = new EventEmitter < {
17302 'on something' : [ number ] ,
0 commit comments