/* * ************************************************************************************* * Copyright (C) 2008 EsperTech, Inc. All rights reserved. * * http://esper.codehaus.org * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * * ************************************************************************************* */ package com.espertech.esper.util; import com.espertech.esper.client.EventBean; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.event.map.MapEventBean; import junit.framework.TestCase; import java.util.Set; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Arrays; public class TestCollectionUtil extends TestCase { public void testAddArraySetSemantics() { EventBean[] e = new EventBean[10]; for (int i = 0; i < e.length; i++) { e[i] = new MapEventBean(null); } assertFalse(e[0].equals(e[1])); Object[][] testData = new Object[][] { {new EventBean[] {}, new EventBean[] {}, "p2"}, {new EventBean[] {}, new EventBean[] {e[0], e[1]}, "p2"}, {new EventBean[] {e[0]}, new EventBean[] {}, "p1"}, {new EventBean[] {e[0]}, new EventBean[] {e[0]}, "p1"}, {new EventBean[] {e[0]}, new EventBean[] {e[1]}, new EventBean[] {e[0], e[1]}}, {new EventBean[] {e[0], e[1]}, new EventBean[] {e[1]}, "p1"}, {new EventBean[] {e[0], e[1]}, new EventBean[] {e[0]}, "p1"}, {new EventBean[] {e[0]}, new EventBean[] {e[0], e[1]}, "p2"}, {new EventBean[] {e[1]}, new EventBean[] {e[0], e[1]}, "p2"}, {new EventBean[] {e[2]}, new EventBean[] {e[0], e[1]}, new EventBean[] {e[0], e[1], e[2]}}, {new EventBean[] {e[2], e[0]}, new EventBean[] {e[0], e[1]}, new EventBean[] {e[0], e[1], e[2]}}, {new EventBean[] {e[2], e[0]}, new EventBean[] {e[0], e[1], e[2]}, new EventBean[] {e[0], e[1], e[2]}} }; for (int i = 0; i < testData.length; i++) { EventBean[] p1 = (EventBean[]) testData[i][0]; EventBean[] p2 = (EventBean[]) testData[i][1]; Object expectedObj = testData[i][2]; Object result = CollectionUtil.addArrayWithSetSemantics(p1, p2); if (expectedObj.equals("p1")) { assertTrue(result == p1); } else if (expectedObj.equals("p2")) { assertTrue(result == p2); } else { EventBean[] resultArray = (EventBean[]) result; EventBean[] expectedArray = (EventBean[]) result; EPAssertionUtil.assertEqualsAnyOrder(resultArray, expectedArray); } } } public void testAddArray() { tryAddStringArr("b,a".split(","), CollectionUtil.addArrays(new String[] {"b"}, new String[] {"a"})); tryAddStringArr("a".split(","), CollectionUtil.addArrays(null, new String[] {"a"})); tryAddStringArr("b".split(","), CollectionUtil.addArrays(new String[] {"b"}, null)); tryAddStringArr("a,b,c,d".split(","), CollectionUtil.addArrays(new String[] {"a", "b"}, new String[] {"c", "d"})); assertEquals(null, CollectionUtil.addArrays(null, null)); Object result = CollectionUtil.addArrays(new int[] {1,2}, new int[] {3,4}); EPAssertionUtil.assertEqualsExactOrder(new int[] {1,2,3,4}, (int[]) result); try { CollectionUtil.addArrays("a", null); fail(); } catch (IllegalArgumentException ex) { assertEquals("Parameter is not an array: a", ex.getMessage()); } try { CollectionUtil.addArrays(null, "b"); fail(); } catch (IllegalArgumentException ex) { assertEquals("Parameter is not an array: b", ex.getMessage()); } } private void tryAddStringArr(String[] expected, Object result) { assertTrue(result.getClass().isArray()); assertEquals(String.class, result.getClass().getComponentType()); EPAssertionUtil.assertEqualsExactOrder(expected, (String[]) result); } public void testCopySort() { Object[][] testdata = new Object[][] { {new String[]{"a", "b"}, new String[] {"a", "b"}}, {new String[]{"b", "a"}, new String[] {"a", "b"}}, {new String[]{"a"}, new String[] {"a"}}, {new String[]{"c", "b", "a"}, new String[] {"a", "b", "c"}}, {new String[0], new String[0]}, }; for (int i = 0; i < testdata.length; i++) { String[] expected = (String[]) testdata[i][1]; String[] input = (String[]) testdata[i][0]; String[] received = CollectionUtil.copySortArray(input); if (!Arrays.equals(expected, received)) { fail("Failed for input " + Arrays.toString(input) + " expected " + Arrays.toString(expected) + " received " + Arrays.toString(received)); } assertNotSame(input, expected); } } public void testCompare() { Object[][] testdata = new Object[][] { {new String[]{"a", "b"}, new String[]{"a", "b"}, true}, {new String[]{"a"}, new String[]{"a", "b"}, false}, {new String[]{"a"}, new String[]{"a"}, true}, {new String[]{"b"}, new String[]{"a"}, false}, {new String[]{"b", "a"}, new String[]{"a", "b"}, true}, {new String[]{"a", "b", "b"}, new String[]{"a", "b"}, false}, {new String[]{"a", "b", "b"}, new String[]{"b", "a", "b"}, true}, {new String[0], new String[0], true}, }; for (int i = 0; i < testdata.length; i++) { String[] left = (String[]) testdata[i][0]; String[] right = (String[]) testdata[i][1]; boolean expected = (Boolean) testdata[i][2]; assertEquals("Failed for input " + Arrays.toString(left), expected, CollectionUtil.sortCompare(left, right)); assertTrue(Arrays.equals(left, (String[]) testdata[i][0])); assertTrue(Arrays.equals(right, (String[]) testdata[i][1])); } } public void testToString() { Object[][] testdata = new Object[][] { {new String[]{"a", "b"}, "a, b"}, {new String[]{"a"}, "a"}, {new String[]{""}, ""}, {new String[]{"", ""}, ""}, {new String[]{null, "b"}, "b"}, {new String[0], ""}, {null, "null"} }; for (int i = 0; i < testdata.length; i++) { String expected = (String) testdata[i][1]; String[] input = (String[]) testdata[i][0]; assertEquals("Failed for input " + Arrays.toString(input), expected, CollectionUtil.toString(toSet(input))); } } private Set<String> toSet(String[] arr) { if (arr == null) { return null; } if (arr.length == 0) { return new HashSet<String>(); } Set<String> set = new LinkedHashSet<String>(); for (String a : arr) { set.add(a); } return set; } }