Hi,

I think that WebResponseExceptionsTest#expirePage must fail
because clicking the link should re-create the page because
TestExpirePage is bookmarkable.

I have made different changes to Wicket which I am not so sure about
but I am ready to share, and in order to get this test to pass, I had
to use a non-bookmarkable TestExpirePage:

public class TestExpirePage extends WebPage
{
        private static final long serialVersionUID = 1L;
        
        private int state;

        /**
         * Construct.
         */
        public TestExpirePage(int state)
        {
                this.state = state;
...
then in the test:
tester.startPage(new TestExpirePage(1));

and this test must succeed.

More importantly we still need an additional test that positively
verifies that a bookmarkable page does NOT expire with
PageExpiredException but with the same page re-created after session
expiry.

Kind Regards

Bernard


On Mon, 19 Aug 2013 17:32:45 +0300, you wrote:

>Hi Emond,
>
>
>On Mon, Aug 19, 2013 at 12:10 PM, <[email protected]> wrote:
>
>> WICKET-4997: render bookmarkable urls for bookmarkable pages (not
>> stateless)
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e99bf147
>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e99bf147
>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e99bf147
>>
>> Branch: refs/heads/wicket-4997
>> Commit: e99bf1476403ff13e409ba28331a8291a03ca25f
>> Parents: 7d8313f
>> Author: Emond Papegaaij <[email protected]>
>> Authored: Mon Aug 19 11:07:41 2013 +0200
>> Committer: Emond Papegaaij <[email protected]>
>> Committed: Mon Aug 19 11:10:02 2013 +0200
>>
>> ----------------------------------------------------------------------
>>  .../main/java/org/apache/wicket/Component.java  |  4 +-
>>  .../mapper/AbstractBookmarkableMapper.java      | 13 +++++--
>>  .../core/request/mapper/MountedMapper.java      | 41 ++++++++------------
>>  3 files changed, 29 insertions(+), 29 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/e99bf147/wicket-core/src/main/java/org/apache/wicket/Component.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java
>> b/wicket-core/src/main/java/org/apache/wicket/Component.java
>> index 8fa63a3..116eb86 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/Component.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
>> @@ -3336,7 +3336,7 @@ public abstract class Component
>>                 Page page = getPage();
>>                 PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, this, parameters);
>>                 IRequestHandler handler;
>> -               if (page.isPageStateless())
>> +               if (page.isBookmarkable())
>>                 {
>>                         handler = new
>> BookmarkableListenerInterfaceRequestHandler(provider, listener, id);
>>                 }
>> @@ -3379,7 +3379,7 @@ public abstract class Component
>>                 Page page = getPage();
>>                 PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, this, parameters);
>>                 IRequestHandler handler;
>> -               if (page.isPageStateless())
>> +               if (page.isBookmarkable())
>>
>
>I think this change is OK.
>Maybe we can improve it a bit by using Application.get().getPageSettings().
>getRecreateMountedPagesAfterExpiry() in the checks above ?
>
>With the new check as you can see the produced urls contain the class name.
>Some users don't like this.
>Application.get().getPageSettings().getRecreateMountedPagesAfterExpiry()
>return true by default. If someone doesn't like the extra info in the
>produced urls then she can disable it this way.
>
>
>>                 {
>>                         handler = new
>> BookmarkableListenerInterfaceRequestHandler(provider, listener);
>>                 }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/e99bf147/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
>> index 93c22d2..bbe2e1c 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java
>> @@ -210,8 +210,7 @@ public abstract class AbstractBookmarkableMapper
>> extends AbstractComponentMapper
>>                 PageProvider provider = new
>> PageProvider(pageInfo.getPageId(), pageClass, pageParameters,
>>                         renderCount);
>>                 provider.setPageSource(getContext());
>> -               if (provider.isNewPageInstance() &&
>> -
>> !WebApplication.get().getPageSettings().getRecreateMountedPagesAfterExpiry())
>> +               if (provider.isNewPageInstance() &&
>> !getRecreateMountedPagesAfterExpiry())
>>                 {
>>                         throw new
>> PageExpiredException(String.format("Bookmarkable page id '%d' has expired.",
>>                                 pageInfo.getPageId()));
>> @@ -222,6 +221,11 @@ public abstract class AbstractBookmarkableMapper
>> extends AbstractComponentMapper
>>                 }
>>         }
>>
>> +       boolean getRecreateMountedPagesAfterExpiry()
>> +       {
>> +               return
>> WebApplication.get().getPageSettings().getRecreateMountedPagesAfterExpiry();
>> +       }
>> +
>>         /**
>>          * Creates a {@code IRequestHandler} that processes a listener
>> request.
>>          *
>> @@ -420,8 +424,11 @@ public abstract class AbstractBookmarkableMapper
>> extends AbstractComponentMapper
>>
>> requestListenerInterfaceToString(handler.getListenerInterface()),
>>                                 handler.getComponentPath(),
>> handler.getBehaviorIndex());
>>
>> +                       PageParameters parameters =
>> getRecreateMountedPagesAfterExpiry() ? new PageParameters(
>> +
>> handler.getPage().getPageParameters()).mergeWith(handler.getPageParameters())
>> +                               : handler.getPageParameters();
>>                         UrlInfo urlInfo = new UrlInfo(new
>> PageComponentInfo(pageInfo, componentInfo),
>> -                               pageClass, handler.getPageParameters());
>> +                               pageClass, parameters);
>>                         return buildUrl(urlInfo);
>>                 }
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/e99bf147/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
>> index 9b1db28..19212b6 100644
>> ---
>> a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
>> +++
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/MountedMapper.java
>> @@ -19,7 +19,6 @@ package org.apache.wicket.core.request.mapper;
>>  import java.util.ArrayList;
>>  import java.util.List;
>>
>> -import org.apache.wicket.Application;
>>  import org.apache.wicket.RequestListenerInterface;
>>  import
>> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
>>  import org.apache.wicket.request.IRequestHandler;
>> @@ -49,21 +48,21 @@ import org.apache.wicket.util.string.Strings;
>>   * are matched before optional parameters, and optional parameters eager
>> (from left to right).
>>   * <p>
>>   * Decodes and encodes the following URLs:
>> - *
>> + *
>>   * <pre>
>>   *  Page Class - Render (BookmarkablePageRequestHandler for mounted pages)
>>   *  /mount/point
>>   *  (these will redirect to hybrid alternative if page is not stateless)
>> - *
>> + *
>>   *  IPage Instance - Render Hybrid (RenderPageRequestHandler for mounted
>> pages)
>>   *  /mount/point?2
>> - *
>> + *
>>   *  IPage Instance - Bookmarkable Listener
>> (BookmarkableListenerInterfaceRequestHandler for mounted pages)
>>   *  /mount/point?2-click-foo-bar-baz
>>   *  /mount/point?2-5.click.1-foo-bar-baz (1 is behavior index, 5 is
>> render count)
>>   *  (these will redirect to hybrid if page is not stateless)
>>   * </pre>
>> - *
>> + *
>>   * @author Matej Knopp
>>   */
>>  public class MountedMapper extends AbstractBookmarkableMapper
>> @@ -143,7 +142,7 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClass
>>          */
>> @@ -154,32 +153,32 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClassProvider
>>          */
>>         @Deprecated
>>         public MountedMapper(String mountPath,
>> -                            ClassProvider<? extends IRequestablePage>
>> pageClassProvider)
>> +               ClassProvider<? extends IRequestablePage>
>> pageClassProvider)
>>         {
>>                 this(mountPath, new
>> ClassReference(pageClassProvider.get()), new PageParametersEncoder());
>>         }
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClassProvider
>>          */
>>         public MountedMapper(String mountPath,
>> -                            IProvider<Class<? extends IRequestablePage>>
>> pageClassProvider)
>> +               IProvider<Class<? extends IRequestablePage>>
>> pageClassProvider)
>>         {
>>                 this(mountPath, pageClassProvider, new
>> PageParametersEncoder());
>>         }
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClass
>>          * @param pageParametersEncoder
>> @@ -192,7 +191,7 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClassProvider
>>          * @param pageParametersEncoder
>> @@ -202,20 +201,19 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>                 ClassProvider<? extends IRequestablePage>
>> pageClassProvider,
>>                 IPageParametersEncoder pageParametersEncoder)
>>         {
>> -               this(mountPath, new
>> ClassReference(pageClassProvider.get()),
>> -                               pageParametersEncoder);
>> +               this(mountPath, new
>> ClassReference(pageClassProvider.get()), pageParametersEncoder);
>>         }
>>
>>         /**
>>          * Construct.
>> -        *
>> +        *
>>          * @param mountPath
>>          * @param pageClassProvider
>>          * @param pageParametersEncoder
>>          */
>>         public MountedMapper(String mountPath,
>> -                            IProvider<Class<? extends IRequestablePage>>
>> pageClassProvider,
>> -                            IPageParametersEncoder pageParametersEncoder)
>> +               IProvider<Class<? extends IRequestablePage>>
>> pageClassProvider,
>> +               IPageParametersEncoder pageParametersEncoder)
>>         {
>>                 Args.notEmpty(mountPath, "mountPath");
>>                 Args.notNull(pageClassProvider, "pageClassProvider");
>> @@ -427,11 +425,6 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>                 return url;
>>         }
>>
>> -       boolean getRecreateMountedPagesAfterExpiry()
>> -       {
>> -               return
>> Application.get().getPageSettings().getRecreateMountedPagesAfterExpiry();
>> -       }
>> -
>>         /**
>>          * @see
>> AbstractBookmarkableMapper#buildUrl(AbstractBookmarkableMapper.UrlInfo)
>>          */
>> @@ -483,7 +476,7 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>         /**
>>          * Check if the URL is for home page and the home page class match
>> mounted class. If so,
>>          * redirect to mounted URL.
>> -        *
>> +        *
>>          * @param url
>>          * @return request handler or <code>null</code>
>>          */
>> @@ -504,7 +497,7 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>          * If this method returns <code>true</code> and application home
>> page class is same as the class
>>          * mounted with this encoder, request to home page will result in
>> a redirect to the mounted
>>          * path.
>> -        *
>> +        *
>>          * @return whether this encode should respond to home page request
>> when home page class is same
>>          *         as mounted class.
>>          */
>>
>>

Reply via email to