Package org.strecks.validator.internal

Source Code of org.strecks.validator.internal.TestConvertedTypeValidationChecker

package org.strecks.validator.internal;

import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createStrictMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.reset;
import static org.easymock.classextension.EasyMock.verify;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.strecks.exceptions.ApplicationConfigurationException;
import org.strecks.validator.IntegerValidator;
import org.strecks.validator.message.DefaultMessageParameterProvider;
import org.testng.Assert;
import org.testng.annotations.Test;

/**
* @author Phil Zoio
*/
public class TestConvertedTypeValidationChecker
{

  @Test
  public void testIsInterface()
  {

    List<ValidatorWrapper> list = new ArrayList<ValidatorWrapper>();
    ValidatorWrapper v1 = getWrapper(List.class);
    list.add(v1);

    ConvertedTypeValidationChecker checker = new ConvertedTypeValidationChecker(this.getClass(),
        newOrderedProperty(), list);

    try
    {
      checker.checkConvertedValueTypes();
      Assert.fail();
    }
    catch (ApplicationConfigurationException e)
    {
      Assert.assertEquals(e.getMessage(), "Class org.strecks.validator.internal.TestConvertedTypeValidationChecker, " +
          "property prop uses validators for which the most concrete parameterized type java.util.List is an interface. " +
          "It must be an instantiable concrete class");
    }

  }
 
  @Test
  public void testIsAbstract()
  {

    List<ValidatorWrapper> list = new ArrayList<ValidatorWrapper>();
    ValidatorWrapper v1 = getWrapper(Number.class);
    list.add(v1);

    ConvertedTypeValidationChecker checker = new ConvertedTypeValidationChecker(this.getClass(),
        newOrderedProperty(), list);

    try
    {
      checker.checkConvertedValueTypes();
      Assert.fail();
    }
    catch (ApplicationConfigurationException e)
    {
      Assert.assertEquals(e.getMessage(), "Class org.strecks.validator.internal.TestConvertedTypeValidationChecker, " +
          "property prop uses validators for which the most concrete parameterized type java.lang.Number is an abstract class. " +
          "It must be an instantiable concrete class");
    }

  }

  @Test
  public void testSortWrappers()
  {

    List<ValidatorWrapper> list = new ArrayList<ValidatorWrapper>();

    ValidatorWrapper v1 = getWrapper(Integer.class);
    ValidatorWrapper v2 = getWrapper(Number.class);
    ValidatorWrapper v3 = getWrapper(Object.class);

    list.add(v1);
    list.add(v2);
    list.add(v3);

    ConvertedTypeValidationChecker checker = new ConvertedTypeValidationChecker(this.getClass(),
        newOrderedProperty(), list);
    assert checker.checkUsesConvertedValue();

    checker.sortValidators();

    assert v1 == checker.getSortableValidators().iterator().next().getWrapper();

    // now check that sort applies in reverse
    list.clear();

    list.add(v2);
    list.add(v3);
    list.add(v1);

    checker = new ConvertedTypeValidationChecker(this.getClass(), newOrderedProperty(), list);
    checker.sortValidators();

    assert v1 == checker.getSortableValidators().iterator().next().getWrapper();

    // check all are assignable
    checker.checkAllAreAssignable();

    checker.setConverterType();

    Assert.assertEquals(Integer.class, checker.getConverterType());

  }

  @Test
  public void testNotTypeCompatible()
  {

    List<ValidatorWrapper> list = new ArrayList<ValidatorWrapper>();

    ValidatorWrapper v1 = getWrapper(Integer.class);
    ValidatorWrapper v2 = getWrapper(String.class);
    ValidatorWrapper v3 = getWrapper(Object.class);

    list.add(v1);
    list.add(v2);
    list.add(v3);

    ConvertedTypeValidationChecker checker = new ConvertedTypeValidationChecker(this.getClass(),
        newOrderedProperty(), list);
    assert checker.checkUsesConvertedValue();

    checker.sortValidators();

    assert v1 == checker.getSortableValidators().iterator().next().getWrapper();

    // now check that sort applies in reverse
    list.clear();

    list.add(v2);
    list.add(v3);
    list.add(v1);

    checker = new ConvertedTypeValidationChecker(this.getClass(), newOrderedProperty(), list);
    checker.sortValidators();

    assert v2 == checker.getSortableValidators().iterator().next().getWrapper();

    // check all are assignable
    try
    {
      checker.checkAllAreAssignable();
      Assert.fail();
    }
    catch (ApplicationConfigurationException e)
    {
      Assert
          .assertEquals(
              e.getMessage(),
              "Class org.strecks.validator.internal.TestConvertedTypeValidationChecker, "
                  + "property prop uses validators "
                  + "with parameterized types java.lang.String and java.lang.Integer which are not type compatible");
    }

  }

  private ValidatorWrapper getWrapper(Class<?> type)
  {
    DefaultMessageParameterProvider provider = new DefaultMessageParameterProvider();
    ValidatorWrapper wrapper = new ValidatorWrapper("key1", 20, Collections.emptyList(), new IntegerValidator(),
        this.getClass().getMethods()[0], provider, true, type);
    return wrapper;
  }

  @Test
  public void testUsesConvertedValue()
  {

    ValidatorWrapper wrapper1 = createStrictMock(ValidatorWrapper.class);
    ValidatorWrapper wrapper2 = createStrictMock(ValidatorWrapper.class);
    ValidatorWrapper wrapper3 = createStrictMock(ValidatorWrapper.class);
    List<ValidatorWrapper> list = new ArrayList<ValidatorWrapper>();
    list.add(wrapper1);
    list.add(wrapper2);
    list.add(wrapper3);

    expect(wrapper1.getUsesConvertedValue()).andReturn(false);
    expect(wrapper2.getUsesConvertedValue()).andReturn(true);

    for (ValidatorWrapper wrapper : list)
    {
      replay(wrapper);
    }

    ConvertedTypeValidationChecker checker = new ConvertedTypeValidationChecker(this.getClass(),
        newOrderedProperty(), list);
    assert checker.checkUsesConvertedValue();

    for (ValidatorWrapper wrapper : list)
    {
      verify(wrapper);
    }

    for (ValidatorWrapper wrapper : list)
    {
      reset(wrapper);
    }

    expect(wrapper1.getUsesConvertedValue()).andReturn(false);
    expect(wrapper2.getUsesConvertedValue()).andReturn(false);
    expect(wrapper3.getUsesConvertedValue()).andReturn(false);

    for (ValidatorWrapper wrapper : list)
    {
      replay(wrapper);
    }

    assert !checker.checkUsesConvertedValue();

    for (ValidatorWrapper wrapper : list)
    {
      verify(wrapper);
    }

    for (ValidatorWrapper wrapper : list)
    {
      reset(wrapper);
    }
  }

  private OrderedProperty newOrderedProperty()
  {
    return new OrderedProperty("prop", 1);
  }
}
TOP

Related Classes of org.strecks.validator.internal.TestConvertedTypeValidationChecker

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.