###TODO
###Java
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
@FacesValidator("GreaterThanZeroValidator")
public class GreaterThanZeroValidator implements Validator {
@Override
public void validate(FacesContext facesContext, UIComponent uicComponent, Object value) throws ValidatorException {
try{
if(Integer.parseInt(value.toString()) < 1){
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error.", "Number must be a number greater than 0.");
throw new ValidatorException(message);
}
} catch(NumberFormatException e){
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error.", "Not a number. Must be a number greater than 0.");
throw new ValidatorException(message);
}
}
}
###Primefaces - JSF
<p:inputText id="someId" value="#{someBean.foo}" required="true" maxlength="6">
<f:validator validatorId="GreaterThanZeroValidator" />
</p:inputText>
###Tests
import javax.faces.application.FacesMessage;
import org.powermock.core.classloader.annotations.PrepareForTest;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest({FacesContext.class})
public class GreaterThanZeroValidatorTest {
@Test
public void testValidateNonNumber(){
PowerMockito.mockStatic(FacesContext.class);
FacesContext facesContext = PowerMockito.mock(FacesContext.class);
GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
ValidatorException expectedException = null;
try{
validator.validate(facesContext, null, "");
} catch(ValidatorException exp){
expectedException = exp;
}
assertNotNull(expectedException);
assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
assertEquals("Not a number. Must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
}
@Test
public void testValidateDecimal(){
PowerMockito.mockStatic(FacesContext.class);
FacesContext facesContext = PowerMockito.mock(FacesContext.class);
GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
ValidatorException expectedException = null;
try{
validator.validate(facesContext, null, "1.0");
} catch(ValidatorException exp){
expectedException = exp;
}
assertNotNull(expectedException);
assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
assertEquals("Not a number. Must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
}
@Test
public void testValidateLessThanOne(){
PowerMockito.mockStatic(FacesContext.class);
FacesContext facesContext = PowerMockito.mock(FacesContext.class);
GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
ValidatorException expectedException = null;
try{
validator.validate(facesContext, null, "0");
} catch(ValidatorException exp){
expectedException = exp;
}
assertNotNull(expectedException);
assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
assertEquals("Number must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
}
@Test
public void testValidateNoValidationError(){
PowerMockito.mockStatic(FacesContext.class);
FacesContext facesContext = PowerMockito.mock(FacesContext.class);
GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
validator.validate(facesContext, null, "1");
validator.validate(facesContext, null, "3");
validator.validate(facesContext, null, "5");
}
}