@@ -243,6 +243,79 @@ def foo(*args, **kwargs):
243
243
mock .call ('loop' , 'inf' )],
244
244
any_order = True )
245
245
246
+ class KeyBindingTest (MpvTestCase ):
247
+ def test_register_direct_cmd (self ):
248
+ self .m .register_key_binding ('a' , 'playlist-clear' )
249
+ self .assertEqual (self .m ._key_binding_handlers , {})
250
+ self .m .register_key_binding ('Ctrl+Shift+a' , 'playlist-clear' )
251
+ self .m .unregister_key_binding ('a' )
252
+ self .m .unregister_key_binding ('Ctrl+Shift+a' )
253
+
254
+ def test_register_direct_fun (self ):
255
+ b = mpv .MPV ._binding_name
256
+
257
+ def reg_test_fun (state , name ):
258
+ pass
259
+
260
+ self .m .register_key_binding ('a' , reg_test_fun )
261
+ self .assertIn (b ('a' ), self .m ._key_binding_handlers )
262
+ self .assertEqual (self .m ._key_binding_handlers [b ('a' )], reg_test_fun )
263
+
264
+ self .m .unregister_key_binding ('a' )
265
+ self .assertNotIn (b ('a' ), self .m ._key_binding_handlers )
266
+
267
+ def test_register_direct_bound_method (self ):
268
+ b = mpv .MPV ._binding_name
269
+
270
+ class RegTestCls :
271
+ def method (self , state , name ):
272
+ pass
273
+ instance = RegTestCls ()
274
+
275
+ self .m .register_key_binding ('a' , instance .method )
276
+ self .assertIn (b ('a' ), self .m ._key_binding_handlers )
277
+ self .assertEqual (self .m ._key_binding_handlers [b ('a' )], instance .method )
278
+
279
+ self .m .unregister_key_binding ('a' )
280
+ self .assertNotIn (b ('a' ), self .m ._key_binding_handlers )
281
+
282
+ def test_register_decorator_fun (self ):
283
+ b = mpv .MPV ._binding_name
284
+
285
+ @self .m .key_binding ('a' )
286
+ def reg_test_fun (state , name ):
287
+ pass
288
+ self .assertEqual (reg_test_fun .mpv_key_bindings , ['a' ])
289
+ self .assertIn (b ('a' ), self .m ._key_binding_handlers )
290
+ self .assertEqual (self .m ._key_binding_handlers [b ('a' )], reg_test_fun )
291
+
292
+ reg_test_fun .unregister_mpv_key_bindings ()
293
+ self .assertNotIn (b ('a' ), self .m ._key_binding_handlers )
294
+
295
+ def test_register_decorator_fun_chaining (self ):
296
+ b = mpv .MPV ._binding_name
297
+
298
+ @self .m .key_binding ('a' )
299
+ @self .m .key_binding ('b' )
300
+ def reg_test_fun (state , name ):
301
+ pass
302
+
303
+ @self .m .key_binding ('c' )
304
+ def reg_test_fun_2_stay_intact (state , name ):
305
+ pass
306
+
307
+ self .assertEqual (reg_test_fun .mpv_key_bindings , ['b' , 'a' ])
308
+ self .assertIn (b ('a' ), self .m ._key_binding_handlers )
309
+ self .assertIn (b ('b' ), self .m ._key_binding_handlers )
310
+ self .assertIn (b ('c' ), self .m ._key_binding_handlers )
311
+ self .assertEqual (self .m ._key_binding_handlers [b ('a' )], reg_test_fun )
312
+ self .assertEqual (self .m ._key_binding_handlers [b ('b' )], reg_test_fun )
313
+
314
+ reg_test_fun .unregister_mpv_key_bindings ()
315
+ self .assertNotIn (b ('a' ), self .m ._key_binding_handlers )
316
+ self .assertNotIn (b ('b' ), self .m ._key_binding_handlers )
317
+ self .assertIn (b ('c' ), self .m ._key_binding_handlers )
318
+
246
319
class TestLifecycle (unittest .TestCase ):
247
320
def test_create_destroy (self ):
248
321
thread_names = lambda : [ t .name for t in threading .enumerate () ]
0 commit comments