Should we expect empty PageParameters for pages that have such a constructor yet no parameters are available?

2014-01-15 Thread Paul Bors
Suppose I have a page with the default constructor and with the page
parameter constructor.

Should my page parameter constructor be called with an empty not null
PageParameter instance when no parameters are provided? Shouldn't the
default constructor be used instead?

What about in unit tests?
I've seen the tester use the page parameter constructor and pass it a
reference to an empty PageParameters when I invoke
tester.startPage(MyPage.class, null).


Re: Should we expect empty PageParameters for pages that have such a constructor yet no parameters are available?

2014-01-15 Thread Paul Bors
Btw, I just noticed that adding this constructor eliminates the problem:
public MyPage() {
this(null);
}

So I take it Wicket tries to build the page via the Page(PageParameters)
but instead of using a null reference to the PageParameters it builds an
object without any parameters in it.

If the default constructor is added, then it can invoke the custom
PageParameters constructor with the null reference.
I don't recall this behavior. Has this changed recently?


On Wed, Jan 15, 2014 at 1:45 PM, Paul Bors p...@bors.ws wrote:

 Suppose I have a page with the default constructor and with the page
 parameter constructor.

 Should my page parameter constructor be called with an empty not null
 PageParameter instance when no parameters are provided? Shouldn't the
 default constructor be used instead?

 What about in unit tests?
 I've seen the tester use the page parameter constructor and pass it a
 reference to an empty PageParameters when I invoke
 tester.startPage(MyPage.class, null).



Re: Should we expect empty PageParameters for pages that have such a constructor yet no parameters are available?

2014-01-15 Thread Martin Grigorov
AFAIR if there are no request parameters then Wicket first uses the Java
default constructor (no parameters) if available.
If there is no such constructor then Wicket constructs an empty
PageParameters and uses it for the constructor with PageParameters.
If none are available then an error is thrown.

Consult with DefaultPageFactory.java

Martin Grigorov
Wicket Training and Consulting


On Wed, Jan 15, 2014 at 8:50 PM, Paul Bors p...@bors.ws wrote:

 Btw, I just noticed that adding this constructor eliminates the problem:
 public MyPage() {
 this(null);
 }

 So I take it Wicket tries to build the page via the Page(PageParameters)
 but instead of using a null reference to the PageParameters it builds an
 object without any parameters in it.

 If the default constructor is added, then it can invoke the custom
 PageParameters constructor with the null reference.
 I don't recall this behavior. Has this changed recently?


 On Wed, Jan 15, 2014 at 1:45 PM, Paul Bors p...@bors.ws wrote:

  Suppose I have a page with the default constructor and with the page
  parameter constructor.
 
  Should my page parameter constructor be called with an empty not null
  PageParameter instance when no parameters are provided? Shouldn't the
  default constructor be used instead?
 
  What about in unit tests?
  I've seen the tester use the page parameter constructor and pass it a
  reference to an empty PageParameters when I invoke
  tester.startPage(MyPage.class, null).
 



Re: Should we expect empty PageParameters for pages that have such a constructor yet no parameters are available?

2014-01-15 Thread Paul Bors
Awsome, thanks!

One last question, in my tests I keep a collection of page parameters for
my pages.
I've noticed at some point wicket tester (or deeper in the framework, prob.
in the page factory) that the PageParameter instance used had the
parameters combined from different instances. That scared me a bit.

ie: I have
customConstructors = new HashMapClass? extends AdminPage,
PageParameters();
customConstructors.put(PageA.class, new PageParameters().set(pageID,
-1));
customConstructors.put(PageB.class, new PageParameters().set(sessionID,
-2));

and then later when running the test:
PageParameters pageParameters = customConstructors.get(pageClass);
if(pageParameters != null) {
log.info(Running  + pageTest.getTestName() +  for  +
pageClass.getName() +  with pageParameters of  + pageParameters);
pageTest.runTest(getTester(), pageClass,
customConstructors.get(pageClass));
}

Above log stamenent would print correct, but when in the page constructor
both pageID AND sessionID are present althrough those are 2 different
instances of PageParameters.

