View Javadoc
1   package org.codehaus.plexus.util;
2   
3   /*
4    * Copyright The Codehaus Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  import java.util.ArrayList;
20  import java.util.HashMap;
21  import java.util.List;
22  import java.util.Map;
23  import java.util.Properties;
24  
25  import org.junit.jupiter.api.Test;
26  
27  import static org.junit.jupiter.api.Assertions.assertEquals;
28  import static org.junit.jupiter.api.Assertions.assertNotNull;
29  import static org.junit.jupiter.api.Assertions.assertNull;
30  
31  /**
32   * <p>CollectionUtilsTest class.</p>
33   *
34   * @author herve
35   * @version $Id: $Id
36   * @since 3.4.0
37   */
38  public class CollectionUtilsTest {
39      /**
40       * <p>testMergeMaps.</p>
41       */
42      @Test
43      public void testMergeMaps() {
44          Map<String, String> dominantMap = new HashMap<String, String>();
45          dominantMap.put("a", "a");
46          dominantMap.put("b", "b");
47          dominantMap.put("c", "c");
48          dominantMap.put("d", "d");
49          dominantMap.put("e", "e");
50          dominantMap.put("f", "f");
51  
52          Map<String, String> recessiveMap = new HashMap<String, String>();
53          recessiveMap.put("a", "invalid");
54          recessiveMap.put("b", "invalid");
55          recessiveMap.put("c", "invalid");
56          recessiveMap.put("x", "x");
57          recessiveMap.put("y", "y");
58          recessiveMap.put("z", "z");
59  
60          Map<String, String> result = CollectionUtils.mergeMaps(dominantMap, recessiveMap);
61  
62          // We should have 9 elements
63          assertEquals(9, result.keySet().size());
64  
65          // Check the elements.
66          assertEquals("a", result.get("a"));
67          assertEquals("b", result.get("b"));
68          assertEquals("c", result.get("c"));
69          assertEquals("d", result.get("d"));
70          assertEquals("e", result.get("e"));
71          assertEquals("f", result.get("f"));
72          assertEquals("x", result.get("x"));
73          assertEquals("y", result.get("y"));
74          assertEquals("z", result.get("z"));
75      }
76  
77      /**
78       * <p>testMergeMapArray.</p>
79       */
80      @SuppressWarnings("unchecked")
81      @Test
82      public void testMergeMapArray() {
83          // Test empty array of Maps
84          Map<String, String> result0 = CollectionUtils.mergeMaps(new Map[] {});
85  
86          assertNull(result0);
87  
88          // Test with an array with a single element.
89          Map<String, String> map1 = new HashMap<String, String>();
90          map1.put("a", "a");
91  
92          Map<String, String> result1 = CollectionUtils.mergeMaps(new Map[] {map1});
93  
94          assertEquals("a", result1.get("a"));
95  
96          // Test with an array with two elements.
97          Map<String, String> map2 = new HashMap<String, String>();
98          map2.put("a", "aa");
99          map2.put("b", "bb");
100 
101         Map<String, String> result2 = CollectionUtils.mergeMaps(new Map[] {map1, map2});
102 
103         assertEquals("a", result2.get("a"));
104         assertEquals("bb", result2.get("b"));
105 
106         // Now swap the dominant order.
107         Map<String, String> result3 = CollectionUtils.mergeMaps(new Map[] {map2, map1});
108 
109         assertEquals("aa", result3.get("a"));
110         assertEquals("bb", result3.get("b"));
111 
112         // Test with an array with three elements.
113         Map<String, String> map3 = new HashMap<String, String>();
114         map3.put("a", "aaa");
115         map3.put("b", "bbb");
116         map3.put("c", "ccc");
117 
118         Map<String, String> result4 = CollectionUtils.mergeMaps(new Map[] {map1, map2, map3});
119 
120         assertEquals("a", result4.get("a"));
121         assertEquals("bb", result4.get("b"));
122         assertEquals("ccc", result4.get("c"));
123 
124         // Now swap the dominant order.
125         Map<String, String> result5 = CollectionUtils.mergeMaps(new Map[] {map3, map2, map1});
126 
127         assertEquals("aaa", result5.get("a"));
128         assertEquals("bbb", result5.get("b"));
129         assertEquals("ccc", result5.get("c"));
130     }
131 
132     /**
133      * <p>testMavenPropertiesLoading.</p>
134      */
135     @org.junit.jupiter.api.Test
136     public void testMavenPropertiesLoading() {
137         // Mimic MavenSession properties loading. Properties listed
138         // in dominant order.
139         Properties systemProperties = new Properties();
140         Properties userBuildProperties = new Properties();
141         Properties projectBuildProperties = new Properties();
142         Properties projectProperties = new Properties();
143         Properties driverProperties = new Properties();
144 
145         // System properties
146         systemProperties.setProperty("maven.home", "/projects/maven");
147 
148         // User build properties
149         userBuildProperties.setProperty("maven.username", "jvanzyl");
150         userBuildProperties.setProperty("maven.repo.remote.enabled", "false");
151         userBuildProperties.setProperty("maven.repo.local", "/opt/maven/artifact");
152 
153         // Project build properties
154         projectBuildProperties.setProperty("maven.final.name", "maven");
155 
156         String mavenRepoRemote = "http://www.ibiblio.org/maven,http://foo/bar";
157 
158         // Project properties
159         projectProperties.setProperty("maven.repo.remote", mavenRepoRemote);
160 
161         String basedir = "/home/jvanzyl/projects/maven";
162 
163         // Driver properties
164         driverProperties.setProperty("basedir", basedir);
165         driverProperties.setProperty("maven.build.src", "${basedir}/src");
166         driverProperties.setProperty("maven.build.dir", "${basedir}/target");
167         driverProperties.setProperty("maven.build.dest", "${maven.build.dir}/classes");
168         driverProperties.setProperty("maven.repo.remote", "http://www.ibiblio.org/maven");
169         driverProperties.setProperty("maven.final.name", "maven-1.0");
170         driverProperties.setProperty("maven.repo.remote.enabled", "true");
171         driverProperties.setProperty("maven.repo.local", "${maven.home}/artifact");
172 
173         Map result = CollectionUtils.mergeMaps(new Map[] {
174             systemProperties, userBuildProperties, projectBuildProperties, projectProperties, driverProperties
175         });
176 
177         // Values that should be taken from systemProperties.
178         assertEquals("/projects/maven", (String) result.get("maven.home"));
179 
180         // Values that should be taken from userBuildProperties.
181         assertEquals("/opt/maven/artifact", (String) result.get("maven.repo.local"));
182         assertEquals("false", (String) result.get("maven.repo.remote.enabled"));
183         assertEquals("jvanzyl", (String) result.get("maven.username"));
184 
185         // Values take from projectBuildProperties.
186         assertEquals("maven", (String) result.get("maven.final.name"));
187 
188         // Values take from projectProperties.
189         assertEquals(mavenRepoRemote, (String) result.get("maven.repo.remote"));
190     }
191 
192     /**
193      * <p>testIteratorToListWithAPopulatedList.</p>
194      */
195     @org.junit.jupiter.api.Test
196     public void testIteratorToListWithAPopulatedList() {
197         List<String> original = new ArrayList<String>();
198 
199         original.add("en");
200         original.add("to");
201         original.add("tre");
202 
203         List<String> copy = CollectionUtils.iteratorToList(original.iterator());
204 
205         assertNotNull(copy);
206 
207         assertEquals(3, copy.size());
208 
209         assertEquals("en", copy.get(0));
210         assertEquals("to", copy.get(1));
211         assertEquals("tre", copy.get(2));
212     }
213 
214     /**
215      * <p>testIteratorToListWithAEmptyList.</p>
216      */
217     @org.junit.jupiter.api.Test
218     public void testIteratorToListWithAEmptyList() {
219         List<String> original = new ArrayList<String>();
220 
221         List<String> copy = CollectionUtils.iteratorToList(original.iterator());
222 
223         assertNotNull(copy);
224 
225         assertEquals(0, copy.size());
226     }
227 }