diff options
Diffstat (limited to 'third_party/rust/mio/test/test_tick.rs')
-rw-r--r-- | third_party/rust/mio/test/test_tick.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/third_party/rust/mio/test/test_tick.rs b/third_party/rust/mio/test/test_tick.rs new file mode 100644 index 0000000000..8c4cec9b25 --- /dev/null +++ b/third_party/rust/mio/test/test_tick.rs @@ -0,0 +1,64 @@ +use mio::*; +use mio::deprecated::{EventLoop, Handler}; +use mio::net::{TcpListener, TcpStream}; +use {sleep_ms}; + +struct TestHandler { + tick: usize, + state: usize, +} + +impl TestHandler { + fn new() -> TestHandler { + TestHandler { + tick: 0, + state: 0, + } + } +} + +impl Handler for TestHandler { + type Timeout = usize; + type Message = String; + + fn tick(&mut self, _event_loop: &mut EventLoop<TestHandler>) { + debug!("Handler::tick()"); + self.tick += 1; + + assert_eq!(self.state, 1); + self.state = 0; + } + + fn ready(&mut self, _event_loop: &mut EventLoop<TestHandler>, token: Token, events: Ready) { + debug!("READY: {:?} - {:?}", token, events); + if events.is_readable() { + debug!("Handler::ready() readable event"); + assert_eq!(token, Token(0)); + assert_eq!(self.state, 0); + self.state = 1; + } + } +} + +#[test] +pub fn test_tick() { + debug!("Starting TEST_TICK"); + let mut event_loop = EventLoop::new().expect("Couldn't make event loop"); + + let listener = TcpListener::bind(&"127.0.0.1:0".parse().unwrap()).unwrap(); + event_loop.register(&listener, Token(0), Ready::readable(), PollOpt::level()).unwrap(); + + let client = TcpStream::connect(&listener.local_addr().unwrap()).unwrap(); + event_loop.register(&client, Token(1), Ready::readable(), PollOpt::edge()).unwrap(); + + sleep_ms(250); + + let mut handler = TestHandler::new(); + + for _ in 0..2 { + event_loop.run_once(&mut handler, None).unwrap(); + } + + assert!(handler.tick == 2, "actual={}", handler.tick); + assert!(handler.state == 0, "actual={}", handler.state); +} |