ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gin...@apache.org
Subject [03/21] ant git commit: Normalise tabulation and line breaks
Date Wed, 29 Nov 2017 16:18:07 GMT
http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java b/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java
index 0f32955..e043f5d 100644
--- a/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java
+++ b/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java
@@ -1,171 +1,171 @@
-/*
- * 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.tools.bzip2;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-
-public class BlockSortTest {
-
-    private static final byte[] FIXTURE = { 0, 1, (byte) 252, (byte) 253, (byte) 255,
-                                            (byte) 254, 3, 2, (byte) 128 };
-
-    /*
-      Burrows-Wheeler transform of fixture the manual way:
-
-      * build the matrix
-
-      0, 1, 252, 253, 255, 254, 3, 2, 128
-      1, 252, 253, 255, 254, 3, 2, 128, 0
-      252, 253, 255, 254, 3, 2, 128, 0, 1
-      253, 255, 254, 3, 2, 128, 0, 1, 252
-      255, 254, 3, 2, 128, 0, 1, 252, 253
-      254, 3, 2, 128, 0, 1, 252, 253, 255
-      3, 2, 128, 0, 1, 252, 253, 255, 254
-      2, 128, 0, 1, 252, 253, 255, 254, 3
-      128, 0, 1, 252, 253, 255, 254, 3, 2
-
-      * sort it
-
-      0, 1, 252, 253, 255, 254, 3, 2, 128
-      1, 252, 253, 255, 254, 3, 2, 128, 0
-      2, 128, 0, 1, 252, 253, 255, 254, 3
-      3, 2, 128, 0, 1, 252, 253, 255, 254
-      128, 0, 1, 252, 253, 255, 254, 3, 2
-      252, 253, 255, 254, 3, 2, 128, 0, 1
-      253, 255, 254, 3, 2, 128, 0, 1, 252
-      254, 3, 2, 128, 0, 1, 252, 253, 255
-      255, 254, 3, 2, 128, 0, 1, 252, 253
-
-      * grab last column
-
-      128, 0, 3, 254, 2, 1, 252, 255, 253
-
-        and the original line has been 0
-    */
-
-    private static final byte[] FIXTURE_BWT = { (byte) 128, 0, 3, (byte) 254, 2, 1, 
-                                                (byte) 252, (byte) 255, (byte) 253 };
-
-    private static final int[] FIXTURE_SORTED = {
-        0, 1, 7, 6, 8, 2, 3, 5, 4
-    };
-
-    private static final byte[] FIXTURE2 = { 
-        'C', 'o', 'm', 'm', 'o', 'n', 's', ' ', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's', 
-    };
-
-    private static final byte[] FIXTURE2_BWT = {
-        's', 's', ' ', 'r', 'o', 'm', 'o', 'o', 'C', 'C', 'm', 'm', 'p', 'n', 's', 'e', 
-    };
-
-    @Test
-    public void testSortFixture() {
-        DS ds = setUpFixture();
-        ds.s.blockSort(ds.data, FIXTURE.length - 1);
-        assertFixtureSorted(ds.data);
-        assertEquals(0, ds.data.origPtr);
-    }
-
-    @Test
-    public void testSortFixtureMainSort() {
-        DS ds = setUpFixture();
-        ds.s.mainSort(ds.data, FIXTURE.length - 1);
-        assertFixtureSorted(ds.data);
-    }
-
-    @Test
-    public void testSortFixtureFallbackSort() {
-        DS ds = setUpFixture();
-        ds.s.fallbackSort(ds.data, FIXTURE.length - 1);
-        assertFixtureSorted(ds.data);
-    }
-
-    @Test
-    public void testSortFixture2() {
-        DS ds = setUpFixture2();
-        ds.s.blockSort(ds.data, FIXTURE2.length - 1);
-        assertFixture2Sorted(ds.data);
-        assertEquals(1, ds.data.origPtr);
-    }
-
-    @Test
-    public void testSortFixture2MainSort() {
-        DS ds = setUpFixture2();
-        ds.s.mainSort(ds.data, FIXTURE2.length - 1);
-        assertFixture2Sorted(ds.data);
-    }
-
-    @Test
-    public void testSortFixture2FallbackSort() {
-        DS ds = setUpFixture2();
-        ds.s.fallbackSort(ds.data, FIXTURE2.length - 1);
-        assertFixture2Sorted(ds.data);
-    }
-
-    @Test
-    public void testFallbackSort() {
-        CBZip2OutputStream.Data data = new CBZip2OutputStream.Data(1);
-        BlockSort s = new BlockSort(data);
-        int[] fmap = new int[FIXTURE.length];
-        s.fallbackSort(fmap, FIXTURE, FIXTURE.length);
-        assertArrayEquals(FIXTURE_SORTED, fmap);
-    }
-
-    private DS setUpFixture() {
-        return setUpFixture(FIXTURE);
-    }
-
-    private void assertFixtureSorted(CBZip2OutputStream.Data data) {
-        assertFixtureSorted(data, FIXTURE, FIXTURE_BWT);
-    }
-
-    private DS setUpFixture2() {
-        return setUpFixture(FIXTURE2);
-    }
-
-    private void assertFixture2Sorted(CBZip2OutputStream.Data data) {
-        assertFixtureSorted(data, FIXTURE2, FIXTURE2_BWT);
-    }
-
-    private DS setUpFixture(byte[] fixture) {
-        CBZip2OutputStream.Data data = new CBZip2OutputStream.Data(1);
-        System.arraycopy(fixture, 0, data.block, 1, fixture.length);
-        return new DS(data, new BlockSort(data));
-    }
-
-    private void assertFixtureSorted(CBZip2OutputStream.Data data,
-                                     byte[] fixture, byte[] fixtureBwt) {
-        assertEquals(fixture[fixture.length - 1], data.block[0]);
-        for (int i = 0; i < fixture.length; i++) {
-            assertEquals(fixtureBwt[i], data.block[data.fmap[i]]);
-        }
-    }
-
-    private static class DS {
-        private final CBZip2OutputStream.Data data;
-        private final BlockSort s;
-        DS(CBZip2OutputStream.Data data, BlockSort s) {
-            this.data = data;
-            this.s = s;
-        }
-    }
-}
\ No newline at end of file
+/*
+ * 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.tools.bzip2;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+public class BlockSortTest {
+
+    private static final byte[] FIXTURE = { 0, 1, (byte) 252, (byte) 253, (byte) 255,
+                                            (byte) 254, 3, 2, (byte) 128 };
+
+    /*
+      Burrows-Wheeler transform of fixture the manual way:
+
+      * build the matrix
+
+      0, 1, 252, 253, 255, 254, 3, 2, 128
+      1, 252, 253, 255, 254, 3, 2, 128, 0
+      252, 253, 255, 254, 3, 2, 128, 0, 1
+      253, 255, 254, 3, 2, 128, 0, 1, 252
+      255, 254, 3, 2, 128, 0, 1, 252, 253
+      254, 3, 2, 128, 0, 1, 252, 253, 255
+      3, 2, 128, 0, 1, 252, 253, 255, 254
+      2, 128, 0, 1, 252, 253, 255, 254, 3
+      128, 0, 1, 252, 253, 255, 254, 3, 2
+
+      * sort it
+
+      0, 1, 252, 253, 255, 254, 3, 2, 128
+      1, 252, 253, 255, 254, 3, 2, 128, 0
+      2, 128, 0, 1, 252, 253, 255, 254, 3
+      3, 2, 128, 0, 1, 252, 253, 255, 254
+      128, 0, 1, 252, 253, 255, 254, 3, 2
+      252, 253, 255, 254, 3, 2, 128, 0, 1
+      253, 255, 254, 3, 2, 128, 0, 1, 252
+      254, 3, 2, 128, 0, 1, 252, 253, 255
+      255, 254, 3, 2, 128, 0, 1, 252, 253
+
+      * grab last column
+
+      128, 0, 3, 254, 2, 1, 252, 255, 253
+
+        and the original line has been 0
+    */
+
+    private static final byte[] FIXTURE_BWT = { (byte) 128, 0, 3, (byte) 254, 2, 1,
+                                                (byte) 252, (byte) 255, (byte) 253 };
+
+    private static final int[] FIXTURE_SORTED = {
+        0, 1, 7, 6, 8, 2, 3, 5, 4
+    };
+
+    private static final byte[] FIXTURE2 = {
+        'C', 'o', 'm', 'm', 'o', 'n', 's', ' ', 'C', 'o', 'm', 'p', 'r', 'e', 's', 's',
+    };
+
+    private static final byte[] FIXTURE2_BWT = {
+        's', 's', ' ', 'r', 'o', 'm', 'o', 'o', 'C', 'C', 'm', 'm', 'p', 'n', 's', 'e',
+    };
+
+    @Test
+    public void testSortFixture() {
+        DS ds = setUpFixture();
+        ds.s.blockSort(ds.data, FIXTURE.length - 1);
+        assertFixtureSorted(ds.data);
+        assertEquals(0, ds.data.origPtr);
+    }
+
+    @Test
+    public void testSortFixtureMainSort() {
+        DS ds = setUpFixture();
+        ds.s.mainSort(ds.data, FIXTURE.length - 1);
+        assertFixtureSorted(ds.data);
+    }
+
+    @Test
+    public void testSortFixtureFallbackSort() {
+        DS ds = setUpFixture();
+        ds.s.fallbackSort(ds.data, FIXTURE.length - 1);
+        assertFixtureSorted(ds.data);
+    }
+
+    @Test
+    public void testSortFixture2() {
+        DS ds = setUpFixture2();
+        ds.s.blockSort(ds.data, FIXTURE2.length - 1);
+        assertFixture2Sorted(ds.data);
+        assertEquals(1, ds.data.origPtr);
+    }
+
+    @Test
+    public void testSortFixture2MainSort() {
+        DS ds = setUpFixture2();
+        ds.s.mainSort(ds.data, FIXTURE2.length - 1);
+        assertFixture2Sorted(ds.data);
+    }
+
+    @Test
+    public void testSortFixture2FallbackSort() {
+        DS ds = setUpFixture2();
+        ds.s.fallbackSort(ds.data, FIXTURE2.length - 1);
+        assertFixture2Sorted(ds.data);
+    }
+
+    @Test
+    public void testFallbackSort() {
+        CBZip2OutputStream.Data data = new CBZip2OutputStream.Data(1);
+        BlockSort s = new BlockSort(data);
+        int[] fmap = new int[FIXTURE.length];
+        s.fallbackSort(fmap, FIXTURE, FIXTURE.length);
+        assertArrayEquals(FIXTURE_SORTED, fmap);
+    }
+
+    private DS setUpFixture() {
+        return setUpFixture(FIXTURE);
+    }
+
+    private void assertFixtureSorted(CBZip2OutputStream.Data data) {
+        assertFixtureSorted(data, FIXTURE, FIXTURE_BWT);
+    }
+
+    private DS setUpFixture2() {
+        return setUpFixture(FIXTURE2);
+    }
+
+    private void assertFixture2Sorted(CBZip2OutputStream.Data data) {
+        assertFixtureSorted(data, FIXTURE2, FIXTURE2_BWT);
+    }
+
+    private DS setUpFixture(byte[] fixture) {
+        CBZip2OutputStream.Data data = new CBZip2OutputStream.Data(1);
+        System.arraycopy(fixture, 0, data.block, 1, fixture.length);
+        return new DS(data, new BlockSort(data));
+    }
+
+    private void assertFixtureSorted(CBZip2OutputStream.Data data,
+                                     byte[] fixture, byte[] fixtureBwt) {
+        assertEquals(fixture[fixture.length - 1], data.block[0]);
+        for (int i = 0; i < fixture.length; i++) {
+            assertEquals(fixtureBwt[i], data.block[data.fmap[i]]);
+        }
+    }
+
+    private static class DS {
+        private final CBZip2OutputStream.Data data;
+        private final BlockSort s;
+        DS(CBZip2OutputStream.Data data, BlockSort s) {
+            this.data = data;
+            this.s = s;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java b/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java
index cc3bc46..50e0e57 100644
--- a/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java
+++ b/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java
@@ -1,47 +1,47 @@
-/*
- *  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.tools.bzip2;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import org.junit.Test;
-
-import static org.junit.Assert.fail;
-
-public class CBZip2StreamTest {
-
-    @Test
-    public void testNullPointer() throws IOException {
-        try {
-            new CBZip2InputStream(new ByteArrayInputStream(new byte[0]));
-            fail("expected an exception");
-        } catch (IOException e) {
-            // expected
-            //TODO assert exception values
-        }
-    }
-
-    @Test
-    public void testDivisionByZero() throws IOException {
-        CBZip2OutputStream cb = new CBZip2OutputStream(new ByteArrayOutputStream());
-        cb.close();
-        // expected no exception
-    }
-}
+/*
+ *  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.tools.bzip2;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.junit.Test;
+
+import static org.junit.Assert.fail;
+
+public class CBZip2StreamTest {
+
+    @Test
+    public void testNullPointer() throws IOException {
+        try {
+            new CBZip2InputStream(new ByteArrayInputStream(new byte[0]));
+            fail("expected an exception");
+        } catch (IOException e) {
+            // expected
+            //TODO assert exception values
+        }
+    }
+
+    @Test
+    public void testDivisionByZero() throws IOException {
+        CBZip2OutputStream cb = new CBZip2OutputStream(new ByteArrayOutputStream());
+        cb.close();
+        // expected no exception
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/mail/MailMessageTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/mail/MailMessageTest.java b/src/tests/junit/org/apache/tools/mail/MailMessageTest.java
index 0bad323..435729e 100644
--- a/src/tests/junit/org/apache/tools/mail/MailMessageTest.java
+++ b/src/tests/junit/org/apache/tools/mail/MailMessageTest.java
@@ -1,707 +1,707 @@
-/*
- *  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.tools.mail;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.io.PrintStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.apache.tools.ant.BuildException;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.internal.AssumptionViolatedException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-/**
- * JUnit testcases for org.apache.tools.mail.MailMessage.
- *
- * @since Ant 1.6
- */
-public class MailMessageTest {
-
-    // 27224 = magic (a random port which is unlikely to be in use)
-    private static int TEST_PORT = 27224;
-
-    private String local = null;
-
-    @Before
-    public void setUp() {
-        try {
-            local = InetAddress.getLocalHost().getHostName();
-        } catch (java.net.UnknownHostException uhe) {
-            // ignore
-        }
-    }
-
-    /**
-     *  Test an example that is similar to the one given in the API
-     *  If this testcase takes >90s to complete, it is very likely that
-     *  the two threads are blocked waiting for each other and Thread.join()
-     *  timed out.
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testAPIExample() throws InterruptedException {
-
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.to("to@you.com");
-        testMailClient.cc("cc1@you.com");
-        testMailClient.cc("cc2@you.com");
-        testMailClient.bcc("bcc@you.com");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage( "test line 1\n" +
-            "test line 2" );
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <to@you.com>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <cc1@you.com>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <cc2@you.com>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <bcc@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-        "To: to@you.com\r\n" +
-        "Cc: cc1@you.com, cc2@you.com\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "test line 1\r\n" +
-        "test line 2\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        /*for (int icounter = 0; icounter<expectedResult.length(); icounter++) {
-            if (icounter < result.length()) {
-                if (expectedResult.charAt(icounter) != result.charAt(icounter)) {
-                    System.out.println("posit " + icounter + " expected "
-                        + expectedResult.charAt(icounter)
-                    + " result " + result.charAt(icounter));
-                }
-            }
-        }
-        if (expectedResult.length()>result.length()) {
-            System.out.println("excedent of expected result "
-                + expectedResult.substring(result.length()));
-        }
-        if (expectedResult.length()<result.length()) {
-            System.out.println("excedent of result "
-                + result.substring(expectedResult.length()));
-        }*/
-        assertEquals(expectedResult.length(), result.length());
-        assertEquals(expectedResult, result); // order of headers cannot be guaranteed
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-    /**
-     *  Test a MailMessage with no cc or bcc lines
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testToOnly() throws InterruptedException {
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.to("to@you.com");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage( "test line 1\n" +
-            "test line 2" );
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <to@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-            "To: to@you.com\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "test line 1\r\n" +
-        "test line 2\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        assertEquals(expectedResult.length(), result.length());
-        assertEquals(expectedResult, result); // order of headers cannot be guaranteed
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-    /**
-     *  Test a MailMessage with no to or bcc lines
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testCcOnly() throws InterruptedException {
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.cc("cc@you.com");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage( "test line 1\n" +
-            "test line 2" );
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <cc@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-            "Cc: cc@you.com\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "test line 1\r\n" +
-        "test line 2\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        assertEquals(expectedResult.length(), result.length());
-        assertEquals(expectedResult, result);
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-    /**
-     *  Test a MailMessage with no to or cc lines
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testBccOnly() throws InterruptedException {
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.bcc("bcc@you.com");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage( "test line 1\n" +
-            "test line 2" );
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <bcc@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "test line 1\r\n" +
-        "test line 2\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        assertEquals( expectedResult.length(), result.length() );
-        assertEquals( expectedResult, result );
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-    /**
-     *  Test a MailMessage with no subject line
-     *  Subject is an optional field (RFC 822 s4.1)
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testNoSubject() throws InterruptedException {
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.to("to@you.com");
-        testMailClient.setMessage( "test line 1\n" +
-            "test line 2" );
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <to@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-            "To: to@you.com\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "test line 1\r\n" +
-        "test line 2\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        assertEquals( expectedResult.length(), result.length() );
-        assertEquals( expectedResult, result );
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-    /**
-     *  Test a MailMessage with empty body message
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testEmptyBody() throws InterruptedException {
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.to("to@you.com");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage("");
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <to@you.com>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-            "To: to@you.com\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        assertEquals(expectedResult.length(), result.length());
-        assertEquals(expectedResult, result);
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-    /**
-     *  Test a MailMessage with US-ASCII character set
-     *  The next four testcase can be kinda hard to debug as Ant will often
-     *  print the junit failure in US-ASCII.
-     * @throws InterruptedException 
-     */
-    @Test
-    public void testAsciiCharset() throws InterruptedException {
-
-        ServerThread testMailServer = new ServerThread();
-        Thread server = new Thread(testMailServer);
-        server.start();
-
-        ClientThread testMailClient = new ClientThread();
-
-        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
-        testMailClient.to("Ceki G\u00fclc\u00fc <abuse@mail-abuse.org>");
-        testMailClient.setSubject("Test subject");
-        testMailClient.setMessage("");
-
-        Thread client = new Thread(testMailClient);
-        client.start();
-
-        server.join(60 * 1000); // 60s
-        client.join(30 * 1000); // a further 30s
-
-        String result = testMailServer.getResult();
-        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
-        "HELO " + local + "\r\n" +
-        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
-        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
-        "250\r\n" +
-        "RCPT TO: <abuse@mail-abuse.org>\r\n" +
-        "250\r\n" +
-        "DATA\r\n" +
-        "354\r\n" +
-        "Subject: Test subject\r\n" +
-            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
-            "To: Ceki G\u00fclc\u00fc <abuse@mail-abuse.org>\r\n" +
-        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
-        "\r\n" +
-        "\r\n" +
-        "\r\n" +
-        ".\r\n" +
-        "250\r\n" +
-        "QUIT\r\n" +
-        "221\r\n";
-        ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
-        ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
-        PrintStream bos1 = new PrintStream(baos1, true);
-        PrintStream bos2 = new PrintStream(baos2, true);
-
-        bos1.print(expectedResult);
-        bos2.print(result);
-
-        assertEquals( "expected message length != actual message length "
-            + "in testAsciiCharset()", expectedResult.length(), result.length() );
-        assertEquals( "baos1 and baos2 should be the same in testAsciiCharset()",
-            baos1.toString(), baos2.toString() ); // order of headers cannot be guaranteed
-        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
-    }
-
-
-
-
-    /**
-     * A private test class that pretends to be a mail transfer agent
-     */
-    private class ServerThread implements Runnable {
-
-        private StringBuffer sb = null;
-        private boolean loop = false;
-        ServerSocket ssock = null;
-        Socket sock = null;
-        BufferedWriter out = null;
-        BufferedReader in = null;
-        private boolean data = false;  // state engine: false=envelope, true=message
-
-        public void run() {
-
-            try {
-                ssock = new ServerSocket(TEST_PORT);
-                sock = ssock.accept(); // wait for connection
-                in = new BufferedReader( new InputStreamReader(
-                    sock.getInputStream()) );
-                out = new BufferedWriter( new OutputStreamWriter(
-                    sock.getOutputStream() ) );
-                sb = new StringBuffer();
-                send( "220 test SMTP EmailTaskTest\r\n" );
-                loop = true;
-                while ( loop ) {
-                    String response = in.readLine();
-                    if ( response == null ) {
-                        loop = false;
-                        break;
-                    }
-                    sb.append( response + "\r\n" );
-
-                    if ( !data && response.startsWith( "HELO" ) ) {
-                        send( "250 " + local + " Hello " + local + " " +
-                        "[127.0.0.1], pleased to meet you\r\n" );
-                    } else if ( !data && response.startsWith("MAIL") ) {
-                        send( "250\r\n" );
-                    } else if ( !data && response.startsWith("RCPT")) {
-                        send( "250\r\n" );
-                    } else if (!data && response.startsWith("DATA")) {
-                        send( "354\r\n" );
-                        data = true;
-                    } else if (data && response.equals(".") ) {
-                        send( "250\r\n" );
-                        data = false;
-                    } else if (!data && response.startsWith("QUIT")) {
-                        send( "221\r\n" );
-                        loop = false;
-                    } else if (!data) {
-                        //throw new IllegalStateException("Command unrecognized: "
-                        //    + response);
-                        send( "500 5.5.1 Command unrecognized: \"" +
-                            response + "\"\r\n" );
-                        loop = false;
-                    } else {
-                        // sb.append( response + "\r\n" );
-                    }
-
-                } // while
-            } catch (IOException ioe) {
-                throw new BuildException(ioe);
-            } finally {
-                disconnect();
-            }
-        }
-
-        private void send(String retmsg) throws IOException {
-            out.write( retmsg );
-            out.flush();
-            sb.append( retmsg );
-        }
-
-        private void disconnect() {
-            if (out != null) {
-                try {
-                    out.flush();
-                    out.close();
-                    out = null;
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            if (in != null) {
-                try {
-                    in.close();
-                    in = null;
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            if (sock != null) {
-                try {
-                    sock.close();
-                    sock = null;
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-            if (ssock != null) {
-                try {
-                    ssock.close();
-                    ssock = null;
-                } catch (IOException e) {
-                    // ignore
-                }
-            }
-        }
-
-        public synchronized String getResult() {
-            loop = false;
-            return sb.toString();
-        }
-
-    }
-
-    /**
-     *  A private test class that wraps MailMessage
-     */
-    private class ClientThread implements Runnable {
-
-        private MailMessage msg;
-        private boolean fail = false;
-        private String failMessage = null;
-
-        protected String from = null;
-        protected String subject = null;
-        protected String message = null;
-
-        protected Vector replyToList = new Vector();
-        protected Vector toList = new Vector();
-        protected Vector ccList = new Vector();
-        protected Vector bccList = new Vector();
-
-
-        public void run() {
-            for (int i = 9; i > 0; i--) {
-                try {
-                    msg = new MailMessage("localhost", TEST_PORT);
-                } catch (java.net.ConnectException ce) {
-                    try {
-                        Thread.sleep(10 * 1000);
-                    } catch (InterruptedException ie) {
-                        throw new AssumptionViolatedException("Thread interrupted", ie);
-                    }
-                } catch (IOException ioe) {
-                    fail = true;
-                    failMessage = "IOException: " + ioe;
-                    return;
-                }
-                if (msg != null) {
-                    break;
-                }
-            }
-
-            if (msg == null) {
-                fail = true;
-                failMessage = "java.net.ConnectException: Connection refused";
-                return;
-            }
-
-            try {
-                msg.from(from);
-
-                Enumeration e;
-
-                e = replyToList.elements();
-                while (e.hasMoreElements()) {
-                    msg.replyto(e.nextElement().toString());
-                }
-
-                e = toList.elements();
-                while (e.hasMoreElements()) {
-                    msg.to(e.nextElement().toString());
-                }
-
-                e = ccList.elements();
-                while (e.hasMoreElements()) {
-                    msg.cc(e.nextElement().toString());
-                }
-
-                e = bccList.elements();
-                while (e.hasMoreElements()) {
-                    msg.bcc(e.nextElement().toString());
-                }
-
-                if (subject != null) {
-                    msg.setSubject(subject);
-                }
-
-                if (message != null ) {
-                    PrintStream out = msg.getPrintStream();
-                    out.println( message );
-                }
-
-                msg.sendAndClose();
-            } catch (IOException ioe) {
-                fail = true;
-                failMessage = "IOException: " + ioe;
-                return;
-            }
-        }
-
-        public boolean isFailed() {
-            return fail;
-        }
-
-        public String getFailMessage() {
-            return failMessage;
-        }
-
-        public void replyTo(String replyTo) {
-            replyToList.add(replyTo);
-        }
-
-        public void to(String to) {
-            toList.add(to);
-        }
-
-        public void cc(String cc) {
-            ccList.add(cc);
-        }
-
-        public void bcc(String bcc) {
-            bccList.add(bcc);
-        }
-
-        public void setSubject(String subject) {
-            this.subject = subject;
-        }
-
-        public void from(String from) {
-            this.from = from;
-        }
-
-        public void setMessage(String message) {
-            this.message = message;
-        }
-
-    }
-
-}
+/*
+ *  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.tools.mail;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import org.apache.tools.ant.BuildException;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.internal.AssumptionViolatedException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * JUnit testcases for org.apache.tools.mail.MailMessage.
+ *
+ * @since Ant 1.6
+ */
+public class MailMessageTest {
+
+    // 27224 = magic (a random port which is unlikely to be in use)
+    private static int TEST_PORT = 27224;
+
+    private String local = null;
+
+    @Before
+    public void setUp() {
+        try {
+            local = InetAddress.getLocalHost().getHostName();
+        } catch (java.net.UnknownHostException uhe) {
+            // ignore
+        }
+    }
+
+    /**
+     *  Test an example that is similar to the one given in the API
+     *  If this testcase takes >90s to complete, it is very likely that
+     *  the two threads are blocked waiting for each other and Thread.join()
+     *  timed out.
+     * @throws InterruptedException
+     */
+    @Test
+    public void testAPIExample() throws InterruptedException {
+
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.to("to@you.com");
+        testMailClient.cc("cc1@you.com");
+        testMailClient.cc("cc2@you.com");
+        testMailClient.bcc("bcc@you.com");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage( "test line 1\n" +
+            "test line 2" );
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <to@you.com>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <cc1@you.com>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <cc2@you.com>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <bcc@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+        "To: to@you.com\r\n" +
+        "Cc: cc1@you.com, cc2@you.com\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "test line 1\r\n" +
+        "test line 2\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        /*for (int icounter = 0; icounter<expectedResult.length(); icounter++) {
+            if (icounter < result.length()) {
+                if (expectedResult.charAt(icounter) != result.charAt(icounter)) {
+                    System.out.println("posit " + icounter + " expected "
+                        + expectedResult.charAt(icounter)
+                    + " result " + result.charAt(icounter));
+                }
+            }
+        }
+        if (expectedResult.length()>result.length()) {
+            System.out.println("excedent of expected result "
+                + expectedResult.substring(result.length()));
+        }
+        if (expectedResult.length()<result.length()) {
+            System.out.println("excedent of result "
+                + result.substring(expectedResult.length()));
+        }*/
+        assertEquals(expectedResult.length(), result.length());
+        assertEquals(expectedResult, result); // order of headers cannot be guaranteed
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+    /**
+     *  Test a MailMessage with no cc or bcc lines
+     * @throws InterruptedException
+     */
+    @Test
+    public void testToOnly() throws InterruptedException {
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.to("to@you.com");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage( "test line 1\n" +
+            "test line 2" );
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <to@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+            "To: to@you.com\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "test line 1\r\n" +
+        "test line 2\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        assertEquals(expectedResult.length(), result.length());
+        assertEquals(expectedResult, result); // order of headers cannot be guaranteed
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+    /**
+     *  Test a MailMessage with no to or bcc lines
+     * @throws InterruptedException
+     */
+    @Test
+    public void testCcOnly() throws InterruptedException {
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.cc("cc@you.com");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage( "test line 1\n" +
+            "test line 2" );
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <cc@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+            "Cc: cc@you.com\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "test line 1\r\n" +
+        "test line 2\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        assertEquals(expectedResult.length(), result.length());
+        assertEquals(expectedResult, result);
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+    /**
+     *  Test a MailMessage with no to or cc lines
+     * @throws InterruptedException
+     */
+    @Test
+    public void testBccOnly() throws InterruptedException {
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.bcc("bcc@you.com");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage( "test line 1\n" +
+            "test line 2" );
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <bcc@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "test line 1\r\n" +
+        "test line 2\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        assertEquals( expectedResult.length(), result.length() );
+        assertEquals( expectedResult, result );
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+    /**
+     *  Test a MailMessage with no subject line
+     *  Subject is an optional field (RFC 822 s4.1)
+     * @throws InterruptedException
+     */
+    @Test
+    public void testNoSubject() throws InterruptedException {
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.to("to@you.com");
+        testMailClient.setMessage( "test line 1\n" +
+            "test line 2" );
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <to@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+            "To: to@you.com\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "test line 1\r\n" +
+        "test line 2\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        assertEquals( expectedResult.length(), result.length() );
+        assertEquals( expectedResult, result );
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+    /**
+     *  Test a MailMessage with empty body message
+     * @throws InterruptedException
+     */
+    @Test
+    public void testEmptyBody() throws InterruptedException {
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.to("to@you.com");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage("");
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <to@you.com>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+            "To: to@you.com\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        assertEquals(expectedResult.length(), result.length());
+        assertEquals(expectedResult, result);
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+    /**
+     *  Test a MailMessage with US-ASCII character set
+     *  The next four testcase can be kinda hard to debug as Ant will often
+     *  print the junit failure in US-ASCII.
+     * @throws InterruptedException
+     */
+    @Test
+    public void testAsciiCharset() throws InterruptedException {
+
+        ServerThread testMailServer = new ServerThread();
+        Thread server = new Thread(testMailServer);
+        server.start();
+
+        ClientThread testMailClient = new ClientThread();
+
+        testMailClient.from("Mail Message <EmailTaskTest@ant.apache.org>");
+        testMailClient.to("Ceki G\u00fclc\u00fc <abuse@mail-abuse.org>");
+        testMailClient.setSubject("Test subject");
+        testMailClient.setMessage("");
+
+        Thread client = new Thread(testMailClient);
+        client.start();
+
+        server.join(60 * 1000); // 60s
+        client.join(30 * 1000); // a further 30s
+
+        String result = testMailServer.getResult();
+        String expectedResult = "220 test SMTP EmailTaskTest\r\n" +
+        "HELO " + local + "\r\n" +
+        "250 " + local + " Hello " + local + " [127.0.0.1], pleased to meet you\r\n" +
+        "MAIL FROM: <EmailTaskTest@ant.apache.org>\r\n" +
+        "250\r\n" +
+        "RCPT TO: <abuse@mail-abuse.org>\r\n" +
+        "250\r\n" +
+        "DATA\r\n" +
+        "354\r\n" +
+        "Subject: Test subject\r\n" +
+            "From: Mail Message <EmailTaskTest@ant.apache.org>\r\n" +
+            "To: Ceki G\u00fclc\u00fc <abuse@mail-abuse.org>\r\n" +
+        "X-Mailer: org.apache.tools.mail.MailMessage (ant.apache.org)\r\n" +
+        "\r\n" +
+        "\r\n" +
+        "\r\n" +
+        ".\r\n" +
+        "250\r\n" +
+        "QUIT\r\n" +
+        "221\r\n";
+        ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
+        ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
+        PrintStream bos1 = new PrintStream(baos1, true);
+        PrintStream bos2 = new PrintStream(baos2, true);
+
+        bos1.print(expectedResult);
+        bos2.print(result);
+
+        assertEquals( "expected message length != actual message length "
+            + "in testAsciiCharset()", expectedResult.length(), result.length() );
+        assertEquals( "baos1 and baos2 should be the same in testAsciiCharset()",
+            baos1.toString(), baos2.toString() ); // order of headers cannot be guaranteed
+        assertFalse(testMailClient.getFailMessage(), testMailClient.isFailed());
+    }
+
+
+
+
+    /**
+     * A private test class that pretends to be a mail transfer agent
+     */
+    private class ServerThread implements Runnable {
+
+        private StringBuffer sb = null;
+        private boolean loop = false;
+        ServerSocket ssock = null;
+        Socket sock = null;
+        BufferedWriter out = null;
+        BufferedReader in = null;
+        private boolean data = false;  // state engine: false=envelope, true=message
+
+        public void run() {
+
+            try {
+                ssock = new ServerSocket(TEST_PORT);
+                sock = ssock.accept(); // wait for connection
+                in = new BufferedReader( new InputStreamReader(
+                    sock.getInputStream()) );
+                out = new BufferedWriter( new OutputStreamWriter(
+                    sock.getOutputStream() ) );
+                sb = new StringBuffer();
+                send( "220 test SMTP EmailTaskTest\r\n" );
+                loop = true;
+                while ( loop ) {
+                    String response = in.readLine();
+                    if ( response == null ) {
+                        loop = false;
+                        break;
+                    }
+                    sb.append( response + "\r\n" );
+
+                    if ( !data && response.startsWith( "HELO" ) ) {
+                        send( "250 " + local + " Hello " + local + " " +
+                        "[127.0.0.1], pleased to meet you\r\n" );
+                    } else if ( !data && response.startsWith("MAIL") ) {
+                        send( "250\r\n" );
+                    } else if ( !data && response.startsWith("RCPT")) {
+                        send( "250\r\n" );
+                    } else if (!data && response.startsWith("DATA")) {
+                        send( "354\r\n" );
+                        data = true;
+                    } else if (data && response.equals(".") ) {
+                        send( "250\r\n" );
+                        data = false;
+                    } else if (!data && response.startsWith("QUIT")) {
+                        send( "221\r\n" );
+                        loop = false;
+                    } else if (!data) {
+                        //throw new IllegalStateException("Command unrecognized: "
+                        //    + response);
+                        send( "500 5.5.1 Command unrecognized: \"" +
+                            response + "\"\r\n" );
+                        loop = false;
+                    } else {
+                        // sb.append( response + "\r\n" );
+                    }
+
+                } // while
+            } catch (IOException ioe) {
+                throw new BuildException(ioe);
+            } finally {
+                disconnect();
+            }
+        }
+
+        private void send(String retmsg) throws IOException {
+            out.write( retmsg );
+            out.flush();
+            sb.append( retmsg );
+        }
+
+        private void disconnect() {
+            if (out != null) {
+                try {
+                    out.flush();
+                    out.close();
+                    out = null;
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+            if (in != null) {
+                try {
+                    in.close();
+                    in = null;
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+            if (sock != null) {
+                try {
+                    sock.close();
+                    sock = null;
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+            if (ssock != null) {
+                try {
+                    ssock.close();
+                    ssock = null;
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+        }
+
+        public synchronized String getResult() {
+            loop = false;
+            return sb.toString();
+        }
+
+    }
+
+    /**
+     *  A private test class that wraps MailMessage
+     */
+    private class ClientThread implements Runnable {
+
+        private MailMessage msg;
+        private boolean fail = false;
+        private String failMessage = null;
+
+        protected String from = null;
+        protected String subject = null;
+        protected String message = null;
+
+        protected Vector replyToList = new Vector();
+        protected Vector toList = new Vector();
+        protected Vector ccList = new Vector();
+        protected Vector bccList = new Vector();
+
+
+        public void run() {
+            for (int i = 9; i > 0; i--) {
+                try {
+                    msg = new MailMessage("localhost", TEST_PORT);
+                } catch (java.net.ConnectException ce) {
+                    try {
+                        Thread.sleep(10 * 1000);
+                    } catch (InterruptedException ie) {
+                        throw new AssumptionViolatedException("Thread interrupted", ie);
+                    }
+                } catch (IOException ioe) {
+                    fail = true;
+                    failMessage = "IOException: " + ioe;
+                    return;
+                }
+                if (msg != null) {
+                    break;
+                }
+            }
+
+            if (msg == null) {
+                fail = true;
+                failMessage = "java.net.ConnectException: Connection refused";
+                return;
+            }
+
+            try {
+                msg.from(from);
+
+                Enumeration e;
+
+                e = replyToList.elements();
+                while (e.hasMoreElements()) {
+                    msg.replyto(e.nextElement().toString());
+                }
+
+                e = toList.elements();
+                while (e.hasMoreElements()) {
+                    msg.to(e.nextElement().toString());
+                }
+
+                e = ccList.elements();
+                while (e.hasMoreElements()) {
+                    msg.cc(e.nextElement().toString());
+                }
+
+                e = bccList.elements();
+                while (e.hasMoreElements()) {
+                    msg.bcc(e.nextElement().toString());
+                }
+
+                if (subject != null) {
+                    msg.setSubject(subject);
+                }
+
+                if (message != null ) {
+                    PrintStream out = msg.getPrintStream();
+                    out.println( message );
+                }
+
+                msg.sendAndClose();
+            } catch (IOException ioe) {
+                fail = true;
+                failMessage = "IOException: " + ioe;
+                return;
+            }
+        }
+
+        public boolean isFailed() {
+            return fail;
+        }
+
+        public String getFailMessage() {
+            return failMessage;
+        }
+
+        public void replyTo(String replyTo) {
+            replyToList.add(replyTo);
+        }
+
+        public void to(String to) {
+            toList.add(to);
+        }
+
+        public void cc(String cc) {
+            ccList.add(cc);
+        }
+
+        public void bcc(String bcc) {
+            bccList.add(bcc);
+        }
+
+        public void setSubject(String subject) {
+            this.subject = subject;
+        }
+
+        public void from(String from) {
+            this.from = from;
+        }
+
+        public void setMessage(String message) {
+            this.message = message;
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/tar/TarEntryTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/tar/TarEntryTest.java b/src/tests/junit/org/apache/tools/tar/TarEntryTest.java
index 4c14943..e942cdb 100644
--- a/src/tests/junit/org/apache/tools/tar/TarEntryTest.java
+++ b/src/tests/junit/org/apache/tools/tar/TarEntryTest.java
@@ -1,35 +1,35 @@
-/*
- *  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.tools.tar;
-
-import org.junit.Test;
-
-/**
- * @since Ant 1.6
- */
-public class TarEntryTest {
-
-    /**
-     * demonstrates bug 18105 on OSes with os.name shorter than 7.
-     */
-    @Test
-    public void testFileConstructor() {
-        new TarEntry(new java.io.File("/foo"));
-    }
-}
+/*
+ *  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.tools.tar;
+
+import org.junit.Test;
+
+/**
+ * @since Ant 1.6
+ */
+public class TarEntryTest {
+
+    /**
+     * demonstrates bug 18105 on OSes with os.name shorter than 7.
+     */
+    @Test
+    public void testFileConstructor() {
+        new TarEntry(new java.io.File("/foo"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java b/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java
index fd43c35..cb65e2d 100644
--- a/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java
+++ b/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java
@@ -1,35 +1,35 @@
-/*
- *  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.tools.tar;
-
-import org.junit.Test;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-public class TarOutputStreamTest {
-
-    @Test
-    public void testClose() throws IOException {
-        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
-        TarOutputStream stream = new TarOutputStream(byteStream);
-        stream.close();
-        stream.close();
-    }
-}
+/*
+ *  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.tools.tar;
+
+import org.junit.Test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+public class TarOutputStreamTest {
+
+    @Test
+    public void testClose() throws IOException {
+        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+        TarOutputStream stream = new TarOutputStream(byteStream);
+        stream.close();
+        stream.close();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/4422804d/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java b/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java
index 64b79c8..3caba34 100644
--- a/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java
+++ b/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java
@@ -1,74 +1,72 @@
-/*
- *  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.tools.tar;
-
-import org.junit.Test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-public class TarRoundTripTest {
-
-    private static final String LONG_NAME
-        = "this/path/name/contains/more/than/one/hundred/characters/in/order/"
-            + "to/test/the/GNU/long/file/name/capability/round/tripped";
-
-    /**
-     * test round-tripping long (GNU) entries
-     */
-    @Test
-    public void testLongRoundTrippingGNU() throws IOException {
-        testLongRoundTripping(TarOutputStream.LONGFILE_GNU);
-    }
-
-    /**
-     * test round-tripping long (POSIX) entries
-     */
-    @Test
-    public void testLongRoundTrippingPOSIX() throws IOException {
-        testLongRoundTripping(TarOutputStream.LONGFILE_POSIX);
-    }
-
-    private void testLongRoundTripping(int mode) throws IOException {
-        TarEntry original = new TarEntry(LONG_NAME);
-        assertTrue("over 100 chars", LONG_NAME.length() > 100);
-        assertEquals("original name", LONG_NAME, original.getName());
-
-
-        ByteArrayOutputStream buff = new ByteArrayOutputStream();
-        TarOutputStream tos = new TarOutputStream(buff);
-        tos.setLongFileMode(mode);
-        tos.putNextEntry(original);
-        tos.closeEntry();
-        tos.close();
-
-        TarInputStream tis
-            = new TarInputStream(new ByteArrayInputStream(buff.toByteArray()));
-        TarEntry tripped = tis.getNextEntry();
-        assertEquals("round-tripped name", LONG_NAME, tripped.getName());
-        assertNull("no more entries", tis.getNextEntry());
-        tis.close();
-    }
-}
-
-
+/*
+ *  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.tools.tar;
+
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class TarRoundTripTest {
+
+    private static final String LONG_NAME
+        = "this/path/name/contains/more/than/one/hundred/characters/in/order/"
+            + "to/test/the/GNU/long/file/name/capability/round/tripped";
+
+    /**
+     * test round-tripping long (GNU) entries
+     */
+    @Test
+    public void testLongRoundTrippingGNU() throws IOException {
+        testLongRoundTripping(TarOutputStream.LONGFILE_GNU);
+    }
+
+    /**
+     * test round-tripping long (POSIX) entries
+     */
+    @Test
+    public void testLongRoundTrippingPOSIX() throws IOException {
+        testLongRoundTripping(TarOutputStream.LONGFILE_POSIX);
+    }
+
+    private void testLongRoundTripping(int mode) throws IOException {
+        TarEntry original = new TarEntry(LONG_NAME);
+        assertTrue("over 100 chars", LONG_NAME.length() > 100);
+        assertEquals("original name", LONG_NAME, original.getName());
+
+
+        ByteArrayOutputStream buff = new ByteArrayOutputStream();
+        TarOutputStream tos = new TarOutputStream(buff);
+        tos.setLongFileMode(mode);
+        tos.putNextEntry(original);
+        tos.closeEntry();
+        tos.close();
+
+        TarInputStream tis
+            = new TarInputStream(new ByteArrayInputStream(buff.toByteArray()));
+        TarEntry tripped = tis.getNextEntry();
+        assertEquals("round-tripped name", LONG_NAME, tripped.getName());
+        assertNull("no more entries", tis.getNextEntry());
+        tis.close();
+    }
+}


Mime
View raw message