Author: knopp
Date: Thu Sep 18 08:09:06 2008
New Revision: 696670

URL: http://svn.apache.org/viewvc?rev=696670&view=rev
Log:
mounted pages

Added:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
   (with props)
    
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
   (with props)
Modified:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java?rev=696670&r1=696669&r2=696670&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/BookmarkableEncoder.java
 Thu Sep 18 08:09:06 2008
@@ -68,6 +68,10 @@
         */
        public BookmarkableEncoder(PageParametersEncoder pageParametersEncoder)
        {
+               if (pageParametersEncoder == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'pageParametersEncoder' may not be null.");
+               }
                this.pageParametersEncoder = pageParametersEncoder;
        }
 

Added: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java?rev=696670&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
 Thu Sep 18 08:09:06 2008
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import java.lang.ref.WeakReference;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.Url;
+import org.apache._wicket.request.encoder.info.ComponentInfo;
+import org.apache._wicket.request.encoder.info.PageComponentInfo;
+import org.apache._wicket.request.encoder.info.PageInfo;
+import org.apache._wicket.request.encoder.parameters.PageParametersEncoder;
+import 
org.apache._wicket.request.encoder.parameters.SimplePageParametersEncoder;
+import 
org.apache._wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
+import org.apache._wicket.request.request.Request;
+import org.apache.wicket.RequestListenerInterface;
+
+/**
+ * Decodes and encodes the following URLs:
+ * 
+ * <pre>
+ *  Page Class - Render (BookmarkablePageRequestHandler for mounted pages)
+ *  /mount/point
+ *  /mount/point?pageMap
+ *  (these will redirect to hybrid alternative if page is not stateless)
+ * 
+ *  IPage Instance - Render Hybrid (RenderPageRequestHandler for mounted 
pages) 
+ *  /mount/point?2
+ *  /mount/point?2.4
+ *  /mount/point?pageMap.2.4
+ * 
+ *  IPage Instance - Bookmarkable Listener 
(BookmarkableListenerInterfaceRequestHandler for mounted pages) 
+ *  /mount/point?2-click-foo-bar-baz
+ *  /mount/point?2.4-click-foo-bar-baz
+ *  /mount/point?pageMap.2.4-click-foo-bar-baz
+ *  /mount/point?2.4-click.1-foo-bar-baz (1 is behavior index)
+ *  (these will redirect to hybrid if page is not stateless)
+ * </pre>
+ * 
+ * @author Matej Knopp
+ */
+public class MountedEncoder extends AbstractEncoder
+{
+       private final PageParametersEncoder pageParametersEncoder;
+       private final String[] mountSegments;
+
+       /** bookmarkable page class. */
+       protected final WeakReference<Class<? extends IPage>> pageClass;
+
+
+       /**
+        * Construct.
+        * 
+        * @param mountPath
+        * @param pageClass
+        * @param pageParametersEncoder
+        */
+       public MountedEncoder(String mountPath, Class<? extends IPage> 
pageClass,
+               PageParametersEncoder pageParametersEncoder)
+       {
+               if (pageParametersEncoder == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'pageParametersEncoder' may not be null.");
+               }
+               if (pageClass == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'pageClass' may not be null.");
+               }
+               if (mountPath == null)
+               {
+                       throw new IllegalArgumentException("Argument 
'mountPath' may not be null.");
+               }
+               this.pageParametersEncoder = pageParametersEncoder;
+               this.pageClass = new WeakReference<Class<? extends 
IPage>>(pageClass);
+               this.mountSegments = getMountSegments(mountPath);
+       }
+
+       private String[] getMountSegments(String mountPath)
+       {
+               if (mountPath.startsWith("/"))
+               {
+                       mountPath = mountPath.substring(1);
+               }
+               Url url = Url.parse(mountPath);
+
+               if (url.getSegments().isEmpty())
+               {
+                       throw new IllegalArgumentException("Mount path must 
have at least one segment.");
+               }
+
+               String[] res = new String[url.getSegments().size()];
+               for (int i = 0; i < res.length; ++i)
+               {
+                       res[i] = url.getSegments().get(i);
+               }
+               return res;
+       }
+
+       /**
+        * Construct.
+        * 
+        * @param mountPath
+        * @param pageClass
+        */
+       public MountedEncoder(String mountPath, Class<? extends IPage> 
pageClass)
+       {
+               this(mountPath, pageClass, new SimplePageParametersEncoder());
+       }
+
+       private RequestHandler processBookmarkable(String pageMapName,
+               Class<? extends IPage> pageClass, PageParameters pageParameters)
+       {
+               IPage page = newPageInstance(pageMapName, pageClass, 
pageParameters);
+               return new RenderPageRequestHandler(page);
+       }
+
+       private RequestHandler processHybrid(PageInfo pageInfo, Class<? extends 
IPage> pageClass,
+               PageParameters pageParameters)
+       {
+               IPage page = getPageInstance(pageInfo, pageClass, 
pageParameters);
+               return new RenderPageRequestHandler(page);
+       }
+
+       private RequestHandler processListener(PageComponentInfo 
pageComponentInfo,
+               Class<? extends IPage> pageClass, PageParameters pageParameters)
+       {
+               PageInfo pageInfo = pageComponentInfo.getPageInfo();
+               ComponentInfo componentInfo = 
pageComponentInfo.getComponentInfo();
+
+               IPage page = getPageInstance(pageInfo, pageClass, 
pageParameters, true);
+               IComponent component = getComponent(page, 
componentInfo.getComponentPath());
+               RequestListenerInterface listenerInterface = 
requestListenerInterfaceFromString(componentInfo.getListenerInterface());
+
+               return new ListenerInterfaceRequestHandler(page, component, 
listenerInterface,
+                       componentInfo.getBehaviorIndex());
+       }
+
+       public RequestHandler decode(Request request)
+       {
+               Url url = request.getUrl();
+
+               // check if the URL is long enough and starts with the proper 
segments
+               if (url.getSegments().size() >= mountSegments.length && 
urlStartsWith(url, mountSegments))
+               {
+                       // try to extract page and component information from 
URL
+                       PageComponentInfo info = getPageComponentInfo(url);
+
+                       Class<? extends IPage> pageClass = this.pageClass.get();
+
+                       // extract the PageParameters from URL if there are any
+                       PageParameters pageParameters = 
extractPageParameters(url,
+                               request.getRequestParameters(), 3, 
pageParametersEncoder);
+
+                       if (info == null || info.getPageInfo().getPageId() == 
null)
+                       {
+                               // if there are is no page instance information 
(only page map name - optionally)
+                               // then this is a simple bookmarkable URL
+                               String pageMap = info != null ? 
info.getPageInfo().getPageMapName() : null;
+                               return processBookmarkable(pageMap, pageClass, 
pageParameters);
+                       }
+                       else if (info.getPageInfo().getPageId() != null && 
info.getComponentInfo() == null)
+                       {
+                               // if there is page instance ifnromation in the 
URL but no component and listener
+                               // interface then this is a hybrid URL - we 
need to try to reuse existing cpage
+                               // instance
+                               return processHybrid(info.getPageInfo(), 
pageClass, pageParameters);
+                       }
+                       else if (info.getComponentInfo() != null)
+                       {
+                               // with both page instance and 
component+listener this is a listener interface URL
+                               return processListener(info, pageClass, 
pageParameters);
+                       }
+               }
+               return null;
+       }
+
+       private Url newUrl(Class<? extends IPage> pageClass)
+       {
+               Url url = new Url();
+
+               for (String s : mountSegments)
+               {
+                       url.getSegments().add(s);
+               }
+
+               return url;
+       }
+
+       public Url encode(RequestHandler requestHandler)
+       {
+               if (requestHandler instanceof BookmarkablePageRequestHandler)
+               {
+                       // simple bookmarkable URL with no page instance 
information
+                       BookmarkablePageRequestHandler handler = 
(BookmarkablePageRequestHandler)requestHandler;
+                       Url url = newUrl(handler.getPageClass());
+
+                       PageInfo info = new PageInfo(null, null, 
handler.getPageMapName());
+                       encodePageComponentInfo(url, new 
PageComponentInfo(info, null));
+                       return encodePageParameters(url, 
handler.getPageParameters(), pageParametersEncoder);
+               }
+               else if (requestHandler instanceof RenderPageRequestHandler)
+               {
+                       // possibly hybrid URL - bookmarkable URL with page 
instance information
+                       // but only allowed if the page was created by 
bookamarkable URL
+
+                       IPage page = 
((RenderPageRequestHandler)requestHandler).getPage();
+
+                       Url url = newUrl(page.getClass());
+                       PageInfo info = null;
+                       if (!page.isPageStateless())
+                       {
+                               info = new PageInfo(page);
+                               encodePageComponentInfo(url, new 
PageComponentInfo(info, null));
+                       }
+                       return encodePageParameters(url, 
page.getPageParameters(), pageParametersEncoder);
+
+               }
+               else if (requestHandler instanceof 
BookmarkableListenerInterfaceRequestHandler)
+               {
+                       // listener interface URL with page class information
+                       BookmarkableListenerInterfaceRequestHandler handler = 
(BookmarkableListenerInterfaceRequestHandler)requestHandler;
+                       IPage page = handler.getPage();
+                       PageInfo pageInfo = new PageInfo(page);
+                       ComponentInfo componentInfo = new ComponentInfo(
+                               
requestListenerInterfaceToString(handler.getListenerInterface()),
+                               handler.getComponent().getPath(), 
handler.getBehaviorIndex());
+                       Url url = newUrl(page.getClass());
+                       encodePageComponentInfo(url, new 
PageComponentInfo(pageInfo, componentInfo));
+                       return encodePageParameters(url, 
page.getPageParameters(), pageParametersEncoder);
+               }
+
+               return null;
+       }
+
+       public int getMachingSegmentsCount(Request request)
+       {
+               if (urlStartsWith(request.getUrl(), mountSegments))
+               {
+                       return mountSegments.length;
+               }
+               else
+               {
+                       return 0;
+               }
+       }
+
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/request/encoder/MountedEncoder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java?rev=696670&view=auto
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
 (added)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
 Thu Sep 18 08:09:06 2008
@@ -0,0 +1,378 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache._wicket.request.encoder;
+
+import org.apache._wicket.IComponent;
+import org.apache._wicket.IPage;
+import org.apache._wicket.MockPage;
+import org.apache._wicket.PageParameters;
+import org.apache._wicket.request.RequestHandler;
+import org.apache._wicket.request.RequestHandlerEncoder;
+import org.apache._wicket.request.Url;
+import 
org.apache._wicket.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache._wicket.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache._wicket.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.markup.html.link.ILinkListener;
+
+
+/**
+ * @author Matej Knopp
+ */
+public class MountedEncoderTest extends AbstractEncoderTest
+{
+
+       /**
+        * Construct.
+        */
+       public MountedEncoderTest()
+       {
+       }
+
+       private MountedEncoder encoder = new MountedEncoder("/some/mount/path", 
MockPage.class)
+       {
+               @Override
+               protected EncoderContext getContext()
+               {
+                       return context;
+               }
+       };
+
+       /**
+        * 
+        */
+       public void testDecode1()
+       {
+               Url url = Url.parse("some/mount/path");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+
+               assertEquals(0, 
page.getPageParameters().getIndexedParamsCount());
+               
assertTrue(page.getPageParameters().getNamedParameterKeys().isEmpty());
+       }
+
+       /**
+        * 
+        */
+       public void testDecode2()
+       {
+               Url url = Url.parse("some/mount/path/indexed1?a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(1, p.getIndexedParamsCount());
+               assertEquals("indexed1", p.getIndexedParameter(0).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void testDecode3()
+       {
+               Url url = Url.parse("some/mount/path?15");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               checkPage(page, 15, 0, null);
+       }
+
+       /**
+        * 
+        */
+       public void testDecode4()
+       {
+               Url url = Url.parse("some/mount/path/i1/i2?abc.15.5&a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof RenderPageRequestHandler);
+               IPage page = ((RenderPageRequestHandler)handler).getPage();
+               checkPage(page, 15, 5, "abc");
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(2, p.getIndexedParamsCount());
+               assertEquals("i1", p.getIndexedParameter(0).toString());
+               assertEquals("i2", p.getIndexedParameter(1).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void testDecode5()
+       {
+               Url url = Url.parse("some/mount/path?15-ILinkListener-foo-bar");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+               ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
+
+               IPage page = h.getPage();
+               checkPage(page, 15, 0, null);
+
+               assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+               assertEquals("foo:bar", h.getComponent().getPath());
+               assertNull(h.getBehaviorIndex());
+       }
+
+       /**
+        * 
+        */
+       public void testDecode6()
+       {
+               Url url = 
Url.parse("some/mount/path/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+               ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
+
+               IPage page = h.getPage();
+               checkPage(page, 15, 5, "abc");
+
+               assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+               assertEquals("foo:bar", h.getComponent().getPath());
+
+               PageParameters p = page.getPageParameters();
+               assertEquals(2, p.getIndexedParamsCount());
+               assertEquals("i1", p.getIndexedParameter(0).toString());
+               assertEquals("i2", p.getIndexedParameter(1).toString());
+
+               assertEquals(2, p.getNamedParameterKeys().size());
+               assertEquals("b", p.getNamedParameter("a").toString());
+               assertEquals("c", p.getNamedParameter("b").toString());
+       }
+
+       /**
+        * 
+        */
+       public void testDecode7()
+       {
+               Url url = 
Url.parse("some/mount/path?15-ILinkListener.4-foo-bar");
+               RequestHandler handler = encoder.decode(getRequest(url));
+
+               assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+               ListenerInterfaceRequestHandler h = 
(ListenerInterfaceRequestHandler)handler;
+
+               IPage page = h.getPage();
+               checkPage(page, 15, 0, null);
+
+               assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+               assertEquals("foo:bar", h.getComponent().getPath());
+               assertEquals((Object)4, h.getBehaviorIndex());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode1()
+       {
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, null,
+                       new PageParameters());
+               Url url = encoder.encode(handler);
+               assertEquals("some/mount/path", url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode2()
+       {
+               PageParameters parameters = new PageParameters();
+               parameters.setIndexedParameter(0, "i1");
+               parameters.setIndexedParameter(1, "i2");
+               parameters.setNamedParameter("a", "b");
+               parameters.setNamedParameter("b", "c");
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, null,
+                       parameters);
+               Url url = encoder.encode(handler);
+               assertEquals("some/mount/path/i1/i2?a=b&b=c", url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode3()
+       {
+               PageParameters parameters = new PageParameters();
+               parameters.setIndexedParameter(0, "i1");
+               parameters.setIndexedParameter(1, "i2");
+               parameters.setNamedParameter("a", "b");
+               parameters.setNamedParameter("b", "c");
+
+               RequestHandler handler = new 
BookmarkablePageRequestHandler(MockPage.class, "abc",
+                       parameters);
+               Url url = encoder.encode(handler);
+
+               assertEquals("some/mount/path/i1/i2?abc&a=b&b=c", 
url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode4()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+               page.setCreatedBookmarkable(true);
+
+               RequestHandler handler = new RenderPageRequestHandler(page);
+               Url url = encoder.encode(handler);
+
+               assertEquals("some/mount/path/i1/i2?abc.15.5&a=b&b=c", 
url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode5()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+
+               page.setCreatedBookmarkable(false);
+
+               RequestHandler handler = new RenderPageRequestHandler(page);
+               Url url = encoder.encode(handler);
+
+               // mounted pages must render mounted url even for page that has 
not been created by
+               // bookmarkable
+               // URL
+
+               assertEquals("some/mount/path/i1/i2?abc.15.5&a=b&b=c", 
url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode6()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+
+               // shouldn't make any difference for 
BookmarkableListenerInterfaceRequestHandler,
+               // as this explicitely says the url must be bookmarkable
+               page.setCreatedBookmarkable(false);
+
+               IComponent c = page.get("foo:bar");
+
+               RequestHandler handler = new 
BookmarkableListenerInterfaceRequestHandler(page, c,
+                       ILinkListener.INTERFACE);
+
+               Url url = encoder.encode(handler);
+
+               
assertEquals("some/mount/path/i1/i2?abc.15.5-ILinkListener-foo-bar&a=b&b=c", 
url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testEncode7()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.getPageParameters().setIndexedParameter(0, "i1");
+               page.getPageParameters().setIndexedParameter(1, "i2");
+               page.getPageParameters().setNamedParameter("a", "b");
+               page.getPageParameters().setNamedParameter("b", "c");
+
+               // shouldn't make any difference for 
BookmarkableListenerInterfaceRequestHandler,
+               // as this explicitely says the url must be bookmarkable
+               page.setCreatedBookmarkable(false);
+
+               IComponent c = page.get("foo:bar");
+
+               RequestHandler handler = new 
BookmarkableListenerInterfaceRequestHandler(page, c,
+                       ILinkListener.INTERFACE, 4);
+
+               Url url = encoder.encode(handler);
+
+               
assertEquals("some/mount/path/i1/i2?abc.15.5-ILinkListener.4-foo-bar&a=b&b=c",
+                       url.toString());
+       }
+
+
+       /**
+        * 
+        */
+       public void testEncode8()
+       {
+               MockPage page = new MockPage(15, 5, "abc");
+               page.setBookmarkable(true);
+               page.setCreatedBookmarkable(true);
+               page.setPageStateless(true);
+
+               RequestHandler handler = new RenderPageRequestHandler(page);
+
+               Url url = encoder.encode(handler);
+
+               assertEquals("some/mount/path", url.toString());
+       }
+
+       /**
+        * 
+        */
+       public void testConstruct1()
+       {
+               try
+               {
+                       RequestHandlerEncoder e = new MountedEncoder("", 
MockPage.class);
+                       assertFalse(true);
+               }
+               catch (IllegalArgumentException e)
+               {
+                       // ok
+               }
+       }
+       
+       /**
+        * 
+        */
+       public void testConstruct2()
+       {
+               try
+               {
+                       RequestHandlerEncoder e = new MountedEncoder("/", 
MockPage.class);
+                       assertFalse(true);
+               }
+               catch (IllegalArgumentException e)
+               {
+                       // ok
+               }
+       }
+}

Propchange: 
wicket/sandbox/knopp/experimental/wicket/src/test/java/org/apache/_wicket/request/encoder/MountedEncoderTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to