From b25a2c4215c41d714bc6d92aebe8772eaf6074c8 Mon Sep 17 00:00:00 2001 From: Matt McCoy Date: Tue, 21 Jun 2016 14:15:16 -0400 Subject: [PATCH] Adding base testing work --- src/client.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/src/client.rs b/src/client.rs index 00906ee..0585e8d 100644 --- a/src/client.rs +++ b/src/client.rs @@ -327,3 +327,80 @@ impl Client { return command; } } + +#[cfg(test)] +mod tests { + use super::*; + use std::io::{Read, Result, Write, Error, ErrorKind}; + + struct MockStream { + read_buf: Vec, + read_pos: usize, + written_buf: Vec + } + + impl MockStream { + fn new(read_buf: Vec) -> MockStream { + MockStream{ + read_buf: read_buf, + read_pos: 0, + written_buf: Vec::new() + } + } + } + + impl Read for MockStream { + fn read(&mut self, buf: &mut[u8]) -> Result { + if self.read_pos >= self.read_buf.len() { + return Err(Error::new(ErrorKind::UnexpectedEof, "EOF")) + } + let write_len = min(buf.len(), self.read_buf.len() - self.read_pos); + let max_pos = self.read_pos + write_len; + for x in self.read_pos..max_pos { + buf[x - self.read_pos] = self.read_buf[x]; + } + self.read_pos += write_len; + Ok(write_len) + } + } + + impl Write for MockStream { + fn write(&mut self, buf: &[u8]) -> Result { + self.written_buf.extend_from_slice(buf); + Ok(buf.len()) + } + + fn flush(&mut self) -> Result<()> { + Ok(()) + } + } + + fn min(a: usize, b: usize) -> usize { + if a < b { + a + } else if b < a { + b + } else { + a + } + } + + fn create_client_with_mock_stream(mock_stream: MockStream) -> Client { + Client { + stream: mock_stream, + tag: 1 + } + } + + #[test] + fn close() { + let response = b"a1 OK CLOSE completed\r\n".to_vec(); + let mock_stream = MockStream::new(response); + let mut imap_stream = create_client_with_mock_stream(mock_stream); + match imap_stream.close() { + Err(err) => panic!("Error reading response: {}", err), + _ => {}, + } + assert!(imap_stream.stream.written_buf == b"a1 CLOSE\r\n".to_vec(), "Invalid close command"); + } +}