1+ import pytest
2+
13import 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+ )
310
411
512def test_event_handler_repr ():
@@ -11,29 +18,128 @@ def test_event_handler_repr():
1118
1219
1320def test_event_handler_props ():
14- handler_0 = EventHandler (lambda : None )
21+ handler_0 = EventHandler (lambda data : None )
1522 assert handler_0 .stop_propagation is False
1623 assert handler_0 .prevent_default is False
24+ assert handler_0 .target is None
1725
18- handler_1 = EventHandler (lambda : None , prevent_default = True )
26+ handler_1 = EventHandler (lambda data : None , prevent_default = True )
1927 assert handler_1 .stop_propagation is False
2028 assert handler_1 .prevent_default is True
29+ assert handler_1 .target is None
2130
22- handler_2 = EventHandler (lambda : None , stop_propagation = True )
31+ handler_2 = EventHandler (lambda data : None , stop_propagation = True )
2332 assert handler_2 .stop_propagation is True
2433 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 ([])
25127
26128
27- def test_to_event_handler_function ():
28- assert False
129+ async def test_merge_event_handler_funcs ():
130+ calls = []
29131
132+ async def some_func (data ):
133+ calls .append ("some_func" )
30134
31- def test_merge_event_handlers ( ):
32- assert False
135+ async def some_other_func ( data ):
136+ calls . append ( "some_other_func" )
33137
138+ assert merge_event_handler_funcs ([some_func ]) is some_func
34139
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" ]
37143
38144
39145def test_can_prevent_event_default_operation (driver , display ):
0 commit comments