@@ -2,46 +2,95 @@ import events from "./events";
2
2
import utils from "./utils" ;
3
3
4
4
describe ( "core.events tests" , ( ) => {
5
- let catched ;
6
- let outer ;
7
- let inner ;
8
-
9
- beforeEach ( ( ) => {
10
- catched = null ;
11
- const el = document . createElement ( "div" ) ;
12
- el . innerHTML = `
5
+ describe ( "add / remove event listener" , ( ) => {
6
+ const _el = {
7
+ event_list : [ ] ,
8
+ addEventListener ( event_type , cb ) {
9
+ this . event_list . push ( [ event_type , cb ] ) ;
10
+ } ,
11
+ removeEventListener ( event_type , cb ) {
12
+ const idx = this . event_list . indexOf ( [ event_type , cb ] ) ;
13
+ this . event_list . splice ( idx , 1 ) ;
14
+ } ,
15
+ } ;
16
+
17
+ it ( "Registers events only once and unregisters events." , ( done ) => {
18
+ const cb1 = ( ) => { } ;
19
+ const cb2 = ( ) => { } ;
20
+
21
+ // register one event handler
22
+ events . add_event_listener ( _el , "click" , "test_click" , cb1 ) ;
23
+ expect ( _el . event_list . length ) . toBe ( 1 ) ;
24
+ expect ( _el . event_list [ 0 ] [ 1 ] ) . toBe ( cb1 ) ;
25
+
26
+ // register another event hander under the same id
27
+ events . add_event_listener ( _el , "click" , "test_click" , cb2 ) ;
28
+ expect ( _el . event_list . length ) . toBe ( 1 ) ;
29
+ expect ( _el . event_list [ 0 ] [ 1 ] ) . toBe ( cb2 ) ;
30
+
31
+ // register two more event handlers with unique ids
32
+ events . add_event_listener ( _el , "click" , "test_click_2" , ( ) => { } ) ;
33
+ events . add_event_listener ( _el , "click" , "test_click_3" , ( ) => { } ) ;
34
+ expect ( _el . event_list . length ) . toBe ( 3 ) ;
35
+
36
+ // remove one specific event handler
37
+ events . remove_event_listener ( _el , "test_click_2" ) ;
38
+ expect ( _el . event_list . length ) . toBe ( 2 ) ;
39
+
40
+ // try to remove an unregistered event handler
41
+ events . remove_event_listener ( _el , "test_click_4" ) ;
42
+ expect ( _el . event_list . length ) . toBe ( 2 ) ;
43
+
44
+ // remove all registered event handlers on that element
45
+ events . remove_event_listener ( _el ) ;
46
+ expect ( _el . event_list . length ) . toBe ( 0 ) ;
47
+
48
+ done ( ) ;
49
+ } ) ;
50
+ } ) ;
51
+
52
+ describe ( "event factories" , ( ) => {
53
+ let catched ;
54
+ let outer ;
55
+ let inner ;
56
+
57
+ beforeEach ( ( ) => {
58
+ catched = null ;
59
+ const el = document . createElement ( "div" ) ;
60
+ el . innerHTML = `
13
61
<div id="outer">
14
62
<div id="inner"></div>
15
63
</div>
16
64
` ;
17
- outer = el . querySelector ( "#outer" ) ;
18
- inner = el . querySelector ( "#inner" ) ;
19
- } ) ;
65
+ outer = el . querySelector ( "#outer" ) ;
66
+ inner = el . querySelector ( "#inner" ) ;
67
+ } ) ;
20
68
21
- it ( "change event" , async ( ) => {
22
- outer . addEventListener ( "change" , ( ) => {
23
- catched = "outer" ;
69
+ it ( "change event" , async ( ) => {
70
+ outer . addEventListener ( "change" , ( ) => {
71
+ catched = "outer" ;
72
+ } ) ;
73
+ inner . dispatchEvent ( events . change_event ( ) ) ;
74
+ await utils . timeout ( 1 ) ;
75
+ expect ( catched ) . toBe ( "outer" ) ;
24
76
} ) ;
25
- inner . dispatchEvent ( events . change_event ( ) ) ;
26
- await utils . timeout ( 1 ) ;
27
- expect ( catched ) . toBe ( "outer" ) ;
28
- } ) ;
29
77
30
- it ( "input event" , async ( ) => {
31
- outer . addEventListener ( "input" , ( ) => {
32
- catched = "outer" ;
78
+ it ( "input event" , async ( ) => {
79
+ outer . addEventListener ( "input" , ( ) => {
80
+ catched = "outer" ;
81
+ } ) ;
82
+ inner . dispatchEvent ( events . input_event ( ) ) ;
83
+ await utils . timeout ( 1 ) ;
84
+ expect ( catched ) . toBe ( "outer" ) ;
33
85
} ) ;
34
- inner . dispatchEvent ( events . input_event ( ) ) ;
35
- await utils . timeout ( 1 ) ;
36
- expect ( catched ) . toBe ( "outer" ) ;
37
- } ) ;
38
86
39
- it ( "submit event" , async ( ) => {
40
- outer . addEventListener ( "submit" , ( ) => {
41
- catched = "outer" ;
87
+ it ( "submit event" , async ( ) => {
88
+ outer . addEventListener ( "submit" , ( ) => {
89
+ catched = "outer" ;
90
+ } ) ;
91
+ inner . dispatchEvent ( events . submit_event ( ) ) ;
92
+ await utils . timeout ( 1 ) ;
93
+ expect ( catched ) . toBe ( "outer" ) ;
42
94
} ) ;
43
- inner . dispatchEvent ( events . submit_event ( ) ) ;
44
- await utils . timeout ( 1 ) ;
45
- expect ( catched ) . toBe ( "outer" ) ;
46
95
} ) ;
47
96
} ) ;
0 commit comments