package org.exolab.castor.xml.validators;

import org.castor.xml.BackwardCompatibilityContext;
import org.exolab.castor.xml.ValidationContext;
import org.exolab.castor.xml.ValidationException;
import org.junit.Before;
import org.junit.Test;

public class IntegerValidatorTest {

  private ValidationContext context = null;

  @Before
  public void createValidationContext() {
    context = new ValidationContext();
    context.setInternalContext(new BackwardCompatibilityContext());
  }

  @Test(expected = ValidationException.class)
  public void testFixedValueWrong() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setFixed(10);
    validator.validate(20, context);
  }

  @Test
  public void testFixedValue() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setFixed(10);
    validator.validate(10, context);
  }

  @Test
  public void testMinValue() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setMinExclusive(10);
    validator.validate(11, context);
  }

  @Test(expected = ValidationException.class)
  public void testMinValueWrong() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setMinExclusive(10);
    validator.validate(10, context);
  }

  @Test
  public void testMaxValue() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setMaxExclusive(10);
    validator.validate(9, context);
  }

  @Test(expected = ValidationException.class)
  public void testMaxValueWrong() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setMaxExclusive(10);
    validator.validate(10, context);
  }

  @Test
  public void testDigits() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setTotalDigits(3);
    validator.validate(9, context);
  }

  @Test(expected = ValidationException.class)
  public void testDigitsWrong() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.setTotalDigits(2);
    validator.validate(100, context);
  }

  @Test(expected = ValidationException.class)
  public void testNullValue() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.validate((Object) null, context);
  }

  @Test(expected = ValidationException.class)
  public void testWrongClass() throws ValidationException {
    IntegerValidator validator = new IntegerValidator();
    validator.validate((Object) 12.34, context);
  }
}
