package com.google.sitebricks.mail;
import com.google.common.collect.ImmutableList;
import com.google.sitebricks.mail.imap.Command;
import com.google.sitebricks.mail.imap.ExtractionException;
import org.testng.annotations.Test;
import java.util.List;
import java.util.regex.Matcher;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
public class MailClientHandlerTest {
private void assertProcess(MailClientHandler.InputBuffer ib, String s, List<String> l) {
assertEquals(ib.processMessage(s), l);
}
@Test
public final void testProcessMessage() {
// ib is stateful.
MailClientHandler.InputBuffer ib = new MailClientHandler.InputBuffer();
assertProcess(ib, "hi ", ImmutableList.<String>of());
assertProcess(ib, "bob\r\nhow\n\r", ImmutableList.of("hi bob", "how"));
assertProcess(ib, "\nis\n\r\n", ImmutableList.of("", "is", ""));
assertProcess(ib, "your snake\nfeeling ", ImmutableList.of("your snake"));
assertProcess(ib, "after\neating\nthat", ImmutableList.of("feeling after", "eating"));
assertProcess(ib, " mushroom?\r\n", ImmutableList.of("that mushroom?"));
}
@Test
public final void testAuthenticationSuccessRegex() {
assertTrue(". OK cameron@themaninblue.com Cameron Adams authenticated (Success)"
.matches("[.] OK .*@.* \\(Success\\)"));
}
@Test
public final void testIdleExistsRegexes() {
Matcher matcher = MailClientHandler.IDLE_EXISTS_REGEX.matcher("* 46243 EXISTS");
assertTrue(matcher.matches());
assertEquals(matcher.group(1), "46243");
}
@Test
public final void testIdleExpungeRegexes() {
Matcher matcher = MailClientHandler.IDLE_EXPUNGE_REGEX.matcher("* 46243 expunge");
assertTrue(matcher.matches());
assertEquals(matcher.group(1), "46243");
}
@Test
public final void testIdleEndedRegexes() {
Matcher matcher = MailClientHandler.IDLE_ENDED_REGEX.matcher("3 OK IDLE terminated (Success)");
assertTrue(matcher.matches());
}
@Test
public final void testSystemErrorRegex() {
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* bye system error").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE SYSTEM ERROR").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE system error").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE system error").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE SYSTEM error").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE SYSTEM error \n ").matches());
assertTrue(MailClientHandler.SYSTEM_ERROR_REGEX.matcher("* BYE SYSTEM error \t ").matches());
}
@Test
public final void testOKSuccessRegex() throws ExtractionException {
try {
Command.isEndOfSequence(1L, "1 NO something bad");
fail("Expected an exception on 'NO' response");
} catch(ExtractionException ee) {
// expected;
}
assertTrue(Command.isEndOfSequence(1L, "1 OK Success"));
assertTrue(Command.isEndOfSequence(2L, "2 OK [READ-ONLY] [Gmail]/All Mail selected. (Success)"));
assertFalse(Command.isEndOfSequence("> OK [READ-ONLY] [Gmail]/All Mail selected. (Success)"));
}
@Test
public final void testMessageCouldNotBeFetchedRegex() throws ExtractionException {
assertTrue(MailClientHandler.MESSAGE_COULDNT_BE_FETCHED_REGEX
.matcher("3 NO Some messages could not be FETCHed (Failure)")
.matches());
}
}