org.junit.internal.MethodSorter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dragome-js-jre Show documentation
Show all versions of dragome-js-jre Show documentation
Dragome SDK module: js-jre
The newest version!
package org.junit.internal;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Comparator;
import org.junit.FixMethodOrder;
public class MethodSorter
{
/**
* DEFAULT sort order
*/
public static Comparator DEFAULT= new Comparator()
{
public int compare(Method m1, Method m2)
{
int i1= m1.getName().hashCode();
int i2= m2.getName().hashCode();
if (i1 != i2)
{
return i1 < i2 ? -1 : 1;
}
return NAME_ASCENDING.compare(m1, m2);
}
};
/**
* Method name ascending lexicographic sort order, with {@link Method#toString()} as a tiebreaker
*/
public static Comparator NAME_ASCENDING= new Comparator()
{
public int compare(Method m1, Method m2)
{
final int comparison= m1.getName().compareTo(m2.getName());
if (comparison != 0)
{
return comparison;
}
return m1.toString().compareTo(m2.toString());
}
};
/**
* Gets declared methods of a class in a predictable order, unless @FixMethodOrder(MethodSorters.JVM) is specified.
*
* Using the JVM order is unwise since the Java platform does not
* specify any particular order, and in fact JDK 7 returns a more or less
* random order; well-written test code would not assume any order, but some
* does, and a predictable failure is better than a random failure on
* certain platforms. By default, uses an unspecified but deterministic order.
*
* @param clazz a class
* @return same as {@link Class#getDeclaredMethods} but sorted
* @see JDK
* (non-)bug #7023180
*/
public static Method[] getDeclaredMethods(Class> clazz)
{
Comparator comparator= getSorter(clazz.getAnnotation(FixMethodOrder.class));
Method[] methods= clazz.getDeclaredMethods();
if (comparator != null)
{
Arrays.sort(methods, comparator);
}
return methods;
}
private MethodSorter()
{
}
private static Comparator getSorter(FixMethodOrder fixMethodOrder)
{
if (fixMethodOrder == null)
{
return DEFAULT;
}
return fixMethodOrder.value().getComparator();
}
}