• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package test.asserttests;
2 
3 import org.testng.annotations.Test;
4 
5 import java.util.ArrayList;
6 import java.util.Arrays;
7 import java.util.Collections;
8 import java.util.HashMap;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.Map;
12 import java.util.Set;
13 
14 import static org.testng.Assert.assertEquals;
15 import static org.testng.Assert.assertNotEquals;
16 
17 /**
18  * Tests different equality cases for nested collections
19  * and arrays.
20  */
21 public class ArrayEqualityAssertTest {
22 
23     @Test
arrayAssertEquals()24     public void arrayAssertEquals() {
25         assertEquals(new int[]{ 42 }, new int[] { 42 },
26                 "arrays of primitives are compared by value in assertEquals");
27     }
28 
29     @Test(expectedExceptions = AssertionError.class)
arrayAssertNotEquals()30     public void arrayAssertNotEquals() {
31         assertNotEquals(new int[]{ 42 }, new int[] { 42 },
32                 "arrays of primitives are compared by value in assertNotEquals");
33     }
34 
35     @Test
boxedArrayAssertEquals()36     public void boxedArrayAssertEquals() {
37         assertEquals(new Integer[]{ 42 }, new Integer[] { 42 },
38                 "arrays of wrapped values are compared by value in assertEquals");
39     }
40 
41     @Test(expectedExceptions = AssertionError.class)
boxedArrayAssertNotEquals()42     public void boxedArrayAssertNotEquals() {
43         assertNotEquals(new Integer[]{ 42 }, new Integer[] { 42 },
44                 "arrays of wrapped values are compared by value in assertNotEquals");
45     }
46 
47     @Test
mixedArraysAssertEquals()48     public void mixedArraysAssertEquals() {
49         assertEquals(new int[]{ 42 }, new Integer[] { 42 },
50                 "arrays of wrapped values are compared by value in assertEquals");
51         assertEquals(new Integer[]{ 42 }, new int[] { 42 },
52                 "arrays of wrapped values are compared by value in assertEquals");
53     }
54 
55     @Test(expectedExceptions = AssertionError.class)
mixedArraysAssertNotEquals()56     public void mixedArraysAssertNotEquals() {
57         assertNotEquals(new int[]{ 42 }, new Integer[] { 42 },
58                 "arrays of wrapped values are compared by value in assertNotEquals");
59         assertNotEquals(new Integer[]{ 42 }, new int[] { 42 },
60                 "arrays of wrapped values are compared by value in assertNotEquals");
61     }
62 
63     @Test(expectedExceptions = AssertionError.class)
arrayInsideListAssertEquals()64     public void arrayInsideListAssertEquals() {
65         List<int[]> list = Arrays.asList(
66             new int[]{ 42 }
67         );
68         List<int[]> listCopy = Arrays.asList(
69             new int[]{ 42 }
70         );
71         assertEquals(list, listCopy,
72                 "arrays inside lists are compared by reference in assertEquals");
73     }
74 
75     @Test
arrayInsideListAssertNotEquals()76     public void arrayInsideListAssertNotEquals() {
77         List<int[]> list = Arrays.asList(
78             new int[]{ 42 }
79         );
80         List<int[]> listCopy = Arrays.asList(
81             new int[]{ 42 }
82         );
83         assertNotEquals(list, listCopy,
84                 "arrays inside lists are compared by reference in assertNotEquals");
85     }
86 
87     @Test(expectedExceptions = AssertionError.class)
arrayInsideMapAssertEquals()88     public void arrayInsideMapAssertEquals() {
89         Map<String, int[]> map = new HashMap<>();
90         map.put("array", new int[]{ 42 });
91         Map<String, int[]> mapCopy = new HashMap<>();
92         mapCopy.put("array", new int[]{ 42 });
93 
94         // arrays inside maps are compared by reference in assertEquals(Map,Map)
95         assertEquals(map, mapCopy);
96     }
97 
98     @Test(expectedExceptions = AssertionError.class)
arrayInsideMapAssertEqualsWithMessage()99     public void arrayInsideMapAssertEqualsWithMessage() {
100         Map<String, int[]> map = new HashMap<>();
101         map.put("array", new int[]{ 42 });
102         Map<String, int[]> mapCopy = new HashMap<>();
103         mapCopy.put("array", new int[]{ 42 });
104 
105         assertEquals(map, mapCopy,
106                 "arrays inside maps are compared by reference in assertEquals(Map,Map,String)");
107     }
108 
109     @Test
arrayInsideMapAssertNotEquals()110     public void arrayInsideMapAssertNotEquals() {
111         Map<String, int[]> map = new HashMap<>();
112         map.put("array", new int[]{ 42 });
113         Map<String, int[]> mapCopy = new HashMap<>();
114         mapCopy.put("array", new int[]{ 42 });
115 
116         assertNotEquals(map, mapCopy,
117                 "arrays inside maps are compared by reference in assertNotEquals");
118     }
119 
120     @Test(expectedExceptions = AssertionError.class)
arrayInsideSetAssertEquals()121     public void arrayInsideSetAssertEquals() {
122         Set<int[]> set = new HashSet<>();
123         set.add(new int[]{ 42 });
124         Set<int[]> setCopy = new HashSet<>();
125         setCopy.add(new int[]{ 42 });
126 
127         assertEquals(set, setCopy,
128                 "arrays inside sets are compared by reference in assertNotEquals");
129     }
130 
131     @Test
arrayInsideSetAssertNotEquals()132     public void arrayInsideSetAssertNotEquals() {
133         Set<int[]> set = new HashSet<>();
134         set.add(new int[]{ 42 });
135         Set<int[]> setCopy = new HashSet<>();
136         setCopy.add(new int[]{ 42 });
137 
138         assertNotEquals(set, setCopy,
139                 "arrays inside sets are compared by reference in assertNotEquals");
140     }
141 
142     @Test(expectedExceptions = AssertionError.class)
arrayDeepInListsAssertEquals()143     public void arrayDeepInListsAssertEquals() {
144         List<List<int[]>> list = Collections.singletonList(Arrays.asList(new int[]{ 42 }));
145         List<List<int[]>> listCopy = Collections.singletonList(Arrays.asList(new int[]{ 42 }));
146 
147         assertEquals(list, listCopy,
148                 "arrays inside lists which are inside lists themselves are compared by reference in assertEquals");
149     }
150 
151     @Test(expectedExceptions = AssertionError.class)
arrayDeepInMapsAssertEquals()152     public void arrayDeepInMapsAssertEquals() {
153         Map<String, Map<String, int[]>> map = new HashMap<>();
154         Map<String, int[]> innerMap = new HashMap<>();
155         innerMap.put("array", new int[]{ 42 });
156         map.put("map", innerMap);
157         Map<String, Map<String, int[]>> mapCopy = new HashMap<>();
158         Map<String, int[]> innerMapCopy = new HashMap<>();
159         innerMapCopy.put("array", new int[]{ 42 });
160         mapCopy.put("map", innerMapCopy);
161 
162         assertEquals(map, mapCopy,
163                 "arrays inside maps which are inside maps themselves are compared by reference in assertEquals");
164     }
165 
166     @Test(expectedExceptions = AssertionError.class)
arrayDeepInListAndMapAssertEquals()167     public void arrayDeepInListAndMapAssertEquals() {
168         List<Map<String, int[]>> list = new ArrayList<>();
169         Map<String, int[]> innerMap = new HashMap<>();
170         innerMap.put("array", new int[]{ 42 });
171         list.add(innerMap);
172         List<Map<String, int[]>> listCopy = new ArrayList<>();
173         Map<String, int[]> innerMapCopy = new HashMap<>();
174         innerMapCopy.put("array", new int[]{ 42 });
175         list.add(innerMapCopy);
176 
177         assertEquals(list, listCopy,
178                 "arrays inside maps which are inside lists themselves are compared by reference in assertEquals");
179     }
180 
181     @Test(expectedExceptions = AssertionError.class)
arrayDeepInMapAndListAssertEquals()182     public void arrayDeepInMapAndListAssertEquals() {
183         Map<String, List<int[]>> map = new HashMap<>();
184         map.put("list", Arrays.asList(new int[]{ 42 }));
185         Map<String, List<int[]>> mapCopy = new HashMap<>();
186         mapCopy.put("list", Arrays.asList(new int[]{ 42 }));
187 
188         assertEquals(map, mapCopy,
189                 "arrays inside maps which are inside lists themselves are compared by reference in assertEquals");
190     }
191 
192     @Test(expectedExceptions = AssertionError.class)
arrayInsideIterableAssertEquals()193     public void arrayInsideIterableAssertEquals() {
194         Iterable<int[]> iterable = Arrays.asList(
195             new int[]{ 42 }
196         );
197         Iterable<int[]> iterableCopy = Arrays.asList(
198             new int[]{ 42 }
199         );
200         assertEquals(iterable, iterableCopy,
201                 "arrays inside Iterables are compared by reference in assertEquals");
202     }
203 
204     @Test(expectedExceptions = AssertionError.class)
arrayDeepInIterablesAssertEquals()205     public void arrayDeepInIterablesAssertEquals() {
206         List<List<int[]>> iterable = Collections.singletonList(Arrays.asList(new int[]{ 42 }));
207         List<List<int[]>> iterableCopy = Collections.singletonList(Arrays.asList(new int[]{ 42 }));
208 
209         assertEquals(iterable, iterableCopy,
210                 "arrays inside Iterables which are inside Iterables themselves are compared by reference in assertEquals");
211     }
212 
213     @Test(expectedExceptions = AssertionError.class)
arrayInsideArrayAssertEquals()214     public void arrayInsideArrayAssertEquals() {
215         int[][] array = new int[][] {
216             new int[]{ 42 }
217         };
218         int[][] arrayCopy = new int[][] {
219             new int[]{ 42 }
220         };
221         assertEquals(array, arrayCopy,
222                 "arrays inside arrays are compared by reference in assertEquals");
223     }
224 
225     @Test(expectedExceptions = AssertionError.class)
arrayDeepInArraysAssertEquals()226     public void arrayDeepInArraysAssertEquals() {
227         int[][][] array = new int[][][] {
228             new int[][] { new int[]{ 42 } }
229         };
230         int[][][] arrayCopy = new int[][][] {
231             new int[][] { new int[]{ 42 } }
232         };
233 
234         assertEquals(array, arrayCopy,
235                 "arrays inside arrays which are inside arrays themselves are compared by reference in assertEquals");
236     }
237 
238     @SuppressWarnings("unchecked")
239     @Test(expectedExceptions = AssertionError.class)
arrayDeepInArrayAndListAssertEquals()240     public void arrayDeepInArrayAndListAssertEquals() {
241         List<int[]>[] array = new List[] {
242             Arrays.asList(new int[]{ 42 })
243         };
244         List<int[]>[] arrayCopy = new List[] {
245             Arrays.asList(new int[]{ 42 })
246         };
247 
248         assertEquals(array, arrayCopy,
249                 "arrays inside arrays which are inside arrays themselves are compared by reference in assertEquals");
250     }
251 
252 }
253