Package org.hibernate.validator.test.internal.metadata.provider

Source Code of org.hibernate.validator.test.internal.metadata.provider.TypeAnnotationAwareMetaDataProviderTest$C

/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.metadata.provider;

import java.lang.annotation.Annotation;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.validation.Valid;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import org.hibernate.validator.internal.engine.DefaultParameterNameProvider;
import org.hibernate.validator.internal.metadata.core.AnnotationProcessingOptionsImpl;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.core.MetaConstraint;
import org.hibernate.validator.internal.metadata.provider.TypeAnnotationAwareMetaDataProvider;
import org.hibernate.validator.internal.metadata.raw.BeanConfiguration;
import org.hibernate.validator.internal.metadata.raw.ConstrainedExecutable;
import org.hibernate.validator.internal.metadata.raw.ConstrainedField;
import org.hibernate.validator.internal.metadata.raw.ConstrainedParameter;
import org.hibernate.validator.testutil.constraints.NotBlankTypeUse;
import org.hibernate.validator.testutil.constraints.NotNullTypeUse;

import static org.fest.assertions.Assertions.assertThat;
import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList;

/**
* Tests for {@link org.hibernate.validator.internal.metadata.provider.TypeAnnotationAwareMetaDataProvider}.
*
* @author Khalid Alqinyah
*/
public class TypeAnnotationAwareMetaDataProviderTest extends AnnotationMetaDataProviderTestBase {

  private TypeAnnotationAwareMetaDataProvider provider;

  @BeforeClass
  public void setup() {
    provider = new TypeAnnotationAwareMetaDataProvider(
        new ConstraintHelper(),
        new DefaultParameterNameProvider(),
        new AnnotationProcessingOptionsImpl()
    );
  }

  @Test
  public void testFieldTypeArgument() throws Exception {
    List<BeanConfiguration<? super A>> beanConfigurations = provider.getBeanConfigurationForHierarchy(
        A.class
    );

    ConstrainedField field = findConstrainedField( beanConfigurations, A.class, "names" );
    assertThat( field.getTypeArgumentsConstraints() ).hasSize( 2 );
    assertThat( getAnnotationsTypes( field.getTypeArgumentsConstraints() ) ).contains(
        NotNullTypeUse.class, NotBlankTypeUse.class
    );
  }

  @Test
  public void testGetterTypeArgument() throws Exception {
    List<BeanConfiguration<? super B>> beanConfigurations = provider.getBeanConfigurationForHierarchy(
        B.class
    );

    ConstrainedExecutable executable = findConstrainedMethod( beanConfigurations, B.class, "getNames" );
    assertThat( executable.getTypeArgumentsConstraints() ).hasSize( 2 );
    assertThat( getAnnotationsTypes( executable.getTypeArgumentsConstraints() ) ).contains(
        NotNullTypeUse.class, NotBlankTypeUse.class
    );
  }

  @Test
  public void testReturnValueTypeArgument() throws Exception {
    List<BeanConfiguration<? super C>> beanConfigurations = provider.getBeanConfigurationForHierarchy(
        C.class
    );

    ConstrainedExecutable executable = findConstrainedMethod( beanConfigurations, C.class, "returnNames" );
    assertThat( executable.getTypeArgumentsConstraints() ).hasSize( 2 );
    assertThat( getAnnotationsTypes( executable.getTypeArgumentsConstraints() ) ).contains(
        NotNullTypeUse.class, NotBlankTypeUse.class
    );
  }

  @Test
  public void testExecutableParameterTypeArgument() throws Exception {
    List<BeanConfiguration<? super D>> beanConfigurations = provider.getBeanConfigurationForHierarchy(
        D.class
    );

    ConstrainedExecutable executable = findConstrainedMethod(
        beanConfigurations,
        D.class,
        "setValues",
        String.class,
        Integer.class,
        List.class
    );
    ConstrainedParameter parameter = executable.getParameterMetaData( 2 );
    assertThat( parameter.getTypeArgumentsConstraints() ).hasSize( 2 );
    assertThat( getAnnotationsTypes( parameter.getTypeArgumentsConstraints() ) ).contains(
        NotNullTypeUse.class, NotBlankTypeUse.class
    );
  }

  @Test
  public void testConstructorParameterTypeArgument() throws Exception {
    List<BeanConfiguration<? super E>> beanConfigurations = provider.getBeanConfigurationForHierarchy(
        E.class
    );

    ConstrainedExecutable executable = findConstrainedConstructor(
        beanConfigurations,
        E.class,
        String.class,
        Integer.class,
        List.class
    );

    ConstrainedParameter parameter = executable.getParameterMetaData( 2 );
    assertThat( parameter.getTypeArgumentsConstraints() ).hasSize( 2 );
    assertThat( getAnnotationsTypes( parameter.getTypeArgumentsConstraints() ) ).contains(
        NotNullTypeUse.class, NotBlankTypeUse.class
    );
  }

  private List<Class<? extends Annotation>> getAnnotationsTypes(Set<MetaConstraint<?>> metaConstraints) {
    List<Class<? extends Annotation>> annotationsTypes = newArrayList();
    Iterator<MetaConstraint<?>> iter = metaConstraints.iterator();
    while ( iter.hasNext() ) {
      annotationsTypes.add( iter.next().getDescriptor().getAnnotation().annotationType() );
    }
    return annotationsTypes;
  }

  static class A {
    @Valid
    List<@NotNullTypeUse @NotBlankTypeUse String> names;
  }

  static class B {
    @Valid
    public List<@NotNullTypeUse @NotBlankTypeUse String> getNames() {
      return Collections.emptyList();
    }
  }

  static class C {
    @Valid
    public List<@NotNullTypeUse @NotBlankTypeUse String> returnNames() {
      return Collections.emptyList();
    }
  }

  static class D {
    public void setValues(String s, Integer i, @Valid List<@NotNullTypeUse @NotBlankTypeUse String> numbers) {

    }
  }

  static class E {
    public E(String s, Integer i, @Valid List<@NotNullTypeUse @NotBlankTypeUse String> numbers) {

    }
  }
}
TOP

Related Classes of org.hibernate.validator.test.internal.metadata.provider.TypeAnnotationAwareMetaDataProviderTest$C

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.