//package org.styloot.hobo.test; import org.junit.*; import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import org.styloot.hobo.*; import org.styloot.hobo.hoboindex.*; import java.util.*; @RunWith(Parameterized.class) public class TestHoboIndex { private static final int NUM_ITEMS=20; HoboIndex index; public TestHoboIndex(HoboIndex index) { this.index = index; } private static String itemId(int i) { return "id" + i; } private static Vector<Item> getItemList() { Vector<Item> items = new Vector<Item>(); for (int i=0;i<NUM_ITEMS;i++) { Vector<String> f = new Vector<String>(); f.add("buttons"); if (i % 2 == 0) { f.add("cleaveage"); } CIELabColor color = CIELabColor.CIELabFromRGB(0, i, 0); if (i % 3 == 0) items.add(new Item("id" + i, "/dress", f, i, color, 1+(i%5))); if (i % 3 == 1) items.add(new Item("id" + i, "/dress/short", f, i, color, 1+(i%5))); if (i % 3 == 2) items.add(new Item("id" + i, "/skirt", f, i, color, 1+(i%5))); } return items; } private static Vector<Item> iteratorToVector(Iterator<Item> iter) { Vector<Item> result = new Vector<Item>(); while (iter.hasNext()) { result.add(iter.next()); } return result; } @Parameters public static Collection<Object[]> generateData() { Vector<Item> items = getItemList(); return Arrays.asList(new Object[][] { new Object[]{ new SimpleHoboIndex(items) }, }); } public static void testResults(Iterator<Item> iterator, int[] expectedResultIds) { Vector<Item> results = iteratorToVector( iterator ); int numResults = expectedResultIds.length; assertEquals( "Result had wrong number of elements.", numResults, results.size() ); String[] expectedResultIdStr = new String[expectedResultIds.length]; String[] actualResultIdStr = new String[expectedResultIds.length]; for (int i=0;i<expectedResultIds.length;i++) { expectedResultIdStr[i] = itemId(expectedResultIds[i]); actualResultIdStr[i] = results.get(i).id; } assertArrayEquals("Item Id's incorrect", expectedResultIdStr, actualResultIdStr); } @Test public void testFindDresses() { testResults( index.find("/dress", null, null, -1, 0, Integer.MAX_VALUE), new int[]{ 19, 18, 16, 15, 13, 12, 10, 9, 7, 6, 4, 3, 1, 0 } ); } @Test public void testFindDressesWithFeature() { Vector<String> f = new Vector<String>(); f.add("cleaveage"); testResults( index.find("/dress", f, null, -1, 0, Integer.MAX_VALUE), new int[]{ 18, 16, 12, 10, 6, 4, 0 } ); } @Test public void testFindDressesWithFeature2() { Vector<String> f = new Vector<String>(); f.add("cleaveage"); testResults( index.find("/dress/short", f, null, -1, 0, Integer.MAX_VALUE), new int[]{ 16, 10, 4 } ); } @Test public void testFindDressesWithFeatureColor() { Vector<String> f = new Vector<String>(); f.add("cleaveage"); CIELabColor color = CIELabColor.CIELabFromRGB(0, 0, 0); testResults( index.find("/dress", f, color, 4, 0, Integer.MAX_VALUE), new int[]{ 6, 4, 0 } ); } }