Adding more tests for the parser

This commit is contained in:
Matt McCoy 2016-06-24 20:10:38 -04:00
parent 69179ebdac
commit a87c58bf91

View file

@ -24,13 +24,26 @@ pub fn parse_capability(lines: Vec<String>) -> Result<Vec<String>> {
} }
pub fn parse_response_ok(lines: Vec<String>) -> Result<()> { pub fn parse_response_ok(lines: Vec<String>) -> Result<()> {
let ok_regex = Regex::new(r"^([a-zA-Z0-9]+) ([a-zA-Z0-9]+)(.*)").unwrap(); match parse_response(lines) {
let last_line = lines.last().unwrap(); Ok(_) => Ok(()),
Err(e) => return Err(e)
}
}
for cap in ok_regex.captures_iter(last_line) { pub fn parse_response(lines: Vec<String>) -> Result<Vec<String>> {
let regex = Regex::new(r"^([a-zA-Z0-9]+) (OK|NO|BAD)(.*)").unwrap();
let last_line = match lines.last() {
Some(l) => l,
None => return Err(Error::Parse(ParseError::StatusResponse(lines.clone())))
};
for cap in regex.captures_iter(last_line) {
let response_type = cap.at(2).unwrap_or(""); let response_type = cap.at(2).unwrap_or("");
if response_type == "OK" { match response_type {
return Ok(()); "OK" => return Ok(lines.clone()),
"BAD" => return Err(Error::BadResponse(lines.clone())),
"NO" => return Err(Error::NoResponse(lines.clone())),
_ => {}
} }
} }
@ -106,4 +119,26 @@ mod tests {
let lines = vec![String::from("* JUNK IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED\r\n"), String::from("a1 OK CAPABILITY completed\r\n")]; let lines = vec![String::from("* JUNK IMAP4rev1 STARTTLS AUTH=GSSAPI LOGINDISABLED\r\n"), String::from("a1 OK CAPABILITY completed\r\n")];
parse_capability(lines).unwrap(); parse_capability(lines).unwrap();
} }
#[test]
fn parse_response_test() {
let lines = vec![String::from("* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n"), String::from("a2 OK List completed.\r\n")];
let expected_lines = lines.clone();
let actual_lines = parse_response(lines).unwrap();
assert!(expected_lines == actual_lines, "Unexpected parse response");
}
#[test]
#[should_panic]
fn parse_response_invalid_test() {
let lines = vec![String::from("* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n"), String::from("a2 BAD broken.\r\n")];
parse_response(lines).unwrap();
}
#[test]
#[should_panic]
fn parse_response_invalid2_test() {
let lines = vec![String::from("* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n"), String::from("a2 broken.\r\n")];
parse_response(lines).unwrap();
}
} }