Skip to content

Commit 969ffed

Browse files
committed
Test that Events is stateless
1 parent 8eb9618 commit 969ffed

1 file changed

Lines changed: 42 additions & 7 deletions

File tree

tests/loopback/events.rs

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)