summaryrefslogtreecommitdiffstats
path: root/third_party/rust/mio/test/test_tick.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/mio/test/test_tick.rs')
-rw-r--r--third_party/rust/mio/test/test_tick.rs64
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);
+}