From 14f8f0937468761451a763257d486ec186aedea5 Mon Sep 17 00:00:00 2001 From: Aaron Weiss Date: Thu, 6 Nov 2014 14:29:14 -0500 Subject: [PATCH] Added iterator unit test and fixed a bug where parsing messages without suffixes caused them to incorrectly include a new line in their last argument. --- src/data/message.rs | 1 + src/server/mod.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/data/message.rs b/src/data/message.rs index 6b06ce0..4b90abb 100644 --- a/src/data/message.rs +++ b/src/data/message.rs @@ -78,6 +78,7 @@ impl FromStr for Message { } _ => return None }; + if suffix.is_none() { state = state[..state.len() - 2] } let args: Vec<_> = state.splitn(14, ' ').filter(|s| s.len() != 0).collect(); Some(Message::new(prefix, command, if args.len() > 0 { Some(args) } else { None }, suffix)) } diff --git a/src/server/mod.rs b/src/server/mod.rs index 66634e8..2076e8d 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -118,3 +118,34 @@ impl<'a, T, U> Iterator for ServerIterator<'a, T, U> where T: IrcWriter } } } + +#[cfg(test)] +mod test { + use super::{IrcServer, Server}; + use std::collections::HashMap; + use std::io::MemReader; + use std::io::util::NullWriter; + use conn::Connection; + use data::Config; + + #[test] + fn iterator() { + let exp = "PRIVMSG test :Hi!\r\nPRIVMSG test :This is a test!\r\n:test!test@test JOIN #test\r\n"; + let server = IrcServer::from_connection(Config { + owners: vec![format!("test")], + nickname: format!("test"), + username: format!("test"), + realname: format!("test"), + password: String::new(), + server: format!("irc.test.net"), + port: 6667, + channels: vec![format!("#test"), format!("#test2")], + options: HashMap::new(), + }, Connection::new(NullWriter, MemReader::new(exp.as_bytes().to_vec()))).unwrap(); + let mut messages = String::new(); + for message in server.iter() { + messages.push_str(message.into_string()[]); + } + assert_eq!(messages[], exp); + } +}