Fix tests and examples.
This commit is contained in:
parent
3f2331423c
commit
826e6d413b
5 changed files with 66 additions and 38 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
72
src/parse.rs
72
src/parse.rs
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue