@Test
 public void resolveSerializationBeanListOneFieldRequired() throws Exception {
   // given
   Field listField = getField("beanCollectionFieldRequired");
   Type listType = listField.getGenericType();
   // when
   SerializationInput input =
       new SerializationInputResolver()
           .resolveInputInformation(listField.getAnnotation(Bind.class));
   PropertySerialization listSerialization =
       serializationResolver.resolveSerialization(listType, input);
   PropertySerialization listElementSerialization =
       listSerialization.getPropertySerialization(
           PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);
   PropertySerialization beanElementSerialization =
       listElementSerialization.getPropertySerialization("simpleField");
   // then
   assertNotNull(listSerialization);
   assertNotNull(listElementSerialization);
   assertNotNull(beanElementSerialization);
   assertEquals(
       IntegerValueSerializer.class, beanElementSerialization.getValueSerializer().getClass());
   assertEquals(VerySimpleMockBean.class, listElementSerialization.getPropertyClass());
   assertEquals(int.class, beanElementSerialization.getPropertyClass());
   assertTrue(beanElementSerialization.getConstraints().isRequired());
 }
  @Test
  public void resolveDefaultSerializationRawTypeFirstTime() {
    // when
    PropertySerialization defaultRawTypeSerialization =
        serializationResolver.resolveDefaultSerialization(String.class);

    // then
    assertEquals(String.class, defaultRawTypeSerialization.getPropertyClass());
    assertEquals(
        StringValueSerializer.class, defaultRawTypeSerialization.getValueSerializer().getClass());
  }
  @Test
  public void resolveDefaultSerializationParametrizedBean() throws Exception {
    // given
    Type type = getFieldType("parametrizedBean");

    // when
    PropertySerialization beanSerialization =
        serializationResolver.resolveDefaultSerialization(type);
    PropertySerialization propertySerialization =
        beanSerialization.getPropertySerialization("parametrizedField1");

    // then
    assertNotNull(beanSerialization);
    assertNotNull(propertySerialization);
    assertEquals(VerySimpleMockBean.class, propertySerialization.getPropertyClass());
  }
 @Test
 public void resolveDefaultSerializationRawArrayType() throws Exception {
   // given
   rawArray = new Long[3];
   Type arrayType = getFieldType("rawArray");
   // when
   PropertySerialization listSerialization =
       serializationResolver.resolveDefaultSerialization(arrayType);
   PropertySerialization listElementSerialization =
       listSerialization.getPropertySerialization(
           PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);
   // then
   assertNotNull(listElementSerialization);
   assertEquals(
       LongValueSerializer.class, listElementSerialization.getValueSerializer().getClass());
 }
 @Test
 public void resolveDefaultSerializationRawMapType() throws Exception {
   // given
   rawMap = new HashMap<String, Date>();
   Type mapType = getFieldType("rawMap");
   // when
   PropertySerialization listSerialization =
       serializationResolver.resolveDefaultSerialization(mapType);
   PropertySerialization listElementSerialization =
       listSerialization.getPropertySerialization(
           PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);
   // then
   assertNotNull(listElementSerialization);
   assertEquals(
       DateValueSerializer.class, listElementSerialization.getValueSerializer().getClass());
 }
 @Test
 public void resolveDefaultSerializationCollectionType() throws Exception {
   // given
   rawList = new ArrayList<BigInteger>();
   Type listType = getFieldType("rawList");
   // when
   PropertySerialization listSerialization =
       serializationResolver.resolveDefaultSerialization(listType);
   PropertySerialization listElementSerialization =
       listSerialization.getPropertySerialization(
           PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);
   // then
   assertNotNull(listElementSerialization);
   assertEquals(
       BigIntegerValueSerializer.class, listElementSerialization.getValueSerializer().getClass());
 }
 @Test
 public void resolveSerializationRawRequired() throws Exception {
   // given
   Field beanField = getField("rawRequired");
   Type beanType = beanField.getGenericType();
   // when
   SerializationInput input =
       new SerializationInputResolver()
           .resolveInputInformation(beanField.getAnnotation(Bind.class));
   PropertySerialization rawSerialization =
       serializationResolver.resolveSerialization(beanType, input);
   // then
   assertNotNull(rawSerialization);
   assertEquals(DoubleValueSerializer.class, rawSerialization.getValueSerializer().getClass());
   assertEquals(double.class, rawSerialization.getPropertyClass());
   assertTrue(rawSerialization.getConstraints().isRequired());
 }
  @Test
  public void resolveDefaultSerializationBeanType() {
    // when
    PropertySerialization beanSerialization =
        serializationResolver.resolveDefaultSerialization(MockBean.class);

    // then
    assertEquals(MockBean.class, beanSerialization.getPropertyClass());
    assertNotNull(beanSerialization.getPropertySerialization(MockBean.RAW_DOUBLE_PROPERTY));
    assertEquals(
        DoubleValueSerializer.class,
        beanSerialization
            .getPropertySerialization(MockBean.RAW_DOUBLE_PROPERTY)
            .getValueSerializer()
            .getClass());
    assertEquals(MockBean.FIELDS_COUNT, beanSerialization.getChildrenProperties().size());
  }
  @Test
  public void resolveDefaultSerializationParametrizedBeanArray() throws Exception {
    // given
    Type type = getFieldType("parametrizedBean");

    // when
    PropertySerialization beanSerialization =
        serializationResolver.resolveDefaultSerialization(type);
    PropertySerialization propertySerialization =
        beanSerialization.getPropertySerialization("parametrizedArray");
    PropertySerialization listElementSerialization =
        propertySerialization.getPropertySerialization(
            PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);

    // then
    assertNotNull(beanSerialization);
    assertNotNull(propertySerialization);
    assertEquals(PropertyType.ARRAY, propertySerialization.getPropertyType());
    assertEquals(VerySimpleMockBean.class, listElementSerialization.getPropertyClass());
  }
 @Test
 public void resolveDefaultSerializationBeanArrayType() throws Exception {
   // given
   beanArray = new MockBean[3];
   Type arrayType = getFieldType("beanArray");
   // when
   PropertySerialization listSerialization =
       serializationResolver.resolveDefaultSerialization(arrayType);
   PropertySerialization listElementSerialization =
       listSerialization.getPropertySerialization(
           PropertySerialization.CONTAINER_ELEMENT_PROPERTY_NAME);
   // then
   assertNotNull(listElementSerialization);
   assertNull(listElementSerialization.getValueSerializer());
   assertEquals(MockBean.class, listElementSerialization.getPropertyClass());
   assertEquals(MockBean.FIELDS_COUNT, listElementSerialization.getChildrenProperties().size());
 }
 @Test
 public void resolveSerializationBeanOneFieldRequired() throws Exception {
   // given
   Field beanField = getField("beanFieldRequired");
   Type beanType = beanField.getGenericType();
   // when
   SerializationInput input =
       new SerializationInputResolver()
           .resolveInputInformation(beanField.getAnnotation(Bind.class));
   PropertySerialization beanSerialization =
       serializationResolver.resolveSerialization(beanType, input);
   PropertySerialization beanElementSerialization =
       beanSerialization.getPropertySerialization("simpleField");
   // then
   assertNotNull(beanElementSerialization);
   assertEquals(
       IntegerValueSerializer.class, beanElementSerialization.getValueSerializer().getClass());
   assertEquals(VerySimpleMockBean.class, beanSerialization.getPropertyClass());
   assertEquals(int.class, beanElementSerialization.getPropertyClass());
   assertTrue(beanElementSerialization.getConstraints().isRequired());
 }