Hi, I had a look into https://issues.apache.org/jira/browse/EXTVAL-4, which is about testing ExtVal itself using Shale.
Adopting this for testing my own custom ExtVal contraints using Myfaces Test 1.0.0 doesn't work, it seems ExtVal and the mock value expressions do not work together. Or am I missing something? Thanks, Tom --- public class CustomCrossValidationsTest extends AbstractJsfConfigurableMockTestCase { // simple class with 2 string properties private DummyDialogDaten daten; private HtmlInputText input1; private HtmlInputText input2; @Override protected void setUpRenderKit() throws Exception { RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY); renderKit = new ExtValRenderKit(new MockRenderKit()); renderKitFactory.addRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT, renderKit); Renderer renderer = new TextRenderer(); renderKit.addRenderer("javax.faces.Input", "javax.faces.Text", renderer); } @Before @Override public void setUp() throws Exception { super.setUp(); lifecycle.addPhaseListener(new BeanValidationStartupListener()); lifecycle.addPhaseListener(new PropertyValidationModuleStartupListener()); lifecycle.addPhaseListener(new ExtValStartupListener()); daten = new DummyDialogDaten(); HtmlForm form = new HtmlForm(); form.setId("form"); facesContext.getViewRoot().getChildren().add(form); input1 = new HtmlInputText(); input1.setId("input1"); input1.addValidator(new BeanValidator()); form.getChildren().add(input1); input2 = new HtmlInputText(); input2.setId("input2"); input1.addValidator(new BeanValidator()); form.getChildren().add(input2); } @Override public void tearDown() throws Exception { super.tearDown(); daten = null; input1 = null; input2 = null; } @Test public void test() { facesContext.getExternalContext().getRequestMap().put("testBean", daten); // Startup-Listener ausfuehren lifecycle.execute(facesContext); ValueExpression exp = createValueExpression("#{testBean.string1}"); input1.setValueExpression("value", exp); exp = createValueExpression("#{testBean.string2}"); input2.setValueExpression("value", exp); input1.setSubmittedValue(""); input2.setSubmittedValue(""); // validate input1.validate(facesContext); input2.validate(facesContext); // update model since it is necessary for crossval input1.updateModel(facesContext); input2.updateModel(facesContext); processCrossValidation(); } protected ValueExpression createValueExpression(String valueExp) { return new MockValueExpression(valueExp, String.class); // or using which returns MockCompositeValueExpression // ExpressionFactory factory = // facesContext.getApplication().getExpressionFactory(); // return factory.createValueExpression(facesContext.getELContext(), // valueExp, String.class); } protected void processCrossValidation() { new CrossValidationPhaseListener().afterPhase(new PhaseEvent(facesContext, PhaseId.ANY_PHASE, lifecycle)); } } Heute erleben, was morgen Trend wird - das kann man auf der IFA in Berlin. Oder auf arcor.de: Wir stellen Ihnen die wichtigsten News, Trends und Gadgets der IFA vor. Natürlich mit dabei: das brandneue IPTV-Angebot von Vodafone! Alles rund um die Internationale Funkausstellung in Berlin finden Sie hier: http://www.arcor.de/rd/footer.ifa2010