You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by my...@arcor.de on 2010/09/10 10:52:03 UTC

How to test custom ExtVal constrains with new Myfaces Test

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

Re: Re: How to test custom ExtVal constrains with new Myfaces Test

Posted by Gerhard <ge...@gmail.com>.
hi tom,

myfaces-test uses mocks and myfaces-webapptest uses the real jsf impl. of
your choice (+ some other nice features).

regards,
gerhard

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces



2010/9/14 <my...@arcor.de>

> Hi,
>
> what will be the differences between myfaces-webapptest and myfaces-test?
>
> Tom
>
>
> ----- Original Nachricht ----
> Von:     Gerhard <ge...@gmail.com>
> An:      MyFaces Discussion <us...@myfaces.apache.org>
> Datum:   10.09.2010 12:15
> Betreff: Re: How to test custom ExtVal constrains with new Myfaces Test
>
> > hi tom,
> >
> > i haven?t checked the latest impl. of myfaces-test - the original impl.
> was
> > too simple. so i had to fix some parts.
> > for now you could use our internal infrastructure [1]. (if you are using
> > jsf
> > 2, you have to create a stand-alone test-project based on jsf 1.2.)
> >
> > we don't plan to upgrade the internal test infrastructure to jsf 2,
> because
> > we plan to switch to the upcoming myfaces-webapptest.
> > (it allows executing the tests in combination with myfaces-core as well
> as
> > mojarra -> the tests will be more reliable.)
> >
> > regards,
> > gerhard
> >
> > [1]
> >
> https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk/test-mod
> > ules/
> >
> > http://www.irian.at
> >
> > Your JSF powerhouse -
> > JSF Consulting, Development and
> > Courses in English and German
> >
> > Professional Support for Apache MyFaces
> >
> >
> > 2010/9/10 <my...@arcor.de>
> >
> > > 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
> > >
> >
>
> 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
>

Aw: Re: How to test custom ExtVal constrains with new Myfaces Test

Posted by my...@arcor.de.
Hi,

what will be the differences between myfaces-webapptest and myfaces-test?

Tom


----- Original Nachricht ----
Von:     Gerhard <ge...@gmail.com>
An:      MyFaces Discussion <us...@myfaces.apache.org>
Datum:   10.09.2010 12:15
Betreff: Re: How to test custom ExtVal constrains with new Myfaces Test

> hi tom,
> 
> i haven?t checked the latest impl. of myfaces-test - the original impl. was
> too simple. so i had to fix some parts.
> for now you could use our internal infrastructure [1]. (if you are using
> jsf
> 2, you have to create a stand-alone test-project based on jsf 1.2.)
> 
> we don't plan to upgrade the internal test infrastructure to jsf 2, because
> we plan to switch to the upcoming myfaces-webapptest.
> (it allows executing the tests in combination with myfaces-core as well as
> mojarra -> the tests will be more reliable.)
> 
> regards,
> gerhard
> 
> [1]
> https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk/test-mod
> ules/
> 
> http://www.irian.at
> 
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
> 
> Professional Support for Apache MyFaces
> 
> 
> 2010/9/10 <my...@arcor.de>
> 
> > 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
> >
> 

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

Re: How to test custom ExtVal constrains with new Myfaces Test

Posted by Gerhard <ge...@gmail.com>.
hi tom,

i haven’t checked the latest impl. of myfaces-test - the original impl. was
too simple. so i had to fix some parts.
for now you could use our internal infrastructure [1]. (if you are using jsf
2, you have to create a stand-alone test-project based on jsf 1.2.)

we don't plan to upgrade the internal test infrastructure to jsf 2, because
we plan to switch to the upcoming myfaces-webapptest.
(it allows executing the tests in combination with myfaces-core as well as
mojarra -> the tests will be more reliable.)

regards,
gerhard

[1]
https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk/test-modules/

http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces


2010/9/10 <my...@arcor.de>

> 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
>