1
+ import pytest
2
+
1
3
import idom
2
- from idom .core .events import EventHandler
4
+ from idom .core .events import (
5
+ EventHandler ,
6
+ merge_event_handler_funcs ,
7
+ merge_event_handlers ,
8
+ to_event_handler_function ,
9
+ )
3
10
4
11
5
12
def test_event_handler_repr ():
@@ -11,29 +18,128 @@ def test_event_handler_repr():
11
18
12
19
13
20
def test_event_handler_props ():
14
- handler_0 = EventHandler (lambda : None )
21
+ handler_0 = EventHandler (lambda data : None )
15
22
assert handler_0 .stop_propagation is False
16
23
assert handler_0 .prevent_default is False
24
+ assert handler_0 .target is None
17
25
18
- handler_1 = EventHandler (lambda : None , prevent_default = True )
26
+ handler_1 = EventHandler (lambda data : None , prevent_default = True )
19
27
assert handler_1 .stop_propagation is False
20
28
assert handler_1 .prevent_default is True
29
+ assert handler_1 .target is None
21
30
22
- handler_2 = EventHandler (lambda : None , stop_propagation = True )
31
+ handler_2 = EventHandler (lambda data : None , stop_propagation = True )
23
32
assert handler_2 .stop_propagation is True
24
33
assert handler_2 .prevent_default is False
34
+ assert handler_2 .target is None
35
+
36
+ handler_3 = EventHandler (lambda data : None , target = "123" )
37
+ assert handler_3 .stop_propagation is False
38
+ assert handler_3 .prevent_default is False
39
+ assert handler_3 .target == "123"
40
+
41
+
42
+ def test_event_handler_equivalence ():
43
+ async def func (data ):
44
+ return None
45
+
46
+ assert EventHandler (func ) == EventHandler (func )
47
+
48
+ assert EventHandler (lambda data : None ) != EventHandler (lambda data : None )
49
+
50
+ assert EventHandler (func , stop_propagation = True ) != EventHandler (
51
+ func , stop_propagation = False
52
+ )
53
+
54
+ assert EventHandler (func , prevent_default = True ) != EventHandler (
55
+ func , prevent_default = False
56
+ )
57
+
58
+ assert EventHandler (func , target = "123" ) != EventHandler (func , target = "456" )
59
+
60
+
61
+ async def test_to_event_handler_function ():
62
+ call_args = idom .Ref (None )
63
+
64
+ async def coro (* args ):
65
+ call_args .current = args
66
+
67
+ def func (* args ):
68
+ call_args .current = args
69
+
70
+ await to_event_handler_function (coro , positional_args = True )([1 , 2 , 3 ])
71
+ assert call_args .current == (1 , 2 , 3 )
72
+
73
+ await to_event_handler_function (func , positional_args = True )([1 , 2 , 3 ])
74
+ assert call_args .current == (1 , 2 , 3 )
75
+
76
+ await to_event_handler_function (coro , positional_args = False )([1 , 2 , 3 ])
77
+ assert call_args .current == ([1 , 2 , 3 ],)
78
+
79
+ await to_event_handler_function (func , positional_args = False )([1 , 2 , 3 ])
80
+ assert call_args .current == ([1 , 2 , 3 ],)
81
+
82
+
83
+ async def test_merge_event_handler_empty_list ():
84
+ with pytest .raises (ValueError , match = "No event handlers to merge" ):
85
+ merge_event_handlers ([])
86
+
87
+
88
+ @pytest .mark .parametrize (
89
+ "kwargs_1, kwargs_2" ,
90
+ [
91
+ ({"stop_propagation" : True }, {"stop_propagation" : False }),
92
+ ({"prevent_default" : True }, {"prevent_default" : False }),
93
+ ({"target" : "this" }, {"target" : "that" }),
94
+ ],
95
+ )
96
+ async def test_merge_event_handlers_raises_on_mismatch (kwargs_1 , kwargs_2 ):
97
+ def func (data ):
98
+ return None
99
+
100
+ with pytest .raises (ValueError , match = "Cannot merge handlers" ):
101
+ merge_event_handlers (
102
+ [
103
+ EventHandler (func , ** kwargs_1 ),
104
+ EventHandler (func , ** kwargs_2 ),
105
+ ]
106
+ )
107
+
108
+
109
+ async def test_merge_event_handlers ():
110
+ handler = EventHandler (lambda data : None )
111
+ assert merge_event_handlers ([handler ]) is handler
112
+
113
+ calls = []
114
+ merged_handler = merge_event_handlers (
115
+ [
116
+ EventHandler (lambda data : calls .append ("first" )),
117
+ EventHandler (lambda data : calls .append ("second" )),
118
+ ]
119
+ )
120
+ await merged_handler .function ({})
121
+ assert calls == ["first" , "second" ]
122
+
123
+
124
+ def test_merge_event_handler_funcs_empty_list ():
125
+ with pytest .raises (ValueError , match = "No event handler functions to merge" ):
126
+ merge_event_handler_funcs ([])
25
127
26
128
27
- def test_to_event_handler_function ():
28
- assert False
129
+ async def test_merge_event_handler_funcs ():
130
+ calls = []
29
131
132
+ async def some_func (data ):
133
+ calls .append ("some_func" )
30
134
31
- def test_merge_event_handlers ( ):
32
- assert False
135
+ async def some_other_func ( data ):
136
+ calls . append ( "some_other_func" )
33
137
138
+ assert merge_event_handler_funcs ([some_func ]) is some_func
34
139
35
- def test_merge_event_handler_funcs ():
36
- assert False
140
+ merged_handler = merge_event_handler_funcs ([some_func , some_other_func ])
141
+ await merged_handler ([])
142
+ assert calls == ["some_func" , "some_other_func" ]
37
143
38
144
39
145
def test_can_prevent_event_default_operation (driver , display ):
0 commit comments