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