You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2009/10/11 02:02:29 UTC
svn commit: r823984 [10/11] - in /wicket/trunk: ./
wicket/src/main/java/org/apache/wicket/ng/
wicket/src/main/java/org/apache/wicket/ng/application/
wicket/src/main/java/org/apache/wicket/ng/behavior/
wicket/src/main/java/org/apache/wicket/ng/markup/ w...
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/DiskDataStoreTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/DiskDataStoreTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/DiskDataStoreTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/DiskDataStoreTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,306 @@
+package org.apache.wicket.ng.page.persistent.disk;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.page.persistent.AsynchronousDataStore;
+import org.apache.wicket.ng.page.persistent.DataStore;
+import org.apache.wicket.ng.util.lang.Check;
+
+public class DiskDataStoreTest extends TestCase
+{
+
+ public DiskDataStoreTest()
+ {
+
+ }
+
+ private static final Random random = new Random();
+ private static final int FILE_SIZE_MIN = 1024 * 200;
+ private static final int FILE_SIZE_MAX = 1024 * 300;
+ private static final int MAX_SIZE_PER_SESSION = 1000000;
+ private static final int FILE_CHANNEL_POOL_CAPACITY = 100;
+ private static final int SESSION_COUNT = 50;
+ private static final int FILES_COUNT = 1000;
+ private static final int SLEEP_MAX = 10;
+ private static final int THREAD_COUNT = 20;
+ private static final int READ_MODULO = 100;
+
+ private static class File
+ {
+ private final String sessionId;
+ private final int id;
+
+ private byte first;
+ private byte last;
+ private int length;
+
+ public File(String sessionId, int id)
+ {
+ this.sessionId = sessionId;
+ this.id = id;
+ }
+
+ public String getSessionId()
+ {
+ return sessionId;
+ }
+
+ public int getId()
+ {
+ return id;
+ }
+
+ public byte[] generateData()
+ {
+ length = FILE_SIZE_MIN + random.nextInt(FILE_SIZE_MAX - FILE_SIZE_MIN);
+ byte data[] = new byte[length];
+ random.nextBytes(data);
+ first = data[0];
+ last = data[data.length - 1];
+ return data;
+ }
+
+ public boolean checkData(byte data[])
+ {
+ Check.argumentNotNull(data, "data");
+ if (data.length != length)
+ {
+ return false;
+ }
+ if (first != data[0])
+ {
+ return false;
+ }
+ if (last != data[data.length - 1])
+ {
+ return false;
+ }
+ return true;
+ }
+ }
+
+ private Map<String, AtomicInteger> sessionCounter = new ConcurrentHashMap<String, AtomicInteger>();
+ private ConcurrentLinkedQueue<File> filesToSave = new ConcurrentLinkedQueue<File>();
+ private ConcurrentLinkedQueue<File> filesToRead1 = new ConcurrentLinkedQueue<File>();
+ private ConcurrentLinkedQueue<File> filesToRead2 = new ConcurrentLinkedQueue<File>();
+
+ private AtomicInteger read1Count = new AtomicInteger(0);
+ private AtomicInteger read2Count = new AtomicInteger(0);
+ private AtomicInteger saveCount = new AtomicInteger(0);
+
+ private AtomicBoolean saveDone = new AtomicBoolean(false);
+ private AtomicBoolean read1Done = new AtomicBoolean(false);
+ private AtomicBoolean read2Done = new AtomicBoolean(false);
+
+ private AtomicInteger failures = new AtomicInteger();
+
+ private AtomicInteger bytesWritten = new AtomicInteger(0);
+ private AtomicInteger bytesRead = new AtomicInteger(0);
+
+ private AtomicInteger saveTime = new AtomicInteger(0);
+
+ private String randomSessionId()
+ {
+ List<String> s = new ArrayList<String>(sessionCounter.keySet());
+ return s.get(random.nextInt(s.size()));
+ }
+
+ private int nextSessionId(String sessionId)
+ {
+ AtomicInteger i = sessionCounter.get(sessionId);
+ return i.incrementAndGet();
+ }
+
+ private void generateFiles()
+ {
+ for (int i = 0; i < SESSION_COUNT; ++i)
+ {
+ sessionCounter.put(UUID.randomUUID().toString(), new AtomicInteger(0));
+ }
+ for (int i = 0; i < FILES_COUNT; ++i)
+ {
+ String session = randomSessionId();
+ File file = new File(session, nextSessionId(session));
+ long now = System.nanoTime();
+ filesToSave.add(file);
+ long duration = System.nanoTime() - now;
+ saveTime.addAndGet((int) duration);
+ }
+
+ }
+
+ private DataStore dataStore;
+
+ private class SaveRunnable implements Runnable
+ {
+ public void run()
+ {
+ File file;
+
+ while ((file = filesToSave.poll()) != null || saveCount.get() < FILES_COUNT)
+ {
+ if (file != null)
+ {
+ byte data[] = file.generateData();
+ dataStore.storeData(file.getSessionId(), file.getId(), data);
+
+ if (saveCount.get() % READ_MODULO == 0)
+ {
+ filesToRead1.add(file);
+ }
+ saveCount.incrementAndGet();
+ bytesWritten.addAndGet(data.length);
+ }
+
+ try
+ {
+ Thread.sleep(random.nextInt(SLEEP_MAX));
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ saveDone.set(true);
+ }
+ };
+
+ private class Read1Runnable implements Runnable
+ {
+ public void run()
+ {
+ File file;
+ while ((file = filesToRead1.poll()) != null || !saveDone.get())
+ {
+ if (file != null)
+ {
+ byte bytes[] = dataStore.getData(file.getSessionId(), file.getId());
+ if (file.checkData(bytes) == false)
+ {
+ failures.incrementAndGet();
+ }
+ filesToRead2.add(file);
+ read1Count.incrementAndGet();
+ bytesRead.addAndGet(bytes.length);
+ }
+
+ try
+ {
+ Thread.sleep(random.nextInt(SLEEP_MAX));
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ read1Done.set(true);
+ }
+ };
+
+
+ private class Read2Runnable implements Runnable
+ {
+ public void run()
+ {
+ File file;
+ while ((file = filesToRead2.poll()) != null || !read1Done.get())
+ {
+ if (file != null)
+ {
+ byte bytes[] = dataStore.getData(file.getSessionId(), file.getId());
+ if (file.checkData(bytes) == false)
+ {
+ failures.incrementAndGet();
+ }
+ read2Count.incrementAndGet();
+ bytesRead.addAndGet(bytes.length);
+ }
+
+ try
+ {
+ Thread.sleep(random.nextInt(SLEEP_MAX));
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ read2Done.set(true);
+ }
+ };
+
+ private void doTestDataStore()
+ {
+ System.out.println("Starting...");
+ long start = System.currentTimeMillis();
+
+ for (int i = 0; i < THREAD_COUNT; ++i)
+ {
+ new Thread(new SaveRunnable()).start();
+ }
+
+ for (int i = 0; i < THREAD_COUNT; ++i)
+ {
+ new Thread(new Read1Runnable()).start();
+ }
+
+ for (int i = 0; i < THREAD_COUNT; ++i)
+ {
+ new Thread(new Read2Runnable()).start();
+ }
+
+ while(!(read1Done.get() && read2Done.get() && saveDone.get()))
+ {
+ try
+ {
+ Thread.sleep(5);
+ }
+ catch (InterruptedException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ long duration = System.currentTimeMillis() - start;
+
+ System.out.println("Took: " + duration + " ms");
+ System.out.println("Save: " + saveCount.intValue() + " files, " + bytesWritten.get() +" bytes");
+ System.out.println("Read: " + (read1Count.get() + read2Count.get()) + " files, " + bytesRead.get() + " bytes");
+
+ System.out.println("Average save time (ns): " + (double) saveTime.get() / (double) saveCount.get());
+
+ assertEquals(0, failures.get());
+
+ for (String s : sessionCounter.keySet())
+ {
+ dataStore.removeData(s);
+ }
+ }
+
+ public void test1()
+ {
+ generateFiles();
+
+ dataStore = new DiskDataStore("app1", MAX_SIZE_PER_SESSION, FILE_CHANNEL_POOL_CAPACITY);
+ dataStore = new AsynchronousDataStore(dataStore);
+
+ doTestDataStore();
+
+ dataStore.destroy();
+ }
+
+
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/PageWindowManagerTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/PageWindowManagerTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/PageWindowManagerTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/page/persistent/disk/PageWindowManagerTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,146 @@
+/*
+ * 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.ng.page.persistent.disk;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.page.persistent.disk.PageWindowManager.PageWindow;
+
+/**
+ * @author Matej Knopp
+ */
+public class PageWindowManagerTest extends TestCase
+{
+ /**
+ *
+ */
+ public void testAddRemove()
+ {
+ PageWindowManager manager = new PageWindowManager(300);
+ PageWindow window;
+
+ window = manager.createPageWindow(1, 50);
+ assertWindow(window, 1, 0, 50);
+
+ window = manager.createPageWindow(2, 40);
+ assertWindow(window, 2, 50, 40);
+
+ assertEquals(manager.getTotalSize(), 90);
+
+ window = manager.createPageWindow(2, 30);
+ assertWindow(window, 2, 50, 30);
+ assertEquals(manager.getTotalSize(), 80);
+
+ manager.removePage(2);
+ assertEquals(manager.getTotalSize(), 50);
+
+ window = manager.createPageWindow(3, 30);
+ assertWindow(window, 3, 50, 30);
+ assertEquals(manager.getTotalSize(), 80);
+ }
+
+ /**
+ *
+ */
+ public void testPageWindowCycle()
+ {
+ PageWindowManager manager = new PageWindowManager(100);
+ PageWindow window;
+
+ window = manager.createPageWindow(1, 30);
+
+ window = manager.createPageWindow(2, 30);
+
+ window = manager.createPageWindow(3, 30);
+
+ assertWindow(window, 3, 60, 30);
+
+ window = manager.createPageWindow(4, 30);
+
+ assertWindow(window, 4, 90, 30);
+
+ // should start at the beginging
+
+ window = manager.createPageWindow(5, 20);
+
+ assertWindow(window, 5, 0, 20);
+
+ assertNull(manager.getPageWindow(1));
+
+ window = manager.getPageWindow(2);
+ assertWindow(window, 2, 30, 30);
+
+ window = manager.createPageWindow(6, 10);
+
+ assertWindow(window, 6, 20, 10);
+
+ window = manager.getPageWindow(2);
+ assertWindow(window, 2, 30, 30);
+
+ window = manager.createPageWindow(6, 30);
+ assertWindow(window, 6, 20, 30);
+
+ assertNull(manager.getPageWindow(2));
+ assertNotNull(manager.getPageWindow( 3));
+
+ window = manager.createPageWindow(6, 60);
+ assertWindow(window, 6, 20, 60);
+
+ assertNull(manager.getPageWindow(3));
+
+ window = manager.createPageWindow(7, 20);
+ assertWindow(window,7, 80, 20);
+
+ assertNotNull(manager.getPageWindow( 7));
+
+ // should start at the beginning again
+
+ window = manager.createPageWindow(8, 10);
+ assertWindow(window, 8, 0, 10);
+
+ assertNull(manager.getPageWindow(5));
+ assertNotNull(manager.getPageWindow(6));
+
+ window = manager.createPageWindow( 9, 20);
+ assertWindow(window, 9, 10, 20);
+
+ assertNull(manager.getPageWindow(6));
+ assertNotNull(manager.getPageWindow(7));
+
+ window = manager.createPageWindow(10, 20);
+ assertWindow(window,10, 30, 20);
+
+ assertNull(manager.getPageWindow(6));
+ assertNotNull(manager.getPageWindow(7));
+
+ // make sure when replacing a page that's not last the old "instance" is
+ // not valid anymore
+
+ manager.createPageWindow(8, 10);
+
+ window = manager.getPageWindow(8);
+ assertWindow(window, 8, 50, 10);
+ }
+
+
+ private void assertWindow(PageWindow window, int pageId, int filePartOffset, int filePartSize)
+ {
+ assertTrue(window.getPageId() == pageId &&
+ window.getFilePartOffset() == filePartOffset &&
+ window.getFilePartSize() == filePartSize);
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/UrlTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/UrlTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/UrlTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/UrlTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,234 @@
+/*
+ * 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.ng.request;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.Url.QueryParameter;
+
+/**
+ * @author Matej Knopp
+ * @author Igor Vaynberg
+ */
+
+// TODO test removeleadingsegments,prependleadingsegments
+public class UrlTest extends TestCase
+{
+ private void checkSegments(Url url, String... segments)
+ {
+ assertEquals(Arrays.asList(segments), url.getSegments());
+ }
+
+ private void checkQueryParams(Url url, String... params)
+ {
+ List<QueryParameter> list = new ArrayList<QueryParameter>();
+ for (int i = 0; i < params.length; i += 2)
+ {
+ QueryParameter p = new QueryParameter(params[i], params[i + 1]);
+ list.add(p);
+ }
+
+ assertEquals(list, url.getQueryParameters());
+ }
+
+ /**
+ *
+ */
+ public void testParse1()
+ {
+ String s = "foo/bar/baz?a=4&b=5";
+ Url url = Url.parse(s);
+ checkSegments(url, "foo", "bar", "baz");
+ checkQueryParams(url, "a", "4", "b", "5");
+ }
+
+ /**
+ *
+ */
+ public void testParse2()
+ {
+ String s = "foo/bar//baz?=4&6";
+ Url url = Url.parse(s);
+ checkSegments(url, "foo", "bar", "", "baz");
+ checkQueryParams(url, "", "4", "6", "");
+ }
+
+ /**
+ *
+ */
+ public void testParse3()
+ {
+ String s = "//foo/bar/";
+ Url url = Url.parse(s);
+ checkSegments(url, "", "", "foo", "bar", "");
+ checkQueryParams(url);
+ }
+
+ /**
+ *
+ */
+ public void testParse4()
+ {
+ String s = "/foo/bar//";
+ Url url = Url.parse(s);
+ checkSegments(url, "", "foo", "bar", "", "");
+ checkQueryParams(url);
+ }
+
+ /**
+ *
+ */
+ public void testParse5()
+ {
+ String s = "foo/b%3Dr/b%26z/x%3F?a=b&x%3F%264=y%3Dz";
+ Url url = Url.parse(s);
+ checkSegments(url, "foo", "b=r", "b&z", "x?");
+ checkQueryParams(url, "a", "b", "x?&4", "y=z");
+ }
+
+ /**
+ *
+ */
+ public void testParse6()
+ {
+ String s = "";
+ Url url = Url.parse(s);
+ checkSegments(url);
+ checkQueryParams(url);
+ }
+
+ /**
+ *
+ */
+ public void testParse7()
+ {
+ String s = "?a=b";
+ Url url = Url.parse(s);
+ checkSegments(url);
+ checkQueryParams(url, "a", "b");
+ }
+
+ /**
+ *
+ */
+ public void testParse8()
+ {
+ String s = "/";
+ Url url = Url.parse(s);
+ checkSegments(url, "", "");
+ checkQueryParams(url);
+ }
+
+ /**
+ *
+ */
+ public void testParse9()
+ {
+ String s = "/?a=b";
+ Url url = Url.parse(s);
+ checkSegments(url, "", "");
+ checkQueryParams(url, "a", "b");
+ }
+
+ /**
+ *
+ */
+ public void testRender1()
+ {
+ Url url = new Url();
+ url.getSegments().add("foo");
+ url.getSegments().add("b=r");
+ url.getSegments().add("b&z");
+ url.getSegments().add("x?");
+ url.setQueryParameter("a", "b");
+ url.setQueryParameter("x?&4", "y=z");
+
+ assertEquals("foo/b=r/b&z/x%3F?a=b&x?%264=y%3Dz", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testRender2()
+ {
+ String s = "/absolute/url";
+ Url url = Url.parse(s);
+ assertEquals(url.toString(), s);
+ }
+
+ /**
+ *
+ */
+ public void testRender3()
+ {
+ String s = "//absolute/url";
+ Url url = Url.parse(s);
+ assertEquals(url.toString(), s);
+ }
+
+ /**
+ *
+ */
+ public void testRender4()
+ {
+ String s = "/";
+ Url url = Url.parse(s);
+ assertEquals(url.toString(), s);
+ }
+
+ /**
+ *
+ */
+ public void testAbsolute1()
+ {
+ Url url = Url.parse("abc/efg");
+ assertFalse(url.isAbsolute());
+ }
+
+ /**
+ *
+ */
+ public void testAbsolute2()
+ {
+ Url url = Url.parse("");
+ assertFalse(url.isAbsolute());
+ }
+
+ /**
+ *
+ */
+ public void testAbsolute3()
+ {
+ Url url = Url.parse("/");
+ assertTrue(url.isAbsolute());
+ }
+
+ /**
+ *
+ */
+ public void testAbsolute4()
+ {
+ Url url = Url.parse("/abc/efg");
+ assertTrue(url.isAbsolute());
+ }
+
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/RequestHandlerStackTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/RequestHandlerStackTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/RequestHandlerStackTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/RequestHandlerStackTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,365 @@
+/*
+ * 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.ng.request.cycle;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.request.RequestHandler;
+import org.apache.wicket.ng.request.response.Response;
+
+/**
+ *
+ * @author Matej Knopp
+ */
+public class RequestHandlerStackTest extends TestCase
+{
+
+ /**
+ * Construct.
+ */
+ public RequestHandlerStackTest()
+ {
+ }
+
+ private Response newResponse()
+ {
+ return new Response()
+ {
+ @Override
+ public void write(byte[] array)
+ {
+ }
+
+ @Override
+ public void write(CharSequence sequence)
+ {
+ }
+
+ @Override
+ public String encodeURL(String url)
+ {
+ return null;
+ }
+ };
+ }
+
+ private RequestHandlerStack newStack(Response response)
+ {
+ return new RequestHandlerStack(response)
+ {
+ @Override
+ protected RequestCycle getRequestCycle()
+ {
+ return null;
+ }
+ };
+ }
+
+ private boolean testFlag1;
+ private boolean testFlag2;
+ private boolean testFlag3;
+ private boolean testFlag4;
+
+ private boolean detachedFlag1;
+ private boolean detachedFlag2;
+ private boolean detachedFlag3;
+ private boolean detachedFlag4;
+
+ private void initFlags()
+ {
+ testFlag1 = true;
+ testFlag2 = true;
+ testFlag3 = true;
+ testFlag4 = true;
+
+ detachedFlag1 = false;
+ detachedFlag2 = false;
+ detachedFlag3 = false;
+ detachedFlag4 = false;
+ }
+
+ /**
+ *
+ */
+ public void test1()
+ {
+ initFlags();
+
+ final Response originalResponse = newResponse();
+
+ final RequestHandlerStack stack = newStack(originalResponse);
+
+ final RequestHandler handler3 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag3 = false;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag3 = true;
+ }
+ };
+
+ final RequestHandler handler2 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag2 = false;
+
+ stack.replaceCurrentRequestHandler(handler3);
+
+ // this code must not be executed
+ testFlag2 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag2 = true;
+ }
+ };
+
+ final RequestHandler handler1 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag1 = false;
+
+ Response resp = newResponse();
+ stack.setResponse(resp);
+ stack.executeRequestHandler(handler2);
+ assertEquals(stack.getResponse(), resp);
+
+ // this code must be executed
+ testFlag1 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag1 = true;
+ }
+ };
+
+ stack.executeRequestHandler(handler1);
+
+ assertEquals(stack.getResponse(), originalResponse);
+
+ stack.detach();
+
+ assertTrue(testFlag1);
+ assertFalse(testFlag2);
+ assertFalse(testFlag3);
+
+ assertTrue(detachedFlag1);
+ assertTrue(detachedFlag2);
+ assertTrue(detachedFlag3);
+ }
+
+ /**
+ *
+ */
+ public void test2()
+ {
+ initFlags();
+
+ final Response originalResponse = newResponse();
+ final RequestHandlerStack stack = newStack(originalResponse);
+
+ final RequestHandler handler4 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag4 = false;
+
+ assertEquals(stack.getResponse(), originalResponse);
+
+ stack.setResponse(newResponse());
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag4 = true;
+ }
+ };
+
+ final RequestHandler handler3 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag3 = false;
+ stack.setResponse(newResponse());
+ stack.replaceAllRequestHandlers(handler4);
+ // code must not be reached
+ testFlag3 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag3 = true;
+ }
+ };
+
+ final RequestHandler handler2 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag2 = false;
+ stack.setResponse(newResponse());
+ stack.executeRequestHandler(handler3);
+ // code must not be reached
+ testFlag2 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag2 = true;
+ }
+ };
+
+ RequestHandler handler1 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag1 = false;
+ stack.setResponse(newResponse());
+ stack.executeRequestHandler(handler2);
+
+ // code must not be reached
+ testFlag1 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag1 = true;
+ }
+ };
+
+ stack.executeRequestHandler(handler1);
+
+ assertEquals(stack.getResponse(), originalResponse);
+
+ stack.detach();
+
+ assertFalse(testFlag1);
+ assertFalse(testFlag2);
+ assertFalse(testFlag3);
+ assertFalse(testFlag4);
+
+ assertTrue(detachedFlag1);
+ assertTrue(detachedFlag2);
+ assertTrue(detachedFlag3);
+ assertTrue(detachedFlag4);
+ }
+
+
+ /**
+ *
+ */
+ public void test3()
+ {
+ initFlags();
+
+ final Response originalResponse = newResponse();
+ final RequestHandlerStack stack = newStack(originalResponse);
+
+ final RequestHandler handler4 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag4 = true;
+
+ stack.setResponse(newResponse());
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag4 = true;
+ }
+ };
+
+ final RequestHandler handler3 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag3 = false;
+ stack.scheduleRequestHandlerAfterCurrent(handler4);
+
+ // make sure that handler4's respond method is fired after this one ends
+ testFlag4 = false;
+
+
+ // code must be be reached
+ testFlag3 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag3 = true;
+ }
+ };
+
+ final RequestHandler handler2 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag2 = false;
+ stack.executeRequestHandler(handler3);
+ // code must be reached
+ testFlag2 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag2 = true;
+ }
+ };
+
+ RequestHandler handler1 = new RequestHandler()
+ {
+ public void respond(RequestCycle requestCycle)
+ {
+ testFlag1 = false;
+ stack.executeRequestHandler(handler2);
+
+ // code must be reached
+ testFlag1 = true;
+ }
+
+ public void detach(RequestCycle requestCycle)
+ {
+ detachedFlag1 = true;
+ }
+ };
+
+ stack.executeRequestHandler(handler1);
+
+ assertEquals(stack.getResponse(), originalResponse);
+
+ stack.detach();
+
+ assertTrue(testFlag1);
+ assertTrue(testFlag2);
+ assertTrue(testFlag3);
+ assertTrue(testFlag4);
+
+ assertTrue(detachedFlag1);
+ assertTrue(detachedFlag2);
+ assertTrue(detachedFlag3);
+ assertTrue(detachedFlag4);
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/UrlRendererTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/UrlRendererTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/UrlRendererTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/cycle/UrlRendererTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,95 @@
+/*
+ * 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.ng.request.cycle;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.cycle.UrlRenderer;
+
+/**
+ * @author MAtej Knopp
+ */
+public class UrlRendererTest extends TestCase
+{
+ /**
+ *
+ */
+ public void test1()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("foo/bar/baz?a=b"));
+ assertEquals("xyz?x=y", r1.renderUrl(Url.parse("foo/bar/xyz?x=y")));
+ assertEquals("baz/xyz?x=y", r1.renderUrl(Url.parse("foo/bar/baz/xyz?x=y")));
+ assertEquals("../aaa/xyz?x=y", r1.renderUrl(Url.parse("foo/aaa/xyz?x=y")));
+ assertEquals("../../bbb/aaa/xyz?x=y", r1.renderUrl(Url.parse("bbb/aaa/xyz?x=y")));
+ }
+
+ /**
+ *
+ */
+ public void test2()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("foo/bar/baz?a=b"));
+ assertEquals("../../foo?x=y", r1.renderUrl(Url.parse("foo?x=y")));
+ assertEquals("../../aaa?x=y", r1.renderUrl(Url.parse("aaa?x=y")));
+ }
+
+ /**
+ *
+ */
+ public void test3()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("?a=b"));
+ assertEquals("a/b/c?x=y", r1.renderUrl(Url.parse("a/b/c?x=y")));
+ }
+
+ /**
+ *
+ */
+ public void test5()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("url"));
+ assertEquals("url?1", r1.renderUrl(Url.parse("url?1")));
+ }
+
+ /**
+ *
+ */
+ public void test6()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("url/"));
+ assertEquals("x?1", r1.renderUrl(Url.parse("url/x?1")));
+ }
+
+ /**
+ *
+ */
+ public void test7()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("MyTestPage/indexed1/indexed2/indexed3?10-27.ILinkListener-l2&p1=v1"));
+ assertEquals("../../../MyTestPage?10", r1.renderUrl(Url.parse("MyTestPage?10")));
+ }
+
+ /**
+ *
+ */
+ public void test8()
+ {
+ UrlRenderer r1 = new UrlRenderer(Url.parse("en/first-test-page?16-1.ILinkListener-l1"));
+ assertEquals("first-test-page/indexed1/indexed2/indexed3?p1=v1", r1.renderUrl(Url.parse("en/first-test-page/indexed1/indexed2/indexed3?p1=v1")));
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractEncoderTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractEncoderTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractEncoderTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,67 @@
+/*
+ * 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.ng.request.mapper;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.ng.markup.html.link.ILinkListener;
+import org.apache.wicket.ng.request.Request;
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.component.RequestablePage;
+import org.apache.wicket.ng.request.listener.RequestListenerInterface;
+
+/**
+ * @author Matej Knopp
+ */
+public abstract class AbstractEncoderTest extends TestCase
+{
+
+ /**
+ * Construct.
+ */
+ public AbstractEncoderTest()
+ {
+ }
+
+ protected TestMapperContext context = new TestMapperContext();
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ // inititalize the interface
+ @SuppressWarnings("unused")
+ RequestListenerInterface i = ILinkListener.INTERFACE;
+ }
+
+ protected Request getRequest(final Url url)
+ {
+ return new Request()
+ {
+ @Override
+ public Url getUrl()
+ {
+ return url;
+ }
+ };
+ }
+
+ protected void checkPage(RequestablePage page, int id)
+ {
+ assertEquals(id, page.getPageId());
+ }
+
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/AbstractResourceReferenceEncoderTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,129 @@
+/*
+ * 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.ng.request.mapper;
+
+import java.util.Locale;
+
+import org.apache.wicket.ng.resource.Resource;
+import org.apache.wicket.ng.resource.ResourceReference;
+
+/**
+ * @author Matej Knopp
+ */
+public abstract class AbstractResourceReferenceEncoderTest extends AbstractEncoderTest
+{
+
+ /**
+ * Construct.
+ */
+ public AbstractResourceReferenceEncoderTest()
+ {
+ }
+
+ protected final Resource resource1 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource2 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource3 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected final Resource resource4 = new Resource()
+ {
+ private static final long serialVersionUID = 1L;
+
+ public void respond(Attributes attributes)
+ {
+ }
+ };
+
+ protected String CLASS_NAME = AbstractResourceReferenceEncoderTest.class.getName();
+
+ protected ResourceReference reference1 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference1", null, null)
+ {
+ private static final long serialVersionUID = 1L;
+
+ public Resource getResource()
+ {
+ return resource1;
+ };
+ };
+
+ protected ResourceReference reference2 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference2/name2", new Locale("en", "en"), null)
+ {
+ private static final long serialVersionUID = 1L;
+
+ public Resource getResource()
+ {
+ return resource2;
+ };
+ };
+
+ protected ResourceReference reference3 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference3", null, "style")
+ {
+ private static final long serialVersionUID = 1L;
+
+ public Resource getResource()
+ {
+ return resource3;
+ };
+ };
+
+ protected ResourceReference reference4 = new ResourceReference(
+ AbstractResourceReferenceEncoderTest.class, "reference4", Locale.ENGLISH, "style")
+ {
+ private static final long serialVersionUID = 1L;
+
+ public Resource getResource()
+ {
+ return resource4;
+ };
+ };
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ context.getResourceReferenceRegistry().registerResourceReference(reference1);
+ context.getResourceReferenceRegistry().registerResourceReference(reference2);
+ context.getResourceReferenceRegistry().registerResourceReference(reference3);
+ context.getResourceReferenceRegistry().registerResourceReference(reference4);
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/BookmarkableEncoderTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/BookmarkableEncoderTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/BookmarkableEncoderTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/BookmarkableEncoderTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,406 @@
+/*
+ * 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.ng.request.mapper;
+
+import org.apache.wicket.ng.MockPage;
+import org.apache.wicket.ng.markup.html.link.ILinkListener;
+import org.apache.wicket.ng.request.RequestHandler;
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.component.RequestableComponent;
+import org.apache.wicket.ng.request.component.RequestablePage;
+import org.apache.wicket.ng.request.handler.PageAndComponentProvider;
+import org.apache.wicket.ng.request.handler.PageProvider;
+import org.apache.wicket.ng.request.handler.PageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.request.mapper.BookmarkableMapper;
+import org.apache.wicket.ng.request.mapper.MapperContext;
+import org.apache.wicket.ng.request.mapper.StalePageException;
+
+/**
+ * @author Matej Knopp
+ */
+public class BookmarkableEncoderTest extends AbstractEncoderTest
+{
+
+ /**
+ * Construct.
+ */
+ public BookmarkableEncoderTest()
+ {
+ }
+
+ private BookmarkableMapper encoder = new BookmarkableMapper()
+ {
+ @Override
+ protected MapperContext getContext()
+ {
+ return context;
+ }
+ };
+
+ private static final String PAGE_CLASS_NAME = MockPage.class.getName();
+
+ /**
+ *
+ */
+ public void testDecode1()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME);
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
+ assertEquals(0, page.getPageParameters().getIndexedParamsCount());
+ assertTrue(page.getPageParameters().getNamedParameterKeys().isEmpty());
+ }
+
+ /**
+ *
+ */
+ public void testDecode2()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + "/indexed1?a=b&b=c");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ assertEquals(PAGE_CLASS_NAME, page.getClass().getName());
+
+ 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("wicket/bookmarkable/" + PAGE_CLASS_NAME + "?15");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ checkPage(page, 15);
+ }
+
+ /**
+ *
+ */
+ public void testDecode4()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ checkPage(page, 15);
+
+ 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("wicket/bookmarkable/" + PAGE_CLASS_NAME + "?15-ILinkListener-foo-bar");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+ assertEquals("foo:bar", h.getComponent().getPath());
+ assertNull(h.getBehaviorIndex());
+ }
+
+ /**
+ *
+ */
+ public void testDecode6()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-ILinkListener-foo-bar&a=b&b=c");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ 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("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "?15-ILinkListener.4-foo-bar");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+ assertEquals("foo:bar", h.getComponent().getPath());
+ assertEquals((Object)4, h.getBehaviorIndex());
+ }
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+
+ context.setNextPageRenderCount(5);
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ assertEquals(page.getRenderCount(), 5);
+ }
+
+ /**
+ *
+ */
+ public void testDecode9()
+ {
+ Url url = Url.parse("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-5.ILinkListener-foo-bar&a=b&b=c");
+
+ context.setNextPageRenderCount(6);
+
+ try
+ {
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ ((PageRequestHandler)handler).getPage();
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
+
+ /**
+ *
+ */
+ public void testEncode1()
+ {
+ PageProvider provider = new PageProvider(MockPage.class, new PageParameters());
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME, 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");
+ PageProvider provider = new PageProvider(MockPage.class, parameters);
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + "/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");
+
+ PageProvider provider = new PageProvider(MockPage.class, parameters);
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + "/i1/i2?a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode4()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+ page.setCreatedBookmarkable(true);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME + "/i1/i2?15&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode5()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+
+ page.setCreatedBookmarkable(false);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ // never allow bookmarkable render url for page that has not been created by bookmarkable
+ // URL
+
+ assertNull(url);
+ }
+
+ /**
+ *
+ */
+ public void testEncode6()
+ {
+ MockPage page = new MockPage(15);
+ 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);
+
+ RequestableComponent c = page.get("foo:bar");
+
+ PageAndComponentProvider provider = new PageAndComponentProvider(page, c);
+ RequestHandler handler = new BookmarkableListenerInterfaceRequestHandler(provider,
+ ILinkListener.INTERFACE);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-0.ILinkListener-foo-bar&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode7()
+ {
+ MockPage page = new MockPage(15);
+ 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);
+
+ RequestableComponent c = page.get("foo:bar");
+
+ PageAndComponentProvider provider = new PageAndComponentProvider(page, c);
+ RequestHandler handler = new BookmarkableListenerInterfaceRequestHandler(provider,
+ ILinkListener.INTERFACE, 4);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME +
+ "/i1/i2?15-0.ILinkListener.4-foo-bar&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode8()
+ {
+ MockPage page = new MockPage(15);
+ page.setBookmarkable(true);
+ page.setCreatedBookmarkable(true);
+ page.setPageStateless(true);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("wicket/bookmarkable/" + PAGE_CLASS_NAME, url.toString());
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/MountedMapperTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/MountedMapperTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/MountedMapperTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/MountedMapperTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,529 @@
+/*
+ * 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.ng.request.mapper;
+
+import org.apache.wicket.ng.MockPage;
+import org.apache.wicket.ng.markup.html.link.ILinkListener;
+import org.apache.wicket.ng.request.RequestHandler;
+import org.apache.wicket.ng.request.RequestMapper;
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.component.PageParameters;
+import org.apache.wicket.ng.request.component.RequestableComponent;
+import org.apache.wicket.ng.request.component.RequestablePage;
+import org.apache.wicket.ng.request.handler.PageAndComponentProvider;
+import org.apache.wicket.ng.request.handler.PageProvider;
+import org.apache.wicket.ng.request.handler.PageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.BookmarkableListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.BookmarkablePageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.request.mapper.MapperContext;
+import org.apache.wicket.ng.request.mapper.MountedMapper;
+import org.apache.wicket.ng.request.mapper.StalePageException;
+
+/**
+ * @author Matej Knopp
+ */
+public class MountedMapperTest extends AbstractEncoderTest
+{
+
+ /**
+ * Construct.
+ */
+ public MountedMapperTest()
+ {
+ }
+
+ private MountedMapper encoder = new MountedMapper("/some/mount/path", MockPage.class)
+ {
+ @Override
+ protected MapperContext getContext()
+ {
+ return context;
+ }
+ };
+
+ private MountedMapper placeholderEncoder = new MountedMapper("/some/${param1}/path/${param2}",
+ MockPage.class)
+ {
+ @Override
+ protected MapperContext getContext()
+ {
+ return context;
+ }
+ };
+
+ /**
+ *
+ */
+ public void testDecode1()
+ {
+ Url url = Url.parse("some/mount/path");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage 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.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage 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.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ checkPage(page, 15);
+ }
+
+ /**
+ *
+ */
+ public void testDecode4()
+ {
+ Url url = Url.parse("some/mount/path/i1/i2?15&a=b&b=c");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+ checkPage(page, 15);
+
+ 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.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ 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?15-ILinkListener-foo-bar&a=b&b=c");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ 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.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ checkPage(page, 15);
+
+ assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+ assertEquals("foo:bar", h.getComponent().getPath());
+ assertEquals((Object)4, h.getBehaviorIndex());
+ }
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("some/mmount/path?15-ILinkListener.4-foo-bar");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertNull(handler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode9()
+ {
+ // capture the home page
+ Url url = Url.parse("");
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode10()
+ {
+ Url url = Url.parse("some/mount/path?15-5.ILinkListener.4-foo-bar");
+ context.setNextPageRenderCount(5);
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+
+ RequestablePage page = h.getPage();
+ assertEquals(5, page.getRenderCount());
+ }
+
+ /**
+ *
+ */
+ public void testDecode11()
+ {
+ Url url = Url.parse("some/mount/path?15-5.ILinkListener.4-foo-bar");
+ context.setNextPageRenderCount(7);
+
+ try
+ {
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ ((PageRequestHandler)handler).getPage();
+
+ // should never get here
+ assertTrue(false);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
+
+ /**
+ *
+ */
+ public void testEncode1()
+ {
+ PageProvider provider = new PageProvider(MockPage.class, new PageParameters());
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(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");
+ PageProvider provider = new PageProvider(MockPage.class, parameters);
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(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");
+
+ PageProvider provider = new PageProvider(MockPage.class, parameters);
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("some/mount/path/i1/i2?a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode4()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+ page.setCreatedBookmarkable(true);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("some/mount/path/i1/i2?15&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode5()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+
+ page.setCreatedBookmarkable(false);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+ Url url = encoder.mapHandler(handler);
+
+ // mounted pages must render mounted url even for page that has not been created by
+ // bookmarkable
+ // URL
+
+ assertEquals("some/mount/path/i1/i2?15&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode6()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+ page.setRenderCount(4);
+
+ // shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
+ // as this explicitely says the url must be bookmarkable
+ page.setCreatedBookmarkable(false);
+
+ RequestableComponent c = page.get("foo:bar");
+
+ PageAndComponentProvider provider = new PageAndComponentProvider(page, c);
+ RequestHandler handler = new BookmarkableListenerInterfaceRequestHandler(provider,
+ ILinkListener.INTERFACE);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("some/mount/path/i1/i2?15-4.ILinkListener-foo-bar&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode7()
+ {
+ MockPage page = new MockPage(15);
+ page.getPageParameters().setIndexedParameter(0, "i1");
+ page.getPageParameters().setIndexedParameter(1, "i2");
+ page.getPageParameters().setNamedParameter("a", "b");
+ page.getPageParameters().setNamedParameter("b", "c");
+ page.setRenderCount(5);
+
+ // shouldn't make any difference for BookmarkableListenerInterfaceRequestHandler,
+ // as this explicitely says the url must be bookmarkable
+ page.setCreatedBookmarkable(false);
+
+ RequestableComponent c = page.get("foo:bar");
+
+ PageAndComponentProvider provider = new PageAndComponentProvider(page, c);
+ RequestHandler handler = new BookmarkableListenerInterfaceRequestHandler(provider,
+ ILinkListener.INTERFACE, 4);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("some/mount/path/i1/i2?15-5.ILinkListener.4-foo-bar&a=b&b=c", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testEncode8()
+ {
+ MockPage page = new MockPage(15);
+ page.setBookmarkable(true);
+ page.setCreatedBookmarkable(true);
+ page.setPageStateless(true);
+
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+
+ Url url = encoder.mapHandler(handler);
+
+ assertEquals("some/mount/path", url.toString());
+ }
+
+ /**
+ *
+ */
+ public void testConstruct1()
+ {
+ try
+ {
+ @SuppressWarnings("unused")
+ RequestMapper e = new MountedMapper("", MockPage.class);
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // ok
+ }
+ }
+
+ /**
+ *
+ */
+ public void testConstruct2()
+ {
+ try
+ {
+ @SuppressWarnings("unused")
+ RequestMapper e = new MountedMapper("/", MockPage.class);
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // ok
+ }
+ }
+
+ /**
+ *
+ */
+ public void testPlaceholderDecode1()
+ {
+ Url url = Url.parse("some/p1/path/p2");
+ RequestHandler handler = placeholderEncoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+
+ assertEquals(0, page.getPageParameters().getIndexedParamsCount());
+ assertTrue(page.getPageParameters().getNamedParameterKeys().size() == 2);
+ assertEquals("p1", page.getPageParameters().getNamedParameter("param1").toString());
+ assertEquals("p2", page.getPageParameters().getNamedParameter("param2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testPlaceholderDecode2()
+ {
+ Url url = Url.parse("some/p1/path/p2/indexed1?a=b&b=c");
+ RequestHandler handler = placeholderEncoder.mapRequest(getRequest(url));
+
+ assertTrue(handler instanceof RenderPageRequestHandler);
+ RequestablePage page = ((RenderPageRequestHandler)handler).getPage();
+
+ PageParameters p = page.getPageParameters();
+ assertEquals(1, p.getIndexedParamsCount());
+ assertEquals("indexed1", p.getIndexedParameter(0).toString());
+
+ assertEquals(4, p.getNamedParameterKeys().size());
+ assertEquals("b", p.getNamedParameter("a").toString());
+ assertEquals("c", p.getNamedParameter("b").toString());
+ assertEquals("p1", page.getPageParameters().getNamedParameter("param1").toString());
+ assertEquals("p2", page.getPageParameters().getNamedParameter("param2").toString());
+ }
+
+ /**
+ *
+ */
+ public void testPlaceholderEncode2()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.setIndexedParameter(0, "i1");
+ parameters.setIndexedParameter(1, "i2");
+ parameters.setNamedParameter("a", "b");
+ parameters.setNamedParameter("b", "c");
+ parameters.setNamedParameter("param1", "p1");
+ parameters.setNamedParameter("param2", "p2");
+
+
+ PageProvider provider = new PageProvider(MockPage.class, parameters);
+ provider.setPageSource(context);
+ RequestHandler handler = new BookmarkablePageRequestHandler(provider);
+ Url url = placeholderEncoder.mapHandler(handler);
+ assertEquals("some/p1/path/p2/i1/i2?a=b&b=c", url.toString());
+ }
+}
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/PageInstanceMapperTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/PageInstanceMapperTest.java?rev=823984&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/PageInstanceMapperTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ng/request/mapper/PageInstanceMapperTest.java Sun Oct 11 00:02:25 2009
@@ -0,0 +1,213 @@
+/*
+ * 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.ng.request.mapper;
+
+import org.apache.wicket.ng.MockPage;
+import org.apache.wicket.ng.markup.html.link.ILinkListener;
+import org.apache.wicket.ng.request.RequestHandler;
+import org.apache.wicket.ng.request.Url;
+import org.apache.wicket.ng.request.component.RequestableComponent;
+import org.apache.wicket.ng.request.handler.PageAndComponentProvider;
+import org.apache.wicket.ng.request.handler.PageProvider;
+import org.apache.wicket.ng.request.handler.PageRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.ListenerInterfaceRequestHandler;
+import org.apache.wicket.ng.request.handler.impl.RenderPageRequestHandler;
+import org.apache.wicket.ng.request.mapper.MapperContext;
+import org.apache.wicket.ng.request.mapper.PageInstanceMapper;
+import org.apache.wicket.ng.request.mapper.StalePageException;
+
+/**
+ *
+ * @author Matej Knopp
+ */
+public class PageInstanceMapperTest extends AbstractEncoderTest
+{
+
+ /**
+ *
+ * Construct.
+ */
+ public PageInstanceMapperTest()
+ {
+ }
+
+ private PageInstanceMapper encoder = new PageInstanceMapper()
+ {
+ @Override
+ protected MapperContext getContext()
+ {
+ return context;
+ }
+ };
+
+ /**
+ *
+ */
+ public void testDecode1()
+ {
+ Url url = Url.parse("wicket/page?4");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof RenderPageRequestHandler);
+
+ RenderPageRequestHandler h = (RenderPageRequestHandler)handler;
+ checkPage(h.getPage(), 4);
+ }
+
+ /**
+ *
+ */
+ public void testDecode2()
+ {
+ Url url = Url.parse("wicket/page/ingore/me?4&a=3&b=3");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof RenderPageRequestHandler);
+
+ RenderPageRequestHandler h = (RenderPageRequestHandler)handler;
+ checkPage(h.getPage(), 4);
+ }
+
+ /**
+ *
+ */
+ public void testDecode3()
+ {
+ Url url = Url.parse("wicket/page?4-ILinkListener-a-b-c");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+ checkPage(h.getPage(), 4);
+ assertEquals(h.getComponent().getPath(), "a:b:c");
+ assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+ assertNull(h.getBehaviorIndex());
+ }
+
+ /**
+ *
+ */
+ public void testDecode4()
+ {
+ Url url = Url.parse("wickett/pagee?4-ILinkListener-a:b-c");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertNull(handler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode5()
+ {
+ Url url = Url.parse("wicket/page?abc");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertNull(handler);
+ }
+
+ /**
+ *
+ */
+ public void testDecode6()
+ {
+ Url url = Url.parse("wicket/page?4-ILinkListener.5-a-b-c");
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+ checkPage(h.getPage(), 4);
+ assertEquals(h.getComponent().getPath(), "a:b:c");
+ assertEquals(ILinkListener.INTERFACE, h.getListenerInterface());
+ assertEquals((Object)5, h.getBehaviorIndex());
+ }
+
+ /**
+ *
+ */
+ public void testDecode7()
+ {
+ Url url = Url.parse("wicket/page?4-6.ILinkListener.5-a-b-c");
+
+ context.setNextPageRenderCount(6);
+
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+ assertTrue(handler instanceof ListenerInterfaceRequestHandler);
+
+ ListenerInterfaceRequestHandler h = (ListenerInterfaceRequestHandler)handler;
+ assertEquals(6, h.getPage().getRenderCount());
+ }
+
+ /**
+ *
+ */
+ public void testDecode8()
+ {
+ Url url = Url.parse("wicket/page?4-6.ILinkListener.5-a-b-c");
+
+ context.setNextPageRenderCount(8);
+
+ try
+ {
+ RequestHandler handler = encoder.mapRequest(getRequest(url));
+
+ ((PageRequestHandler)handler).getPage();
+
+ // should never get here
+ assertFalse(true);
+ }
+ catch (StalePageException e)
+ {
+
+ }
+ }
+
+ /**
+ *
+ */
+ public void testEncode1()
+ {
+ MockPage page = new MockPage(15);
+ PageProvider provider = new PageProvider(page);
+ RequestHandler handler = new RenderPageRequestHandler(provider);
+
+ Url url = encoder.mapHandler(handler);
+ assertEquals("wicket/page?15", url.toString());
+ }
+
+
+ /**
+ *
+ */
+ public void testEncode2()
+ {
+ MockPage page = new MockPage(15);
+ page.setRenderCount(5);
+
+ RequestableComponent c = page.get("a:b:c");
+
+ PageAndComponentProvider provider = new PageAndComponentProvider(page, c);
+ RequestHandler handler = new ListenerInterfaceRequestHandler(provider,
+ ILinkListener.INTERFACE);
+
+ Url url = encoder.mapHandler(handler);
+ assertEquals("wicket/page?15-5.ILinkListener-a-b-c", url.toString());
+ }
+
+}