Author: rdonkin
Date: Wed Feb 20 11:44:25 2008
New Revision: 629590

URL: http://svn.apache.org/viewvc?rev=629590&view=rev
Log:
Ensure that END_BODYPART is reported when a message is finished.

Added:
    
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartTokensTest.java
Modified:
    
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java
    
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MimeTokenNoRecurseTest.java
    
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartStreamTest.java

Modified: 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java?rev=629590&r1=629589&r2=629590&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java 
(original)
+++ 
james/mime4j/trunk/src/main/java/org/apache/james/mime4j/MimeTokenStream.java 
Wed Feb 20 11:44:25 2008
@@ -392,7 +392,7 @@
                             log.debug("quoted-printable encoded message/rfc822 
detected");
                             nextCursor = cursor.decodeQuotedPrintable();
                         }
-                        state = endState;
+                        state = T_IN_MESSAGE;
                         return parseMessage(nextCursor, body);
                     } else {
                         state = T_BODY;

Modified: 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MimeTokenNoRecurseTest.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MimeTokenNoRecurseTest.java?rev=629590&r1=629589&r2=629590&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MimeTokenNoRecurseTest.java
 (original)
+++ 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MimeTokenNoRecurseTest.java
 Wed Feb 20 11:44:25 2008
@@ -92,6 +92,7 @@
         nextIs(MimeTokenStream.T_EPILOGUE);
         nextIs(MimeTokenStream.T_END_MULTIPART);
         nextIs(MimeTokenStream.T_END_MESSAGE);
+        nextIs(MimeTokenStream.T_END_BODYPART);
         nextShouldBeStandardPart(true);
         nextIs(MimeTokenStream.T_EPILOGUE);
         nextIs(MimeTokenStream.T_END_MULTIPART);

Modified: 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartStreamTest.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartStreamTest.java?rev=629590&r1=629589&r2=629590&view=diff
==============================================================================
--- 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartStreamTest.java
 (original)
+++ 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartStreamTest.java
 Wed Feb 20 11:44:25 2008
@@ -106,8 +106,7 @@
         assertEquals(BODY, IOUtils.toString(out, "us-ascii"));
         checkState(MimeTokenStream.T_END_MULTIPART);
         checkState(MimeTokenStream.T_END_MESSAGE);
-        //TODO: 
-        //checkState(MimeTokenStream.T_END_BODYPART);
+        checkState(MimeTokenStream.T_END_BODYPART);
         checkState(MimeTokenStream.T_START_BODYPART);
         checkState(MimeTokenStream.T_START_HEADER);
         checkState(MimeTokenStream.T_FIELD);

Added: 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartTokensTest.java
URL: 
http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartTokensTest.java?rev=629590&view=auto
==============================================================================
--- 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartTokensTest.java
 (added)
+++ 
james/mime4j/trunk/src/test/java/org/apache/james/mime4j/MultipartTokensTest.java
 Wed Feb 20 11:44:25 2008
@@ -0,0 +1,144 @@
+package org.apache.james.mime4j;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import junit.framework.TestCase;
+
+public class MultipartTokensTest extends TestCase {
+
+    private static final Charset US_ASCII = Charset.forName("us-ascii");
+    
+    private static final String BODY = "A Preamble\r\n" +
+                "--1729\r\n\r\n" +
+                "Simple plain text\r\n" +
+                "--1729\r\n" +
+                "Content-Type: text/plain; charset=US-ASCII\r\n\r\n" +
+                "Some more text\r\n" +
+                "--1729--\r\n";
+    public static final String MESSAGE = "To: Road Runner <[EMAIL 
PROTECTED]>\r\n" +
+            "From: Wile E. Cayote <[EMAIL PROTECTED]>\r\n" +
+            "Date: Tue, 12 Feb 2008 17:34:09 +0000 (GMT)\r\n" +
+            "Subject: Mail\r\n" +
+            "Content-Type: multipart/mixed;boundary=1729\r\n\r\n" +
+            BODY;
+    
+    public static final String COMPLEX_MESSAGE = "To: Wile E. Cayote <[EMAIL 
PROTECTED]>\r\n" +
+    "From: Road Runner <[EMAIL PROTECTED]>\r\n" +
+    "Date: Tue, 19 Feb 2008 17:34:09 +0000 (GMT)\r\n" +
+    "Subject: Mail\r\n" +
+    "Content-Type: multipart/mixed;boundary=42\r\n\r\n" +
+    "A little preamble\r\n" +
+    "--42\r\n" +
+    "Content-Type: text/plain; charset=US-ASCII\r\n\r\n" +
+    "Rhubard!\r\n" +
+    "--42\r\n" +
+    "Content-Type: message/rfc822\r\n\r\n" +
+    MESSAGE +
+    "\r\n" +
+    "--42\r\n" +
+    "Custard!" +
+    "\r\n" +
+    "--42--\r\n";
+    
+    MimeTokenStream parser;
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+        parser = new MimeTokenStream();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    
+    public void testShouldParseSimpleMessage() throws Exception {
+        parser.parse(new 
ByteArrayInputStream(US_ASCII.encode(MESSAGE).array()));
+        checkState(MimeTokenStream.T_START_HEADER);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_END_HEADER);
+        checkState(MimeTokenStream.T_START_MULTIPART);
+        checkState(MimeTokenStream.T_PREAMBLE);
+        checkState(MimeTokenStream.T_START_BODYPART);
+        checkState(MimeTokenStream.T_START_HEADER);
+        checkState(MimeTokenStream.T_END_HEADER);
+        checkState(MimeTokenStream.T_BODY);
+        checkState(MimeTokenStream.T_END_BODYPART);
+        checkState(MimeTokenStream.T_START_BODYPART);
+        checkState(MimeTokenStream.T_START_HEADER);
+        checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_END_HEADER);
+        checkState(MimeTokenStream.T_BODY);
+        checkState(MimeTokenStream.T_END_BODYPART);
+        checkState(MimeTokenStream.T_EPILOGUE);
+        checkState(MimeTokenStream.T_END_MULTIPART);
+        checkState(MimeTokenStream.T_END_MESSAGE);
+        checkState(MimeTokenStream.T_END_OF_STREAM);
+    }
+    
+    public void testShouldParseMessageWithEmbeddedMessage() throws Exception {
+        parser.parse(new 
ByteArrayInputStream(US_ASCII.encode(COMPLEX_MESSAGE).array()));
+        checkState(MimeTokenStream.T_START_HEADER);
+            checkState(MimeTokenStream.T_FIELD);
+            checkState(MimeTokenStream.T_FIELD);
+            checkState(MimeTokenStream.T_FIELD);
+            checkState(MimeTokenStream.T_FIELD);
+            checkState(MimeTokenStream.T_FIELD);
+        checkState(MimeTokenStream.T_END_HEADER);
+        checkState(MimeTokenStream.T_START_MULTIPART);
+            checkState(MimeTokenStream.T_PREAMBLE);
+            checkState(MimeTokenStream.T_START_BODYPART);
+                checkState(MimeTokenStream.T_START_HEADER);
+                    checkState(MimeTokenStream.T_FIELD);
+                checkState(MimeTokenStream.T_END_HEADER);
+                checkState(MimeTokenStream.T_BODY);
+            checkState(MimeTokenStream.T_END_BODYPART);
+            checkState(MimeTokenStream.T_START_BODYPART);
+                checkState(MimeTokenStream.T_START_HEADER);
+                    checkState(MimeTokenStream.T_FIELD);
+                checkState(MimeTokenStream.T_END_HEADER);
+                checkState(MimeTokenStream.T_START_MESSAGE);
+                    checkState(MimeTokenStream.T_START_HEADER);
+                        checkState(MimeTokenStream.T_FIELD);
+                        checkState(MimeTokenStream.T_FIELD);
+                        checkState(MimeTokenStream.T_FIELD);
+                        checkState(MimeTokenStream.T_FIELD);
+                        checkState(MimeTokenStream.T_FIELD);
+                    checkState(MimeTokenStream.T_END_HEADER);
+                    checkState(MimeTokenStream.T_START_MULTIPART);
+                        checkState(MimeTokenStream.T_PREAMBLE);
+                        checkState(MimeTokenStream.T_START_BODYPART);
+                            checkState(MimeTokenStream.T_START_HEADER);
+                            checkState(MimeTokenStream.T_END_HEADER);   
+                            checkState(MimeTokenStream.T_BODY);
+                        checkState(MimeTokenStream.T_END_BODYPART);
+                        checkState(MimeTokenStream.T_START_BODYPART);
+                            checkState(MimeTokenStream.T_START_HEADER);
+                                checkState(MimeTokenStream.T_FIELD);
+                            checkState(MimeTokenStream.T_END_HEADER);
+                            checkState(MimeTokenStream.T_BODY);
+                        checkState(MimeTokenStream.T_END_BODYPART);
+                        checkState(MimeTokenStream.T_EPILOGUE);
+                    checkState(MimeTokenStream.T_END_MULTIPART);
+                checkState(MimeTokenStream.T_END_MESSAGE);
+            checkState(MimeTokenStream.T_END_BODYPART);
+            checkState(MimeTokenStream.T_START_BODYPART);
+                checkState(MimeTokenStream.T_START_HEADER);
+                checkState(MimeTokenStream.T_END_HEADER);
+                checkState(MimeTokenStream.T_BODY);
+            checkState(MimeTokenStream.T_END_BODYPART);
+            checkState(MimeTokenStream.T_EPILOGUE);
+        checkState(MimeTokenStream.T_END_MULTIPART);
+        checkState(MimeTokenStream.T_END_MESSAGE);
+        checkState(MimeTokenStream.T_END_OF_STREAM);
+    }
+
+    private void checkState(final int state) throws IOException, MimeException 
{
+        assertEquals(MimeTokenStream.stateToString(state), 
MimeTokenStream.stateToString(parser.next()));
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to