You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ol...@apache.org on 2013/05/13 14:13:09 UTC

svn commit: r1481814 - in /james/mime4j/trunk: core/src/test/java/org/apache/james/mime4j/ core/src/test/java/org/apache/james/mime4j/parser/ dom/src/test/java/org/apache/james/mime4j/dom/ dom/src/test/java/org/apache/james/mime4j/message/

Author: olegk
Date: Mon May 13 12:13:09 2013
New Revision: 1481814

URL: http://svn.apache.org/r1481814
Log:
Refactored sample message based test suites; fixed frivolous usage of file based resources

Added:
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java   (with props)
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java   (with props)
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java   (with props)
Modified:
    james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserExampleMessagesTest.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/EntityTest.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java
    james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/message/StringInputStreamTest.java

Added: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java?rev=1481814&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java (added)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java Mon May 13 12:13:09 2013
@@ -0,0 +1,77 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.james.mime4j.stream.MimeConfig;
+
+import junit.framework.TestCase;
+
+public abstract class ExampleMessageTestCase extends TestCase {
+
+    private final File file;
+    private final URL resource;
+
+    protected ExampleMessageTestCase(final File file, final URL resource) {
+        super(file.getName());
+        this.file = file;
+        this.resource = resource;
+    }
+
+    public File getSourceFile() {
+        return file;
+    }
+
+    public URL getResource() {
+        return resource;
+    }
+
+    public String getResourceBase() {
+        String r = resource.toString();
+        String s = file.getName();
+        if (r.endsWith(s)) {
+            return r.substring(0, r.length() - s.length()) + getFilenameBase();
+        } else {
+            return r;
+        }
+    }
+
+    public String getFilenameBase() {
+        String s = file.getName();
+        int idx = s.indexOf('.');
+        if (idx != -1) {
+            return s.substring(0, idx);
+        } else {
+            return s;
+        }
+    }
+
+    public MimeConfig getConfig() {
+        MimeConfig config = new MimeConfig();
+        if (file.getName().startsWith("malformedHeaderStartsBody")) {
+            config.setMalformedHeaderStartsBody(true);
+        }
+        config.setMaxLineLen(-1);
+        return config;
+    }
+
+}

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java?rev=1481814&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java (added)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java Mon May 13 12:13:09 2013
@@ -0,0 +1,30 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+public interface ExampleMessageTestCaseFactory {
+
+    ExampleMessageTestCase create(File file, URL resource) throws IOException;
+
+}

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestCaseFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java?rev=1481814&view=auto
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java (added)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java Mon May 13 12:13:09 2013
@@ -0,0 +1,87 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import junit.framework.TestSuite;
+
+/**
+ * Creates a TestSuite running the test for each sample .msg file in the test resource folder.
+ */
+public class ExampleMessageTestSuiteBuilder {
+
+    private final ExampleMessageTestCaseFactory testFactory;
+
+    public ExampleMessageTestSuiteBuilder(final ExampleMessageTestCaseFactory testFactory) {
+        super();
+        this.testFactory = testFactory;
+    }
+
+    public TestSuite build() throws IOException {
+        TestSuite suite = new TestSuite();
+        addAllTests(suite);
+        return suite;
+    }
+
+    private void addAllTests(
+            final TestSuite testSuite) throws IOException {
+        addTests(testSuite, "/testmsgs");
+        addTests(testSuite, "/mimetools-testmsgs");
+    }
+
+    private void addTests(
+            final TestSuite testSuite,
+            final String testsFolder) throws IOException {
+        URL resource = ExampleMessageTestSuiteBuilder.class.getResource(testsFolder);
+        if (resource != null) {
+            if (resource.getProtocol().equalsIgnoreCase("file")) {
+                File dir = new File(resource.getFile());
+                File[] files = dir.listFiles();
+
+                for (File f : files) {
+                    if (f.getName().endsWith(".msg")) {
+                        testSuite.addTest(this.testFactory.create(
+                                f, f.toURL()));
+                    }
+                }
+            } else if (resource.getProtocol().equalsIgnoreCase("jar")) {
+                JarURLConnection conn = (JarURLConnection) resource.openConnection();
+                JarFile jar = conn.getJarFile();
+                for (Enumeration<JarEntry> it = jar.entries(); it.hasMoreElements(); ) {
+                    JarEntry entry = it.nextElement();
+                    String s = "/" + entry.toString();
+                    File f = new File(s);
+                    if (s.startsWith(testsFolder) && s.endsWith(".msg")) {
+                        testSuite.addTest(testFactory.create(
+                                f, new URL("jar:file:" + jar.getName() + "!" + s)));
+                    }
+                }
+            }
+        }
+    }
+
+}

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/ExampleMessageTestSuiteBuilder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserExampleMessagesTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserExampleMessagesTest.java?rev=1481814&r1=1481813&r2=1481814&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserExampleMessagesTest.java (original)
+++ james/mime4j/trunk/core/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserExampleMessagesTest.java Mon May 13 12:13:09 2013
@@ -19,108 +19,85 @@
 
 package org.apache.james.mime4j.parser;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.commons.io.IOUtils;
