package org.rubypeople.rdt.internal.ui.util; import java.util.Comparator; import junit.framework.TestCase; import org.eclipse.core.runtime.AssertionFailedException; public class TwoArrayQuickSorterTest extends TestCase { public void testSortStringIgnoringCase() throws Exception { // TODO Test String compare actually testing case ignoring and with case String[] keys = new String[] { "zebra", "apple", "pear", "baby" }; String[] values = new String[] { "stripes", "fuji", "bartlett", "diaper" }; TwoArrayQuickSorter sorter = new TwoArrayQuickSorter(true); sorter.sort(keys, values); // Keys get sorted int i = 0; assertEquals("apple", keys[i++]); assertEquals("baby", keys[i++]); assertEquals("pear", keys[i++]); assertEquals("zebra", keys[i++]); // Values stayed with the keys, rather than get sorted themselves i = 0; assertEquals("fuji", values[i++]); assertEquals("diaper", values[i++]); assertEquals("bartlett", values[i++]); assertEquals("stripes", values[i++]); } public void testSortIntegerKeysStringValues() throws Exception { Integer[] keys = new Integer[] { 9, 3, 7, 1 }; String[] values = new String[] { "nine", "three", "seven", "one" }; Comparator comparator = new Comparator() { public int compare(Object o1, Object o2) { if (o1 instanceof Integer) { return ((Integer) o1).compareTo((Integer) o2); } if (o1 instanceof String) { return ((String) o1).compareTo((String) o2); } return 0; } }; TwoArrayQuickSorter sorter = new TwoArrayQuickSorter(comparator); sorter.sort(keys, values); // Keys get sorted int i = 0; assertEquals(new Integer(1), keys[i++]); assertEquals(new Integer(3), keys[i++]); assertEquals(new Integer(7), keys[i++]); assertEquals(new Integer(9), keys[i++]); // Values stayed with the keys, rather than get sorted themselves i = 0; assertEquals("one", values[i++]); assertEquals("three", values[i++]); assertEquals("seven", values[i++]); assertEquals("nine", values[i++]); } public void testSortNullKeysThrowsException() throws Exception { try { TwoArrayQuickSorter sorter = new TwoArrayQuickSorter(true); sorter.sort(null, new String[0]); fail("Expected an AssertionFailedException"); } catch (AssertionFailedException e) { assertTrue(true); } } public void testSortNullValuesThrowsException() throws Exception { try { TwoArrayQuickSorter sorter = new TwoArrayQuickSorter(true); sorter.sort(new String[0], null); fail("Expected an AssertionFailedException"); } catch (AssertionFailedException e) { assertTrue(true); } } // TODO Test two arrays with different lengths public void testSortEmptyArrays() throws Exception { String[] keys = new String[0]; String[] values = new String[0]; TwoArrayQuickSorter sorter = new TwoArrayQuickSorter(true); sorter.sort(new String[0], new String[0]); assertEquals(0, keys.length); assertEquals(0, values.length); } }