blob: 1b99f554ae5571f76f9196137587a72bd235bb55 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0, which accompanies this distribution
* and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.utility.tests.internal.comparator;
import java.text.Collator;
import java.text.DateFormat;
import java.util.Comparator;
import java.util.Date;
import junit.framework.TestCase;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.comparator.ComparatorAdapter;
import org.eclipse.jpt.common.utility.internal.comparator.ComparatorTools;
@SuppressWarnings("nls")
public class ComparatorToolsTests
extends TestCase
{
public ComparatorToolsTests(String name) {
super(name);
}
public void testMinObjectObject() {
String foo = "foo";
String bar = "bar";
assertEquals(bar, ComparatorTools.min(foo, bar));
assertEquals(bar, ComparatorTools.min(bar, foo));
}
public void testMinObjectObjectComparator() {
String foo = "foo";
String bar = "bar";
assertEquals(foo, ComparatorTools.min(foo, bar, ComparatorTools.<String>reverseComparator()));
assertEquals(foo, ComparatorTools.min(bar, foo, ComparatorTools.<String>reverseComparator()));
}
public void testMaxObjectObject() {
String foo = "foo";
String bar = "bar";
assertEquals(foo, ComparatorTools.max(foo, bar));
assertEquals(foo, ComparatorTools.max(bar, foo));
}
public void testMaxObjectObjectComparator() {
String foo = "foo";
String bar = "bar";
assertEquals(bar, ComparatorTools.max(foo, bar, ComparatorTools.<String>reverseComparator()));
assertEquals(bar, ComparatorTools.max(bar, foo, ComparatorTools.<String>reverseComparator()));
}
public void testComparableComparator() {
assertTrue(ComparatorTools.<String>comparableComparator().compare("foo", "foo") == 0);
assertTrue(ComparatorTools.<String>comparableComparator().compare("foo", "bar") > 0);
assertTrue(ComparatorTools.<String>comparableComparator().compare("bar", "foo") < 0);
}
public void testNaturalComparator() {
assertTrue(ComparatorTools.<String>naturalComparator().compare("foo", "foo") == 0);
assertTrue(ComparatorTools.<String>naturalComparator().compare("foo", "bar") > 0);
assertTrue(ComparatorTools.<String>naturalComparator().compare("bar", "foo") < 0);
}
public void testComparatorChain() throws Exception {
@SuppressWarnings("unchecked")
Comparator<Person> comparator = ComparatorTools.chain(Person.LAST_NAME_COMPARATOR, Person.FIRST_NAME_COMPARATOR, Person.BIRTH_DATE_COMPARATOR);
Person john = new Person("John", "Smith", DateFormat.getDateInstance(DateFormat.SHORT).parse("10/11/55"));
Person jane = new Person("Jane", "Smith", DateFormat.getDateInstance(DateFormat.SHORT).parse("10/11/55"));
assertTrue(comparator.compare(john, john) == 0);
assertTrue(comparator.compare(jane, john) < 0);
assertTrue(comparator.compare(john, jane) > 0);
Person oldJohn = new Person("John", "Smith", DateFormat.getDateInstance(DateFormat.SHORT).parse("10/11/33"));
assertTrue(comparator.compare(oldJohn, oldJohn) == 0);
assertTrue(comparator.compare(oldJohn, john) < 0);
assertTrue(comparator.compare(john, oldJohn) > 0);
}
public void testNullsFirstComparator() {
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare("foo", "foo") == 0);
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare("foo", "bar") > 0);
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare("bar", "foo") < 0);
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare(null, null) == 0);
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare("foo", null) > 0);
assertTrue(ComparatorTools.nullsFirst(ComparatorTools.stringCollator()).compare(null, "foo") < 0);
}
public void testNullsLastComparator() {
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", "foo") == 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", "bar") > 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("bar", "foo") < 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare(null, null) == 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", null) < 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare(null, "foo") > 0);
}
public void testTransformationComparator() {
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", "foo") == 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", "bar") > 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("bar", "foo") < 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare(null, null) == 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare("foo", null) < 0);
assertTrue(ComparatorTools.nullsLast(ComparatorTools.stringCollator()).compare(null, "foo") > 0);
}
public static class Person {
public final String firstName;
public final String lastName;
public final Date birthDate;
public Person(String firstName, String lastName, Date birthDate) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate;
}
@Override
public String toString() {
return ObjectTools.toString(this, this.firstName + ' ' + this.lastName);
}
public static final Comparator<Person> FIRST_NAME_COMPARATOR = new FirstNameComparator();
public static class FirstNameComparator
extends ComparatorAdapter<Person>
{
@Override
public int compare(Person p1, Person p2) {
return Collator.getInstance().compare(p1.firstName, p2.firstName);
}
}
public static final Comparator<Person> LAST_NAME_COMPARATOR = new LastNameComparator();
public static class LastNameComparator
extends ComparatorAdapter<Person>
{
@Override
public int compare(Person p1, Person p2) {
return Collator.getInstance().compare(p1.lastName, p2.lastName);
}
}
public static final Comparator<Person> BIRTH_DATE_COMPARATOR = new BirthDateComparator();
public static class BirthDateComparator
extends ComparatorAdapter<Person>
{
@Override
public int compare(Person p1, Person p2) {
return p1.birthDate.compareTo(p2.birthDate);
}
}
}
}