@@ -5,41 +5,125 @@ describe('vdom events module', () => {
5
5
it ( 'should attach event handler to element' , ( ) => {
6
6
const click = jasmine . createSpy ( )
7
7
const vnode = new VNode ( 'a' , { on : { click } } )
8
+
8
9
const elm = patch ( null , vnode )
9
10
document . body . appendChild ( elm )
10
11
triggerEvent ( elm , 'click' )
11
12
expect ( click . calls . count ( ) ) . toBe ( 1 )
12
13
} )
13
14
14
- it ( 'should not attach new listener' , ( ) => {
15
+ it ( 'should not duplicate the same listener' , ( ) => {
15
16
const click = jasmine . createSpy ( )
16
17
const vnode1 = new VNode ( 'a' , { on : { click } } )
17
18
const vnode2 = new VNode ( 'a' , { on : { click } } )
18
- patch ( null , vnode1 )
19
- const elm = patch ( vnode1 , vnode2 )
19
+
20
+ const elm = patch ( null , vnode1 )
21
+ patch ( vnode1 , vnode2 )
20
22
document . body . appendChild ( elm )
21
23
triggerEvent ( elm , 'click' )
22
24
expect ( click . calls . count ( ) ) . toBe ( 1 )
23
25
} )
24
26
25
- it ( 'should attach event handlers' , ( ) => {
27
+ it ( 'should update different listener' , ( ) => {
28
+ const click = jasmine . createSpy ( )
29
+ const click2 = jasmine . createSpy ( )
30
+ const vnode1 = new VNode ( 'a' , { on : { click } } )
31
+ const vnode2 = new VNode ( 'a' , { on : { click : click2 } } )
32
+
33
+ const elm = patch ( null , vnode1 )
34
+ document . body . appendChild ( elm )
35
+ triggerEvent ( elm , 'click' )
36
+ expect ( click . calls . count ( ) ) . toBe ( 1 )
37
+ expect ( click2 . calls . count ( ) ) . toBe ( 0 )
38
+
39
+ patch ( vnode1 , vnode2 )
40
+ triggerEvent ( elm , 'click' )
41
+ expect ( click . calls . count ( ) ) . toBe ( 1 )
42
+ expect ( click2 . calls . count ( ) ) . toBe ( 1 )
43
+ } )
44
+
45
+ it ( 'should attach Array of multiple handlers' , ( ) => {
26
46
const click = jasmine . createSpy ( )
27
47
const vnode = new VNode ( 'a' , { on : { click : [ click , click ] } } )
48
+
28
49
const elm = patch ( null , vnode )
29
50
document . body . appendChild ( elm )
30
51
triggerEvent ( elm , 'click' )
31
52
expect ( click . calls . count ( ) ) . toBe ( 2 )
32
53
} )
33
54
34
- it ( 'should change attach event handlers' , ( ) => {
55
+ it ( 'should update Array of multiple handlers' , ( ) => {
35
56
const click = jasmine . createSpy ( )
36
- const focus = jasmine . createSpy ( )
37
- const vnode1 = new VNode ( 'a' , { on : { click : [ click , focus ] } } )
57
+ const click2 = jasmine . createSpy ( )
58
+ const vnode1 = new VNode ( 'a' , { on : { click : [ click , click2 ] } } )
38
59
const vnode2 = new VNode ( 'a' , { on : { click : [ click ] } } )
39
- patch ( null , vnode1 )
40
- const elm = patch ( vnode1 , vnode2 )
60
+
61
+ const elm = patch ( null , vnode1 )
62
+ document . body . appendChild ( elm )
63
+ triggerEvent ( elm , 'click' )
64
+ expect ( click . calls . count ( ) ) . toBe ( 1 )
65
+ expect ( click2 . calls . count ( ) ) . toBe ( 1 )
66
+
67
+ patch ( vnode1 , vnode2 )
68
+ triggerEvent ( elm , 'click' )
69
+ expect ( click . calls . count ( ) ) . toBe ( 2 )
70
+ expect ( click2 . calls . count ( ) ) . toBe ( 1 )
71
+ } )
72
+
73
+ it ( 'should remove handlers that are no longer present' , ( ) => {
74
+ const click = jasmine . createSpy ( )
75
+ const vnode1 = new VNode ( 'a' , { on : { click } } )
76
+ const vnode2 = new VNode ( 'a' , { } )
77
+
78
+ const elm = patch ( null , vnode1 )
41
79
document . body . appendChild ( elm )
42
80
triggerEvent ( elm , 'click' )
43
81
expect ( click . calls . count ( ) ) . toBe ( 1 )
82
+
83
+ patch ( vnode1 , vnode2 )
84
+ triggerEvent ( elm , 'click' )
85
+ expect ( click . calls . count ( ) ) . toBe ( 1 )
86
+ } )
87
+
88
+ it ( 'should remove Array handlers that are no longer present' , ( ) => {
89
+ const click = jasmine . createSpy ( )
90
+ const vnode1 = new VNode ( 'a' , { on : { click : [ click , click ] } } )
91
+ const vnode2 = new VNode ( 'a' , { } )
92
+
93
+ const elm = patch ( null , vnode1 )
94
+ document . body . appendChild ( elm )
95
+ triggerEvent ( elm , 'click' )
96
+ expect ( click . calls . count ( ) ) . toBe ( 2 )
97
+
98
+ patch ( vnode1 , vnode2 )
99
+ triggerEvent ( elm , 'click' )
100
+ expect ( click . calls . count ( ) ) . toBe ( 2 )
101
+ } )
102
+
103
+ // #4650
104
+ it ( 'should handle single -> array or array -> single handler changes' , ( ) => {
105
+ const click = jasmine . createSpy ( )
106
+ const click2 = jasmine . createSpy ( )
107
+ const click3 = jasmine . createSpy ( )
108
+ const vnode1 = new VNode ( 'a' , { on : { click : [ click , click2 ] } } )
109
+ const vnode2 = new VNode ( 'a' , { on : { click : click } } )
110
+ const vnode3 = new VNode ( 'a' , { on : { click : [ click2 , click3 ] } } )
111
+
112
+ const elm = patch ( null , vnode1 )
113
+ document . body . appendChild ( elm )
114
+ triggerEvent ( elm , 'click' )
115
+ expect ( click . calls . count ( ) ) . toBe ( 1 )
116
+ expect ( click2 . calls . count ( ) ) . toBe ( 1 )
117
+
118
+ patch ( vnode1 , vnode2 )
119
+ triggerEvent ( elm , 'click' )
120
+ expect ( click . calls . count ( ) ) . toBe ( 2 )
121
+ expect ( click2 . calls . count ( ) ) . toBe ( 1 )
122
+
123
+ patch ( vnode2 , vnode3 )
124
+ triggerEvent ( elm , 'click' )
125
+ expect ( click . calls . count ( ) ) . toBe ( 2 )
126
+ expect ( click2 . calls . count ( ) ) . toBe ( 2 )
127
+ expect ( click3 . calls . count ( ) ) . toBe ( 1 )
44
128
} )
45
129
} )
0 commit comments