001 package org.junit.runner.manipulation;
002
003 import java.util.Comparator;
004
005 import org.junit.runner.Description;
006
007 /**
008 * A <code>Sorter</code> orders tests. In general you will not need
009 * to use a <code>Sorter</code> directly. Instead, use {@link org.junit.runner.Request#sortWith(Comparator)}.
010 *
011 * @since 4.0
012 */
013 public class Sorter implements Comparator<Description> {
014 /**
015 * NULL is a <code>Sorter</code> that leaves elements in an undefined order
016 */
017 public static final Sorter NULL = new Sorter(new Comparator<Description>() {
018 public int compare(Description o1, Description o2) {
019 return 0;
020 }
021 });
022
023 private final Comparator<Description> comparator;
024
025 /**
026 * Creates a <code>Sorter</code> that uses <code>comparator</code>
027 * to sort tests
028 *
029 * @param comparator the {@link Comparator} to use when sorting tests
030 */
031 public Sorter(Comparator<Description> comparator) {
032 this.comparator = comparator;
033 }
034
035 /**
036 * Sorts the test in <code>runner</code> using <code>comparator</code>
037 */
038 public void apply(Object object) {
039 if (object instanceof Sortable) {
040 Sortable sortable = (Sortable) object;
041 sortable.sort(this);
042 }
043 }
044
045 public int compare(Description o1, Description o2) {
046 return comparator.compare(o1, o2);
047 }
048 }