package br.com.caelum.stella.bean.validation.xml; import java.util.ArrayList; import java.util.Collection; import javax.validation.ConstraintValidatorContext; import junit.framework.Assert; import net.vidageek.mirror.dsl.Mirror; import org.junit.Test; import org.mockito.Mockito; import br.com.caelum.stella.bean.validation.xml.MinElements; import br.com.caelum.stella.bean.validation.xml.logic.StellaMinElementsValidator; @SuppressWarnings("deprecation") public class StellaMinElementsValidatorTest { private ConstraintValidatorContext context = Mockito.mock(ConstraintValidatorContext.class); @Test public void testThatNullIsValid() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); Assert.assertTrue(validator.isValid(null,context)); } @Test(expected = IllegalStateException.class) public void testThatThrowsExceptionIfAnnotatedElementIsNotACollectionOrArray() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.isValid("",context); } @Test public void testThatDoesNotThrowExceptionIfAnnotatedElementIsACollection() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); validator.isValid(new ArrayList<String>(),context); } @Test public void testThatDoesNotThrowsExceptionIfAnnotatedElementIsAnArray() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); validator.isValid(new Integer[10],context); } @Test public void testThatIsInvalidIfElementNumberIsBiggerThanCollectionSize() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); ArrayList<String> list = new ArrayList<String>(); list.add(""); Assert.assertFalse(validator.isValid(list,context)); } @Test public void testThatIsValidIfElementNumberIsSmallerThanCollectionSize() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); ArrayList<String> list = new ArrayList<String>(); list.add(""); list.add(""); list.add(""); list.add(""); Assert.assertTrue(validator.isValid(list,context)); } @Test public void testThatIsValidIfElementNumberIsSmallerThanNonNullArrayElements() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); Integer[] array = new Integer[100]; array[0] = 1; array[1] = 1; array[2] = 1; Assert.assertTrue(validator.isValid(array,context)); } @Test public void testThatIsInvalidIfElementNumberIsSmallerThanNonNullArrayElements() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); Assert.assertFalse(validator.isValid(new Integer[100],context)); } @Test(expected = IllegalStateException.class) public void testThatThrowsExceptionIfObjectIsArrayOfPrimitiveTypes() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c")); validator.isValid(new int[10],context); } @Test(expected = IllegalStateException.class) public void testThatThrowsExceptionIfValueIsNegative() { StellaMinElementsValidator validator = new StellaMinElementsValidator(); validator.initialize(new Mirror().on(AnnotatedModel.class).reflect().annotation(MinElements.class).atField("c2")); } public static class AnnotatedModel { @MinElements(2) public Collection<String> c; @MinElements(-2) public Collection<String> c2; } }