You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by da...@apache.org on 2009/02/20 23:38:21 UTC

svn commit: r746396 - in /wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src: main/java/org/apache/wicket/markup/ test/java/org/apache/wicket/markup/parser/

Author: dashorst
Date: Fri Feb 20 22:38:20 2009
New Revision: 746396

URL: http://svn.apache.org/viewvc?rev=746396&view=rev
Log:
WICKET-2105: backported fix from Juergen. It took a while to get the test to fail, but on JDK 1.6 it did, and after the patch, the test succeeded.

Added:
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.html
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.java
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.html
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.java
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Test.java
Modified:
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java?rev=746396&r1=746395&r2=746396&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/MarkupParser.java Fri Feb 20 22:38:20 2009
@@ -68,7 +68,7 @@
 	private static final Logger log = LoggerFactory.getLogger(MarkupParser.class);
 
 	/** Conditional comment section, which is NOT treated as a comment section */
-	private static final Pattern CONDITIONAL_COMMENT = Pattern.compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
+	private static final Pattern CONDITIONAL_COMMENT = Pattern.compile("\\[if .+\\]>((?s).*)<!\\[endif\\]");
 
 	/** The XML parser to use */
 	private final IXmlPullParser xmlParser;
@@ -195,6 +195,7 @@
 	 * @see #appendMarkupFilter(IMarkupFilter)
 	 * @deprecated since 1.3
 	 */
