package org.richfaces.javascript.client.validator;
import static org.junit.Assert.assertTrue;
import java.util.Set;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import net.sourceforge.htmlunit.corejs.javascript.JavaScriptException;
import org.ajax4jsf.javascript.JSFunction;
import org.junit.Test;
import org.richfaces.javascript.client.MockTestBase;
import org.richfaces.javascript.client.RunParameters;
import com.gargoylesoftware.htmlunit.ScriptException;
public abstract class BeanValidatorTestBase extends MockTestBase {
protected static final String PROP = "property";
public BeanValidatorTestBase(RunParameters criteria) {
super(criteria);
}
@Test
public void testValidator() throws Exception {
Validator validator = createValidator();
Set<?> constrains = validator.validateValue(getBeanType(), (String) getOptions().get(PROP), criteria.getValue());
try {
validateOnClient(validator);
assertTrue("Bean validator found error for value: " + criteria.getValue() + ", validator options: " + getOptions(),
constrains.isEmpty());
} catch (ScriptException e2) {
// both methods throws exceptions - it's ok.
Throwable cause = e2.getCause();
assertTrue(cause instanceof JavaScriptException);
}
}
protected abstract Class<?> getBeanType();
protected Object validateOnClient(Validator validator) throws ValidationException {
JSFunction clientSideFunction = new JSFunction("RichFaces.csv." + getJavaScriptFunctionName(), criteria.getValue(),
TEST_COMPONENT_ID, getJavaScriptOptions(), getErrorMessage());
return qunit.runScript(clientSideFunction.toScript());
}
protected Validator createValidator() {
return Validation.buildDefaultValidatorFactory().usingContext().getValidator();
}
}