You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Luke Ma <lu...@lukema.net> on 2008/01/15 04:53:13 UTC

Wicket tester: executeAjaxEvent broken?

There might be a bug with executeAjaxEvent in WicketTester: everytime I use
it to fire off an ajax event in a form, page redirection goes nuts.  For
example, the following test code:

        Public class MyTestCase extends TestCase {
        final MyWicketTester tester = new MyWicketTester(application);
        ...
        ...
        ...
        public void testHomePage() {
	tester.startPage(HomePage.class);
	
	FormTester form = tester.newFormTester("inputForm");
	form.setValue("text1", "Testing text");
	tester.executeAjaxEvent("inputForm:text1", "onchange");
	form.submit();
	
[0]    tester.assertRenderedPage(OtherPage.class);
         }

will fail at [0] with "expected OtherPage.class but got HomePage.class". 
If, on the other hand, I remove the executeAjaxEvent call, everything works
fine.  The page code looks like this:
        private class HomePage extends WebPage
        
        public HomePage()  {
                 add(new InputForm("inputForm"));
        }
        ...            
        ...
        ...
        private class InputForm extends Form {
        ...
        ...
        ...
	text1 = new TextField("text1", new PropertyModel(this, string1));
	text1.add(new OnChangeAjaxBehavior() {

		@Override
		protected void onUpdate(final AjaxRequestTarget target) {
			System.out.println("Text1 onChangeAjaxBehavior fired");
			
			string2 = string1;
			target.addComponent(text2);
		}
	});
	add(text1);
	
	text2 = new TextField("text2", new PropertyModel(this, string2));
	text2.setOutputMarkupId(true);
	add(text2);
        ...
        ...
        ...
	public final void onSubmit()
	{
		setResponsePage(OtherPage.class);
	}
        ...
        ...
        ...

I've checked for validation errors, errors in my code, tried using behaviors
instead, tried firing the ajax event off multiple times, all to no avail. 
Is executeAjaxEvent broken?  

Luke

-- 
View this message in context: http://www.nabble.com/Wicket-tester%3A-executeAjaxEvent-broken--tp14828557p14828557.html
Sent from the Wicket - Dev mailing list archive at Nabble.com.


Re: Wicket tester: executeAjaxEvent broken?

Posted by Nino Saturnino Martinez Vazquez Wael <ni...@jayway.dk>.
Im not sure, but i've been looking into the testing part of wicket 
lately. I think its something about flows. If you start a formtester 
youre in a flow, and by calling executeAjaxEvent in the middle you break 
it somehow. As been discussed testing part of wicket should have a 
overhaul. I guess having a formtester which could detect ajax behaviors 
and fire them appropriately would be a great improvement..


regards Nino

Luke Ma wrote:
> Nino,
>
> Thanks!  That did the trick.  
>
> Do you know why formTester and executeAjaxEvent can't be used simultaneously
> right now?  Unless I missed it, I don't think I saw anything in the docs
> that said that behavior shouldn't work.  I did notice that while setValue +
> executeAjaxEvent would work in terms of firing off the form, form.submit and
> tester.submitForm had different results: if I did setValue on my formTester
> and then did tester.submitForm, none of the values got set.  It seems to me
> that formtester should work with executeAjaxEvent, or that it should be
> documented otherwise?
>
> Luke
>
>
> Nino.Martinez wrote:
>   
>> Like this:
>>
>> Public class MyTestCase extends TestCase {
>>         final MyWicketTester tester = new MyWicketTester(application);
>>         ...
>>         ...
>>         ...
>>         public void testHomePage() {
>>     tester.startPage(HomePage.class);
>>  
>>     TextField tf=getComponentFromLastRenderedPage("inputForm:text1");
>>     tf.getModel().setObject("Testing text");
>>     tester.executeAjaxEvent("inputForm:text1", "onchange");
>>    
>>     tester.Submitform("inputForm");
>>
>> Not completely sure if this works, but should be something like it.
>>   
>> Nino Saturnino Martinez Vazquez Wael wrote:
>>     
>>> Hi Luke
>>>
>>> This is not the way it works. Currently cant do that combination.. You 
>>> have to run with form tester only or executeAjaxEvent only..
>>>
>>> What you might want todo are set the models instead and fire the 
>>> ajaxevent then..
>>>
>>> regards Nino
>>>
>>> Luke Ma wrote:
>>>       
>>>> There might be a bug with executeAjaxEvent in WicketTester: everytime 
>>>> I use
>>>> it to fire off an ajax event in a form, page redirection goes nuts.  For
>>>> example, the following test code:
>>>>
>>>>         Public class MyTestCase extends TestCase {
>>>>         final MyWicketTester tester = new MyWicketTester(application);
>>>>         ...
>>>>         ...
>>>>         ...
>>>>         public void testHomePage() {
>>>>     tester.startPage(HomePage.class);
>>>>     
>>>>     FormTester form = tester.newFormTester("inputForm");
>>>>     form.setValue("text1", "Testing text");
>>>>     tester.executeAjaxEvent("inputForm:text1", "onchange");
>>>>     form.submit();
>>>>     
>>>> [0]    tester.assertRenderedPage(OtherPage.class);
>>>>          }
>>>>
>>>> will fail at [0] with "expected OtherPage.class but got 
>>>> HomePage.class". If, on the other hand, I remove the executeAjaxEvent 
>>>> call, everything works
>>>> fine.  The page code looks like this:
>>>>         private class HomePage extends WebPage
>>>>                 public HomePage()  {
>>>>                  add(new InputForm("inputForm"));
>>>>         }
>>>>         ...                    ...
>>>>         ...
>>>>         private class InputForm extends Form {
>>>>         ...
>>>>         ...
>>>>         ...
>>>>     text1 = new TextField("text1", new PropertyModel(this, string1));
>>>>     text1.add(new OnChangeAjaxBehavior() {
>>>>
>>>>         @Override
>>>>         protected void onUpdate(final AjaxRequestTarget target) {
>>>>             System.out.println("Text1 onChangeAjaxBehavior fired");
>>>>            
>>>>             string2 = string1;
>>>>             target.addComponent(text2);
>>>>         }
>>>>     });
>>>>     add(text1);
>>>>     
>>>>     text2 = new TextField("text2", new PropertyModel(this, string2));
>>>>     text2.setOutputMarkupId(true);
>>>>     add(text2);
>>>>         ...
>>>>         ...
>>>>         ...
>>>>     public final void onSubmit()
>>>>     {
>>>>         setResponsePage(OtherPage.class);
>>>>     }
>>>>         ...
>>>>         ...
>>>>         ...
>>>>
>>>> I've checked for validation errors, errors in my code, tried using 
>>>> behaviors
>>>> instead, tried firing the ajax event off multiple times, all to no 
>>>> avail. Is executeAjaxEvent broken? 
>>>> Luke
>>>>
>>>>   
>>>>         
>> -- 
>> Nino Martinez Wael
>> Java Specialist @ Jayway DK
>> http://www.jayway.dk
>> +45 2936 7684
>>
>>
>>
>>     
>
>   

-- 
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684


Re: Wicket tester: executeAjaxEvent broken?

Posted by Luke Ma <lu...@lukema.net>.
Nino,

Thanks!  That did the trick.  

Do you know why formTester and executeAjaxEvent can't be used simultaneously
right now?  Unless I missed it, I don't think I saw anything in the docs
that said that behavior shouldn't work.  I did notice that while setValue +
executeAjaxEvent would work in terms of firing off the form, form.submit and
tester.submitForm had different results: if I did setValue on my formTester
and then did tester.submitForm, none of the values got set.  It seems to me
that formtester should work with executeAjaxEvent, or that it should be
documented otherwise?

Luke


Nino.Martinez wrote:
> 
> Like this:
> 
> Public class MyTestCase extends TestCase {
>         final MyWicketTester tester = new MyWicketTester(application);
>         ...
>         ...
>         ...
>         public void testHomePage() {
>     tester.startPage(HomePage.class);
>  
>     TextField tf=getComponentFromLastRenderedPage("inputForm:text1");
>     tf.getModel().setObject("Testing text");
>     tester.executeAjaxEvent("inputForm:text1", "onchange");
>    
>     tester.Submitform("inputForm");
> 
> Not completely sure if this works, but should be something like it.
>   
> Nino Saturnino Martinez Vazquez Wael wrote:
>> Hi Luke
>>
>> This is not the way it works. Currently cant do that combination.. You 
>> have to run with form tester only or executeAjaxEvent only..
>>
>> What you might want todo are set the models instead and fire the 
>> ajaxevent then..
>>
>> regards Nino
>>
>> Luke Ma wrote:
>>> There might be a bug with executeAjaxEvent in WicketTester: everytime 
>>> I use
>>> it to fire off an ajax event in a form, page redirection goes nuts.  For
>>> example, the following test code:
>>>
>>>         Public class MyTestCase extends TestCase {
>>>         final MyWicketTester tester = new MyWicketTester(application);
>>>         ...
>>>         ...
>>>         ...
>>>         public void testHomePage() {
>>>     tester.startPage(HomePage.class);
>>>     
>>>     FormTester form = tester.newFormTester("inputForm");
>>>     form.setValue("text1", "Testing text");
>>>     tester.executeAjaxEvent("inputForm:text1", "onchange");
>>>     form.submit();
>>>     
>>> [0]    tester.assertRenderedPage(OtherPage.class);
>>>          }
>>>
>>> will fail at [0] with "expected OtherPage.class but got 
>>> HomePage.class". If, on the other hand, I remove the executeAjaxEvent 
>>> call, everything works
>>> fine.  The page code looks like this:
>>>         private class HomePage extends WebPage
>>>                 public HomePage()  {
>>>                  add(new InputForm("inputForm"));
>>>         }
>>>         ...                    ...
>>>         ...
>>>         private class InputForm extends Form {
>>>         ...
>>>         ...
>>>         ...
>>>     text1 = new TextField("text1", new PropertyModel(this, string1));
>>>     text1.add(new OnChangeAjaxBehavior() {
>>>
>>>         @Override
>>>         protected void onUpdate(final AjaxRequestTarget target) {
>>>             System.out.println("Text1 onChangeAjaxBehavior fired");
>>>            
>>>             string2 = string1;
>>>             target.addComponent(text2);
>>>         }
>>>     });
>>>     add(text1);
>>>     
>>>     text2 = new TextField("text2", new PropertyModel(this, string2));
>>>     text2.setOutputMarkupId(true);
>>>     add(text2);
>>>         ...
>>>         ...
>>>         ...
>>>     public final void onSubmit()
>>>     {
>>>         setResponsePage(OtherPage.class);
>>>     }
>>>         ...
>>>         ...
>>>         ...
>>>
>>> I've checked for validation errors, errors in my code, tried using 
>>> behaviors
>>> instead, tried firing the ajax event off multiple times, all to no 
>>> avail. Is executeAjaxEvent broken? 
>>> Luke
>>>
>>>   
>>
> 
> -- 
> Nino Martinez Wael
> Java Specialist @ Jayway DK
> http://www.jayway.dk
> +45 2936 7684
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Wicket-tester%3A-executeAjaxEvent-broken--tp14828557p14842645.html
Sent from the Wicket - Dev mailing list archive at Nabble.com.


Re: Wicket tester: executeAjaxEvent broken?

Posted by Nino Saturnino Martinez Vazquez Wael <ni...@jayway.dk>.
Like this:

Public class MyTestCase extends TestCase {
        final MyWicketTester tester = new MyWicketTester(application);
        ...
        ...
        ...
        public void testHomePage() {
    tester.startPage(HomePage.class);
 
    TextField tf=getComponentFromLastRenderedPage("inputForm:text1");
    tf.getModel().setObject("Testing text");
    tester.executeAjaxEvent("inputForm:text1", "onchange");
   
    tester.Submitform("inputForm");

Not completely sure if this works, but should be something like it.
  
Nino Saturnino Martinez Vazquez Wael wrote:
> Hi Luke
>
> This is not the way it works. Currently cant do that combination.. You 
> have to run with form tester only or executeAjaxEvent only..
>
> What you might want todo are set the models instead and fire the 
> ajaxevent then..
>
> regards Nino
>
> Luke Ma wrote:
>> There might be a bug with executeAjaxEvent in WicketTester: everytime 
>> I use
>> it to fire off an ajax event in a form, page redirection goes nuts.  For
>> example, the following test code:
>>
>>         Public class MyTestCase extends TestCase {
>>         final MyWicketTester tester = new MyWicketTester(application);
>>         ...
>>         ...
>>         ...
>>         public void testHomePage() {
>>     tester.startPage(HomePage.class);
>>     
>>     FormTester form = tester.newFormTester("inputForm");
>>     form.setValue("text1", "Testing text");
>>     tester.executeAjaxEvent("inputForm:text1", "onchange");
>>     form.submit();
>>     
>> [0]    tester.assertRenderedPage(OtherPage.class);
>>          }
>>
>> will fail at [0] with "expected OtherPage.class but got 
>> HomePage.class". If, on the other hand, I remove the executeAjaxEvent 
>> call, everything works
>> fine.  The page code looks like this:
>>         private class HomePage extends WebPage
>>                 public HomePage()  {
>>                  add(new InputForm("inputForm"));
>>         }
>>         ...                    ...
>>         ...
>>         private class InputForm extends Form {
>>         ...
>>         ...
>>         ...
>>     text1 = new TextField("text1", new PropertyModel(this, string1));
>>     text1.add(new OnChangeAjaxBehavior() {
>>
>>         @Override
>>         protected void onUpdate(final AjaxRequestTarget target) {
>>             System.out.println("Text1 onChangeAjaxBehavior fired");
>>            
>>             string2 = string1;
>>             target.addComponent(text2);
>>         }
>>     });
>>     add(text1);
>>     
>>     text2 = new TextField("text2", new PropertyModel(this, string2));
>>     text2.setOutputMarkupId(true);
>>     add(text2);
>>         ...
>>         ...
>>         ...
>>     public final void onSubmit()
>>     {
>>         setResponsePage(OtherPage.class);
>>     }
>>         ...
>>         ...
>>         ...
>>
>> I've checked for validation errors, errors in my code, tried using 
>> behaviors
>> instead, tried firing the ajax event off multiple times, all to no 
>> avail. Is executeAjaxEvent broken? 
>> Luke
>>
>>   
>

-- 
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684


Re: Wicket tester: executeAjaxEvent broken?

Posted by Nino Saturnino Martinez Vazquez Wael <ni...@jayway.dk>.
Hi Luke

This is not the way it works. Currently cant do that combination.. You 
have to run with form tester only or executeAjaxEvent only..

What you might want todo are set the models instead and fire the 
ajaxevent then..

regards Nino

Luke Ma wrote:
> There might be a bug with executeAjaxEvent in WicketTester: everytime I use
> it to fire off an ajax event in a form, page redirection goes nuts.  For
> example, the following test code:
>
>         Public class MyTestCase extends TestCase {
>         final MyWicketTester tester = new MyWicketTester(application);
>         ...
>         ...
>         ...
>         public void testHomePage() {
> 	tester.startPage(HomePage.class);
> 	
> 	FormTester form = tester.newFormTester("inputForm");
> 	form.setValue("text1", "Testing text");
> 	tester.executeAjaxEvent("inputForm:text1", "onchange");
> 	form.submit();
> 	
> [0]    tester.assertRenderedPage(OtherPage.class);
>          }
>
> will fail at [0] with "expected OtherPage.class but got HomePage.class". 
> If, on the other hand, I remove the executeAjaxEvent call, everything works
> fine.  The page code looks like this:
>         private class HomePage extends WebPage
>         
>         public HomePage()  {
>                  add(new InputForm("inputForm"));
>         }
>         ...            
>         ...
>         ...
>         private class InputForm extends Form {
>         ...
>         ...
>         ...
> 	text1 = new TextField("text1", new PropertyModel(this, string1));
> 	text1.add(new OnChangeAjaxBehavior() {
>
> 		@Override
> 		protected void onUpdate(final AjaxRequestTarget target) {
> 			System.out.println("Text1 onChangeAjaxBehavior fired");
> 			
> 			string2 = string1;
> 			target.addComponent(text2);
> 		}
> 	});
> 	add(text1);
> 	
> 	text2 = new TextField("text2", new PropertyModel(this, string2));
> 	text2.setOutputMarkupId(true);
> 	add(text2);
>         ...
>         ...
>         ...
> 	public final void onSubmit()
> 	{
> 		setResponsePage(OtherPage.class);
> 	}
>         ...
>         ...
>         ...
>
> I've checked for validation errors, errors in my code, tried using behaviors
> instead, tried firing the ajax event off multiple times, all to no avail. 
> Is executeAjaxEvent broken?  
>
> Luke
>
>   

-- 
Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684