/** * Method searches for dataprovider methods for the resolver context. * <p> * If {@link ResolveStrategy} is pointing to {@link ResolveStrategy#UNTIL_FIRST_MATCH}, the first found dataprovider * methods of the first resolver will be returned. {@link ResolveStrategy#AGGREGATE_ALL_MATCHES} will aggregate the * results of all resolvers such that all found dataprovider methods are returned. * * @param context to be used for resolving dataprovider methods * @return the found dataprovider methods or an empty list * @throws NullPointerException if and only if given context is {@code null} */ public static List<Method> findDataProviderMethods(DataProviderResolverContext context) { checkNotNull(context, "'context' must not be null"); List<Method> result = new ArrayList<Method>(); for (Class<? extends DataProviderMethodResolver> resolverClass : context.getResolverClasses()) { DataProviderMethodResolver resolver = newInstance(resolverClass); List<Method> dataProviderMethods = resolver.resolve(context); if (context.getResolveStrategy() == ResolveStrategy.UNTIL_FIRST_MATCH && !dataProviderMethods.isEmpty()) { result.addAll(dataProviderMethods); break; } else if (context.getResolveStrategy() == ResolveStrategy.AGGREGATE_ALL_MATCHES) { result.addAll(dataProviderMethods); } } return result; }
@Test public void testFindDataProviderMethodsShouldReturnFirstMatchEvenIfMutlipleResolverReturnNonEmptyList() { // Given: @SuppressWarnings("unchecked") final List<Class<? extends DataProviderMethodResolver>> resolverClasses = Arrays .<Class<? extends DataProviderMethodResolver>>asList(TestResolver.class, TestResolver.class); when(context.getResolverClasses()).thenReturn(resolverClasses); when(context.getResolveStrategy()).thenReturn(ResolveStrategy.UNTIL_FIRST_MATCH); TestResolver.methods = emptyList(); // When: List<Method> result = DataProviderMethodResolverHelper.findDataProviderMethods(context); // Then: assertThat(result).isEmpty(); assertThat(TestResolver.usedContexts).containsOnly(context, context); }
@Test public void testFindDataProviderMethodsShouldReturnAllMatchesIfMutlipleResolverReturnNonEmptyList() { // Given: @SuppressWarnings("unchecked") final List<Class<? extends DataProviderMethodResolver>> resolverClasses = Arrays .<Class<? extends DataProviderMethodResolver>>asList(TestResolver.class, TestResolver.class); final Method method = Methods.anyMethod(); when(context.getResolverClasses()).thenReturn(resolverClasses); when(context.getResolveStrategy()).thenReturn(ResolveStrategy.AGGREGATE_ALL_MATCHES); TestResolver.methods = asList(method); // When: List<Method> result = DataProviderMethodResolverHelper.findDataProviderMethods(context); // Then: assertThat(result).containsOnly(method, method); assertThat(TestResolver.usedContexts).containsOnly(context, context); }
@Test public void testFindDataProviderMethodsShouldReturnFirstMatchIfMutlipleResolverReturnNonEmptyList() { // Given: @SuppressWarnings("unchecked") final List<Class<? extends DataProviderMethodResolver>> resolverClasses = Arrays .<Class<? extends DataProviderMethodResolver>>asList(TestResolver.class, TestResolver.class); final Method method = Methods.anyMethod(); when(context.getResolverClasses()).thenReturn(resolverClasses); when(context.getResolveStrategy()).thenReturn(ResolveStrategy.UNTIL_FIRST_MATCH); TestResolver.methods = asList(method); // When: List<Method> result = DataProviderMethodResolverHelper.findDataProviderMethods(context); // Then: assertThat(result).containsOnly(method); assertThat(TestResolver.usedContexts).containsOnly(context); }
@Test public void testDataProviderResolverContext() { // When: DataProviderResolverContext result = new DataProviderResolverContext(testMethod, resolverClasses, resolveStrategy, locations, dataProviderAnnotationClass, dataProviderName); // Then: assertThat(result).isNotNull(); assertThat(result.getTestMethod()).isEqualTo(testMethod); assertThat(result.getResolverClasses()).isNotSameAs(resolverClasses).isEqualTo(resolverClasses); assertThat(result.getResolveStrategy()).isEqualTo(resolveStrategy); assertThat(result.getLocations()).isNotSameAs(locations).isEqualTo(locations); assertThat(result.getDataProviderAnnotationClass()).isEqualTo(dataProviderAnnotationClass); assertThat(result.getDataProviderName()).isEqualTo(dataProviderName); }