@@ -169,7 +169,7 @@ describe("core.events tests", () => {
169169            expect ( cnt2 ) . toBe ( 2 ) ; 
170170            expect ( cnt3 ) . toBe ( 2 ) ; 
171171
172-             // Remove all event handler  on el1 
172+             // Remove all event handlers  on el1 
173173            events . remove_event_listener ( el1 ) ; 
174174            expect ( event_listener_map . get ( el1 ) ) . not . toBeDefined ( ) ; 
175175            expect ( event_listener_map . size ) . toBe ( 1 ) ; 
@@ -188,6 +188,121 @@ describe("core.events tests", () => {
188188            expect ( cnt2 ) . toBe ( 2 ) ; 
189189            expect ( cnt3 ) . toBe ( 3 ) ; 
190190        } ) ; 
191+ 
192+         it ( "Remove all events matching exactly an id from any element." ,  ( )  =>  { 
193+             const  el1  =  document . createElement ( "div" ) ; 
194+             const  el2  =  document . createElement ( "div" ) ; 
195+ 
196+             let  cnt1  =  0 ; 
197+             let  cnt2  =  0 ; 
198+             let  cnt3  =  0 ; 
199+ 
200+             const  shared_cb  =  ( )  =>  { 
201+                 cnt1 ++ ; 
202+             } ; 
203+ 
204+             // register the event handlers 
205+             events . add_event_listener ( el1 ,  "test1" ,  "test_event_1" ,  shared_cb ) ; 
206+             events . add_event_listener ( el1 ,  "test2" ,  "test_event_2" ,  shared_cb ) ; 
207+             events . add_event_listener ( el1 ,  "test3" ,  "test_event_3" ,  ( )  =>  cnt2 ++ ) ; 
208+             events . add_event_listener ( el2 ,  "test4" ,  "test_event_4" ,  ( )  =>  cnt3 ++ ) ; 
209+ 
210+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_1" ) ) . toBeDefined ( ) ; 
211+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_2" ) ) . toBeDefined ( ) ; 
212+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_3" ) ) . toBeDefined ( ) ; 
213+             expect ( event_listener_map . get ( el2 ) . get ( "test_event_4" ) ) . toBeDefined ( ) ; 
214+ 
215+             expect ( event_listener_map . size ) . toBe ( 2 ) ; 
216+ 
217+             el1 . dispatchEvent ( new  Event ( "test1" ) ) ; 
218+             expect ( cnt1 ) . toBe ( 1 ) ; 
219+             expect ( cnt2 ) . toBe ( 0 ) ; 
220+             expect ( cnt3 ) . toBe ( 0 ) ; 
221+ 
222+             el1 . dispatchEvent ( new  Event ( "test1" ) ) ; 
223+             expect ( cnt1 ) . toBe ( 2 ) ; 
224+             expect ( cnt2 ) . toBe ( 0 ) ; 
225+             expect ( cnt3 ) . toBe ( 0 ) ; 
226+ 
227+             el1 . dispatchEvent ( new  Event ( "test2" ) ) ; 
228+             expect ( cnt1 ) . toBe ( 3 ) ; 
229+             expect ( cnt2 ) . toBe ( 0 ) ; 
230+             expect ( cnt3 ) . toBe ( 0 ) ; 
231+ 
232+             el1 . dispatchEvent ( new  Event ( "test3" ) ) ; 
233+             expect ( cnt1 ) . toBe ( 3 ) ; 
234+             expect ( cnt2 ) . toBe ( 1 ) ; 
235+             expect ( cnt3 ) . toBe ( 0 ) ; 
236+ 
237+             el2 . dispatchEvent ( new  Event ( "test4" ) ) ; 
238+             expect ( cnt1 ) . toBe ( 3 ) ; 
239+             expect ( cnt2 ) . toBe ( 1 ) ; 
240+             expect ( cnt3 ) . toBe ( 1 ) ; 
241+ 
242+             // Remove only test_event_1 
243+             events . remove_event_listener ( undefined ,  "test_event_1" ) ; 
244+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_1" ) ) . not . toBeDefined ( ) ; 
245+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_2" ) ) . toBeDefined ( ) ; 
246+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_3" ) ) . toBeDefined ( ) ; 
247+             expect ( event_listener_map . get ( el2 ) . get ( "test_event_4" ) ) . toBeDefined ( ) ; 
248+             expect ( event_listener_map . size ) . toBe ( 2 ) ; 
249+ 
250+             // Counter should not increase anymore on event "test1" 
251+             el1 . dispatchEvent ( new  Event ( "test1" ) ) ; 
252+             expect ( cnt1 ) . toBe ( 3 ) ; 
253+             expect ( cnt2 ) . toBe ( 1 ) ; 
254+             expect ( cnt3 ) . toBe ( 1 ) ; 
255+ 
256+             // Rest should not be affected. 
257+             el1 . dispatchEvent ( new  Event ( "test2" ) ) ; 
258+             el1 . dispatchEvent ( new  Event ( "test3" ) ) ; 
259+             el2 . dispatchEvent ( new  Event ( "test4" ) ) ; 
260+             expect ( cnt1 ) . toBe ( 4 ) ; 
261+             expect ( cnt2 ) . toBe ( 2 ) ; 
262+             expect ( cnt3 ) . toBe ( 2 ) ; 
263+ 
264+             // Remove rest of event handlers on el1 
265+             events . remove_event_listener ( undefined ,  "test_event_2" ) ; 
266+             events . remove_event_listener ( undefined ,  "test_event_3" ) ; 
267+             expect ( event_listener_map . get ( el1 ) ) . not . toBeDefined ( ) ; 
268+             expect ( event_listener_map . size ) . toBe ( 1 ) ; 
269+ 
270+             // Counter should not increase anymore on el1 
271+             el1 . dispatchEvent ( new  Event ( "test1" ) ) ; 
272+             el1 . dispatchEvent ( new  Event ( "test2" ) ) ; 
273+             el1 . dispatchEvent ( new  Event ( "test3" ) ) ; 
274+             expect ( cnt1 ) . toBe ( 4 ) ; 
275+             expect ( cnt2 ) . toBe ( 2 ) ; 
276+             expect ( cnt3 ) . toBe ( 2 ) ; 
277+ 
278+             // But el2 should still work. 
279+             el2 . dispatchEvent ( new  Event ( "test4" ) ) ; 
280+             expect ( cnt1 ) . toBe ( 4 ) ; 
281+             expect ( cnt2 ) . toBe ( 2 ) ; 
282+             expect ( cnt3 ) . toBe ( 3 ) ; 
283+         } ) ; 
284+ 
285+         it ( "Remove all event listeners at once." ,  ( )  =>  { 
286+             const  el1  =  document . createElement ( "div" ) ; 
287+             const  el2  =  document . createElement ( "div" ) ; 
288+ 
289+             // register the event handlers 
290+             events . add_event_listener ( el1 ,  "test1" ,  "test_event_1" ,  ( )  =>  { } ) ; 
291+             events . add_event_listener ( el1 ,  "test2" ,  "test_event_2" ,  ( )  =>  { } ) ; 
292+             events . add_event_listener ( el1 ,  "test3" ,  "test_event_3" ,  ( )  =>  { } ) ; 
293+             events . add_event_listener ( el2 ,  "test4" ,  "test_event_4" ,  ( )  =>  { } ) ; 
294+ 
295+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_1" ) ) . toBeDefined ( ) ; 
296+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_2" ) ) . toBeDefined ( ) ; 
297+             expect ( event_listener_map . get ( el1 ) . get ( "test_event_3" ) ) . toBeDefined ( ) ; 
298+             expect ( event_listener_map . get ( el2 ) . get ( "test_event_4" ) ) . toBeDefined ( ) ; 
299+ 
300+             expect ( event_listener_map . size ) . toBe ( 2 ) ; 
301+ 
302+             // Remove all event listeners 
303+             events . remove_event_listener ( ) ; 
304+             expect ( event_listener_map . size ) . toBe ( 0 ) ; 
305+         } ) ; 
191306    } ) ; 
192307
193308    describe ( "2 - await pattern initialization" ,  ( )  =>  { 
0 commit comments