You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2007/05/31 22:44:35 UTC

svn commit: r543248 - in /incubator/wicket/trunk/jdk-1.4/wicket/src: main/java/org/apache/wicket/protocol/http/ test/java/org/apache/wicket/stateless/ test/java/org/apache/wicket/stateless/pages/

Author: jcompagner
Date: Thu May 31 13:44:34 2007
New Revision: 543248

URL: http://svn.apache.org/viewvc?view=rev&rev=543248
Log:
fixes for stateless testing of forms/pages
mock servlet request must also clean/initialize the url variable

Added:
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html   (with props)
    incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java   (with props)
Modified:
    incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java

Modified: incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java?view=diff&rev=543248&r1=543247&r2=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java (original)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java Thu May 31 13:44:34 2007
@@ -918,6 +918,7 @@
 		cookies.clear();
 		setDefaultHeaders();
 		path = null;
+		url = null;
 		characterEncoding = "UTF-8";
 		parameters.clear();
 		attributes.clear();
@@ -1196,6 +1197,12 @@
 			parameters.put(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME, pageMapName + ':'
 					+ component.getPath() + ':' + (version == 0 ? "" : "" + version) + ':'
 					+ Classes.simpleName(clazz) + "::");
+			
+			if (component.isStateless() && component.getPage().isBookmarkable())
+			{
+				parameters.put(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME, pageMapName
+						+ ':' + component.getPage().getClass().getName());
+			}
 		}
 	}
 

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java Thu May 31 13:44:34 2007
@@ -0,0 +1,102 @@
+package org.apache.wicket.stateless;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.markup.html.form.IFormSubmitListener;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.stateless.pages.HomePage;
+import org.apache.wicket.stateless.pages.LoginPage;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author marrink
+ */
+public class StatelessFormTest extends TestCase
+{
+	private static final Logger log = LoggerFactory.getLogger(StatelessFormTest.class);
+
+	private WicketTester mock = null;
+
+	private WebApplication application;
+
+	private Class homePage = HomePage.class;
+	private Class loginPage = LoginPage.class;
+
+
+	protected void setUp() throws Exception
+	{
+		mock = new WicketTester(application = new WebApplication()
+		{
+
+
+			public Class getHomePage()
+			{
+				return StatelessFormTest.this.getHomePage();
+			}
+		}, "src/test/java/" + getClass().getPackage().getName().replace('.', '/'));
+	}
+
+	protected void tearDown() throws Exception
+	{
+		mock.setupRequestAndResponse();
+		mock.getWicketSession().invalidate();
+		mock.processRequestCycle();
+		mock.destroy();
+		mock = null;
+		application = null;
+		setHomePage(HomePage.class);
+		setLoginPage(LoginPage.class);
+	}
+
+	/**
+	 * @return Returns the homePage.
+	 */
+	public Class getHomePage()
+	{
+		return homePage;
+	}
+
+	/**
+	 * @param homePage The homePage to set.
+	 */
+	public void setHomePage(Class homePage)
+	{
+		this.homePage = homePage;
+	}
+
+	/**
+	 * @return Returns the loginPage.
+	 */
+	public Class getLoginPage()
+	{
+		return loginPage;
+	}
+
+	/**
+	 * @param loginPage The loginPage to set.
+	 */
+	public void setLoginPage(Class loginPage)
+	{
+		this.loginPage = loginPage;
+	}
+
+	/**
+	 * Login through the login page.
+	 */
+	public void testLogin()
+	{
+		mock.startPage(getLoginPage());
+		mock.assertRenderedPage(getLoginPage());
+		FormTester form = mock.newFormTester("signInPanel:signInForm");
+		form.setValue("username", "test");
+		form.setValue("password", "test");
+		form.submit();
+		mock.assertRenderedPage(getHomePage());
+	}
+
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/StatelessFormTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html Thu May 31 13:44:34 2007
@@ -0,0 +1,12 @@
+<!DOCTYPE html
+PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns:wicket>
+<head>
+	<title>Homepage</title>
+</head>
+<body>
+<span wicket:id="welcome"></span>
+<a href="#" wicket:id="link">Click me</a>
+</body>
+</html>

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java Thu May 31 13:44:34 2007
@@ -0,0 +1,38 @@
+package org.apache.wicket.stateless.pages;
+
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+
+
+/**
+ * @author marrink
+ * 
+ */
+public class HomePage extends WebPage
+{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 
+	 */
+	public HomePage()
+	{
+		add(new Label("welcome", "Welcome"));
+		add(new Link("link")
+		{
+			private static final long serialVersionUID = 1L;
+
+			public void onClick()
+			{
+				setVisible(true); // dummy op
+			}
+		});
+
+	}
+
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/HomePage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html Thu May 31 13:44:34 2007
@@ -0,0 +1,62 @@
+<!DOCTYPE html
+PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<title>Carmel College</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<link href="style.css" rel="stylesheet" type="text/css" />
+
+
+<!-- Browsercheck -->
+<script type="text/javascript" src="browser_detect.js"></script>
+
+<!-- Voor de dropdown functionaliteit -->
+<script type="text/javascript" src="dropdown.js"></script>
+
+<wicket:remove>
+	<link href="../../../../../../../../webapp/style.css" type="text/css" rel="stylesheet" />
+</wicket:remove>
+</head>
+<body>
+<div class="pagecontainer withsearch">
+<div class="filler"></div>
+
+<IFRAME
+	style="Z-INDEX: 2; DISPLAY: none; LEFT: 0px; POSITION: absolute; TOP: 0px"
+	src="javascript:false;" id="iefix" frameBorder="0" scrolling="no"></IFRAME>
+
+<div style="height:70px;"></div>
+<div class="inlogContainer">
+
+  <div class="maintop" id="inlogwidth">
+    <div class="maintop_left" id="inlogmenuleft" style="border-right:none;">
+      <span class="pagetitle" id="systemname">Vocus Leerling Informatie Systeem</span>
+    </div>
+    <div class="maintop_left maintop_right" id="inlogmenuright" style="border-left:none;"></div>
+  </div>
+
+  <div class="menuwrap" id="loginschool">&nbsp;</div>
+
+  <div class="searchbar nosearch" id="inlogsearchbar"></div>
+  <div class="contentbox cbnosearch" id="inlogcontent">
+	 
+	 <div class="loginLeft">
+		<span wicket:id="signInPanel"> login panel comes here </span>
+	</div> 
+
+  	<div class="loginRight">	  
+	  TESTING
+	</div>
+
+  </div>
+
+  <div class="mainbottom" id="inlogwidth">
+    <div class="mainbottom_left" id="inlogbar"></div>
+    <div class="mainbottom_left mainbottom_right"></div>
+  </div>
+
+</div>
+</div>
+</body>
+</html>

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java Thu May 31 13:44:34 2007
@@ -0,0 +1,35 @@
+package org.apache.wicket.stateless.pages;
+
+import org.apache.wicket.markup.html.WebPage;
+
+/**
+ * 
+ * @author marrink
+ */
+public class LoginPage extends WebPage
+{
+
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * Constructor.
+	 */
+	public LoginPage()
+	{
+		setStatelessHint(true);
+		String panelId = "signInPanel";
+		newUserPasswordSignInPanel(panelId);
+	}
+
+	/**
+	 * Creeert een sign in panel voor instellingen die hun authenticatie enkel baseren op
+	 * username/wachtwoord.
+	 * @param panelId
+	 * @param info
+	 */
+	private void newUserPasswordSignInPanel(String panelId)
+	{
+		add(new UsernamePasswordSignInPanel(panelId));
+	}
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/LoginPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html Thu May 31 13:44:34 2007
@@ -0,0 +1,21 @@
+<html xmlns:wicket>
+<body>
+<wicket:panel>
+ 	<div class="caption inlogcaption">Aanmelden voor <span wicket:id="naam"></span></div>
+	<form id="signInForm" wicket:id="signInForm">
+		<span class="inloglabel">Gebruikersnaam</span><span class="inloglabel_value"><input type="text" value="" wicket:id="username" class="label_active inlogbox" id="username"/></span>
+		<span class="inloglabel">Wachtwoord</span><span class="inloglabel_value"><input type="password" value="" wicket:id="password" class="label_active inlogbox" id="password" autocomplete="off" /></span>
+		<span wicket:id="rememberMeRow"><span class="inloglabel"> </span><span class="inloglabel_value"><input type="checkbox" id="datsave" wicket:id="rememberMe" style="position:relative;left:-3px;"/><label class="inlogcb" for=datsave>Gegevens opslaan</label></span></span>
+		<span class="inloglabel"> </span><span class="inloglabel_value"><div class="std_button btn_left inlogbtn"><a onClick="form=getElementById('signInForm');form.submit();return true;" href="#"><span>Aanmelden</span></a></div></span>
+		<input type="submit" style="width:0px; height:0px; position:absolute; top:-300px;" tabIndex="-1"/>
+	</form>
+	<span id="loginError" wicket:id="feedback"/>
+	<script type="text/javascript">
+    if(document.getElementById('username').value == "")
+        document.getElementById('username').focus();
+    else
+    	document.getElementById('password').focus();
+	</script>
+</wicket:panel>
+</body>
+</html>

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java
URL: http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java?view=auto&rev=543248
==============================================================================
--- incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java (added)
+++ incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java Thu May 31 13:44:34 2007
@@ -0,0 +1,150 @@
+/*
+ * $Id: UsernamePasswordSignInPanel.java,v 1.3 2007/03/05 12:40:32 dashorst Exp $
+ * $Revision: 1.3 $ $Date: 2007/03/05 12:40:32 $
+ * 
+ * ==============================================================================
+ * Licensed 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.stateless.pages;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.value.ValueMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * 
+ * @author marrink
+ *
+ */
+public class UsernamePasswordSignInPanel extends Panel
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = LoggerFactory.getLogger(UsernamePasswordSignInPanel.class);
+	/**
+	 * Constructor.
+	 */
+	public UsernamePasswordSignInPanel(final String id)
+	{
+		super(id);
+
+		add(new FeedbackPanel("feedback"));
+		add(new Label("naam"));
+		add(new SignInForm("signInForm"));
+	}
+
+	/**
+	 * 
+	 * @param username
+	 * @param password
+	 * @return
+	 */
+	public boolean signIn(String username, String password)
+	{
+		return true;
+	}
+
+	/**
+	 * Sign in form.
+	 */
+	public final class SignInForm extends StatelessForm
+	{
+		/** Voor serializatie. */
+		private static final long serialVersionUID = 1L;
+
+		/** Moeten de inlog waarden bewaard blijven? */
+		private boolean rememberMe = true;
+
+		/**
+		 * Constructor.
+		 * @param id id of the form component
+		 */
+		public SignInForm(final String id)
+		{
+			super(id, new CompoundPropertyModel(new ValueMap()));
+
+			// only save username, not passwords
+			add(new TextField("username").setPersistent(rememberMe));
+			add(new PasswordTextField("password"));
+			// MarkupContainer row for remember me checkbox
+			WebMarkupContainer rememberMeRow = new WebMarkupContainer("rememberMeRow");
+			add(rememberMeRow);
+
+			// Add rememberMe checkbox
+			rememberMeRow.add(new CheckBox("rememberMe", new PropertyModel(this, "rememberMe")));
+		}
+
+		/**
+		 * @see wicket.markup.html.form.Form#onSubmit()
+		 */
+		public final void onSubmit()
+		{
+			if (!rememberMe)
+			{
+				// Verwijder de persistente waarden van het formulier
+				getPage().removePersistedFormData(SignInForm.class, true);
+			}
+
+			ValueMap values = (ValueMap) getModelObject();
+			String username = values.getString("username");
+			String password = values.getString("password");
+
+			if (signIn(username, password))
+			{
+				if (!getPage().continueToOriginalDestination())
+				{
+					setResponsePage(Application.get().getHomePage());
+				}
+			}
+			else
+			{
+				// Try the component based localizer first. If not found try the
+				// application localizer. Else use the default
+				error(getLocalizer().getString("exception.login", this,
+						"Illegal username password combo"));
+			}
+		}
+
+		/**
+		 * Geeft terug of de waarden van het formulier bewaard moeten worden of niet.
+		 */
+		public boolean getRememberMe()
+		{
+			return rememberMe;
+		}
+
+		/**
+		 * Zet of de waarden van het formulier bewaard moeten worden of niet.
+		 */
+		public void setRememberMe(boolean rememberMe)
+		{
+			this.rememberMe = rememberMe;
+			((FormComponent) get("username")).setPersistent(rememberMe);
+		}
+	}
+}

Propchange: incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/pages/UsernamePasswordSignInPanel.java
------------------------------------------------------------------------------
    svn:eol-style = native