View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.lang3.stream;
19  
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  
22  import java.util.Objects;
23  import java.util.concurrent.atomic.AtomicLong;
24  import java.util.function.Function;
25  import java.util.stream.Collector;
26  import java.util.stream.Stream;
27  
28  import org.junit.jupiter.api.Test;
29  
30  /**
31   * Tests {@link LangCollectors}
32   */
33  public class LangCollectorsTest {
34  
35      private static final class Fixture {
36          int value;
37  
38          private Fixture(final int value) {
39              this.value = value;
40          }
41  
42          @Override
43          public String toString() {
44              return Integer.toString(value);
45          }
46      }
47  
48      private static final Long _1L = Long.valueOf(1);
49      private static final Long _2L = Long.valueOf(2);
50      private static final Long _3L = Long.valueOf(3);
51  
52      private static final Function<Object, String> TO_STRING = Objects::toString;
53  
54      private static final Collector<Object, ?, String> JOINING_0 = LangCollectors.joining();
55      private static final Collector<Object, ?, String> JOINING_1 = LangCollectors.joining("-");
56      private static final Collector<Object, ?, String> JOINING_3 = LangCollectors.joining("-", "<", ">");
57      private static final Collector<Object, ?, String> JOINING_4 = LangCollectors.joining("-", "<", ">", TO_STRING);
58      private static final Collector<Object, ?, String> JOINING_4_NUL = LangCollectors.joining("-", "<", ">", o -> Objects.toString(o, "NUL"));
59  
60      @Test
61      public void testJoiningNonStrings0Arg() {
62          assertEquals("", Stream.of().collect(JOINING_0));
63          assertEquals("1", Stream.of(_1L).collect(JOINING_0));
64          assertEquals("12", Stream.of(_1L, _2L).collect(JOINING_0));
65          assertEquals("123", Stream.of(_1L, _2L, _3L).collect(JOINING_0));
66          assertEquals("1null3", Stream.of(_1L, null, _3L).collect(JOINING_0));
67          assertEquals("12", Stream.of(new AtomicLong(1), new AtomicLong(2)).collect(JOINING_0));
68          assertEquals("12", Stream.of(new Fixture(1), new Fixture(2)).collect(JOINING_0));
69      }
70  
71      @Test
72      public void testJoiningNonStrings1Arg() {
73          assertEquals("", Stream.of().collect(JOINING_1));
74          assertEquals("1", Stream.of(_1L).collect(JOINING_1));
75          assertEquals("1-2", Stream.of(_1L, _2L).collect(JOINING_1));
76          assertEquals("1-2-3", Stream.of(_1L, _2L, _3L).collect(JOINING_1));
77          assertEquals("1-null-3", Stream.of(_1L, null, _3L).collect(JOINING_1));
78          assertEquals("1-2", Stream.of(new AtomicLong(1), new AtomicLong(2)).collect(JOINING_1));
79          assertEquals("1-2", Stream.of(new Fixture(1), new Fixture(2)).collect(JOINING_1));
80      }
81  
82      @Test
83      public void testJoiningNonStrings3Args() {
84          assertEquals("<>", Stream.of().collect(JOINING_3));
85          assertEquals("<1>", Stream.of(_1L).collect(JOINING_3));
86          assertEquals("<1-2>", Stream.of(_1L, _2L).collect(JOINING_3));
87          assertEquals("<1-2-3>", Stream.of(_1L, _2L, _3L).collect(JOINING_3));
88          assertEquals("<1-null-3>", Stream.of(_1L, null, _3L).collect(JOINING_3));
89          assertEquals("<1-2>", Stream.of(new AtomicLong(1), new AtomicLong(2)).collect(JOINING_3));
90          assertEquals("<1-2>", Stream.of(new Fixture(1), new Fixture(2)).collect(JOINING_3));
91      }
92  
93      @Test
94      public void testJoiningNonStrings4Args() {
95          assertEquals("<>", Stream.of().collect(JOINING_4));
96          assertEquals("<1>", Stream.of(_1L).collect(JOINING_4));
97          assertEquals("<1-2>", Stream.of(_1L, _2L).collect(JOINING_4));
98          assertEquals("<1-2-3>", Stream.of(_1L, _2L, _3L).collect(JOINING_4));
99          assertEquals("<1-null-3>", Stream.of(_1L, null, _3L).collect(JOINING_4));
100         assertEquals("<1-NUL-3>", Stream.of(_1L, null, _3L).collect(JOINING_4_NUL));
101         assertEquals("<1-2>", Stream.of(new AtomicLong(1), new AtomicLong(2)).collect(JOINING_4));
102         assertEquals("<1-2>", Stream.of(new Fixture(1), new Fixture(2)).collect(JOINING_4));
103     }
104 
105     @Test
106     public void testJoiningStrings0Arg() {
107         assertEquals("", Stream.of().collect(JOINING_0));
108         assertEquals("1", Stream.of("1").collect(JOINING_0));
109         assertEquals("12", Stream.of("1", "2").collect(JOINING_0));
110         assertEquals("123", Stream.of("1", "2", "3").collect(JOINING_0));
111         assertEquals("1null3", Stream.of("1", null, "3").collect(JOINING_0));
112     }
113 
114     @Test
115     public void testJoiningStrings1Arg() {
116         assertEquals("", Stream.of().collect(JOINING_1));
117         assertEquals("1", Stream.of("1").collect(JOINING_1));
118         assertEquals("1-2", Stream.of("1", "2").collect(JOINING_1));
119         assertEquals("1-2-3", Stream.of("1", "2", "3").collect(JOINING_1));
120         assertEquals("1-null-3", Stream.of("1", null, "3").collect(JOINING_1));
121     }
122 
123     @Test
124     public void testJoiningStrings3Args() {
125         assertEquals("<>", Stream.of().collect(JOINING_3));
126         assertEquals("<1>", Stream.of("1").collect(JOINING_3));
127         assertEquals("<1-2>", Stream.of("1", "2").collect(JOINING_3));
128         assertEquals("<1-2-3>", Stream.of("1", "2", "3").collect(JOINING_3));
129         assertEquals("<1-null-3>", Stream.of("1", null, "3").collect(JOINING_3));
130     }
131 
132     @Test
133     public void testJoiningStrings4Args() {
134         assertEquals("<>", Stream.of().collect(JOINING_4));
135         assertEquals("<1>", Stream.of("1").collect(JOINING_4));
136         assertEquals("<1-2>", Stream.of("1", "2").collect(JOINING_4));
137         assertEquals("<1-2-3>", Stream.of("1", "2", "3").collect(JOINING_4));
138         assertEquals("<1-null-3>", Stream.of("1", null, "3").collect(JOINING_4));
139         assertEquals("<1-NUL-3>", Stream.of("1", null, "3").collect(JOINING_4_NUL));
140     }
141 }