-import org.apache.james.mime4j.stream.MimeConfig;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Enumeration;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
 
-/**
- * Creates a TestSuite running the test for each .msg file in the test resouce folder.
- * Allow running of a single test from Unit testing GUIs
- */
-public class MimeStreamParserExampleMessagesTest extends TestCase {
-
-    private final URL url;
+import junit.framework.TestSuite;
 
-    public MimeStreamParserExampleMessagesTest(String name, URL url) {
-        super(name);
-        this.url = url;
-    }
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.ExampleMessageTestCase;
+import org.apache.james.mime4j.ExampleMessageTestCaseFactory;
+import org.apache.james.mime4j.ExampleMessageTestSuiteBuilder;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.util.CharsetUtil;
+import org.junit.Assert;
+import org.junit.runner.RunWith;
+import org.junit.runners.AllTests;
 
-    @Override
-    protected void runTest() throws Throwable {
-        MimeStreamParser parser;
-        TestHandler handler;
-        MimeConfig config = new MimeConfig();
-        if (getName().startsWith("malformedHeaderStartsBody")) {
-            config.setMalformedHeaderStartsBody(true);
-        }
-        config.setMaxLineLen(-1);
-        parser = new MimeStreamParser(config);
-        handler = new TestHandler();
+/**
+ * Test parsing of all sample messages
+ */
+@RunWith(AllTests.class)
+public class MimeStreamParserExampleMessagesTest extends ExampleMessageTestCase {
 
-        parser.setContentHandler(handler);
-        parser.parse(url.openStream());
+    public static TestSuite suite() throws IOException {
+        ExampleMessageTestSuiteBuilder testSuiteBuilder = new ExampleMessageTestSuiteBuilder(
+                new ExampleMessageTestCaseFactory() {
 
-        String result = handler.sb.toString();
+                    public ExampleMessageTestCase create(final File file, final URL resource) throws IOException {
+                        return new MimeStreamParserExampleMessagesTest(file, resource);
+                    }
 
-        String s = url.toString();
-        String prefix = s.substring(0, s.lastIndexOf('.'));
-        URL xmlFileUrl = new URL(prefix + ".xml");
-        try {
-            InputStream openStream = xmlFileUrl.openStream();
-            String expected = IOUtils.toString(openStream, "ISO8859-1");
-            assertEquals(expected, result);
-        } catch (FileNotFoundException e) {
-            IOUtils.write(result, new FileOutputStream(xmlFileUrl.getPath() + ".expected"));
-            fail("Expected file created.");
-        }
+                });
+        return testSuiteBuilder.build();
     }
 
-    public static Test suite() throws IOException, URISyntaxException {
-        return new MimeStreamParserExampleMessagesTestSuite();
+    public MimeStreamParserExampleMessagesTest(final File file, final URL resource) {
+        super(file, resource);
     }
 
-    static class MimeStreamParserExampleMessagesTestSuite extends TestSuite {
+    @Override
+    public void runTest() throws Exception {
+        MimeConfig config = getConfig();
+
+        TestHandler handler = new TestHandler();
+        InputStream msgstream = getResource().openStream();
+        try {
+            MimeStreamParser parser = new MimeStreamParser(config);
+            parser.setContentHandler(handler);
+            parser.parse(msgstream);
 
-        public MimeStreamParserExampleMessagesTestSuite() throws IOException, URISyntaxException {
-            addTests("/testmsgs");
-            addTests("/mimetools-testmsgs");
+        } finally {
+            msgstream.close();
         }
 
-        private void addTests(String testsFolder) throws URISyntaxException,
-                MalformedURLException, IOException {
-            URL resource = MimeStreamParserExampleMessagesTestSuite.class.getResource(testsFolder);
-            if (resource != null) {
-                if (resource.getProtocol().equalsIgnoreCase("file")) {
-                    File dir = new File(resource.toURI());
-                    File[] files = dir.listFiles();
-
-                    for (File f : files) {
-                        if (f.getName().endsWith(".msg")) {
-                            addTest(new MimeStreamParserExampleMessagesTest(f.getName(),
-                                    f.toURI().toURL()));
-                        }
-                    }
-                } else if (resource.getProtocol().equalsIgnoreCase("jar")) {
-                    JarURLConnection conn = (JarURLConnection) resource.openConnection();
-                    JarFile jar = conn.getJarFile();
-                    for (Enumeration<JarEntry> it = jar.entries(); it.hasMoreElements(); ) {
-                        JarEntry entry = it.nextElement();
-                        String s = "/" + entry.toString();
-                        File f = new File(s);
-                        if (s.startsWith(testsFolder) && s.endsWith(".msg")) {
-                            addTest(new MimeStreamParserExampleMessagesTest(f.getName(),
-                                    new URL("jar:file:" + jar.getName() + "!" + s)));
-                        }
-                    }
-                }
+        String result = handler.sb.toString();
+
+        URL xmlFileUrl = new URL(getResourceBase() + ".xml");
+        try {
+            String expected;
+            InputStream contentstream = xmlFileUrl.openStream();
+            try {
+                expected = IOUtils.toString(contentstream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                contentstream.close();
             }
+            Assert.assertEquals(expected, result);
+        } catch (FileNotFoundException ex) {
+            // Create expected content template to the current directory
+            File expectedFileTemplate = new File(getFilenameBase() + ".xml.expected");
+            FileOutputStream outstream = new FileOutputStream(expectedFileTemplate);
+            try {
+                IOUtils.write(result, outstream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                outstream.close();
+            }
+            Assert.fail("Expected file created.");
         }
-
     }
+
 }

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/EntityTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/EntityTest.java?rev=1481814&r1=1481813&r2=1481814&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/EntityTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/EntityTest.java Mon May 13 12:13:09 2013
@@ -19,30 +19,29 @@
 
 package org.apache.james.mime4j.dom;
 
-import org.apache.james.mime4j.dom.Body;
-import org.apache.james.mime4j.dom.Entity;
-import org.apache.james.mime4j.dom.Header;
 import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.message.BasicBodyFactory;
 import org.apache.james.mime4j.message.BodyPart;
 import org.apache.james.mime4j.message.HeaderImpl;
+import org.junit.Assert;
+import org.junit.Test;
 
-import junit.framework.TestCase;
-
-public class EntityTest extends TestCase {
+public class EntityTest {
 
+    @Test
     public void testSetBody() throws Exception {
         Entity entity = new BodyPart();
-        assertNull(entity.getBody());
+        Assert.assertNull(entity.getBody());
 
         Body body = new BasicBodyFactory().textBody("test");
-        assertNull(body.getParent());
+        Assert.assertNull(body.getParent());
 
         entity.setBody(body);
-        assertSame(body, entity.getBody());
-        assertSame(entity, body.getParent());
+        Assert.assertSame(body, entity.getBody());
+        Assert.assertSame(entity, body.getParent());
     }
 
+    @Test
     public void testSetBodyTwice() throws Exception {
         Entity entity = new BodyPart();
 
@@ -52,77 +51,83 @@ public class EntityTest extends TestCase
         entity.setBody(b1);
         try {
             entity.setBody(b2);
-            fail();
+            Assert.fail("IllegalStateException expected");
         } catch (IllegalStateException expected) {
         }
     }
 
+    @Test
     public void testRemoveBody() throws Exception {
         Entity entity = new BodyPart();
         Body body = new BasicBodyFactory().textBody("test");
         entity.setBody(body);
 
         Body removed = entity.removeBody();
-        assertSame(body, removed);
+        Assert.assertSame(body, removed);
 
-        assertNull(entity.getBody());
-        assertNull(removed.getParent());
+        Assert.assertNull(entity.getBody());
+        Assert.assertNull(removed.getParent());
     }
 
+    @Test
     public void testGetDispositionType() throws Exception {
         BodyPart entity = new BodyPart();
 
-        assertNull(entity.getDispositionType());
+        Assert.assertNull(entity.getDispositionType());
 
         Header header = new HeaderImpl();
         header.setField(DefaultFieldParser.parse("Content-Disposition: inline"));
         entity.setHeader(header);
 
-        assertEquals("inline", entity.getDispositionType());
+        Assert.assertEquals("inline", entity.getDispositionType());
     }
 
+    @Test
     public void testSetContentDispositionType() throws Exception {
         BodyPart entity = new BodyPart();
 
         entity.setContentDisposition("attachment");
 
-        assertEquals("attachment", entity.getHeader().getField(
+        Assert.assertEquals("attachment", entity.getHeader().getField(
                 "Content-Disposition").getBody());
     }
 
+    @Test
     public void testSetContentDispositionTypeFilename() throws Exception {
         BodyPart entity = new BodyPart();
 
         entity.setContentDisposition("attachment", "some file.dat");
 
-        assertEquals("attachment; filename=\"some file.dat\"", entity
+        Assert.assertEquals("attachment; filename=\"some file.dat\"", entity
                 .getHeader().getField("Content-Disposition").getBody());
     }
 
+    @Test
     public void testGetFilename() throws Exception {
         BodyPart entity = new BodyPart();
 
-        assertNull(entity.getFilename());
+        Assert.assertNull(entity.getFilename());
 
         Header header = new HeaderImpl();
         header.setField(DefaultFieldParser.parse("Content-Disposition: attachment; "
                 + "filename=\"some file.dat\""));
         entity.setHeader(header);
 
-        assertEquals("some file.dat", entity.getFilename());
+        Assert.assertEquals("some file.dat", entity.getFilename());
     }
 
+    @Test
     public void testSetFilename() throws Exception {
         BodyPart entity = new BodyPart();
 
         entity.setFilename("file name.ext");
 
-        assertEquals("attachment; filename=\"file name.ext\"", entity
+        Assert.assertEquals("attachment; filename=\"file name.ext\"", entity
                 .getHeader().getField("Content-Disposition").getBody());
 
         entity.setFilename(null);
 
-        assertEquals("attachment", entity.getHeader().getField(
+        Assert.assertEquals("attachment", entity.getHeader().getField(
                 "Content-Disposition").getBody());
     }
 

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java?rev=1481814&r1=1481813&r2=1481814&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java Mon May 13 12:13:09 2013
@@ -1,5 +1,5 @@
 /****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
+((TextBody) b).getInputStream()((TextBody) b).getInputStream()((TextBody) b).getInputStream()((TextBody) b).getInputStream()((TextBody) b).getInputStream()((TextBody) b).getInputStream()((TextBody) b).getInputStream() * Licensed to the Apache Software Foundation (ASF) under one   *
  * or more contributor license agreements.  See the NOTICE file *
  * distributed with this work for additional information        *
  * regarding copyright ownership.  The ASF licenses this file   *
@@ -19,110 +19,92 @@
 
 package org.apache.james.mime4j.dom;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.james.mime4j.codec.CodecUtil;
-import org.apache.james.mime4j.message.DefaultMessageBuilder;
-import org.apache.james.mime4j.message.DefaultMessageWriter;
-import org.apache.james.mime4j.stream.MimeConfig;
-
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
+import java.io.InputStream;
 import java.net.URL;
-import java.util.Enumeration;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
+
+import junit.framework.TestSuite;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.ExampleMessageTestCase;
+import org.apache.james.mime4j.ExampleMessageTestCaseFactory;
+import org.apache.james.mime4j.ExampleMessageTestSuiteBuilder;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
+import org.apache.james.mime4j.message.DefaultMessageWriter;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.util.CharsetUtil;
+import org.junit.Assert;
+import org.junit.runner.RunWith;
+import org.junit.runners.AllTests;
 
 /**
- * Creates a TestSuite running the test for each .msg file in the test resouce folder.
- * Allow running of a single test from Unit testing GUIs
+ * Test round-trip of all sample messages
  */
-public class ExampleMessagesRoundtripTest extends TestCase {
+@RunWith(AllTests.class)
+public class ExampleMessagesRoundtripTest extends ExampleMessageTestCase {
+
+    public static TestSuite suite() throws IOException {
+        ExampleMessageTestSuiteBuilder testSuiteBuilder = new ExampleMessageTestSuiteBuilder(
+                new ExampleMessageTestCaseFactory() {
+
+                    public ExampleMessageTestCase create(final File file, final URL resource) throws IOException {
+                        return new ExampleMessagesRoundtripTest(file, resource);
+                    }
 
-    private final URL url;
+                });
+        return testSuiteBuilder.build();
+    }
 
-    public ExampleMessagesRoundtripTest(String name, URL url) {
-        super(name);
-        this.url = url;
+    public ExampleMessagesRoundtripTest(final File file, final URL resource) {
+        super(file, resource);
     }
 
     @Override
-    protected void runTest() throws Throwable {
-        MimeConfig config = new MimeConfig();
-        if (getName().startsWith("malformedHeaderStartsBody")) {
-            config.setMalformedHeaderStartsBody(true);
-        }
-        config.setMaxLineLen(-1);
-        DefaultMessageBuilder builder = new DefaultMessageBuilder();
-        DefaultMessageWriter writer = new DefaultMessageWriter();
-        builder.setMimeEntityConfig(config);
-        Message inputMessage = builder.parseMessage(url.openStream());
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        writer.writeMessage(inputMessage, out);
+    protected void runTest() throws Exception {
+        MimeConfig config = getConfig();
 
-        String s = url.toString();
-        URL msgout = new URL(s.substring(0, s.lastIndexOf('.')) + ".out");
+        Message inputMessage;
+        InputStream msgstream = getResource().openStream();
         try {
-            ByteArrayOutputStream expectedstream = new ByteArrayOutputStream();
-            CodecUtil.copy(msgout.openStream(), expectedstream);
-            assertEquals("Wrong Expected result", new String(expectedstream.toByteArray()), new String(out.toByteArray()));
-        } catch (FileNotFoundException e) {
-            FileOutputStream fos = new FileOutputStream(msgout.getPath() + ".expected");
-            writer.writeMessage(inputMessage, fos);
-            fos.close();
-            fail("Expected file created");
+            DefaultMessageBuilder msgbuilder = new DefaultMessageBuilder();
+            msgbuilder.setMimeEntityConfig(config);
+            inputMessage = msgbuilder.parseMessage(msgstream);
+        } finally {
+            msgstream.close();
         }
-    }
-
-    public static Test suite() throws IOException, URISyntaxException {
-        return new ExampleMessagesRountripTestSuite();
-    }
 
+        DefaultMessageWriter msgwriter = new DefaultMessageWriter();
 
-    static class ExampleMessagesRountripTestSuite extends TestSuite {
+        ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+        msgwriter.writeMessage(inputMessage, outstream);
 
-        public ExampleMessagesRountripTestSuite() throws IOException, URISyntaxException {
-            super();
-            addTests("/testmsgs");
-            addTests("/mimetools-testmsgs");
-        }
+        String result = new String(outstream.toByteArray(), CharsetUtil.ISO_8859_1.name());
 
-        private void addTests(String testsFolder) throws URISyntaxException,
-                MalformedURLException, IOException {
-            URL resource = ExampleMessagesRountripTestSuite.class.getResource(testsFolder);
-            if (resource != null) {
-                if (resource.getProtocol().equalsIgnoreCase("file")) {
-                    File dir = new File(resource.toURI());
-                    File[] files = dir.listFiles();
-
-                    for (File f : files) {
-                        if (f.getName().endsWith(".msg")) {
-                            addTest(new ExampleMessagesRoundtripTest(f.getName(),
-                                    f.toURI().toURL()));
-                        }
-                    }
-                } else if (resource.getProtocol().equalsIgnoreCase("jar")) {
-                    JarURLConnection conn = (JarURLConnection) resource.openConnection();
-                    JarFile jar = conn.getJarFile();
-                    for (Enumeration<JarEntry> it = jar.entries(); it.hasMoreElements(); ) {
-                        JarEntry entry = it.nextElement();
-                        String s = "/" + entry.toString();
-                        File f = new File(s);
-                        if (s.startsWith(testsFolder) && s.endsWith(".msg")) {
-                            addTest(new ExampleMessagesRoundtripTest(f.getName(),
-                                    new URL("jar:file:" + jar.getName() + "!" + s)));
-                        }
-                    }
-                }
+        URL outFile = new URL(getResourceBase() + ".out");
+        try {
+            String expected;
+            InputStream contentstream = outFile.openStream();
+            try {
+                expected = IOUtils.toString(contentstream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                contentstream.close();
             }
+            assertEquals(expected, result);
+        } catch (FileNotFoundException e) {
+            // Create expected content template to the current directory
+            File expectedFileTemplate = new File(getFilenameBase() + ".out.expected");
+            FileOutputStream templatestream = new FileOutputStream(expectedFileTemplate);
+            try {
+                IOUtils.write(result, templatestream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                templatestream.close();
+            }
+            Assert.fail("Expected file created.");
         }
-
     }
+
 }

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java?rev=1481814&r1=1481813&r2=1481814&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/dom/MessageParserTest.java Mon May 13 12:13:09 2013
@@ -19,104 +19,89 @@
 
 package org.apache.james.mime4j.dom;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.apache.commons.io.IOUtils;
-import org.apache.james.mime4j.field.FieldsTest;
-import org.apache.james.mime4j.message.DefaultMessageBuilder;
-import org.apache.james.mime4j.message.MessageImpl;
-import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.MimeConfig;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.JarURLConnection;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Enumeration;
 import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
 
-public class MessageParserTest extends TestCase {
+import junit.framework.TestSuite;
 
-    private final URL url;
+import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.ExampleMessageTestCase;
+import org.apache.james.mime4j.ExampleMessageTestCaseFactory;
+import org.apache.james.mime4j.ExampleMessageTestSuiteBuilder;
+import org.apache.james.mime4j.field.FieldsTest;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
+import org.apache.james.mime4j.message.MessageImpl;
+import org.apache.james.mime4j.stream.Field;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.util.CharsetUtil;
+import org.junit.Assert;
+import org.junit.runner.RunWith;
+import org.junit.runners.AllTests;
+
+/**
+ * Test parsing into DOM of all sample messages
+ */
+@RunWith(AllTests.class)
+public class MessageParserTest extends ExampleMessageTestCase {
+
+    public static TestSuite suite() throws IOException {
+        ExampleMessageTestSuiteBuilder testSuiteBuilder = new ExampleMessageTestSuiteBuilder(
+                new ExampleMessageTestCaseFactory() {
 
-    public MessageParserTest(String name, URL url) {
-        super(name);
-        this.url = url;
-    }
+                    public ExampleMessageTestCase create(final File file, final URL resource) throws IOException {
+                        return new MessageParserTest(file, resource);
+                    }
 
-    public static Test suite() throws IOException, URISyntaxException {
-        return new MessageParserTestSuite();
+                });
+        return testSuiteBuilder.build();
     }
 
-    static class MessageParserTestSuite extends TestSuite {
-
-        public MessageParserTestSuite() throws IOException, URISyntaxException {
-            addTests("/testmsgs");
-            addTests("/mimetools-testmsgs");
-        }
-
-        private void addTests(String testsFolder) throws URISyntaxException,
-                MalformedURLException, IOException {
-            URL resource = MessageParserTestSuite.class.getResource(testsFolder);
-            if (resource != null) {
-                if (resource.getProtocol().equalsIgnoreCase("file")) {
-                    File dir = new File(resource.toURI());
-                    File[] files = dir.listFiles();
-
-                    for (File f : files) {
-                        if (f.getName().endsWith(".msg")) {
-                            addTest(new MessageParserTest(f.getName(),
-                                    f.toURI().toURL()));
-                        }
-                    }
-                } else if (resource.getProtocol().equalsIgnoreCase("jar")) {
-                    JarURLConnection conn = (JarURLConnection) resource.openConnection();
-                    JarFile jar = conn.getJarFile();
-                    for (Enumeration<JarEntry> it = jar.entries(); it.hasMoreElements(); ) {
-                        JarEntry entry = it.nextElement();
-                        String s = "/" + entry.toString();
-                        File f = new File(s);
-                        if (s.startsWith(testsFolder) && s.endsWith(".msg")) {
-                            addTest(new MessageParserTest(f.getName(),
-                                    new URL("jar:file:" + jar.getName() + "!" + s)));
-                        }
-                    }
-                }
-            }
-        }
-
+    public MessageParserTest(final File file, final URL resource) {
+        super(file, resource);
     }
 
     @Override
     protected void runTest() throws IOException {
-        MimeConfig config = new MimeConfig();
-        if (getName().startsWith("malformedHeaderStartsBody")) {
-            config.setMalformedHeaderStartsBody(true);
-        }
-        config.setMaxLineLen(-1);
-        DefaultMessageBuilder builder = new DefaultMessageBuilder();
-        builder.setMimeEntityConfig(config);
-        Message m = builder.parseMessage(url.openStream());
-
-        String s = url.toString();
-        String prefix = s.substring(0, s.lastIndexOf('.'));
-        URL xmlFileUrl = new URL(prefix + "_decoded.xml");
+        MimeConfig config = getConfig();
 
-        String result = getStructure(m, prefix, "1");
+        Message inputMessage;
+        InputStream msgstream = getResource().openStream();
         try {
-            String expected = IOUtils.toString(xmlFileUrl.openStream(), "ISO8859-1");
-            assertEquals(expected, result);
+            DefaultMessageBuilder msgbuilder = new DefaultMessageBuilder();
+            msgbuilder.setMimeEntityConfig(config);
+            inputMessage = msgbuilder.parseMessage(msgstream);
+        } finally {
+            msgstream.close();
+        }
+
+        String resourceBase = getResourceBase();
+        URL decodedFile = new URL(resourceBase + "_decoded.xml");
+
+        String result = getStructure(inputMessage, resourceBase, "1");
+        try {
+            String expected;
+            InputStream contentstream = decodedFile.openStream();
+            try {
+                expected = IOUtils.toString(contentstream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                contentstream.close();
+            }
+            Assert.assertEquals(expected, result);
         } catch (FileNotFoundException ex) {
-            IOUtils.write(result, new FileOutputStream(xmlFileUrl.getPath() + ".expected"), "ISO8859-1");
-            fail("Expected file created.");
+            // Create expected content template to the current directory
+            File expectedFileTemplate = new File(getFilenameBase() + "_decoded.xml.expected");
+            FileOutputStream templatestream = new FileOutputStream(expectedFileTemplate);
+            try {
+                IOUtils.write(result, templatestream, CharsetUtil.ISO_8859_1.name());
+            } finally {
+                templatestream.close();
+            }
+            Assert.fail("Expected file created.");
         }
     }
 
@@ -126,8 +111,8 @@ public class MessageParserTest extends T
         return s.replaceAll(">", "&gt;");
     }
 
-    private String getStructure(Entity e, String prefix, String id)
-            throws IOException {
+    private String getStructure(
+            final Entity e, final String resourceBase, final String id) throws IOException {
 
         StringBuilder sb = new StringBuilder();
 
@@ -157,7 +142,7 @@ public class MessageParserTest extends T
 
             int i = 1;
             for (Entity bodyPart : parts) {
-                sb.append(getStructure(bodyPart, prefix, id + "_" + (i++)));
+                sb.append(getStructure(bodyPart, resourceBase, id + "_" + (i++)));
             }
 
             if (multipart.getEpilogue() != null) {
@@ -169,37 +154,62 @@ public class MessageParserTest extends T
             sb.append("</multipart>\r\n");
 
         } else if (e.getBody() instanceof MessageImpl) {
-            sb.append(getStructure((MessageImpl) e.getBody(), prefix, id + "_1"));
+            sb.append(getStructure((MessageImpl) e.getBody(), resourceBase, id + "_1"));
         } else {
             Body b = e.getBody();
-            String s = prefix + "_decoded_" + id
-                    + (b instanceof TextBody ? ".txt" : ".bin");
+            String suffix = "_decoded_" + id + (b instanceof TextBody ? ".txt" : ".bin");
+            String filename = getFilenameBase() + suffix;
+
             String tag = b instanceof TextBody ? "text-body" : "binary-body";
-            File f = new File(s);
-            sb.append("<").append(tag).append(" name=\"").append(f.getName()).append("\"/>\r\n");
-            URL expectedUrl = new URL(s);
+            sb.append("<").append(tag).append(" name=\"").append(filename).append("\"/>\r\n");
+            URL expectedUrl = new URL(getResourceBase() + suffix);
 
             if (b instanceof TextBody) {
                 String charset = e.getCharset();
                 if (charset == null) {
-                    charset = "ISO8859-1";
+                    charset = CharsetUtil.ISO_8859_1.name();
                 }
 
-                String s2 = IOUtils.toString(((TextBody) b).getReader());
+                String result = IOUtils.toString(((TextBody) b).getReader());
                 try {
-                    String s1 = IOUtils.toString(expectedUrl.openStream(), charset);
-                    assertEquals(f.getName(), s1, s2);
+                    String expected;
+                    InputStream contentstream = expectedUrl.openStream();
+                    try {
+                        expected = IOUtils.toString(contentstream, charset);
+                    } finally {
+                        contentstream.close();
+                    }
+                    Assert.assertEquals(filename, expected, result);
                 } catch (FileNotFoundException ex) {
-                    IOUtils.write(s2, new FileOutputStream(expectedUrl.getPath() + ".expected"));
-                    fail("Expected file created.");
+                    // Create expected content template to the current directory
+                    File expectedFileTemplate = new File(filename + ".expected");
+                    FileOutputStream templatestream = new FileOutputStream(expectedFileTemplate);
+                    try {
+                        IOUtils.copy(((TextBody) b).getInputStream(), templatestream);
+                    } finally {
+                        templatestream.close();
+                    }
+                    Assert.fail("Expected file created.");
                 }
             } else {
                 try {
-                    assertEqualsBinary(f.getName(), expectedUrl.openStream(),
-                            ((BinaryBody) b).getInputStream());
+                    InputStream contentstream = expectedUrl.openStream();
+                    try {
+                        assertEqualsBinary(filename, contentstream,
+                                ((BinaryBody) b).getInputStream());
+                    } finally {
+                        contentstream.close();
+                    }
                 } catch (FileNotFoundException ex) {
-                    IOUtils.copy(((BinaryBody) b).getInputStream(), new FileOutputStream(expectedUrl.getPath() + ".expected"));
-                    fail("Expected file created.");
+                    // Create expected content template to the current directory
+                    File expectedFileTemplate = new File(filename + ".expected");
+                    FileOutputStream templatestream = new FileOutputStream(expectedFileTemplate);
+                    try {
+                        IOUtils.copy(((BinaryBody) b).getInputStream(), templatestream);
+                    } finally {
+                        templatestream.close();
+                    }
+                    Assert.fail("Expected file created.");
                 }
             }
         }
@@ -220,7 +230,7 @@ public class MessageParserTest extends T
         while (true) {
             int b1 = a.read();
             int b2 = b.read();
-            assertEquals(msg + " (Position " + (++pos) + ")", b1, b2);
+            Assert.assertEquals(msg + " (Position " + (++pos) + ")", b1, b2);
 
             if (b1 == -1 || b2 == -1) {
                 break;

Modified: james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/message/StringInputStreamTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/message/StringInputStreamTest.java?rev=1481814&r1=1481813&r2=1481814&view=diff
==============================================================================
--- james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/message/StringInputStreamTest.java (original)
+++ james/mime4j/trunk/dom/src/test/java/org/apache/james/mime4j/message/StringInputStreamTest.java Mon May 13 12:13:09 2013
@@ -53,6 +53,7 @@ public class StringInputStreamTest {
             assertTrue(read <= 255);
             assertEquals(b, (byte) read);
         }
+        in.close();
         assertEquals(-1, in.read());
     }
 
@@ -80,6 +81,7 @@ public class StringInputStreamTest {
                 }
             }
         }
+        in.close();
     }
 
     @Test
@@ -107,6 +109,7 @@ public class StringInputStreamTest {
         InputStream r = new StringInputStream("test", CharsetUtil.UTF_8);
         byte[] bytes = new byte[30];
         Assert.assertEquals(0, r.read(bytes, 0, 0));
+        r.close();
     }
 
     @Test
@@ -117,6 +120,7 @@ public class StringInputStreamTest {
         Assert.assertEquals('t', r.read());
         r.skip(100);
         Assert.assertEquals(-1, r.read());
+        r.close();
     }
 
     @Test
@@ -133,6 +137,7 @@ public class StringInputStreamTest {
         Assert.assertEquals(-1, r.read());
         r.reset();
         r.reset();
+        r.close();
     }
 
 }



Re: svn commit: r1481814

Posted by Stefano Bagnara <ap...@bago.org>.
2013/5/13 Oleg Kalnichevski <ol...@apache.org>:
>> Make sense. I admit I've never cared about resource management in
>> tests (the JVM free them shutting down).
>
> Test cases can be run as a part of a larger test suite inside the same
> JVM and impact other tests. Sloppy resource management is simply a bad
> idea no matter the context.

Sure. I wrote "Make sense" ;-)

>> IIRC the testsuite declaration as a nested class and the code
>> duplication was needed in order to be able to run single tests in
>> Eclipse (and maybe in maven, but I don't remember the exact scope of
>> this statement). So I guess that extracting the common code could have
>> broken this feature (unfortunately I don't have eclipse on this
>> computer right now).
>> [...]

> Still works for me. I can still run the test for individual messages in
> Eclipse after refactoring.

Great! Maybe junit 4 is better, then, and we don't need that hacks anymore!!

Thank you,
Stefano

Re: svn commit: r1481814

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Mon, 2013-05-13 at 20:37 +0200, Stefano Bagnara wrote:
> 2013/5/13 Oleg Kalnichevski <ol...@apache.org>:
> > On Mon, 2013-05-13 at 15:34 +0200, Stefano Bagnara wrote:
> > Prior to refactoring the test suites in question made no attempts to
> > release file resources allocated by the tests. File backed resource
> > streams were never closed. To me this is quite frivolous, even for test
> > code.
> 
> Make sense. I admit I've never cared about resource management in
> tests (the JVM free them shutting down).
> 

Test cases can be run as a part of a larger test suite inside the same
JVM and impact other tests. Sloppy resource management is simply a bad
idea no matter the context.

> > All other aspects of the test cases remained unchanged. I simply
> > factored out bits of bootstrapping code that was common to all sample
> > message based test cases.
> 
> IIRC the testsuite declaration as a nested class and the code
> duplication was needed in order to be able to run single tests in
> Eclipse (and maybe in maven, but I don't remember the exact scope of
> this statement). So I guess that extracting the common code could have
> broken this feature (unfortunately I don't have eclipse on this
> computer right now).
> 
> I always found very useful to be able to test a single msg file from
> the eclipse testrunner (and other junit testrunners) while I'm
> debugging/fixing an issue in the parser or similar things, but I'm not
> working anymore on mime4j so feel free to do what you prefer. 
> 
> At most I will fix it again if I will have to work again on mime4j.
> 
> Stefano

Still works for me. I can still run the test for individual messages in
Eclipse after refactoring. 

Oleg 


Re: svn commit: r1481814

Posted by Stefano Bagnara <ap...@bago.org>.
2013/5/13 Oleg Kalnichevski <ol...@apache.org>:
> On Mon, 2013-05-13 at 15:34 +0200, Stefano Bagnara wrote:
> Prior to refactoring the test suites in question made no attempts to
> release file resources allocated by the tests. File backed resource
> streams were never closed. To me this is quite frivolous, even for test
> code.

Make sense. I admit I've never cared about resource management in
tests (the JVM free them shutting down).

> All other aspects of the test cases remained unchanged. I simply
> factored out bits of bootstrapping code that was common to all sample
> message based test cases.

IIRC the testsuite declaration as a nested class and the code
duplication was needed in order to be able to run single tests in
Eclipse (and maybe in maven, but I don't remember the exact scope of
this statement). So I guess that extracting the common code could have
broken this feature (unfortunately I don't have eclipse on this
computer right now).

I always found very useful to be able to test a single msg file from
the eclipse testrunner (and other junit testrunners) while I'm
debugging/fixing an issue in the parser or similar things, but I'm not
working anymore on mime4j so feel free to do what you prefer.

At most I will fix it again if I will have to work again on mime4j.

Stefano

Re: svn commit: r1481814

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Mon, 2013-05-13 at 15:34 +0200, Stefano Bagnara wrote:
> 2013/5/13  <ol...@apache.org>:
> > Author: olegk
> > Date: Mon May 13 12:13:09 2013
> > New Revision: 1481814
> >
> > URL: http://svn.apache.org/r1481814
> > Log:
> > Refactored sample message based test suites; fixed frivolous usage of file based resources
> 
> Not sure why you call it "frivolous" and think it should be "fixed":
> can you elaborate?
> 
> That pattern is used in many of james products and is done that way in
> order to support full suite and single test execution (where for
> single test I mean a specific test for a single "file" resource) in
> Maven and Eclipse (via simple GUI right click) and also supported test
> execution for the dom module both using the resources from the
> filesystem or using the resources from the dependency jar
> (core-tests.jar includes file that are used as tests by dom module
> too).
> 
> I didn't check your refactor so I can't tell if it broke something or
> not: I hope to find the time soon to check if it works fine. In the
> mean time I wanted to explain why it was written that way and to ask
> you to explain the rationale behind the "frivolous" and if there are
> technical reasons to refactor it (e.g: did you find issues with
> running the tests in a specific environment or using specific tools?).
> 
> Stefano

Prior to refactoring the test suites in question made no attempts to
release file resources allocated by the tests. File backed resource
streams were never closed. To me this is quite frivolous, even for test
code. All other aspects of the test cases remained unchanged. I simply
factored out bits of bootstrapping code that was common to all sample
message based test cases.

Oleg    


Re: svn commit: r1481814 - in /james/mime4j/trunk: core/src/test/java/org/apache/james/mime4j/ core/src/test/java/org/apache/james/mime4j/parser/ dom/src/test/java/org/apache/james/mime4j/dom/ dom/src/test/java/org/apache/james/mime4j/message/

Posted by Stefano Bagnara <ap...@bago.org>.
2013/5/13  <ol...@apache.org>:
> Author: olegk
> Date: Mon May 13 12:13:09 2013
> New Revision: 1481814
>
> URL: http://svn.apache.org/r1481814
> Log:
> Refactored sample message based test suites; fixed frivolous usage of file based resources

Not sure why you call it "frivolous" and think it should be "fixed":
can you elaborate?

That pattern is used in many of james products and is done that way in
order to support full suite and single test execution (where for
single test I mean a specific test for a single "file" resource) in
Maven and Eclipse (via simple GUI right click) and also supported test
execution for the dom module both using the resources from the
filesystem or using the resources from the dependency jar
(core-tests.jar includes file that are used as tests by dom module
too).

I didn't check your refactor so I can't tell if it broke something or
not: I hope to find the time soon to check if it works fine. In the
mean time I wanted to explain why it was written that way and to ask
you to explain the rationale behind the "frivolous" and if there are
technical reasons to refactor it (e.g: did you find issues with
running the tests in a specific environment or using specific tools?).

Stefano