/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * 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.collection; import com.espertech.esper.util.CollectionUtil; import junit.framework.TestCase; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; public class TestCombinationEnumeration extends TestCase { public void testEnumerate() { tryEnumerate("1A, 1B, 2A, 2B", new Object[][]{{1, 2}, {"A", "B"}}); tryEnumerate("1AX, 1AY, 1BX, 1BY", new Object[][]{{1}, {"A", "B"}, {"X", "Y"}}); tryEnumerate("1A, 1B", new Object[][]{{1}, {"A", "B"}}); tryEnumerate("1", new Object[][]{{1}}); tryEnumerate("", new Object[0][]); tryEnumerate("1A, 2A, 3A", new Object[][]{{1, 2, 3}, {"A"}}); tryEnumerate("1AX, 1AY, 2AX, 2AY, 3AX, 3AY", new Object[][]{{1, 2, 3}, {"A"}, {"X", "Y"}}); try { new CombinationEnumeration(new Object[][]{{1}, {}}); fail(); } catch (IllegalArgumentException ex) { assertEquals("Expecting non-null element of minimum length 1", ex.getMessage()); } } private void tryEnumerate(String expected, Object[][] objects) { CombinationEnumeration e = new CombinationEnumeration(objects); List<Object[]> results = new ArrayList<Object[]>(); for (; e.hasMoreElements(); ) { Object[] copy = new Object[objects.length]; Object[] result = e.nextElement(); System.arraycopy(result, 0, copy, 0, result.length); results.add(copy); } try { e.nextElement(); fail(); } catch (NoSuchElementException ex) { // expected } List<String> items = new ArrayList<String>(); for (Object[] result : results) { StringWriter writer = new StringWriter(); for (Object item : result) { writer.append(item.toString()); } items.add(writer.toString()); } String resultStr = CollectionUtil.toString(items); assertEquals(expected, resultStr); } }