@@ -515,14 +515,11 @@ fn reader_reports_clear() -> io::Result<()> {
515515 tester. evdev ( ) . set_nonblocking ( true ) ?;
516516 tester. with_reader ( |uinput, reader| {
517517 uinput. write ( & [ RelEvent :: new ( Rel :: DIAL , 1 ) . into ( ) ] ) ?;
518- let report = reader
519- . reports ( )
520- . next ( )
521- . unwrap ( ) ?
522- . into_iter ( )
523- . collect :: < Vec < InputEvent > > ( ) ;
518+ let report = reader. reports ( ) . next ( ) . unwrap ( ) ?;
519+ let events = report. iter ( ) . collect :: < Vec < InputEvent > > ( ) ;
520+ assert_eq ! ( report. len( ) , events. len( ) ) ;
524521 check_events (
525- & report ,
522+ & events ,
526523 & [ RelEvent :: new ( Rel :: DIAL , 1 ) . into ( ) , Syn :: REPORT . into ( ) ] ,
527524 ) ;
528525
@@ -565,3 +562,41 @@ fn reader_reports_collect() -> io::Result<()> {
565562 tester. evdev ( ) . set_nonblocking ( false ) ?;
566563 Ok ( ( ) )
567564}
565+
566+ /// Tests that we can create and drop the `Events` iterator without affecting the `EventReader`.
567+ #[ test]
568+ fn reader_events_stateless ( ) -> io:: Result < ( ) > {
569+ let mut tester = Tester :: get ( ) ;
570+
571+ tester. with_reader ( |uinput, reader| {
572+ reader. evdev ( ) . set_nonblocking ( true ) ?;
573+ let mut events = reader. events ( ) ;
574+
575+ let next = events. next ( ) ;
576+ assert ! ( next. is_none( ) , "{next:?}" ) ;
577+
578+ uinput. write ( & [
579+ RelEvent :: new ( Rel :: DIAL , 1 ) . into ( ) ,
580+ RelEvent :: new ( Rel :: DIAL , 2 ) . into ( ) ,
581+ ] ) ?;
582+
583+ // `Events` instance was created before the events were written.
584+ check_events (
585+ & [ events. next ( ) . expect ( "expected `REL_DIAL`" ) ?] ,
586+ & [ RelEvent :: new ( Rel :: DIAL , 1 ) . into ( ) ] ,
587+ ) ;
588+
589+ let mut events = reader. events ( ) ;
590+ check_events (
591+ & [ events. next ( ) . expect ( "expected `REL_DIAL`" ) ?] ,
592+ & [ RelEvent :: new ( Rel :: DIAL , 2 ) . into ( ) ] ,
593+ ) ;
594+ check_events (
595+ & [ events. next ( ) . expect ( "expected `SYN_REPORT`" ) ?] ,
596+ & [ Syn :: REPORT . into ( ) ] ,
597+ ) ;
598+
599+ reader. evdev ( ) . set_nonblocking ( false ) ?;
600+ Ok ( ( ) )
601+ } )
602+ }
0 commit comments