Fix tests and examples.

This commit is contained in:
Todd Mortimer 2021-07-17 16:51:35 -04:00
parent 3f2331423c
commit 826e6d413b
5 changed files with 66 additions and 38 deletions

View file

@ -42,7 +42,7 @@ fn main() {
match imap_session.fetch("2", "body[text]") { match imap_session.fetch("2", "body[text]") {
Ok(msgs) => { Ok(msgs) => {
for msg in &msgs { for msg in msgs.iter() {
print!("{:?}", msg); print!("{:?}", msg);
} }
} }

View file

@ -411,22 +411,23 @@ mod tests {
fn parse_names_test() { fn parse_names_test() {
let lines = b"* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n"; let lines = b"* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let names = parse_names(lines.to_vec(), &mut send).unwrap(); let names = Names::parse(lines.to_vec(), &mut send).unwrap();
assert!(recv.try_recv().is_err()); assert!(recv.try_recv().is_err());
assert_eq!(names.len(), 1); assert_eq!(names.len(), 1);
let first = names.iter().next().unwrap();
assert_eq!( assert_eq!(
names[0].attributes(), first.attributes(),
&[NameAttribute::from("\\HasNoChildren")] &[NameAttribute::from("\\HasNoChildren")]
); );
assert_eq!(names[0].delimiter(), Some(".")); assert_eq!(first.delimiter(), Some("."));
assert_eq!(names[0].name(), "INBOX"); assert_eq!(first.name(), "INBOX");
} }
#[test] #[test]
fn parse_fetches_empty() { fn parse_fetches_empty() {
let lines = b""; let lines = b"";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap();
assert!(recv.try_recv().is_err()); assert!(recv.try_recv().is_err());
assert!(fetches.is_empty()); assert!(fetches.is_empty());
} }
@ -437,19 +438,22 @@ mod tests {
* 24 FETCH (FLAGS (\\Seen) UID 4827943)\r\n\ * 24 FETCH (FLAGS (\\Seen) UID 4827943)\r\n\
* 25 FETCH (FLAGS (\\Seen))\r\n"; * 25 FETCH (FLAGS (\\Seen))\r\n";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap();
assert!(recv.try_recv().is_err()); assert!(recv.try_recv().is_err());
assert_eq!(fetches.len(), 2); assert_eq!(fetches.len(), 2);
assert_eq!(fetches[0].message, 24); let mut iter = fetches.iter();
assert_eq!(fetches[0].flags(), &[Flag::Seen]); let first = iter.next().unwrap();
assert_eq!(fetches[0].uid, Some(4827943)); assert_eq!(first.message, 24);
assert_eq!(fetches[0].body(), None); assert_eq!(first.flags(), &[Flag::Seen]);
assert_eq!(fetches[0].header(), None); assert_eq!(first.uid, Some(4827943));
assert_eq!(fetches[1].message, 25); assert_eq!(first.body(), None);
assert_eq!(fetches[1].flags(), &[Flag::Seen]); assert_eq!(first.header(), None);
assert_eq!(fetches[1].uid, None); let second = iter.next().unwrap();
assert_eq!(fetches[1].body(), None); assert_eq!(second.message, 25);
assert_eq!(fetches[1].header(), None); assert_eq!(second.flags(), &[Flag::Seen]);
assert_eq!(second.uid, None);
assert_eq!(second.body(), None);
assert_eq!(second.header(), None);
} }
#[test] #[test]
@ -459,11 +463,12 @@ mod tests {
* 37 FETCH (UID 74)\r\n\ * 37 FETCH (UID 74)\r\n\
* 1 RECENT\r\n"; * 1 RECENT\r\n";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap();
assert_eq!(recv.try_recv(), Ok(UnsolicitedResponse::Recent(1))); assert_eq!(recv.try_recv(), Ok(UnsolicitedResponse::Recent(1)));
assert_eq!(fetches.len(), 1); assert_eq!(fetches.len(), 1);
assert_eq!(fetches[0].message, 37); let first = fetches.iter().next().unwrap();
assert_eq!(fetches[0].uid, Some(74)); assert_eq!(first.message, 37);
assert_eq!(first.uid, Some(74));
} }
#[test] #[test]
@ -475,7 +480,7 @@ mod tests {
* OK Searched 91% of the mailbox, ETA 0:01\r\n\ * OK Searched 91% of the mailbox, ETA 0:01\r\n\
* 37 FETCH (UID 74)\r\n"; * 37 FETCH (UID 74)\r\n";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap();
assert_eq!( assert_eq!(
recv.try_recv(), recv.try_recv(),
Ok(UnsolicitedResponse::Ok { Ok(UnsolicitedResponse::Ok {
@ -484,8 +489,9 @@ mod tests {
}) })
); );
assert_eq!(fetches.len(), 1); assert_eq!(fetches.len(), 1);
assert_eq!(fetches[0].message, 37); let first = fetches.iter().next().unwrap();
assert_eq!(fetches[0].uid, Some(74)); assert_eq!(first.message, 37);
assert_eq!(first.uid, Some(74));
} }
#[test] #[test]
@ -494,17 +500,18 @@ mod tests {
* LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n\ * LIST (\\HasNoChildren) \".\" \"INBOX\"\r\n\
* 4 EXPUNGE\r\n"; * 4 EXPUNGE\r\n";
let (mut send, recv) = mpsc::channel(); let (mut send, recv) = mpsc::channel();
let names = parse_names(lines.to_vec(), &mut send).unwrap(); let names = Names::parse(lines.to_vec(), &mut send).unwrap();
assert_eq!(recv.try_recv().unwrap(), UnsolicitedResponse::Expunge(4)); assert_eq!(recv.try_recv().unwrap(), UnsolicitedResponse::Expunge(4));
assert_eq!(names.len(), 1); assert_eq!(names.len(), 1);
let first = names.iter().next().unwrap();
assert_eq!( assert_eq!(
names[0].attributes(), first.attributes(),
&[NameAttribute::from("\\HasNoChildren")] &[NameAttribute::from("\\HasNoChildren")]
); );
assert_eq!(names[0].delimiter(), Some(".")); assert_eq!(first.delimiter(), Some("."));
assert_eq!(names[0].name(), "INBOX"); assert_eq!(first.name(), "INBOX");
} }
#[test] #[test]
@ -635,7 +642,7 @@ mod tests {
let lines = b"* VANISHED (EARLIER) 3:8,12,50:60\r\n\ let lines = b"* VANISHED (EARLIER) 3:8,12,50:60\r\n\
* 49 FETCH (UID 117 FLAGS (\\Seen \\Answered) MODSEQ (90060115194045001))\r\n"; * 49 FETCH (UID 117 FLAGS (\\Seen \\Answered) MODSEQ (90060115194045001))\r\n";
let fetches = parse_fetches(lines.to_vec(), &mut send).unwrap(); let fetches = Fetches::parse(lines.to_vec(), &mut send).unwrap();
match recv.try_recv().unwrap() { match recv.try_recv().unwrap() {
UnsolicitedResponse::Vanished { earlier, uids } => { UnsolicitedResponse::Vanished { earlier, uids } => {
assert!(earlier); assert!(earlier);
@ -651,10 +658,11 @@ mod tests {
} }
assert!(recv.try_recv().is_err()); assert!(recv.try_recv().is_err());
assert_eq!(fetches.len(), 1); assert_eq!(fetches.len(), 1);
assert_eq!(fetches[0].message, 49); let first = fetches.iter().next().unwrap();
assert_eq!(fetches[0].flags(), &[Flag::Seen, Flag::Answered]); assert_eq!(first.message, 49);
assert_eq!(fetches[0].uid, Some(117)); assert_eq!(first.flags(), &[Flag::Seen, Flag::Answered]);
assert_eq!(fetches[0].body(), None); assert_eq!(first.uid, Some(117));
assert_eq!(fetches[0].header(), None); assert_eq!(first.body(), None);
assert_eq!(first.header(), None);
} }
} }

View file

@ -71,6 +71,16 @@ impl Fetches {
pub fn iter(&self) -> Iter<'_, Fetch<'_>> { pub fn iter(&self) -> Iter<'_, Fetch<'_>> {
self.borrow_fetches().iter() self.borrow_fetches().iter()
} }
/// Get the number of [`Fetch`]es in this container.
pub fn len(&self) -> usize {
self.borrow_fetches().len()
}
/// Return true if there are no [`Fetch`]es in the container.
pub fn is_empty(&self) -> bool {
self.borrow_fetches().is_empty()
}
} }
/// An IMAP [`FETCH` response](https://tools.ietf.org/html/rfc3501#section-7.4.2) that contains /// An IMAP [`FETCH` response](https://tools.ietf.org/html/rfc3501#section-7.4.2) that contains

