1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertNotSame;
22
23 import java.io.IOException;
24 import java.io.StringWriter;
25 import java.util.Arrays;
26 import java.util.Objects;
27
28 import org.apache.commons.lang3.AppendableJoiner.Builder;
29 import org.apache.commons.lang3.text.StrBuilder;
30 import org.apache.commons.text.TextStringBuilder;
31 import org.junit.jupiter.api.Test;
32 import org.junit.jupiter.params.ParameterizedTest;
33 import org.junit.jupiter.params.provider.ValueSource;
34
35
36
37
38 public class AppendableJoinerTest {
39
40 static class Fixture {
41
42 private final String name;
43
44 Fixture(final String name) {
45 this.name = name;
46 }
47
48
49
50
51 void render(final Appendable appendable) throws IOException {
52 appendable.append(name);
53 appendable.append('!');
54 }
55 }
56
57 @Test
58 public void testAllBuilderPropertiesStringBuilder() {
59
60 final AppendableJoiner<Object> joiner = AppendableJoiner.builder()
61 .setPrefix("<")
62 .setDelimiter(".")
63 .setSuffix(">")
64 .setElementAppender((a, e) -> a.append(String.valueOf(e)))
65 .get();
66
67 final StringBuilder sbuilder = new StringBuilder("A");
68 assertEquals("A<B.C>", joiner.join(sbuilder, "B", "C").toString());
69 sbuilder.append("1");
70 assertEquals("A<B.C>1<D.E>", joiner.join(sbuilder, Arrays.asList("D", "E")).toString());
71 }
72
73 @Test
74 public void testBuildDefaultStringBuilder() {
75 final Builder<Object> builder = AppendableJoiner.builder();
76 assertNotSame(builder.get(), builder.get());
77 final AppendableJoiner<Object> joiner = builder.get();
78 final StringBuilder sbuilder = new StringBuilder("A");
79 assertEquals("ABC", joiner.join(sbuilder, "B", "C").toString());
80 sbuilder.append("1");
81 assertEquals("ABC1DE", joiner.join(sbuilder, "D", "E").toString());
82 }
83
84 @Test
85 public void testBuilder() {
86 assertNotSame(AppendableJoiner.builder(), AppendableJoiner.builder());
87 }
88
89 @SuppressWarnings("deprecation")
90 @ParameterizedTest
91 @ValueSource(classes = { StringBuilder.class, StringBuffer.class, StringWriter.class, StrBuilder.class, TextStringBuilder.class })
92 public void testDelimiterAppendable(final Class<? extends Appendable> clazz) throws Exception {
93 final AppendableJoiner<Object> joiner = AppendableJoiner.builder().setDelimiter(".").get();
94 final Appendable sbuilder = clazz.newInstance();
95 sbuilder.append("A");
96
97 assertEquals("AB.C", joiner.joinA(sbuilder, "B", "C").toString());
98 sbuilder.append("1");
99
100 assertEquals("AB.C1D.E", joiner.joinA(sbuilder, Arrays.asList("D", "E")).toString());
101 }
102
103 @Test
104 public void testDelimiterStringBuilder() {
105 final AppendableJoiner<Object> joiner = AppendableJoiner.builder().setDelimiter(".").get();
106 final StringBuilder sbuilder = new StringBuilder("A");
107
108 assertEquals("AB.C", joiner.join(sbuilder, "B", "C").toString());
109 sbuilder.append("1");
110
111 assertEquals("AB.C1D.E", joiner.join(sbuilder, Arrays.asList("D", "E")).toString());
112 }
113
114 @Test
115 public void testToCharSequenceStringBuilder1() {
116
117 final AppendableJoiner<Object> joiner = AppendableJoiner.builder()
118 .setPrefix("<")
119 .setDelimiter(".")
120 .setSuffix(">")
121 .setElementAppender((a, e) -> a.append("|").append(Objects.toString(e)))
122 .get();
123
124 final StringBuilder sbuilder = new StringBuilder("A");
125 assertEquals("A<|B.|C>", joiner.join(sbuilder, "B", "C").toString());
126 sbuilder.append("1");
127 assertEquals("A<|B.|C>1<|D.|E>", joiner.join(sbuilder, Arrays.asList("D", "E")).toString());
128 }
129
130 @Test
131 public void testToCharSequenceStringBuilder2() {
132
133 final AppendableJoiner<Fixture> joiner = AppendableJoiner.<Fixture>builder()
134 .setElementAppender((a, e) -> e.render(a))
135 .get();
136
137 final StringBuilder sbuilder = new StringBuilder("[");
138 assertEquals("[B!C!", joiner.join(sbuilder, new Fixture("B"), new Fixture("C")).toString());
139 sbuilder.append("]");
140 assertEquals("[B!C!]D!E!", joiner.join(sbuilder, Arrays.asList(new Fixture("D"), new Fixture("E"))).toString());
141 }
142 }