--- old/test/java/util/StringJoiner/MergeTest.java 2014-08-06 13:27:22.725440196 +0400 +++ new/test/java/util/StringJoiner/MergeTest.java 2014-08-06 13:27:22.533346611 +0400 @@ -23,7 +23,7 @@ /** * @test - * @bug 8017231 8020977 + * @bug 8017231 8020977 8054221 * @summary test StringJoiner::merge * @run testng MergeTest */ @@ -36,98 +36,135 @@ @Test public class MergeTest { - public void testNull() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - try { - sj.merge(null); - fail("Should throw NullPointerException!"); - } catch (NullPointerException npe) { - // expected + private final static String[] PREFIXES = {"", "{", "@#$%"}; + private final static String[] SUFFIXES = {"", "}", "*&%$"}; + + private static class Fixes { + public String pre0, suf0; + public String pre1, suf1; + public Fixes(String prefix0, String suffix0, + String prefix1, String suffix1) { + this.pre0 = prefix0; + this.suf0 = suffix0; + this.pre1 = prefix1; + this.suf1 = suffix1; } } - public void testSimple() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner other = new StringJoiner(",", "[", "]"); - Stream.of("a", "b", "c").forEachOrdered(sj::add); - Stream.of("d", "e", "f").forEachOrdered(other::add); - - sj.merge(other); - assertEquals(sj.toString(), "{a,b,c,d,e,f}"); + private static Stream fixesStream() { + Stream.Builder builder = Stream.builder(); + for (final String prefix0 : PREFIXES) { + for (final String suffix0 : SUFFIXES) { + for (final String prefix1 : PREFIXES) { + for (final String suffix1 : SUFFIXES) { + builder.accept(new Fixes(prefix0, suffix0, + prefix1, suffix1)); + } + } + } + } + return builder.build(); } - public void testEmptyOther() { + @Test(expectedExceptions = {NullPointerException.class}) + public void testNull() { StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner other = new StringJoiner(",", "[", "]"); - Stream.of("a", "b", "c").forEachOrdered(sj::add); + sj.merge(null); + } - sj.merge(other); - assertEquals(sj.toString(), "{a,b,c}"); + public void testSimple() { + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner other = new StringJoiner(",", fixes.pre1, fixes.suf1); + Stream.of("a", "b", "c").forEachOrdered(sj::add); + Stream.of("d", "e", "f").forEachOrdered(other::add); + + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "a,b,c,d,e,f" + fixes.suf0); + }); + } - other.setEmptyValue("EMPTY"); - sj.merge(other); - assertEquals(sj.toString(), "{a,b,c}"); + public void testEmptyOther() { + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner other = new StringJoiner(",", fixes.pre1, fixes.suf1); + Stream.of("a", "b", "c").forEachOrdered(sj::add); + + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "a,b,c" + fixes.suf0); + + other.setEmptyValue("EMPTY"); + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "a,b,c" + fixes.suf0); + }); } public void testEmptyThis() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner other = new StringJoiner(":", "[", "]"); - Stream.of("d", "e", "f").forEachOrdered(other::add); - - sj.merge(other); - assertEquals(sj.toString(), "{d:e:f}"); - - sj = new StringJoiner(",", "{", "}").setEmptyValue("EMPTY"); - assertEquals(sj.toString(), "EMPTY"); - sj.merge(other); - assertEquals(sj.toString(), "{d:e:f}"); + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); + Stream.of("d", "e", "f").forEachOrdered(other::add); + + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "d:e:f" + fixes.suf0); + + sj = new StringJoiner(",", fixes.pre0, fixes.suf0).setEmptyValue("EMPTY"); + assertEquals(sj.toString(), "EMPTY"); + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "d:e:f" + fixes.suf0); + }); } public void testEmptyBoth() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner other = new StringJoiner(":", "[", "]"); - - sj.merge(other); - assertEquals(sj.toString(), "{}"); - - other.setEmptyValue("NOTHING"); - sj.merge(other); - assertEquals(sj.toString(), "{}"); - - sj = new StringJoiner(",", "{", "}").setEmptyValue("EMPTY"); - assertEquals(sj.toString(), "EMPTY"); - sj.merge(other); - assertEquals(sj.toString(), "EMPTY"); + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); + + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); + + other.setEmptyValue("NOTHING"); + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); + + sj = new StringJoiner(",", fixes.pre0, fixes.suf0).setEmptyValue("EMPTY"); + assertEquals(sj.toString(), "EMPTY"); + sj.merge(other); + assertEquals(sj.toString(), "EMPTY"); + }); } public void testCascadeEmpty() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner o1 = new StringJoiner(":", "[", "]").setEmptyValue("Empty1"); - StringJoiner o2 = new StringJoiner(",", "<", ">").setEmptyValue("Empty2"); - - o1.merge(o2); - assertEquals(o1.toString(), "Empty1"); - - sj.merge(o1); - assertEquals(sj.toString(), "{}"); + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner o1 = new StringJoiner(":", fixes.pre1, fixes.suf1).setEmptyValue("Empty1"); + StringJoiner o2 = new StringJoiner(",", "<", ">").setEmptyValue("Empty2"); + + o1.merge(o2); + assertEquals(o1.toString(), "Empty1"); + + sj.merge(o1); + assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); + }); } public void testDelimiter() { - StringJoiner sj = new StringJoiner(",", "{", "}"); - StringJoiner other = new StringJoiner(":", "[", "]"); - Stream.of("a", "b", "c").forEachOrdered(sj::add); - Stream.of("d", "e", "f").forEachOrdered(other::add); - - sj.merge(other); - assertEquals(sj.toString(), "{a,b,c,d:e:f}"); + fixesStream().forEach(fixes -> { + StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); + StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); + Stream.of("a", "b", "c").forEachOrdered(sj::add); + Stream.of("d", "e", "f").forEachOrdered(other::add); + + sj.merge(other); + assertEquals(sj.toString(), fixes.pre0 + "a,b,c,d:e:f" + fixes.suf0); + }); } public void testMergeSelf() { - final StringJoiner sj = new StringJoiner(",", "[", "]").add("a").add("b"); - assertEquals(sj.merge(sj).toString(), "[a,b,a,b]"); - assertEquals(sj.merge(sj).toString(), "[a,b,a,b,a,b,a,b]"); - - final StringJoiner sj2 = new StringJoiner(",").add("c").add("d"); - assertEquals(sj2.merge(sj2).toString(), "c,d,c,d"); + fixesStream().forEach(fixes -> { + final StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0).add("a").add("b"); + assertEquals(sj.merge(sj).toString(), fixes.pre0 + "a,b,a,b" + fixes.suf0); + assertEquals(sj.merge(sj).toString(), fixes.pre0 + "a,b,a,b,a,b,a,b" + fixes.suf0); + }); } }