| package org.testng.internal; |
| |
| |
| import org.testng.ITestMethodFinder; |
| import org.testng.ITestNGMethod; |
| import org.testng.annotations.IConfigurationAnnotation; |
| import org.testng.annotations.ITestAnnotation; |
| import org.testng.collections.Lists; |
| import org.testng.internal.annotations.AnnotationHelper; |
| import org.testng.internal.annotations.IAnnotationFinder; |
| import org.testng.xml.XmlTest; |
| |
| import java.lang.reflect.Method; |
| import java.util.List; |
| import java.util.Set; |
| |
| /** |
| * The default strategy for finding test methods: look up |
| * annotations @Test in front of methods. |
| * |
| * @author Cedric Beust, May 3, 2004 |
| * @author <a href='mailto:the_mindstorm@evolva.ro'>Alexandru Popescu</a> |
| * @param <ITestNGMetthod> |
| */ |
| public class TestNGMethodFinder<ITestNGMetthod> implements ITestMethodFinder { |
| private static final int BEFORE_SUITE = 1; |
| private static final int AFTER_SUITE = 2; |
| private static final int BEFORE_TEST = 3; |
| private static final int AFTER_TEST = 4; |
| private static final int BEFORE_CLASS = 5; |
| private static final int AFTER_CLASS = 6; |
| private static final int BEFORE_TEST_METHOD = 7; |
| private static final int AFTER_TEST_METHOD = 8; |
| private static final int BEFORE_GROUPS = 9; |
| private static final int AFTER_GROUPS = 10; |
| |
| private RunInfo m_runInfo = null; |
| private IAnnotationFinder m_annotationFinder = null; |
| |
| public TestNGMethodFinder(RunInfo runInfo, |
| IAnnotationFinder annotationFinder) |
| { |
| m_runInfo = runInfo; |
| m_annotationFinder = annotationFinder; |
| } |
| |
| public ITestNGMethod[] getTestMethods(Class clazz, XmlTest xmlTest) { |
| return AnnotationHelper.findMethodsWithAnnotation( |
| clazz, ITestAnnotation.class, m_annotationFinder, xmlTest); |
| } |
| |
| public ITestNGMethod[] getBeforeClassMethods(Class cls) { |
| return findConfiguration(cls, BEFORE_CLASS); |
| } |
| |
| public ITestNGMethod[] getAfterClassMethods(Class cls) { |
| return findConfiguration(cls, AFTER_CLASS); |
| } |
| |
| public ITestNGMethod[] getBeforeTestMethods(Class cls) { |
| return findConfiguration(cls, BEFORE_TEST_METHOD); |
| } |
| |
| public ITestNGMethod[] getAfterTestMethods(Class cls) { |
| return findConfiguration(cls, AFTER_TEST_METHOD); |
| } |
| |
| public ITestNGMethod[] getBeforeSuiteMethods(Class cls) { |
| return findConfiguration(cls, BEFORE_SUITE); |
| } |
| |
| public ITestNGMethod[] getAfterSuiteMethods(Class cls) { |
| return findConfiguration(cls, AFTER_SUITE); |
| } |
| |
| public ITestNGMethod[] getBeforeTestConfigurationMethods(Class clazz) { |
| return findConfiguration(clazz, BEFORE_TEST); |
| } |
| |
| public ITestNGMethod[] getAfterTestConfigurationMethods(Class clazz) { |
| return findConfiguration(clazz, AFTER_TEST); |
| } |
| |
| public ITestNGMethod[] getBeforeGroupsConfigurationMethods(Class clazz) { |
| return findConfiguration(clazz, BEFORE_GROUPS); |
| } |
| |
| public ITestNGMethod[] getAfterGroupsConfigurationMethods(Class clazz) { |
| return findConfiguration(clazz, AFTER_GROUPS); |
| } |
| |
| private ITestNGMethod[] findConfiguration(final Class clazz, final int configurationType) { |
| List<ITestNGMethod> vResult = Lists.newArrayList(); |
| |
| Set<Method> methods = ClassHelper.getAvailableMethods(clazz); |
| |
| for (Method m : methods) { |
| IConfigurationAnnotation configuration = AnnotationHelper.findConfiguration(m_annotationFinder, m); |
| |
| if (null == configuration) { |
| continue; |
| } |
| |
| boolean create = false; |
| boolean isBeforeSuite = false; |
| boolean isAfterSuite = false; |
| boolean isBeforeTest = false; |
| boolean isAfterTest = false; |
| boolean isBeforeClass = false; |
| boolean isAfterClass = false; |
| boolean isBeforeTestMethod = false; |
| boolean isAfterTestMethod = false; |
| String[] beforeGroups = null; |
| String[] afterGroups = null; |
| |
| switch(configurationType) { |
| case BEFORE_SUITE: |
| create = configuration.getBeforeSuite(); |
| isBeforeSuite = true; |
| break; |
| case AFTER_SUITE: |
| create = configuration.getAfterSuite(); |
| isAfterSuite = true; |
| break; |
| case BEFORE_TEST: |
| create = configuration.getBeforeTest(); |
| isBeforeTest = true; |
| break; |
| case AFTER_TEST: |
| create = configuration.getAfterTest(); |
| isAfterTest = true; |
| break; |
| case BEFORE_CLASS: |
| create = configuration.getBeforeTestClass(); |
| isBeforeClass = true; |
| break; |
| case AFTER_CLASS: |
| create = configuration.getAfterTestClass(); |
| isAfterClass = true; |
| break; |
| case BEFORE_TEST_METHOD: |
| create = configuration.getBeforeTestMethod(); |
| isBeforeTestMethod = true; |
| break; |
| case AFTER_TEST_METHOD: |
| create = configuration.getAfterTestMethod(); |
| isAfterTestMethod = true; |
| break; |
| case BEFORE_GROUPS: |
| beforeGroups = configuration.getBeforeGroups(); |
| create = beforeGroups.length > 0; |
| isBeforeTestMethod = true; |
| break; |
| case AFTER_GROUPS: |
| afterGroups = configuration.getAfterGroups(); |
| create = afterGroups.length > 0; |
| isBeforeTestMethod = true; |
| break; |
| } |
| |
| if(create) { |
| addConfigurationMethod(clazz, |
| vResult, |
| m, |
| isBeforeSuite, |
| isAfterSuite, |
| isBeforeTest, |
| isAfterTest, |
| isBeforeClass, |
| isAfterClass, |
| isBeforeTestMethod, |
| isAfterTestMethod, |
| beforeGroups, |
| afterGroups); |
| } |
| } |
| |
| List<ITestNGMethod> excludedMethods = Lists.newArrayList(); |
| boolean unique = configurationType == BEFORE_SUITE || configurationType == AFTER_SUITE; |
| ITestNGMethod[] tmResult = MethodHelper.collectAndOrderConfigurationMethods(vResult, |
| m_runInfo, |
| m_annotationFinder, |
| unique, |
| excludedMethods); |
| |
| return tmResult; |
| } |
| |
| private void addConfigurationMethod(Class<?> clazz, |
| List<ITestNGMethod> results, |
| Method method, |
| boolean isBeforeSuite, |
| boolean isAfterSuite, |
| boolean isBeforeTest, |
| boolean isAfterTest, |
| boolean isBeforeClass, |
| boolean isAfterClass, |
| boolean isBeforeTestMethod, |
| boolean isAfterTestMethod, |
| String[] beforeGroups, |
| String[] afterGroups) |
| { |
| if(method.getDeclaringClass().isAssignableFrom(clazz)) { |
| ITestNGMethod confMethod = new ConfigurationMethod(method, |
| m_annotationFinder, |
| isBeforeSuite, |
| isAfterSuite, |
| isBeforeTest, |
| isAfterTest, |
| isBeforeClass, |
| isAfterClass, |
| isBeforeTestMethod, |
| isAfterTestMethod, |
| beforeGroups, |
| afterGroups); |
| results.add(confMethod); |
| } |
| } |
| |
| } |