@@ -4,6 +4,8 @@ use crate::interactive::{InteractiveMode, Mode};
4
4
use crossterm:: event:: { KeyCode , KeyEvent , KeyEventKind , KeyModifiers } ;
5
5
#[ cfg( test) ]
6
6
use ratatui:: { Terminal , backend:: TestBackend , buffer:: Buffer , layout:: Rect , widgets:: Widget } ;
7
+ #[ cfg( test) ]
8
+ use std:: io;
7
9
8
10
#[ cfg( test) ]
9
11
fn create_test_terminal ( ) -> Terminal < TestBackend > {
@@ -395,3 +397,57 @@ fn test_value_truncation_and_name_padding() {
395
397
// Test name padding (line 134)
396
398
assert ! ( content. contains( & format!( "{:38}" , "very_long_name" ) ) ) ;
397
399
}
400
+
401
+ #[ test]
402
+ fn test_handle_events_with_non_key_event ( ) -> io:: Result < ( ) > {
403
+ let mut mode = InteractiveMode :: default ( ) ;
404
+ let result = mode. handle_events ( ) ;
405
+ assert ! ( result. is_ok( ) ) ;
406
+ assert ! ( !mode. exit) ;
407
+ Ok ( ( ) )
408
+ }
409
+
410
+ #[ test]
411
+ fn test_run_until_exit ( ) -> io:: Result < ( ) > {
412
+ let mut mode = InteractiveMode :: default ( ) ;
413
+ let mut terminal = create_test_terminal ( ) ;
414
+
415
+ // Simulate exit command
416
+ mode. handle_key_event ( create_key_event ( KeyCode :: Char ( 'q' ) , KeyModifiers :: CONTROL ) ) ;
417
+
418
+ let result = mode. run ( & mut terminal) ;
419
+ assert ! ( result. is_ok( ) ) ;
420
+ assert ! ( mode. exit) ;
421
+ Ok ( ( ) )
422
+ }
423
+
424
+ #[ test]
425
+ fn test_run_with_multiple_events ( ) -> io:: Result < ( ) > {
426
+ let mut mode = InteractiveMode :: default ( ) ;
427
+ let mut terminal = create_test_terminal ( ) ;
428
+
429
+ // Simulate some navigation before exit
430
+ mode. handle_key_event ( create_key_event ( KeyCode :: Down , KeyModifiers :: NONE ) ) ;
431
+ mode. handle_key_event ( create_key_event ( KeyCode :: Up , KeyModifiers :: NONE ) ) ;
432
+ mode. handle_key_event ( create_key_event ( KeyCode :: Char ( 'q' ) , KeyModifiers :: CONTROL ) ) ;
433
+
434
+ let result = mode. run ( & mut terminal) ;
435
+ assert ! ( result. is_ok( ) ) ;
436
+ assert ! ( mode. exit) ;
437
+ Ok ( ( ) )
438
+ }
439
+
440
+ #[ test]
441
+ fn test_run_with_terminal_draw_error ( ) -> io:: Result < ( ) > {
442
+ let mut mode = InteractiveMode :: default ( ) ;
443
+ let backend = TestBackend :: new ( 0 , 0 ) ; // Invalid size to force error
444
+ let mut terminal = Terminal :: new ( backend) . unwrap ( ) ;
445
+
446
+ mode. handle_key_event ( create_key_event ( KeyCode :: Char ( 'q' ) , KeyModifiers :: CONTROL ) ) ;
447
+ let result = mode. run ( & mut terminal) ;
448
+
449
+ // Even with drawing errors, the run should complete when exit is true
450
+ assert ! ( result. is_ok( ) ) ;
451
+ assert ! ( mode. exit) ;
452
+ Ok ( ( ) )
453
+ }
0 commit comments