File tree Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -58,6 +58,25 @@ const remove_event_listener = (el, id) => {
5858 }
5959} ;
6060
61+ /**
62+ * Await an event to be thrown.
63+ *
64+ * Usage:
65+ * await events.await_event(button, "click");
66+ *
67+ * @param {DOM Node } el - The element to listen on.
68+ * @param {String } event_name - The event name to listen for.
69+ *
70+ * @returns {Promise } - Returns a Promise which can be used for ``await`` and which will be resolved when the event is throwm.
71+ *
72+ */
73+ const await_event = ( el , event_name ) => {
74+ // See: https://stackoverflow.com/a/44746691/1337474
75+ return new Promise ( ( resolve ) =>
76+ el . addEventListener ( event_name , resolve , { once : true } )
77+ ) ;
78+ } ;
79+
6180/**
6281 * Event factories
6382 */
@@ -100,6 +119,7 @@ const submit_event = () => {
100119export default {
101120 add_event_listener : add_event_listener ,
102121 remove_event_listener : remove_event_listener ,
122+ await_event : await_event ,
103123 click_event : click_event ,
104124 change_event : change_event ,
105125 input_event : input_event ,
Original file line number Diff line number Diff line change @@ -47,6 +47,19 @@ describe("core.events tests", () => {
4747
4848 done ( ) ;
4949 } ) ;
50+
51+ it ( "Awaits an event to happen" , async ( ) => {
52+ const el = document . createElement ( "div" ) ;
53+
54+ window . setTimeout ( ( ) => {
55+ el . dispatchEvent ( new Event ( "init" ) ) ;
56+ } , 1 ) ;
57+
58+ await events . await_event ( el , "init" ) ;
59+
60+ // If test reaches this expect statement, all is fine.
61+ expect ( true ) . toBe ( true ) ;
62+ } ) ;
5063 } ) ;
5164
5265 describe ( "2 - event factories" , ( ) => {
You can’t perform that action at this time.
0 commit comments