package com.redhat.qe.auto.testng; import org.testng.IMethodInstance; import org.testng.IMethodInterceptor; import org.testng.ITestContext; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class TestNgPriorityInterceptor implements IMethodInterceptor { public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) { Comparator<IMethodInstance> comparator = new Comparator<IMethodInstance>() { private int getPriority(IMethodInstance mi) { int result = 0; Method method = mi.getMethod().getMethod(); TestNgPriority a1 = method.getAnnotation(TestNgPriority.class); //System.out.println("I entered method interceptor"); if (a1 != null) { result = a1.value(); } else { Class<?> cls = method.getDeclaringClass(); TestNgPriority classPriority = cls.getAnnotation(TestNgPriority.class); if (classPriority != null) { result = classPriority.value(); } } System.out.println("method: " +method.getName() + " result: " +result); return result; } public int compare(IMethodInstance m1, IMethodInstance m2) { System.out.println("Priority is "+m1); return getPriority(m1) - getPriority(m2); } }; System.out.println("size: " + methods.size()); IMethodInstance[] array = methods.toArray(new IMethodInstance [methods.size()]); Arrays.sort(array, comparator); return Arrays.asList(array); } }