aboutsummaryrefslogtreecommitdiff
path: root/tests/common
diff options
context:
space:
mode:
Diffstat (limited to 'tests/common')
-rw-r--r--tests/common/fragments.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/common/fragments.rs b/tests/common/fragments.rs
index 530f1f7..c8d5ef1 100644
--- a/tests/common/fragments.rs
+++ b/tests/common/fragments.rs
@@ -11,7 +11,11 @@ use crate::common::*;
/// arbitrary values, only enum for which the code is known
/// to be correct. The idea is that the generated message is more
/// or less hardcoded by the developer, so its clear what's expected,
-/// and not generated by a library.
+/// and not generated by a library. Also don't use vector of enum,
+/// as it again introduce some kind of genericity we try so hard to avoid:
+/// instead add a dedicated enum, for example "All" or anything relaevent that would
+/// describe your list and then hardcode it in your fragment.
+/// DON'T. TRY. TO. BE. GENERIC. HERE.
pub fn connect(imap: &mut TcpStream) -> Result<()> {
let mut buffer: [u8; 1500] = [0; 1500];
@@ -33,6 +37,12 @@ pub enum Extension {
CondStore,
}
+pub enum Enable {
+ Utf8Accept,
+ CondStore,
+ All,
+}
+
pub enum Mailbox {
Inbox,
Archive,
@@ -357,6 +367,25 @@ pub fn r#move(imap: &mut TcpStream, selection: Selection, to: Mailbox) -> Result
Ok(())
}
+pub fn enable(imap: &mut TcpStream, ask: Enable, done: Option<Enable>) -> Result<()> {
+ let mut buffer: [u8; 6000] = [0; 6000];
+ assert!(matches!(ask, Enable::Utf8Accept));
+
+ imap.write(&b"36 enable UTF8=ACCEPT\r\n"[..])?;
+ let read = read_lines(imap, &mut buffer, Some(&b"36 OK"[..]))?;
+ let srv_msg = std::str::from_utf8(read)?;
+ match done {
+ None => assert_eq!(srv_msg.lines().count(), 1),
+ Some(Enable::Utf8Accept) => {
+ assert_eq!(srv_msg.lines().count(), 2);
+ assert!(srv_msg.contains("* ENABLED UTF8=ACCEPT"));
+ },
+ _ => unimplemented!(),
+ }
+
+ Ok(())
+}
+
pub fn logout(imap: &mut TcpStream) -> Result<()> {
imap.write(&b"99 logout\r\n"[..])?;
let mut buffer: [u8; 1500] = [0; 1500];