Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f0fb9fd authored by Vincent Breitmoser's avatar Vincent Breitmoser
Browse files

change tests to use more actual Part/Body classes instead of mocks

parent 921ee5c0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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
    }

+0 −12
Original line number Diff line number Diff line
@@ -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)
@@ -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(
+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;

@@ -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);

@@ -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);

@@ -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);

@@ -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);

@@ -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);

@@ -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);
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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