From a7d3a565b874504117ddb7c3ac00638c497fbefd Mon Sep 17 00:00:00 2001 From: Aaron Weiss Date: Wed, 8 Oct 2014 22:09:35 -0400 Subject: [PATCH] Added some unit tests for IrcBot, along with required changes to Connection. --- src/bot.rs | 37 +++++++++++++++++++++++++++++++++++-- src/conn.rs | 17 ++++++++++++----- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/bot.rs b/src/bot.rs index 60b9d1f..550eb52 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -81,10 +81,9 @@ impl<'a, T, U> Bot<'a> for IrcBot<'a, T, U> where T: IrcWriter, U: IrcReader { impl<'a, T, U> IrcBot<'a, T, U> where T: IrcWriter, U: IrcReader { pub fn from_connection(conn: Connection, process: |&IrcBot, &str, &str, &[&str]|:'a -> IoResult<()>) -> IoResult> { - let config = try!(Config::load()); Ok(IrcBot { conn: conn, - config: config, + config: try!(Config::load()), process: RefCell::new(process), chanlists: RefCell::new(HashMap::new()), }) @@ -154,3 +153,37 @@ impl<'a, T, U> IrcBot<'a, T, U> where T: IrcWriter, U: IrcReader { Ok(()) } } + +#[cfg(test)] +mod test { + use Bot; + use super::IrcBot; + use std::io::MemWriter; + use std::io::util::NullReader; + use conn::Connection; + + #[test] + fn from_connection() { + let w = MemWriter::new(); + let c = Connection::new(w, NullReader).unwrap(); + assert!(IrcBot::from_connection(c, |_, _, _, _| { Ok(()) }).is_ok()); + } + + #[test] + fn send_nick() { + let w = MemWriter::new(); + let c = Connection::new(w, NullReader).unwrap(); + let b = IrcBot::from_connection(c, |_, _, _, _| { Ok(()) }).unwrap(); + b.send_nick("test").unwrap(); + assert_eq!(b.conn.writer().deref_mut().get_ref(), "NICK :test\r\n".as_bytes()); + } + + #[test] + fn send_user() { + let w = MemWriter::new(); + let c = Connection::new(w, NullReader).unwrap(); + let b = IrcBot::from_connection(c, |_, _, _, _| { Ok(()) }).unwrap(); + b.send_user("test", "Test").unwrap(); + assert_eq!(b.conn.writer().deref_mut().get_ref(), "USER test 0 * :Test\r\n".as_bytes()); + } +} diff --git a/src/conn.rs b/src/conn.rs index 9c203e2..4016488 100644 --- a/src/conn.rs +++ b/src/conn.rs @@ -15,7 +15,7 @@ impl Connection, BufferedReader> { } impl Connection where T: IrcWriter, U: IrcReader { - fn new(writer: T, reader: U) -> IoResult> { + pub fn new(writer: T, reader: U) -> IoResult> { Ok(Connection { writer: RefCell::new(writer), reader: RefCell::new(reader), @@ -30,13 +30,20 @@ impl Connection where T: IrcWriter, U: IrcReader { pub fn send(&self, msg: Message) -> IoResult<()> { let mut send = msg.command.to_string(); - send.push_str(msg.args.init().connect(" ").as_slice()); + if msg.args.init().len() > 0 { + send.push_str(" "); + send.push_str(msg.args.init().connect(" ").as_slice()); + } send.push_str(" :"); send.push_str(*msg.args.last().unwrap()); send.push_str("\r\n"); self.send_internal(send.as_slice()) } + pub fn writer<'a>(&'a self) -> RefMut<'a, T> { + self.writer.borrow_mut() + } + pub fn reader<'a>(&'a self) -> RefMut<'a, U> { self.reader.borrow_mut() } @@ -44,10 +51,10 @@ impl Connection where T: IrcWriter, U: IrcReader { #[cfg(test)] mod test { + use super::Connection; use std::io::MemWriter; use std::io::util::NullReader; use data::Message; - use super::Connection; #[test] fn new_connection() { @@ -60,7 +67,7 @@ mod test { let w = MemWriter::new(); let c = Connection::new(w, NullReader).unwrap(); c.send_internal("string of text").unwrap(); - assert_eq!(c.writer.borrow_mut().deref_mut().get_ref(), "string of text".as_bytes()); + assert_eq!(c.writer().deref_mut().get_ref(), "string of text".as_bytes()); } #[test] @@ -69,6 +76,6 @@ mod test { let c = Connection::new(w, NullReader).unwrap(); let args = ["flare.to.ca.fyrechat.net"]; c.send(Message::new(None, "PING", args)).unwrap(); - assert_eq!(c.writer.borrow_mut().deref_mut().get_ref(), "PING :flare.to.ca.fyrechat.net\r\n".as_bytes()); + assert_eq!(c.writer().deref_mut().get_ref(), "PING :flare.to.ca.fyrechat.net\r\n".as_bytes()); } }