56a57 > import java.util.LinkedList; 59a61,63 > import java.util.Arrays; > import java.util.HashSet; > import java.util.Set; 63a68 > * @author Robert Fischer 68c73,79 < public void testFlatten() throws Exception { --- > public static void assertNotEquals(String msg, Object left, Object right) { > if(left == null && right == null) { > fail(msg + ": null, null"); > } else if(left != null && left.equals(right)) { > fail(msg + ": " + left + ", " + right); > } > } 69a81,82 > public static void assertNotEquals(Object left, Object right) { > assertNotEquals("Expected different, found equals", left, right); 176a190,355 > > public void testFlattenListOfLists() { > // [ "A", 1, [ [ 'z' ], new Object() ], 1, "A", [], null, [[]] ] > final List base = new ArrayList(); > base.add("A"); > base.add(new Integer(1)); > final List sub2 = new ArrayList(); > sub2.add(new Character('z')); > final List sub1 = new ArrayList(); > sub1.add(sub2); > final Object token = new Object(); > sub1.add(token); > base.add(sub1); > base.add(new Integer(1)); > base.add("A"); > base.add(new ArrayList()); > base.add(null); > final List sub3 = new LinkedList(); > final List sub4 = new ArrayList(); > sub3.add(sub4); > base.add(sub3); > assertEquals("Added the wrong list to base", 1, ((List)base.get(base.size() - 1)).size()); > > final List out = DefaultGroovyMethods.flatten(base); > > final String wrong = "Did not find expected element"; > assertNotSame("Flatten returned the list that was passed in", base, out); > assertEquals(wrong, "A", out.get(0)); > assertEquals(wrong, new Integer(1), out.get(1)); > assertEquals(wrong, new Character('z'), out.get(2)); > assertSame(wrong, token, out.get(3)); > assertEquals(wrong, new Integer(1), out.get(4)); > assertEquals(wrong, "A", out.get(5)); > assertNull(wrong, out.get(6)); > assertEquals("Size is off", 7, out.size()); > } > > public void testFlattenListOfSets() { > // [ "A", 1, { new Object(), "A" }, 1, "A", {}, null, {["B"]} ] > final Object token = new Object(); > final Set set1 = new HashSet(); > set1.add("A"); > set1.add(token); > final Set set2 = new HashSet(); // Empty > final Set set3 = new HashSet(); > final List inSet3 = new ArrayList(); > inSet3.add("B"); > set3.add(inSet3); > > final List base = new ArrayList(); > base.add("A"); > base.add(new Integer(1)); > base.add(set1); > base.add(new Integer(1)); > base.add("A"); > base.add(set2); > base.add(null); > base.add(set3); > > final List out = DefaultGroovyMethods.flatten(base); > > final String wrong = "Did not find expected element"; > assertNotSame("Flatten returned the list that was passed in", base, out); > assertEquals(wrong, "A", out.get(0)); > assertEquals(wrong, new Integer(1), out.get(1)); > assertTrue(wrong, "A".equals(out.get(2)) || token.equals(out.get(2))); > assertTrue(wrong, "A".equals(out.get(3)) || token.equals(out.get(3))); > assertNotEquals("Saw duplicated element", out.get(2), out.get(3)); > assertEquals(wrong, new Integer(1), out.get(4)); > assertEquals(wrong, "A", out.get(5)); > assertNull(wrong, out.get(6)); > assertEquals(wrong, "B", out.get(7)); > assertEquals("Size is off", 8, out.size()); > } > > public void testFlattenSetOfSets() { > // { 1, 2, { 3, 4, {}, { { 5, 6, {} } } } } > final Set base = new HashSet(); > base.add(new Integer(1)); > base.add(new Integer(2)); > base.add(Arrays.asList(new Object[] { > new Integer(3), > new Integer(4), > new HashSet(), > new HashSet(Arrays.asList(new Object[] { > new HashSet(Arrays.asList(new Object[] { > new Integer(5), > new Integer(6), > new HashSet() > })), > })) > })); > > > final Set out = DefaultGroovyMethods.flatten(base); > > assertNotSame("Flattened returned the set passed in", base, out); > for(int i = 1; i <= 6; i++) { > assertTrue(out.contains(new Integer(i))); > } > assertFalse("Contains an empty set", out.contains(new HashSet())); > } > > public void testFlattenSetOfLists() { > // { 1, [ 2, 3, 4, [ 5, [], { 6 } ] ] } > final Set base = new HashSet(); > base.add(new Integer(1)); > base.add(Arrays.asList(new Object[] { > new Integer(2), > new Integer(3), > new Integer(4), > Arrays.asList(new Object[] { > new Integer(5), > new ArrayList(), > new HashSet(Arrays.asList(new Object[] { new Integer(6) } ) ) > }) > })); > > final Set out = DefaultGroovyMethods.flatten(base); > > assertNotSame("Flattened returned the set passed in", base, out); > for(int i = 1; i <= 6; i++) { > assertTrue(out.contains(new Integer(i))); > } > assertFalse("Contains an empty set", out.contains(new HashSet())); > } > > /** > * This behavior is warned as subject to change. Personally, > * I think it is a bug. > * > * @author Robert Fischer > */ > public void testFlattenListOfMaps() { > // [ 1, [ a : 2 ] ] > final List base = new ArrayList(); > base.add(new Integer(1)); > final Map map = new HashMap(); > map.put("a", new Integer(2)); > base.add(map); > > final List out = DefaultGroovyMethods.flatten(base); > > assertEquals(new Integer(1), out.get(0)); > assertEquals(new Integer(2), out.get(1)); > } > > /** > * This behavior is warned as subject to change. Personally, > * I think it is a bug. > * > * @author Robert Fischer > */ > public void testFlattenSetOfMaps() { > // { 1, [ a : 2 ] } > final Set base = new HashSet(); > base.add(new Integer(1)); > final Map map = new HashMap(); > map.put("a", new Integer(2)); > base.add(map); > > final Set out = DefaultGroovyMethods.flatten(base); > > assertTrue(out.contains(new Integer(1))); > assertTrue(out.contains(new Integer(2))); > }