Should I dig more into that?
To me that sounds like a bug :(




On Wed, Jan 15, 2014 at 2:24 PM, Martin Grigorov mgrigo...@apache.orgwrote:

 AFAIR if there are no request parameters then Wicket first uses the Java
 default constructor (no parameters) if available.
 If there is no such constructor then Wicket constructs an empty
 PageParameters and uses it for the constructor with PageParameters.
 If none are available then an error is thrown.

 Consult with DefaultPageFactory.java

 Martin Grigorov
 Wicket Training and Consulting


 On Wed, Jan 15, 2014 at 8:50 PM, Paul Bors p...@bors.ws wrote:

  Btw, I just noticed that adding this constructor eliminates the problem:
  public MyPage() {
  this(null);
  }
 
  So I take it Wicket tries to build the page via the Page(PageParameters)
  but instead of using a null reference to the PageParameters it builds an
  object without any parameters in it.
 
  If the default constructor is added, then it can invoke the custom
  PageParameters constructor with the null reference.
  I don't recall this behavior. Has this changed recently?
 
 
  On Wed, Jan 15, 2014 at 1:45 PM, Paul Bors p...@bors.ws wrote:
 
   Suppose I have a page with the default constructor and with the page
   parameter constructor.
  
   Should my page parameter constructor be called with an empty not null
   PageParameter instance when no parameters are provided? Shouldn't the
   default constructor be used instead?
  
   What about in unit tests?
   I've seen the tester use the page parameter constructor and pass it a
   reference to an empty PageParameters when I invoke
   tester.startPage(MyPage.class, null).
  
 



Re: Should we expect empty PageParameters for pages that have such a constructor yet no parameters are available?

2014-01-15 Thread Martin Grigorov
On Thu, Jan 16, 2014 at 12:07 AM, Paul Bors p...@bors.ws wrote:

 Awsome, thanks!

 One last question, in my tests I keep a collection of page parameters for
 my pages.
 I've noticed at some point wicket tester (or deeper in the framework, prob.
 in the page factory) that the PageParameter instance used had the
 parameters combined from different instances. That scared me a bit.

 ie: I have
 customConstructors = new HashMapClass? extends AdminPage,
 PageParameters();
 customConstructors.put(PageA.class, new PageParameters().set(pageID,
 -1));
 customConstructors.put(PageB.class, new PageParameters().set(sessionID,
 -2));

 and then later when running the test:
 PageParameters pageParameters = customConstructors.get(pageClass);
 if(pageParameters != null) {
 log.info(Running  + pageTest.getTestName() +  for  +
 pageClass.getName() +  with pageParameters of  + pageParameters);
 pageTest.runTest(getTester(), pageClass,
 customConstructors.get(pageClass));
 }

 Above log stamenent would print correct, but when in the page constructor
 both pageID AND sessionID are present althrough those are 2 different
 instances of PageParameters.

 Should I dig more into that?
 To me that sounds like a bug :(


Yes, it is not correct behavior if you use tester.startPage(clazz,
parameters).
Make a quickstart and attach it to Jira.






 On Wed, Jan 15, 2014 at 2:24 PM, Martin Grigorov mgrigo...@apache.org
 wrote:

  AFAIR if there are no request parameters then Wicket first uses the Java
  default constructor (no parameters) if available.
  If there is no such constructor then Wicket constructs an empty
  PageParameters and uses it for the constructor with PageParameters.
  If none are available then an error is thrown.
 
  Consult with DefaultPageFactory.java
 
  Martin Grigorov
  Wicket Training and Consulting
 
 
  On Wed, Jan 15, 2014 at 8:50 PM, Paul Bors p...@bors.ws wrote:
 
   Btw, I just noticed that adding this constructor eliminates the
 problem:
   public MyPage() {
   this(null);
   }
  
   So I take it Wicket tries to build the page via the
 Page(PageParameters)
   but instead of using a null reference to the PageParameters it builds
 an
   object without any parameters in it.
  
   If the default constructor is added, then it can invoke the custom
   PageParameters constructor with the null reference.
   I don't recall this behavior. Has this changed recently?
  
  
   On Wed, Jan 15, 2014 at 1:45 PM, Paul Bors p...@bors.ws wrote:
  
Suppose I have a page with the default constructor and with the page
parameter constructor.
   
Should my page parameter constructor be called with an empty not null
PageParameter instance when no parameters are provided? Shouldn't the
default constructor be used instead?
   
What about in unit tests?
I've seen the tester use the page parameter constructor and pass it a
reference to an empty PageParameters when I invoke
tester.startPage(MyPage.class, null).