1509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustpackage test.methodinterceptors;
2509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust
3509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport org.testng.IMethodInstance;
4509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport org.testng.IMethodInterceptor;
5509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport org.testng.ITestContext;
6509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport org.testng.annotations.Test;
7509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust
8509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport java.util.ArrayList;
9509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport java.util.HashSet;
10509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport java.util.List;
11509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustimport java.util.Set;
12509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust
13509aca53357e59e6f06a14261dd4452bec315a98Cédric Beustpublic class FastTestsFirstInterceptor implements IMethodInterceptor {
14892b08c1f1afd198fd8ccbf804de28b7ce12f547nullin  @Override
15509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust  public List<IMethodInstance> intercept(List<IMethodInstance> methods,
16509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      ITestContext context)
17509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust  {
1810c223b7aa6bf34778079bb5ee1a494c83cd1239Ryan Schmitt    List<IMethodInstance> result = new ArrayList<>();
19509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust    for (IMethodInstance m : methods) {
20509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      Test test = m.getMethod().getMethod().getAnnotation(Test.class);
2110c223b7aa6bf34778079bb5ee1a494c83cd1239Ryan Schmitt      Set<String> groups = new HashSet<>();
22509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      for (String group : test.groups()) {
23509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust        groups.add(group);
24509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      }
25509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      if (groups.contains("fast")) {
26509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust        result.add(0, m);
27509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      }
28509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      else {
29509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust        result.add(m);
30509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust      }
31509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust    }
32509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust    return result;
33509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust  }
34509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust
35509aca53357e59e6f06a14261dd4452bec315a98Cédric Beust}
36