View file

@ -48,6 +48,16 @@ impl Names {
pub fn iter(&self) -> Iter<'_, Name<'_>> { pub fn iter(&self) -> Iter<'_, Name<'_>> {
self.borrow_names().iter() self.borrow_names().iter()
} }
/// Get the number of [`Name`]s in this container.
pub fn len(&self) -> usize {
self.borrow_names().len()
}
/// Return true of there are no [`Name`]s in the container.
pub fn is_empty(&self) -> bool {
self.borrow_names().is_empty()
}
} }
/// A name that matches a `LIST` or `LSUB` command. /// A name that matches a `LIST` or `LSUB` command.

View file

@ -147,7 +147,7 @@ fn inbox() {
// let's see that we can also fetch the e-mails // let's see that we can also fetch the e-mails
let fetch = c.fetch("1", "(ALL UID)").unwrap(); let fetch = c.fetch("1", "(ALL UID)").unwrap();
assert_eq!(fetch.len(), 1); assert_eq!(fetch.len(), 1);
let fetch = &fetch[0]; let fetch = fetch.iter().next().unwrap();
assert_eq!(fetch.message, 1); assert_eq!(fetch.message, 1);
assert_ne!(fetch.uid, None); assert_ne!(fetch.uid, None);
assert_eq!(fetch.size, Some(138)); assert_eq!(fetch.size, Some(138));
@ -265,7 +265,7 @@ fn inbox_uid() {
// let's see that we can also fetch the e-mail // let's see that we can also fetch the e-mail
let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap();
assert_eq!(fetch.len(), 1); assert_eq!(fetch.len(), 1);
let fetch = &fetch[0]; let fetch = fetch.iter().next().unwrap();
assert_eq!(fetch.uid, Some(uid)); assert_eq!(fetch.uid, Some(uid));
let e = fetch.envelope().unwrap(); let e = fetch.envelope().unwrap();
assert_eq!(e.subject, Some(b"My first e-mail"[..].into())); assert_eq!(e.subject, Some(b"My first e-mail"[..].into()));
@ -325,7 +325,7 @@ fn append() {
// fetch the e-mail // fetch the e-mail
let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap();
assert_eq!(fetch.len(), 1); assert_eq!(fetch.len(), 1);
let fetch = &fetch[0]; let fetch = fetch.iter().next().unwrap();
assert_eq!(fetch.uid, Some(uid)); assert_eq!(fetch.uid, Some(uid));
let e = fetch.envelope().unwrap(); let e = fetch.envelope().unwrap();
assert_eq!(e.subject, Some(b"My second e-mail"[..].into())); assert_eq!(e.subject, Some(b"My second e-mail"[..].into()));
@ -376,7 +376,7 @@ fn append_with_flags() {
// fetch the e-mail // fetch the e-mail
let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap();
assert_eq!(fetch.len(), 1); assert_eq!(fetch.len(), 1);
let fetch = &fetch[0]; let fetch = fetch.iter().next().unwrap();
assert_eq!(fetch.uid, Some(uid)); assert_eq!(fetch.uid, Some(uid));
let e = fetch.envelope().unwrap(); let e = fetch.envelope().unwrap();
assert_eq!(e.subject, Some(b"My third e-mail"[..].into())); assert_eq!(e.subject, Some(b"My third e-mail"[..].into()));
@ -436,7 +436,7 @@ fn append_with_flags_and_date() {
// fetch the e-mail // fetch the e-mail
let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap();
assert_eq!(fetch.len(), 1); assert_eq!(fetch.len(), 1);
let fetch = &fetch[0]; let fetch = fetch.iter().next().unwrap();
assert_eq!(fetch.uid, Some(uid)); assert_eq!(fetch.uid, Some(uid));
assert_eq!(fetch.internal_date(), Some(date)); assert_eq!(fetch.internal_date(), Some(date));