Loading k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import org.apache.james.mime4j.util.MimeUtil; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Locale; import java.util.regex.Pattern; Loading Loading @@ -1044,7 +1045,7 @@ public class MimeUtility { } }; } else { throw new RuntimeException("Encoding for RawDataBody not supported: " + encoding); throw new UnsupportedOperationException("Encoding for RawDataBody not supported: " + encoding); } } else { inputStream = body.getInputStream(); Loading k9mail/src/main/java/com/fsck/k9/mailstore/BinaryMemoryBody.java→k9mail-library/src/main/java/com/fsck/k9/mailstore/BinaryMemoryBody.java +1 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class BinaryMemoryBody implements Body, RawDataBody, SizeAware { } @Override public void setEncoding(String encoding) throws UnavailableStorageException, MessagingException { public void setEncoding(String encoding) throws MessagingException { throw new RuntimeException("nope"); //FIXME } Loading k9mail-library/src/test/java/com/fsck/k9/mail/internet/ListHeadersTest.java +0 −12 Original line number Diff line number Diff line Loading @@ -11,8 +11,6 @@ import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) Loading Loading @@ -87,16 +85,6 @@ public class ListHeadersTest { assertEquals(0, result.length); } @Test public void getListPostAddresses_withExceptionThrownGettingHeader_shouldReturnEmptyList() throws Exception { MimeMessage message = mock(MimeMessage.class); when(message.getHeader(ListHeaders.LIST_POST_HEADER)).thenThrow(new MessagingException("Test")); Address[] result = ListHeaders.getListPostAddresses(message); assertEquals(0, result.length); } @Test public void getListPostAddresses_shouldProvideAllListPostHeaders() throws Exception { MimeMessage message = buildMimeMessageWithListPostValue( Loading k9mail-library/src/test/java/com/fsck/k9/mail/internet/MessageExtractorTest.java +29 −90 Original line number Diff line number Diff line package com.fsck.k9.mail.internet; import java.io.ByteArrayInputStream; import java.io.InputStream; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Part; import com.fsck.k9.mailstore.BinaryMemoryBody; import org.apache.james.mime4j.util.MimeUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; Loading @@ -27,17 +21,17 @@ import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 21) public class MessageExtractorTest { private Part part; private MimeBodyPart part; @Before public void setUp() throws Exception { part = mock(Part.class); part = new MimeBodyPart(); } @Test public void getTextFromPart_withNoBody_shouldReturnNull() throws Exception { withBody(null); part.setBody(null); String result = MessageExtractor.getTextFromPart(part); Loading @@ -46,9 +40,9 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withTextBody_shouldReturnText() throws Exception { withMimeType("text/plain"); withContentType("UTF-8"); withBody(createTextBody("Sample text body")); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain; charset=utf-8"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -57,8 +51,9 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withRawDataBodyWithNonText_shouldReturnNull() throws Exception { withMimeType("image/jpeg"); withBody(createRawDataBody()); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "image/jpeg"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -67,41 +62,30 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withExceptionThrownGettingInputStream_shouldReturnNull() throws Exception { withMimeType("text/html"); Body body = createRawDataBody(); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html"); Body body = mock(Body.class); when(body.getInputStream()).thenThrow(new MessagingException("Test")); withBody(body); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); assertNull(result); } @Test @Test(expected = UnsupportedOperationException.class) public void getTextFromPart_withUnknownEncoding_shouldThrowRuntimeException() throws Exception { withMimeType("text/plain"); withContentType("UTF-8"); RawDataBody body = createRawDataBody(); withBodyContent(body, "Sample text body"); withEncoding(body, "Unknown encoding"); withBody(body); try { part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), "unknown encoding"); part.setBody(body); MessageExtractor.getTextFromPart(part); fail("Expected exception"); } catch (RuntimeException e) { assertEquals("Encoding for RawDataBody not supported: Unknown encoding", e.getMessage()); } } @Test public void getTextFromPart_withPlainTextWithCharsetInContentTypeRawDataBody_shouldReturnText() throws Exception { RawDataBody body = createRawDataBody(); withMimeType("text/plain"); withContentType("text/html; charset=UTF-8"); withBodyContent(body, "Sample text body"); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain; charset=UTF-8"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -110,12 +94,10 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withHtmlWithCharsetInContentTypeRawDataBody_shouldReturnHtmlText() throws Exception { RawDataBody body = createRawDataBody(); withMimeType("text/html"); withContentType("text/html; charset=UTF-8"); withBodyContent(body, "<html><body>Sample text body</body></html>"); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html; charset=UTF-8"); BinaryMemoryBody body = new BinaryMemoryBody( "<html><body>Sample text body</body></html>".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -127,56 +109,13 @@ public class MessageExtractorTest { String bodyText = "<html><head>" + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" + "</head><body>Sample text body</body></html>"; RawDataBody body = createRawDataBody(); withMimeType("text/html"); withContentType("text/html"); withBodyContent(body, bodyText); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); BinaryMemoryBody body = new BinaryMemoryBody(bodyText.getBytes(), MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html"); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); assertNotNull(result); assertEquals(bodyText, result); } private void withMimeType(String mimeType) { when(part.getMimeType()).thenReturn(mimeType); } private void withContentType(String contentType) { when(part.getContentType()).thenReturn(contentType); } private void withBody(Body body) { when(part.getBody()).thenReturn(body); } private void withEncoding(RawDataBody body, String encoding) { when(body.getEncoding()).thenReturn(encoding); } private void withBodyContent(RawDataBody body, final String text) throws Exception { when(body.getInputStream()).then(new Answer<InputStream>() { @Override public InputStream answer(InvocationOnMock invocation) throws Throwable { return createInputStream(text); } }); } private TextBody createTextBody(String text) { TextBody body = mock(TextBody.class); when(body.getText()).thenReturn(text); return body; } private InputStream createInputStream(String text) throws Exception { return new ByteArrayInputStream(text.getBytes("UTF-8")); } private RawDataBody createRawDataBody() { return mock(RawDataBody.class); } } k9mail/src/androidTest/java/com/fsck/k9/mailstore/ReconstructMessageFromDatabaseTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import com.fsck.k9.mail.Body; import com.fsck.k9.mail.FetchProfile; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.BinaryTempFileBody; import com.fsck.k9.mail.internet.MimeHeader; import com.fsck.k9.mail.internet.MimeMessage; import org.apache.james.mime4j.util.MimeUtil; Loading Loading @@ -105,7 +106,7 @@ public class ReconstructMessageFromDatabaseTest extends ApplicationTestCase<K9> LocalMessage localMessage = readMessageFromDatabase(folder, message); assertEquals("to@example.com", localMessage.getHeader("To")[0]); assertEquals("text/plain", localMessage.getMimeType()); assertEquals("text/plain", localMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE)[0]); assertEquals("text", localMessage.getServerExtra()); assertNull(localMessage.getBody()); Loading Loading
k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import org.apache.james.mime4j.util.MimeUtil; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.Locale; import java.util.regex.Pattern; Loading Loading @@ -1044,7 +1045,7 @@ public class MimeUtility { } }; } else { throw new RuntimeException("Encoding for RawDataBody not supported: " + encoding); throw new UnsupportedOperationException("Encoding for RawDataBody not supported: " + encoding); } } else { inputStream = body.getInputStream(); Loading
k9mail/src/main/java/com/fsck/k9/mailstore/BinaryMemoryBody.java→k9mail-library/src/main/java/com/fsck/k9/mailstore/BinaryMemoryBody.java +1 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class BinaryMemoryBody implements Body, RawDataBody, SizeAware { } @Override public void setEncoding(String encoding) throws UnavailableStorageException, MessagingException { public void setEncoding(String encoding) throws MessagingException { throw new RuntimeException("nope"); //FIXME } Loading
k9mail-library/src/test/java/com/fsck/k9/mail/internet/ListHeadersTest.java +0 −12 Original line number Diff line number Diff line Loading @@ -11,8 +11,6 @@ import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) Loading Loading @@ -87,16 +85,6 @@ public class ListHeadersTest { assertEquals(0, result.length); } @Test public void getListPostAddresses_withExceptionThrownGettingHeader_shouldReturnEmptyList() throws Exception { MimeMessage message = mock(MimeMessage.class); when(message.getHeader(ListHeaders.LIST_POST_HEADER)).thenThrow(new MessagingException("Test")); Address[] result = ListHeaders.getListPostAddresses(message); assertEquals(0, result.length); } @Test public void getListPostAddresses_shouldProvideAllListPostHeaders() throws Exception { MimeMessage message = buildMimeMessageWithListPostValue( Loading
k9mail-library/src/test/java/com/fsck/k9/mail/internet/MessageExtractorTest.java +29 −90 Original line number Diff line number Diff line package com.fsck.k9.mail.internet; import java.io.ByteArrayInputStream; import java.io.InputStream; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Part; import com.fsck.k9.mailstore.BinaryMemoryBody; import org.apache.james.mime4j.util.MimeUtil; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; Loading @@ -27,17 +21,17 @@ import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 21) public class MessageExtractorTest { private Part part; private MimeBodyPart part; @Before public void setUp() throws Exception { part = mock(Part.class); part = new MimeBodyPart(); } @Test public void getTextFromPart_withNoBody_shouldReturnNull() throws Exception { withBody(null); part.setBody(null); String result = MessageExtractor.getTextFromPart(part); Loading @@ -46,9 +40,9 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withTextBody_shouldReturnText() throws Exception { withMimeType("text/plain"); withContentType("UTF-8"); withBody(createTextBody("Sample text body")); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain; charset=utf-8"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -57,8 +51,9 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withRawDataBodyWithNonText_shouldReturnNull() throws Exception { withMimeType("image/jpeg"); withBody(createRawDataBody()); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "image/jpeg"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -67,41 +62,30 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withExceptionThrownGettingInputStream_shouldReturnNull() throws Exception { withMimeType("text/html"); Body body = createRawDataBody(); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html"); Body body = mock(Body.class); when(body.getInputStream()).thenThrow(new MessagingException("Test")); withBody(body); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); assertNull(result); } @Test @Test(expected = UnsupportedOperationException.class) public void getTextFromPart_withUnknownEncoding_shouldThrowRuntimeException() throws Exception { withMimeType("text/plain"); withContentType("UTF-8"); RawDataBody body = createRawDataBody(); withBodyContent(body, "Sample text body"); withEncoding(body, "Unknown encoding"); withBody(body); try { part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), "unknown encoding"); part.setBody(body); MessageExtractor.getTextFromPart(part); fail("Expected exception"); } catch (RuntimeException e) { assertEquals("Encoding for RawDataBody not supported: Unknown encoding", e.getMessage()); } } @Test public void getTextFromPart_withPlainTextWithCharsetInContentTypeRawDataBody_shouldReturnText() throws Exception { RawDataBody body = createRawDataBody(); withMimeType("text/plain"); withContentType("text/html; charset=UTF-8"); withBodyContent(body, "Sample text body"); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/plain; charset=UTF-8"); BinaryMemoryBody body = new BinaryMemoryBody("Sample text body".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -110,12 +94,10 @@ public class MessageExtractorTest { @Test public void getTextFromPart_withHtmlWithCharsetInContentTypeRawDataBody_shouldReturnHtmlText() throws Exception { RawDataBody body = createRawDataBody(); withMimeType("text/html"); withContentType("text/html; charset=UTF-8"); withBodyContent(body, "<html><body>Sample text body</body></html>"); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html; charset=UTF-8"); BinaryMemoryBody body = new BinaryMemoryBody( "<html><body>Sample text body</body></html>".getBytes(), MimeUtil.ENC_8BIT); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); Loading @@ -127,56 +109,13 @@ public class MessageExtractorTest { String bodyText = "<html><head>" + "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">" + "</head><body>Sample text body</body></html>"; RawDataBody body = createRawDataBody(); withMimeType("text/html"); withContentType("text/html"); withBodyContent(body, bodyText); withBody(body); withEncoding(body, MimeUtil.ENC_8BIT); BinaryMemoryBody body = new BinaryMemoryBody(bodyText.getBytes(), MimeUtil.ENC_8BIT); part.setHeader(MimeHeader.HEADER_CONTENT_TYPE, "text/html"); part.setBody(body); String result = MessageExtractor.getTextFromPart(part); assertNotNull(result); assertEquals(bodyText, result); } private void withMimeType(String mimeType) { when(part.getMimeType()).thenReturn(mimeType); } private void withContentType(String contentType) { when(part.getContentType()).thenReturn(contentType); } private void withBody(Body body) { when(part.getBody()).thenReturn(body); } private void withEncoding(RawDataBody body, String encoding) { when(body.getEncoding()).thenReturn(encoding); } private void withBodyContent(RawDataBody body, final String text) throws Exception { when(body.getInputStream()).then(new Answer<InputStream>() { @Override public InputStream answer(InvocationOnMock invocation) throws Throwable { return createInputStream(text); } }); } private TextBody createTextBody(String text) { TextBody body = mock(TextBody.class); when(body.getText()).thenReturn(text); return body; } private InputStream createInputStream(String text) throws Exception { return new ByteArrayInputStream(text.getBytes("UTF-8")); } private RawDataBody createRawDataBody() { return mock(RawDataBody.class); } }
k9mail/src/androidTest/java/com/fsck/k9/mailstore/ReconstructMessageFromDatabaseTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import com.fsck.k9.mail.Body; import com.fsck.k9.mail.FetchProfile; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.BinaryTempFileBody; import com.fsck.k9.mail.internet.MimeHeader; import com.fsck.k9.mail.internet.MimeMessage; import org.apache.james.mime4j.util.MimeUtil; Loading Loading @@ -105,7 +106,7 @@ public class ReconstructMessageFromDatabaseTest extends ApplicationTestCase<K9> LocalMessage localMessage = readMessageFromDatabase(folder, message); assertEquals("to@example.com", localMessage.getHeader("To")[0]); assertEquals("text/plain", localMessage.getMimeType()); assertEquals("text/plain", localMessage.getHeader(MimeHeader.HEADER_CONTENT_TYPE)[0]); assertEquals("text", localMessage.getServerExtra()); assertNull(localMessage.getBody()); Loading