http://git-wip-us.apache.org/repos/asf/ant/blob/1ae68097/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java ---------------------------------------------------------------------- diff --git a/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java b/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java index 0950827..559e4f0 100644 --- a/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java @@ -1,204 +1,204 @@ -/* - * 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.ant.util.regexp; - -import java.io.IOException; -import java.util.Vector; - -import junit.framework.TestCase; - -/** - * Tests for all implementations of the RegexpMatcher interface. - * - */ -public abstract class RegexpMatcherTest extends TestCase { - - public final static String UNIX_LINE = "\n"; - - private RegexpMatcher reg; - - public abstract RegexpMatcher getImplementation(); - - protected final RegexpMatcher getReg() {return reg;} - - public RegexpMatcherTest(String name) { - super(name); - } - - public void setUp() { - reg = getImplementation(); - } - - public void testMatches() { - reg.setPattern("aaaa"); - assertTrue("aaaa should match itself", reg.matches("aaaa")); - assertTrue("aaaa should match xaaaa", reg.matches("xaaaa")); - assertTrue("aaaa shouldn\'t match xaaa", !reg.matches("xaaa")); - reg.setPattern("^aaaa"); - assertTrue("^aaaa shouldn\'t match xaaaa", !reg.matches("xaaaa")); - assertTrue("^aaaa should match aaaax", reg.matches("aaaax")); - reg.setPattern("aaaa$"); - assertTrue("aaaa$ shouldn\'t match aaaax", !reg.matches("aaaax")); - assertTrue("aaaa$ should match xaaaa", reg.matches("xaaaa")); - reg.setPattern("[0-9]+"); - assertTrue("[0-9]+ should match 123", reg.matches("123")); - assertTrue("[0-9]+ should match 1", reg.matches("1")); - assertTrue("[0-9]+ shouldn\'t match \'\'", !reg.matches("")); - assertTrue("[0-9]+ shouldn\'t match a", !reg.matches("a")); - reg.setPattern("[0-9]*"); - assertTrue("[0-9]* should match 123", reg.matches("123")); - assertTrue("[0-9]* should match 1", reg.matches("1")); - assertTrue("[0-9]* should match \'\'", reg.matches("")); - assertTrue("[0-9]* should match a", reg.matches("a")); - reg.setPattern("([0-9]+)=\\1"); - assertTrue("([0-9]+)=\\1 should match 1=1", reg.matches("1=1")); - assertTrue("([0-9]+)=\\1 shouldn\'t match 1=2", !reg.matches("1=2")); - } - - public void testGroups() { - reg.setPattern("aaaa"); - Vector v = reg.getGroups("xaaaa"); - assertEquals("No parens -> no extra groups", 1, v.size()); - assertEquals("Trivial match with no parens", "aaaa", - (String) v.elementAt(0)); - - reg.setPattern("(aaaa)"); - v = reg.getGroups("xaaaa"); - assertEquals("Trivial match with single paren", 2, v.size()); - assertEquals("Trivial match with single paren, full match", "aaaa", - (String) v.elementAt(0)); - assertEquals("Trivial match with single paren, matched paren", "aaaa", - (String) v.elementAt(0)); - - reg.setPattern("(a+)b(b+)"); - v = reg.getGroups("xaabb"); - assertEquals(3, v.size()); - assertEquals("aabb", (String) v.elementAt(0)); - assertEquals("aa", (String) v.elementAt(1)); - assertEquals("b", (String) v.elementAt(2)); - } - - public void testBugzillaReport14619() { - reg.setPattern("^(.*)/src/((.*/)*)([a-zA-Z0-9_\\.]+)\\.java$"); - Vector v = reg.getGroups("de/tom/src/Google.java"); - assertEquals(5, v.size()); - assertEquals("de/tom", v.elementAt(1)); - assertEquals("", v.elementAt(2)); - assertEquals("", v.elementAt(3)); - assertEquals("Google", v.elementAt(4)); - } - - public void testCaseInsensitiveMatch() { - reg.setPattern("aaaa"); - assertTrue("aaaa doesn't match AAaa", !reg.matches("AAaa")); - assertTrue("aaaa matches AAaa ignoring case", - reg.matches("AAaa", RegexpMatcher.MATCH_CASE_INSENSITIVE)); - } - - -// make sure there are no issues concerning line separator interpretation -// a line separator for regex (perl) is always a unix line (ie \n) - - public void testParagraphCharacter() throws IOException { - reg.setPattern("end of text$"); - assertTrue("paragraph character", !reg.matches("end of text\u2029")); - } - - public void testLineSeparatorCharacter() throws IOException { - reg.setPattern("end of text$"); - assertTrue("line-separator character", !reg.matches("end of text\u2028")); - } - - public void testNextLineCharacter() throws IOException { - reg.setPattern("end of text$"); - assertTrue("next-line character", !reg.matches("end of text\u0085")); - } - - public void testStandaloneCR() throws IOException { - reg.setPattern("end of text$"); - assertTrue("standalone CR", !reg.matches("end of text\r")); - } - - public void testWindowsLineSeparator() throws IOException { - reg.setPattern("end of text$"); - assertTrue("Windows line separator", !reg.matches("end of text\r\n")); - } - - public void testWindowsLineSeparator2() throws IOException { - reg.setPattern("end of text\r$"); - assertTrue("Windows line separator", reg.matches("end of text\r\n")); - } - - public void testUnixLineSeparator() throws IOException { - reg.setPattern("end of text$"); - assertTrue("Unix line separator", reg.matches("end of text\n")); - } - - - public void testMultiVersusSingleLine() throws IOException { - StringBuffer buf = new StringBuffer(); - buf.append("Line1").append(UNIX_LINE); - buf.append("starttest Line2").append(UNIX_LINE); - buf.append("Line3 endtest").append(UNIX_LINE); - buf.append("Line4").append(UNIX_LINE); - String text = buf.toString(); - - doStartTest1(text); - doStartTest2(text); - doEndTest1(text); - doEndTest2(text); - } - - protected void doStartTest1(String text) { - reg.setPattern("^starttest"); - assertTrue("^starttest in default mode", !reg.matches(text)); - assertTrue("^starttest in single line mode", - !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); - assertTrue("^starttest in multi line mode", - reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); - } - - protected void doStartTest2(String text) { - reg.setPattern("^Line1"); - assertTrue("^Line1 in default mode", reg.matches(text)); - assertTrue("^Line1 in single line mode", - reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); - assertTrue("^Line1 in multi line mode", - reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); - } - - protected void doEndTest1(String text) { - reg.setPattern("endtest$"); - assertTrue("endtest$ in default mode", !reg.matches(text)); - assertTrue("endtest$ in single line mode", - !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); - assertTrue("endtest$ in multi line mode", - reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); - } - - protected void doEndTest2(String text) { - reg.setPattern("Line4$"); - assertTrue("Line4$ in default mode", reg.matches(text)); - assertTrue("Line4$ in single line mode", - reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); - assertTrue("Line4$ in multi line mode", - reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); - } - -} +/* + * 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.ant.util.regexp; + +import java.io.IOException; +import java.util.Vector; + +import junit.framework.TestCase; + +/** + * Tests for all implementations of the RegexpMatcher interface. + * + */ +public abstract class RegexpMatcherTest extends TestCase { + + public final static String UNIX_LINE = "\n"; + + private RegexpMatcher reg; + + public abstract RegexpMatcher getImplementation(); + + protected final RegexpMatcher getReg() {return reg;} + + public RegexpMatcherTest(String name) { + super(name); + } + + public void setUp() { + reg = getImplementation(); + } + + public void testMatches() { + reg.setPattern("aaaa"); + assertTrue("aaaa should match itself", reg.matches("aaaa")); + assertTrue("aaaa should match xaaaa", reg.matches("xaaaa")); + assertTrue("aaaa shouldn\'t match xaaa", !reg.matches("xaaa")); + reg.setPattern("^aaaa"); + assertTrue("^aaaa shouldn\'t match xaaaa", !reg.matches("xaaaa")); + assertTrue("^aaaa should match aaaax", reg.matches("aaaax")); + reg.setPattern("aaaa$"); + assertTrue("aaaa$ shouldn\'t match aaaax", !reg.matches("aaaax")); + assertTrue("aaaa$ should match xaaaa", reg.matches("xaaaa")); + reg.setPattern("[0-9]+"); + assertTrue("[0-9]+ should match 123", reg.matches("123")); + assertTrue("[0-9]+ should match 1", reg.matches("1")); + assertTrue("[0-9]+ shouldn\'t match \'\'", !reg.matches("")); + assertTrue("[0-9]+ shouldn\'t match a", !reg.matches("a")); + reg.setPattern("[0-9]*"); + assertTrue("[0-9]* should match 123", reg.matches("123")); + assertTrue("[0-9]* should match 1", reg.matches("1")); + assertTrue("[0-9]* should match \'\'", reg.matches("")); + assertTrue("[0-9]* should match a", reg.matches("a")); + reg.setPattern("([0-9]+)=\\1"); + assertTrue("([0-9]+)=\\1 should match 1=1", reg.matches("1=1")); + assertTrue("([0-9]+)=\\1 shouldn\'t match 1=2", !reg.matches("1=2")); + } + + public void testGroups() { + reg.setPattern("aaaa"); + Vector v = reg.getGroups("xaaaa"); + assertEquals("No parens -> no extra groups", 1, v.size()); + assertEquals("Trivial match with no parens", "aaaa", + (String) v.elementAt(0)); + + reg.setPattern("(aaaa)"); + v = reg.getGroups("xaaaa"); + assertEquals("Trivial match with single paren", 2, v.size()); + assertEquals("Trivial match with single paren, full match", "aaaa", + (String) v.elementAt(0)); + assertEquals("Trivial match with single paren, matched paren", "aaaa", + (String) v.elementAt(0)); + + reg.setPattern("(a+)b(b+)"); + v = reg.getGroups("xaabb"); + assertEquals(3, v.size()); + assertEquals("aabb", (String) v.elementAt(0)); + assertEquals("aa", (String) v.elementAt(1)); + assertEquals("b", (String) v.elementAt(2)); + } + + public void testBugzillaReport14619() { + reg.setPattern("^(.*)/src/((.*/)*)([a-zA-Z0-9_\\.]+)\\.java$"); + Vector v = reg.getGroups("de/tom/src/Google.java"); + assertEquals(5, v.size()); + assertEquals("de/tom", v.elementAt(1)); + assertEquals("", v.elementAt(2)); + assertEquals("", v.elementAt(3)); + assertEquals("Google", v.elementAt(4)); + } + + public void testCaseInsensitiveMatch() { + reg.setPattern("aaaa"); + assertTrue("aaaa doesn't match AAaa", !reg.matches("AAaa")); + assertTrue("aaaa matches AAaa ignoring case", + reg.matches("AAaa", RegexpMatcher.MATCH_CASE_INSENSITIVE)); + } + + +// make sure there are no issues concerning line separator interpretation +// a line separator for regex (perl) is always a unix line (ie \n) + + public void testParagraphCharacter() throws IOException { + reg.setPattern("end of text$"); + assertTrue("paragraph character", !reg.matches("end of text\u2029")); + } + + public void testLineSeparatorCharacter() throws IOException { + reg.setPattern("end of text$"); + assertTrue("line-separator character", !reg.matches("end of text\u2028")); + } + + public void testNextLineCharacter() throws IOException { + reg.setPattern("end of text$"); + assertTrue("next-line character", !reg.matches("end of text\u0085")); + } + + public void testStandaloneCR() throws IOException { + reg.setPattern("end of text$"); + assertTrue("standalone CR", !reg.matches("end of text\r")); + } + + public void testWindowsLineSeparator() throws IOException { + reg.setPattern("end of text$"); + assertTrue("Windows line separator", !reg.matches("end of text\r\n")); + } + + public void testWindowsLineSeparator2() throws IOException { + reg.setPattern("end of text\r$"); + assertTrue("Windows line separator", reg.matches("end of text\r\n")); + } + + public void testUnixLineSeparator() throws IOException { + reg.setPattern("end of text$"); + assertTrue("Unix line separator", reg.matches("end of text\n")); + } + + + public void testMultiVersusSingleLine() throws IOException { + StringBuffer buf = new StringBuffer(); + buf.append("Line1").append(UNIX_LINE); + buf.append("starttest Line2").append(UNIX_LINE); + buf.append("Line3 endtest").append(UNIX_LINE); + buf.append("Line4").append(UNIX_LINE); + String text = buf.toString(); + + doStartTest1(text); + doStartTest2(text); + doEndTest1(text); + doEndTest2(text); + } + + protected void doStartTest1(String text) { + reg.setPattern("^starttest"); + assertTrue("^starttest in default mode", !reg.matches(text)); + assertTrue("^starttest in single line mode", + !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); + assertTrue("^starttest in multi line mode", + reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); + } + + protected void doStartTest2(String text) { + reg.setPattern("^Line1"); + assertTrue("^Line1 in default mode", reg.matches(text)); + assertTrue("^Line1 in single line mode", + reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); + assertTrue("^Line1 in multi line mode", + reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); + } + + protected void doEndTest1(String text) { + reg.setPattern("endtest$"); + assertTrue("endtest$ in default mode", !reg.matches(text)); + assertTrue("endtest$ in single line mode", + !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); + assertTrue("endtest$ in multi line mode", + reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); + } + + protected void doEndTest2(String text) { + reg.setPattern("Line4$"); + assertTrue("Line4$ in default mode", reg.matches(text)); + assertTrue("Line4$ in single line mode", + reg.matches(text, RegexpMatcher.MATCH_SINGLELINE)); + assertTrue("Line4$ in multi line mode", + reg.matches(text, RegexpMatcher.MATCH_MULTILINE)); + } + +}
http://git-wip-us.apache.org/repos/asf/ant/blob/1ae68097/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java ---------------------------------------------------------------------- diff --git a/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java b/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java index 5cfe8c9..b083bfa 100644 --- a/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java @@ -1,63 +1,63 @@ -/* - * 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.ant.util.regexp; - -/** - * Tests for all implementations of the Regexp interface. - * - */ -public abstract class RegexpTest extends RegexpMatcherTest { - - private static final String test = "abcdefg-abcdefg"; - private static final String pattern = "ab([^d]*)d([^f]*)f"; - - public RegexpTest(String name) { - super(name); - } - - public final RegexpMatcher getImplementation() { - return getRegexpImplementation(); - } - - public abstract Regexp getRegexpImplementation(); - - public void testSubstitution() { - Regexp reg = (Regexp) getReg(); - reg.setPattern(pattern); - assertTrue(reg.matches(test)); - assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", - Regexp.MATCH_DEFAULT)); - } - - public void testReplaceFirstSubstitution() { - Regexp reg = (Regexp) getReg(); - reg.setPattern(pattern); - assertTrue(reg.matches(test)); - assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", - Regexp.REPLACE_FIRST)); - } - - public void testReplaceAllSubstitution() { - Regexp reg = (Regexp) getReg(); - reg.setPattern(pattern); - assertTrue(reg.matches(test)); - assertEquals("abedcfg-abedcfg", reg.substitute(test, "ab\\2d\\1f", - Regexp.REPLACE_ALL)); - } -} +/* + * 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.ant.util.regexp; + +/** + * Tests for all implementations of the Regexp interface. + * + */ +public abstract class RegexpTest extends RegexpMatcherTest { + + private static final String test = "abcdefg-abcdefg"; + private static final String pattern = "ab([^d]*)d([^f]*)f"; + + public RegexpTest(String name) { + super(name); + } + + public final RegexpMatcher getImplementation() { + return getRegexpImplementation(); + } + + public abstract Regexp getRegexpImplementation(); + + public void testSubstitution() { + Regexp reg = (Regexp) getReg(); + reg.setPattern(pattern); + assertTrue(reg.matches(test)); + assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", + Regexp.MATCH_DEFAULT)); + } + + public void testReplaceFirstSubstitution() { + Regexp reg = (Regexp) getReg(); + reg.setPattern(pattern); + assertTrue(reg.matches(test)); + assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f", + Regexp.REPLACE_FIRST)); + } + + public void testReplaceAllSubstitution() { + Regexp reg = (Regexp) getReg(); + reg.setPattern(pattern); + assertTrue(reg.matches(test)); + assertEquals("abedcfg-abedcfg", reg.substitute(test, "ab\\2d\\1f", + Regexp.REPLACE_ALL)); + } +} http://git-wip-us.apache.org/repos/asf/ant/blob/1ae68097/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 caa43e4..0f32955 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; - } - } +/* + * 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 http://git-wip-us.apache.org/repos/asf/ant/blob/1ae68097/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 50e0e57..cc3bc46 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/1ae68097/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 87e2f75..0bad323 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 <[email protected]>"); - testMailClient.to("[email protected]"); - testMailClient.cc("[email protected]"); - testMailClient.cc("[email protected]"); - testMailClient.bcc("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "To: [email protected]\r\n" + - "Cc: [email protected], [email protected]\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 <[email protected]>"); - testMailClient.to("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "To: [email protected]\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 <[email protected]>"); - testMailClient.cc("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "Cc: [email protected]\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 <[email protected]>"); - testMailClient.bcc("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\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 <[email protected]>"); - testMailClient.to("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "To: [email protected]\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 <[email protected]>"); - testMailClient.to("[email protected]"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "To: [email protected]\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 <[email protected]>"); - testMailClient.to("Ceki G\u00fclc\u00fc <[email protected]>"); - 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: <[email protected]>\r\n" + - "250\r\n" + - "RCPT TO: <[email protected]>\r\n" + - "250\r\n" + - "DATA\r\n" + - "354\r\n" + - "Subject: Test subject\r\n" + - "From: Mail Message <[email protected]>\r\n" + - "To: Ceki G\u00fclc\u00fc <[email protected]>\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 <[email protected]>"); + testMailClient.to("[email protected]"); + testMailClient.cc("[email protected]"); + testMailClient.cc("[email protected]"); + testMailClient.bcc("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "To: [email protected]\r\n" + + "Cc: [email protected], [email protected]\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 <[email protected]>"); + testMailClient.to("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "To: [email protected]\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 <[email protected]>"); + testMailClient.cc("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "Cc: [email protected]\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 <[email protected]>"); + testMailClient.bcc("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\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 <[email protected]>"); + testMailClient.to("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "To: [email protected]\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 <[email protected]>"); + testMailClient.to("[email protected]"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "To: [email protected]\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 <[email protected]>"); + testMailClient.to("Ceki G\u00fclc\u00fc <[email protected]>"); + 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: <[email protected]>\r\n" + + "250\r\n" + + "RCPT TO: <[email protected]>\r\n" + + "250\r\n" + + "DATA\r\n" + + "354\r\n" + + "Subject: Test subject\r\n" + + "From: Mail Message <[email protected]>\r\n" + + "To: Ceki G\u00fclc\u00fc <[email protected]>\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; + } + + } + +}
