package org.yajul.comparators; import org.junit.Test; import org.yajul.comparators.ComparatorChain; import org.yajul.comparators.ComparatorUtil; import org.yajul.comparators.NullComparator; import org.yajul.comparators.ReverseComparator; import java.util.Arrays; import java.util.Comparator; import static org.junit.Assert.assertTrue; /** * Test for Comparator classes. * <br> * User: josh * Date: Dec 24, 2009 * Time: 8:27:08 AM */ public class ComparatorTest { @Test public void testReverseComparator() { String[] array = {"f", "c", "a", "b", "e", "d"}; Arrays.sort(array, new ReverseComparator<String>(ComparatorUtil.STRING_COMPARATOR)); String[] reverse = {"f", "e", "d", "c", "b", "a"}; assertTrue(Arrays.equals(reverse, array)); } @Test public void testNullComparator() { String[] array = {"f", "c", null, "b", "e", "d"}; Arrays.sort(array, new NullComparator<String>(ComparatorUtil.STRING_COMPARATOR)); String[] expect = {null, "b", "c", "d", "e", "f"}; assertTrue(Arrays.equals(expect, array)); Arrays.sort(array, new NullComparator<String>(true, ComparatorUtil.STRING_COMPARATOR)); String[] expect2 = {"b", "c", "d", "e", "f", null}; assertTrue(Arrays.equals(expect2, array)); } @Test public void testComparators() { assertTrue(ComparatorUtil.NULL_LOW_COMPARATOR.compare(null, "a") < 0); assertTrue(ComparatorUtil.NULL_LOW_COMPARATOR.compare("", null) > 0); assertTrue(ComparatorUtil.NULL_LOW_COMPARATOR.compare(null, null) == 0); assertTrue(ComparatorUtil.NULL_EQUALS_EMPTY_STRING_COMPARATOR.compare("", null) == 0); assertTrue(ComparatorUtil.NULL_EQUALS_EMPTY_STRING_COMPARATOR.compare(null, "") == 0); assertTrue(ComparatorUtil.NULL_EQUALS_EMPTY_STRING_COMPARATOR.compare("", "") == 0); assertTrue(ComparatorUtil.NULL_EQUALS_EMPTY_STRING_COMPARATOR.compare(null, null) == 0); } @Test public void testComparatorChain() { Thing[] array = {new Thing("f", 1), new Thing("c", 2), new Thing("a", 2), new Thing("b", 1), new Thing("e", 2), new Thing("d", 3)}; Comparator<Thing> departmentIdSort = new Comparator<Thing>() { public int compare(Thing o1, Thing o2) { return ComparatorUtil.compareIntegers(o1.getDepartmentId(), o2.getDepartmentId()); } }; Comparator<Thing> nameSort = new Comparator<Thing>() { public int compare(Thing o1, Thing o2) { return ComparatorUtil.STRING_COMPARATOR.compare(o1.getName(), o2.getName()); } }; Arrays.sort(array, new ComparatorChain<Thing>(departmentIdSort, nameSort)); Thing[] sorted = {new Thing("b", 1), new Thing("f", 1), new Thing("a", 2), new Thing("c", 2), new Thing("e", 2), new Thing("d", 3)}; assertTrue(Arrays.equals(sorted, array)); } private static class Thing { private String name; private int departmentId; private Thing(String name, int departmentId) { this.name = name; this.departmentId = departmentId; } public String getName() { return name; } public int getDepartmentId() { return departmentId; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Thing)) return false; Thing thing = (Thing) o; if (departmentId != thing.departmentId) return false; if (!name.equals(thing.name)) return false; return true; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + departmentId; return result; } @Override public String toString() { return "Thing{" + "name='" + name + '\'' + ", departmentId=" + departmentId + '}'; } } }