You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2013/11/07 09:49:27 UTC

git commit: WICKET-5060 fail early if fragment markup is no fragment tag

Updated Branches:
  refs/heads/master 2ab4c7c00 -> 774481800


WICKET-5060 fail early if fragment markup is no fragment tag

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/77448180
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/77448180
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/77448180

Branch: refs/heads/master
Commit: 7744818009db12eaf8f5e0477ee7a19d3d0da1d5
Parents: 2ab4c7c
Author: svenmeier <sv...@meiers.net>
Authored: Thu Nov 7 09:48:37 2013 +0100
Committer: svenmeier <sv...@meiers.net>
Committed: Thu Nov 7 09:48:37 2013 +0100

----------------------------------------------------------------------
 .../panel/FragmentMarkupSourcingStrategy.java   | 12 ++++
 .../markup/html/panel/FragmentTestCase.java     | 15 +++++
 .../markup/html/panel/FragmentTestPanel.html    | 11 ++--
 .../markup/html/panel/FragmentTestPanel_2.html  | 14 +++++
 .../markup/html/panel/FragmentTestPanel_2.java  | 58 ++++++++++++++++++++
 5 files changed, 105 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/77448180/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java
index 81efccf..ac47e37 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java
@@ -21,9 +21,11 @@ import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.Markup;
+import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupNotFoundException;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.util.lang.Args;
 
 /**
@@ -143,6 +145,16 @@ public class FragmentMarkupSourcingStrategy extends AbstractMarkupSourcingStrate
 			throw new MarkupNotFoundException("No Markup found for Fragment " + markupId +
 				" in providing markup container " + getMarkupProvider(container));
 		}
+		else
+		{
+			MarkupElement fragmentTag = childMarkup.get(0);
+			if ((fragmentTag instanceof WicketTag && ((WicketTag)fragmentTag).isFragementTag()) == false)
+			{
+				throw new MarkupNotFoundException("Markup found for Fragment '" + markupId
+					+ "' in providing markup container " + getMarkupProvider(container)
+					+ " is not a fragment tag");
+			}
+		}
 
 		if (child == null)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/77448180/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestCase.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestCase.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestCase.java
index 61accdc..48b0b62 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestCase.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestCase.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.html.panel;
 
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.MarkupNotFoundException;
 import org.junit.Test;
 
 /**
@@ -29,4 +30,18 @@ public class FragmentTestCase extends WicketTestCase
 	{
 		tester.startComponentInPage(FragmentTestPanel.class);
 	}
+
+	@Test
+	public void testComponentAndFragmentWithSameId()
+	{
+		try
+		{
+			tester.startComponentInPage(FragmentTestPanel_2.class);
+			fail();
+		}
+		catch (MarkupNotFoundException ex)
+		{
+			assertTrue(ex.getMessage().contains("is not a fragment tag"));
+		}
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/77448180/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel.html
index 87a5f2a..c85f2cf 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel.html
@@ -3,12 +3,13 @@
 
 <wicket:panel>
 	<div wicket:id="test">[test fragment goes here]</div>
-</wicket:panel>
+	
+	<wicket:fragment wicket:id="testFrag">
+		<wicket:message key="message.test">[test message]</wicket:message>
+		<span wicket:id="label">[test label]</span>
+	</wicket:fragment>
 
-<wicket:fragment wicket:id="testFrag">
-	<wicket:message key="message.test">[test message]</wicket:message>
-	<span wicket:id="label">[test label]</span>
-</wicket:fragment>
+</wicket:panel>
 
 </body>
 </html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/77448180/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html
new file mode 100644
index 0000000..6d21336
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html
@@ -0,0 +1,14 @@
+<html xmlns:wicket="http://wicket.apache.org">
+<body>
+
+<wicket:panel>
+	<div wicket:id="testFrag">[same id as fragment below]</div>
+	<div wicket:id="test">[test fragment goes here]</div>
+
+	<wicket:fragment wicket:id="testFrag">
+	</wicket:fragment>
+
+</wicket:panel>
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/77448180/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.java
new file mode 100644
index 0000000..a6348d7
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.java
@@ -0,0 +1,58 @@
+/*
+ * 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.html.panel;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+/**
+ * 
+ */
+public class FragmentTestPanel_2 extends Panel
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 * 
+	 * @param id
+	 */
+	public FragmentTestPanel_2(String id)
+	{
+		super(id);
+
+		add(new WebMarkupContainer("testFrag"));
+		add(new TestFragment("test"));
+	}
+
+	/**
+	 * 
+	 */
+	private class TestFragment extends Fragment
+	{
+		private static final long serialVersionUID = 1L;
+
+		/**
+		 * Construct.
+		 * 
+		 * @param id
+		 */
+		public TestFragment(String id)
+		{
+			super(id, "testFrag", FragmentTestPanel_2.this);
+		}
+	}
+}