extern crate amy;
use std::net::{TcpListener, TcpStream};
use std::thread;
use std::str;
use std::io::{Read, Write};
use amy::{
Poller,
Event,
};
const IP: &'static str = "127.0.0.1:10008";
#[test]
fn edge_trigger() {
thread::spawn(|| {
let listener = TcpListener::bind(IP).unwrap();
let (mut sock, _) = listener.accept().unwrap();
let mut buf = String::new();
sock.read_to_string(&mut buf).unwrap();
});
let mut sock;
loop {
if let Ok(s) = TcpStream::connect(IP) {
sock = s;
break;
}
}
sock.set_nonblocking(true).unwrap();
let mut poller = Poller::new().unwrap();
let registrar = poller.get_registrar();
let id = registrar.register(&sock, Event::Write).unwrap();
let notifications = poller.wait(250).unwrap();
assert_eq!(1, notifications.len());
assert_eq!(id, notifications[0].id);
assert_eq!(Event::Write, notifications[0].event);
let notifications = poller.wait(250).unwrap();
assert_eq!(0, notifications.len());
sock.write("stop".as_bytes()).unwrap();
}