MergeTest.java revision 12745:f068a4ffddd2
1/* 2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24/** 25 * @test 26 * @bug 8017231 8020977 8054221 27 * @summary test StringJoiner::merge 28 * @run testng MergeTest 29 */ 30 31import java.util.StringJoiner; 32import java.util.stream.Stream; 33import org.testng.annotations.Test; 34import static org.testng.Assert.assertEquals; 35import static org.testng.Assert.fail; 36 37@Test 38public class MergeTest { 39 private static final String[] PREFIXES = {"", "{", "@#$%"}; 40 private static final String[] SUFFIXES = {"", "}", "*&%$"}; 41 42 private static class Fixes { 43 public String pre0, suf0; 44 public String pre1, suf1; 45 public Fixes(String prefix0, String suffix0, 46 String prefix1, String suffix1) { 47 this.pre0 = prefix0; 48 this.suf0 = suffix0; 49 this.pre1 = prefix1; 50 this.suf1 = suffix1; 51 } 52 } 53 54 private static Stream<Fixes> fixesStream() { 55 Stream.Builder<Fixes> builder = Stream.builder(); 56 for (final String prefix0 : PREFIXES) { 57 for (final String suffix0 : SUFFIXES) { 58 for (final String prefix1 : PREFIXES) { 59 for (final String suffix1 : SUFFIXES) { 60 builder.accept(new Fixes(prefix0, suffix0, 61 prefix1, suffix1)); 62 } 63 } 64 } 65 } 66 return builder.build(); 67 } 68 69 @Test(expectedExceptions = {NullPointerException.class}) 70 public void testNull() { 71 StringJoiner sj = new StringJoiner(",", "{", "}"); 72 sj.merge(null); 73 } 74 75 public void testSimple() { 76 fixesStream().forEach(fixes -> { 77 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 78 StringJoiner other = new StringJoiner(",", fixes.pre1, fixes.suf1); 79 Stream.of("a", "b", "c").forEachOrdered(sj::add); 80 Stream.of("d", "e", "f").forEachOrdered(other::add); 81 82 sj.merge(other); 83 assertEquals(sj.toString(), fixes.pre0 + "a,b,c,d,e,f" + fixes.suf0); 84 }); 85 } 86 87 public void testEmptyOther() { 88 fixesStream().forEach(fixes -> { 89 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 90 StringJoiner other = new StringJoiner(",", fixes.pre1, fixes.suf1); 91 Stream.of("a", "b", "c").forEachOrdered(sj::add); 92 93 sj.merge(other); 94 assertEquals(sj.toString(), fixes.pre0 + "a,b,c" + fixes.suf0); 95 96 other.setEmptyValue("EMPTY"); 97 sj.merge(other); 98 assertEquals(sj.toString(), fixes.pre0 + "a,b,c" + fixes.suf0); 99 }); 100 } 101 102 public void testEmptyThis() { 103 fixesStream().forEach(fixes -> { 104 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 105 StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); 106 Stream.of("d", "e", "f").forEachOrdered(other::add); 107 108 sj.merge(other); 109 assertEquals(sj.toString(), fixes.pre0 + "d:e:f" + fixes.suf0); 110 111 sj = new StringJoiner(",", fixes.pre0, fixes.suf0).setEmptyValue("EMPTY"); 112 assertEquals(sj.toString(), "EMPTY"); 113 sj.merge(other); 114 assertEquals(sj.toString(), fixes.pre0 + "d:e:f" + fixes.suf0); 115 }); 116 } 117 118 public void testEmptyBoth() { 119 fixesStream().forEach(fixes -> { 120 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 121 StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); 122 123 sj.merge(other); 124 assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); 125 126 other.setEmptyValue("NOTHING"); 127 sj.merge(other); 128 assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); 129 130 sj = new StringJoiner(",", fixes.pre0, fixes.suf0).setEmptyValue("EMPTY"); 131 assertEquals(sj.toString(), "EMPTY"); 132 sj.merge(other); 133 assertEquals(sj.toString(), "EMPTY"); 134 }); 135 } 136 137 public void testCascadeEmpty() { 138 fixesStream().forEach(fixes -> { 139 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 140 StringJoiner o1 = new StringJoiner(":", fixes.pre1, fixes.suf1).setEmptyValue("Empty1"); 141 StringJoiner o2 = new StringJoiner(",", "<", ">").setEmptyValue("Empty2"); 142 143 o1.merge(o2); 144 assertEquals(o1.toString(), "Empty1"); 145 146 sj.merge(o1); 147 assertEquals(sj.toString(), fixes.pre0 + fixes.suf0); 148 }); 149 } 150 151 public void testDelimiter() { 152 fixesStream().forEach(fixes -> { 153 StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0); 154 StringJoiner other = new StringJoiner(":", fixes.pre1, fixes.suf1); 155 Stream.of("a", "b", "c").forEachOrdered(sj::add); 156 Stream.of("d", "e", "f").forEachOrdered(other::add); 157 158 sj.merge(other); 159 assertEquals(sj.toString(), fixes.pre0 + "a,b,c,d:e:f" + fixes.suf0); 160 }); 161 } 162 163 public void testMergeSelf() { 164 fixesStream().forEach(fixes -> { 165 final StringJoiner sj = new StringJoiner(",", fixes.pre0, fixes.suf0).add("a").add("b"); 166 assertEquals(sj.merge(sj).toString(), fixes.pre0 + "a,b,a,b" + fixes.suf0); 167 assertEquals(sj.merge(sj).toString(), fixes.pre0 + "a,b,a,b,a,b,a,b" + fixes.suf0); 168 }); 169 } 170} 171