+	@Deprecated
 	protected void initFilterChain()
 	{
 		throw new WicketRuntimeException("This method is no longer suppoert: since 1.3");
@@ -476,15 +477,17 @@
 	}
 
 	/**
-	 * Remove all comment sections (&lt;!-- .. --&gt;) from the raw markup. For reasons I don't
-	 * understand, the following regex <code>"<!--(.|\n|\r)*?-->"<code>
-	 * causes a stack overflow in some circumstances (jdk 1.5)
-	 *
+	 * Remove all comment sections (&lt;!-- .. --&gt;) from the raw markup.
+	 * 
 	 * @param rawMarkup
 	 * @return raw markup
 	 */
 	private String removeComment(String rawMarkup)
 	{
+		// For reasons I don't understand, the following regex <code>"<!--(.|\n|\r)*?-->"<code>
+		// causes a stack overflow in some circumstances (jdk 1.5)
+		// See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5050507
+		// See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337993
 		int pos1 = rawMarkup.indexOf("<!--");
 		while (pos1 != -1)
 		{
@@ -493,6 +496,11 @@
 			final AppendingStringBuffer buf = new AppendingStringBuffer(rawMarkup.length());
 			if (pos2 != -1)
 			{
+
+				// See wicket-2105 for an example where this rather simple regex throws an exception
+				// CONDITIONAL_COMMENT = Pattern.compile("\\[if .+\\]>(.|\n|\r)*<!\\[endif\\]");
+				// See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5050507
+				// See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337993
 				final String comment = rawMarkup.substring(pos1 + 4, pos2);
 				if (CONDITIONAL_COMMENT.matcher(comment).matches() == false)
 				{

Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.html
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.html?rev=746396&view=auto
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.html (added)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.html Fri Feb 20 22:38:20 2009
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns:wicket>
+<head>
+	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+	<link rel="shortcut icon" href="assets/img/icons/favicon.ico">
+	<title wicket:id="pageTitle">EduArte</title>
+	
+	<link href="assets/css/base.css" rel="stylesheet" type="text/css"/>
+	<!--[if IE]>
+		<link href="assets/css/ie_only.css" rel="stylesheet" type="text/css"/>
+		<link href="assets/js/ie_only.js" rel="stylesheet" type="text/css"/>
+	<![endif]-->
+	<!--[if lt IE 7]>
+		<link href="assets/css/ie6_only.css" rel="stylesheet" type="text/css"/>
+	<![endif]-->
+	<script type="text/javascript" src="assets/js/yahoo-dom-event.js"></script>
+	<script type="text/javascript" src="assets/js/animation/animation.js"></script>
+	<script type="text/javascript" src="assets/js/widgets.js"></script>
+</head>
+<body class="loginPage" onload="doFocus();">
+
+<div id="loginBox">
+	<div class="loginTitle">
+		<div class="loginError" wicket:id="feedback">Uw gebruikersnaam of wachtwoord is onjuist.</div>
+	</div>
+	<div class="loginFormBox" wicket:id="signInPanel">
+		Login panel comes here
+	</div>
+	<div class="loginFooter">Versie <span wicket:id="version">0.1</span> - Powered by Topicus</div>
+</div>
+
+</body>
+</html>
\ No newline at end of file

Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.java?rev=746396&view=auto
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.java (added)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Page.java Fri Feb 20 22:38:20 2009
@@ -0,0 +1,35 @@
+/*
+ * 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.markup.parser;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+
+public class Wicket2105Page extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+
+	public Wicket2105Page(final PageParameters parameters)
+	{
+		add(new Label("pageTitle", "PageTitle"));
+		add(new FeedbackPanel("feedback"));
+		add(new Wicket2105Panel("signInPanel"));
+		add(new Label("version", "1.0"));
+	}
+}

Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.html
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.html?rev=746396&view=auto
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.html (added)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.html Fri Feb 20 22:38:20 2009
@@ -0,0 +1,121 @@
+<html xmlns:wicket>
+<head>
+<wicket:head>
+	<script type="text/javascript">
+	function doFocus()
+	{
+	    if(document.getElementById('username').value == "")
+	        document.getElementById('username').focus();
+	    else
+	    {
+	    	var arr=document.getElementById('loginForm').elements;
+	    	var i=0;
+	    	for(i;i<arr.length;i++)
+	    	{
+	    		if(arr[i] && arr[i].type && arr[i].type=="password")
+	    		{
+	    			arr[i].focus();
+	    			break;
+	    		}
+	    	}
+	    }
+    }
+	function getkey(e)
+	{
+		if (window.event)
+			return window.event.keyCode;
+		else if (e)
+			return e.which;
+		else
+			return null;
+	}
+	</script>
+	<!--[if lt IE 7]>
+	<script type="text/javascript">
+		jQuery.noConflict();
+		
+		jQuery(document).ready(function(){
+			jQuery("#loginForm").hide();
+			jQuery("#continueLink").click(function(){
+				jQuery("#ie6warn").hide();
+				jQuery("#loginForm").show();
+			});
+		});
+	</script>
+	<![endif]-->
+</wicket:head>
+</head>
+<body>
+<wicket:panel>
+	<form id="loginForm" method="post" wicket:id="signInForm">
+	<fieldset>
+	<table>
+		<tbody>
+			<tr>
+				<td>Gebruikersnaam</td>
+				<td><input type="text" id="username" wicket:id="username" /></td>
+			</tr>
+			<tr>
+				<td>Wachtwoord</td>
+				<td><input type="password" name="password" wicket:id="password" /></td>
+			</tr>
+			<tr>
+				<td>Domein</td>
+				<td><select name="instelling" wicket:id="domain" onkeypress="if (getkey(event)==13) getElementById('loginForm').submit();">
+					<option>School 01</option>
+					<option>School 02</option>
+					<option>School 03</option>
+				</select></td>
+			</tr>
+			<tr>
+				<td></td>
+				<td><input type="checkbox" class="checkbox" name="rememberme"
+					id="rememberme" wicket:id="rememberMe" /> <label for="rememberme">Bewaar mijn gegevens</label></td>
+			</tr>
+			<tr wicket:id="loginZonderTokenContainer">
+				<td></td>
+				<td>
+					<input type="checkbox" class="checkbox" name="loginZonderToken"
+					id="loginZonderToken" wicket:id="loginZonderToken" /> 
+					<label for="loginZonderToken">Inloggen zonder token</label>
+				</td>
+			</tr>
+			<tr>
+				<td></td>
+				<td>
+					<div class="widget-button">
+						<a href="#" wicket:id="aanmelden" title="Aanmelden bij DBS">
+							<span>Aanmelden</span>
+						</a>
+					</div>
+					<input type="submit" style="width:0px; height:0px; position:absolute; top:-300px;" tabIndex="-1"/>
+				</td>
+			</tr>
+		</tbody>
+	</table>
+	</fieldset>
+	</form>
+	<!--[if lt IE 7]>
+	<div id="ie6warn">
+		<div class="highlight">U gebruikt Internet Explorer 6 of ouder. Deze applicatie vereist functionaliteit die niet door deze browser ondersteund wordt.</div>
+		Het is aan te raden een van de volgende browsers te gebruiken: 
+		<table>
+			<tr>
+				<td class="unit_80"><a href="http://www.firefox.com" id="firefoxlink" class="logolink"></a></td>
+				<td class="unit_130"><a href="http://www.microsoft.com/ie" id="ielink" class="logolink"></a></td>
+				<td class="unit_80"><a href="http://www.opera.com" id="operalink" class="logolink"></a></td>
+				<td class="unit_130"><a href="http://www.apple.com/safari" id="safarilink" class="logolink"></a></td>
+			</tr>
+			<tr class="browsernames">
+				<td>Firefox 3</td>
+				<td>Internet Explorer 7</td>
+				<td>Opera 9.5</td>
+				<td>Safari 3</td>
+			</tr>
+		</table>
+		<div class="right">Klik <a href="#" id="continueLink">hier</a> om toch uw eigen browser te gebruiken.</div>
+	</div>
+	<![endif]-->
+</wicket:panel>
+</body>
+</html>

Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.java?rev=746396&view=auto
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.java (added)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Panel.java Fri Feb 20 22:38:20 2009
@@ -0,0 +1,54 @@
+/*
+ * 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.markup.parser;
+
+import java.util.Arrays;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.SubmitLink;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.util.value.ValueMap;
+
+/**
+ * @author dashorst
+ */
+public class Wicket2105Panel extends Panel
+{
+	private static final long serialVersionUID = 1L;
+
+	public Wicket2105Panel(String id)
+	{
+		super(id);
+		Form form = new Form("signInForm", new CompoundPropertyModel(new ValueMap()));
+		form.add(new TextField("username"));
+		form.add(new PasswordTextField("password"));
+		form.add(new DropDownChoice("domain", Arrays.asList(new Object[] { "Wicket", "Tapestry",
+				"JSF", ".Net" })));
+		form.add(new CheckBox("rememberMe"));
+		form.add(new WebMarkupContainer("loginZonderTokenContainer").add(new CheckBox(
+			"loginZonderToken")));
+		form.add(new SubmitLink("aanmelden"));
+		add(form);
+	}
+
+}

Added: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Test.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Test.java?rev=746396&view=auto
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Test.java (added)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/parser/Wicket2105Test.java Fri Feb 20 22:38:20 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.markup.parser;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * Simple test using the WicketTester
+ */
+public class Wicket2105Test extends TestCase
+{
+	private WicketTester tester;
+
+	@Override
+	public void setUp()
+	{
+		tester = new WicketTester(new WicketApplication());
+	}
+
+	public void testRenderMyPage()
+	{
+		// start and render the test page
+		tester.startPage(Wicket2105Page.class);
+
+		// assert rendered page class
+		tester.assertRenderedPage(Wicket2105Page.class);
+
+		// assert rendered label component
+		tester.assertLabel("version", "1.0");
+	}
+
+	private class WicketApplication extends WebApplication
+	{
+		@Override
+		protected void init()
+		{
+			super.init();
+
+			getMarkupSettings().setStripComments(true);
+		}
+
+		@Override
+		public Class getHomePage()
+		{
+			return Wicket2105Page.class;
+		}
+	}
+}