You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/03/12 11:05:44 UTC

[1/7] git commit: Fix copy/paste error

Repository: wicket
Updated Branches:
  refs/heads/5531-wicket-header-items 8ac36a6c9 -> ddb7ff349


Fix copy/paste error


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

Branch: refs/heads/5531-wicket-header-items
Commit: b32ba89897186526e6f277aca10e379f1f606e79
Parents: 8ac36a6
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:27:54 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:27:54 2014 +0200

----------------------------------------------------------------------
 wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b32ba898/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java
index 09aa73a..d1168f2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java
@@ -126,7 +126,7 @@ public class TagUtils
 	/**
 	 *
 	 * @param elem
-	 * @return True if the current markup element is a &lt;wicket:head&gt; tag
+	 * @return True if the current markup element is a &lt;wicket:header-items&gt; tag
 	 */
 	public static final boolean isWicketHeaderItemsTag(final MarkupElement elem)
 	{


[2/7] git commit: Improve the javadoc of HtmlHeaderItemsContainer

Posted by mg...@apache.org.
Improve the javadoc of HtmlHeaderItemsContainer


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

Branch: refs/heads/5531-wicket-header-items
Commit: 5da01132fdbc4bf8344f5d963230c5f5dd976bbb
Parents: b32ba89
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:30:34 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:30:34 2014 +0200

----------------------------------------------------------------------
 .../wicket/markup/html/internal/HtmlHeaderItemsContainer.java   | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/5da01132/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainer.java
index e7914d0..636eac3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainer.java
@@ -18,7 +18,10 @@ package org.apache.wicket.markup.html.internal;
 
 /**
  * A specialization of HtmlHeaderContainer that doesn't render
- * &lt;head&gt; and &l;/head&gt; around the header contributions
+ * &lt;head&gt; and &l;/head&gt; around the header contributions.
+ *
+ * This container is used when there is a usage of &lt;wicket:header-items/&gt;
+ * in the page's &lt;head&gt; element.
  */
 public class HtmlHeaderItemsContainer extends HtmlHeaderContainer
 {


[7/7] git commit: Use tabs, as in the rest of the file

Posted by mg...@apache.org.
Use tabs, as in the rest of the file


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

Branch: refs/heads/5531-wicket-header-items
Commit: ddb7ff3498167b632869e48703042a043d8fdef2
Parents: 3e05319
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 12:00:56 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 12:00:56 2014 +0200

----------------------------------------------------------------------
 .../src/main/resources/META-INF/wicket-1.5.xsd        | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ddb7ff34/wicket-core/src/main/resources/META-INF/wicket-1.5.xsd
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/resources/META-INF/wicket-1.5.xsd b/wicket-core/src/main/resources/META-INF/wicket-1.5.xsd
index 9c5c1c0..38c975c 100644
--- a/wicket-core/src/main/resources/META-INF/wicket-1.5.xsd
+++ b/wicket-core/src/main/resources/META-INF/wicket-1.5.xsd
@@ -146,13 +146,13 @@
 		<complexType />
 	</element>
 
-    <element name="header-items">
-        <annotation>
-            <documentation><![CDATA[A special element that is used as a placeholder inside the HTML <head>
-            element. Wicket will replace it with all header contributions.]]></documentation>
-        </annotation>
-        <complexType />
-    </element>
+	<element name="header-items">
+		<annotation>
+			<documentation><![CDATA[A special element that is used as a placeholder inside the HTML <head>
+			element. Wicket will replace it with all header contributions.]]></documentation>
+		</annotation>
+		<complexType />
+	</element>
 
 	<element name="container">
 		<annotation>


[4/7] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Remove a method that is no more needed.
The addition of the closing tag for <wicket:header-items/> is now done in OpenCloseTagExpander


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

Branch: refs/heads/5531-wicket-header-items
Commit: b77ce25776947005377cb6c9496954dc1b9be7f2
Parents: a3aec20
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:49:26 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:49:26 2014 +0200

----------------------------------------------------------------------
 .../parser/filter/HtmlHeaderSectionHandler.java   | 18 +-----------------
 1 file changed, 1 insertion(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b77ce257/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
index 0536d95..9de69fe 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
@@ -104,6 +104,7 @@ public final class HtmlHeaderSectionHandler extends AbstractMarkupFilter
 					{
 						// revert the settings from above
 						ComponentTag headOpenTag = tag.getOpenTag();
+						// change the id because it is special. See HtmlHeaderResolver
 						headOpenTag.setId(HEADER_ID + "-Ignored");
 						headOpenTag.setAutoComponentTag(false);
 						headOpenTag.setModified(false);
@@ -166,23 +167,6 @@ public final class HtmlHeaderSectionHandler extends AbstractMarkupFilter
 		return tag;
 	}
 
-	// temporary storage. Introduce into flow on next request
-	private ComponentTag next = null;
-
-	@Override
-	public MarkupElement nextElement() throws ParseException
-	{
-		// Did we hold back an elem? Than return that first
-		if (next != null)
-		{
-			MarkupElement rtn = next;
-			next = null;
-			return rtn;
-		}
-
-		return super.nextElement();
-	}
-
 	/**
 	 * Insert <head> open and close tag (with empty body) to the current position.
 	 */


[5/7] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Remove the usage of the tag namespace when checking where the tag should be transformed from openClose to open+close.
The namespace is dynamic (it depends) on the xmlns: for the page. We cannot hardcode namespaces in the list of tags to expand


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

Branch: refs/heads/5531-wicket-header-items
Commit: 66fd9d41b24ac4010542d75f4566bf9978f7728b
Parents: b77ce25
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:52:54 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:52:54 2014 +0200

----------------------------------------------------------------------
 .../wicket/markup/parser/filter/OpenCloseTagExpander.java     | 7 -------
 1 file changed, 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/66fd9d41/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
index c8d8581..7b0ddfe 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/OpenCloseTagExpander.java
@@ -80,19 +80,12 @@ public class OpenCloseTagExpander extends AbstractMarkupFilter
 		return super.nextElement();
 	}
 
-	/**
-	 * 
-	 */
 	@Override
 	protected MarkupElement onComponentTag(final ComponentTag tag) throws ParseException
 	{
 		if (tag.isOpenClose())
 		{
 			String name = tag.getName();
-//			if (tag.getNamespace() != null)
-//			{
-//				name = tag.getNamespace() + ":" + tag.getName();
-//			}
 
 			if (contains(name))
 			{


[6/7] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

extend HtmlHeaderSectionHandler javadoc to mention <wicket:header-items/>


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

Branch: refs/heads/5531-wicket-header-items
Commit: 3e053192a1ed9e5def6090e98e92216e997e7925
Parents: 66fd9d4
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:59:21 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:59:21 2014 +0200

----------------------------------------------------------------------
 .../markup/parser/filter/HtmlHeaderSectionHandler.java   | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/3e053192/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
index 9de69fe..0f85964 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
@@ -29,13 +29,22 @@ import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
 
 
 /**
- * This is a markup inline filter. It assumes that {@link org.apache.wicket.markup.parser.filter.WicketTagIdentifier}
+ * This is a markup inline filter.
+ * <p>
+ * It assumes that {@link org.apache.wicket.markup.parser.filter.WicketTagIdentifier}
  * has been called first and search for a &lt;head&gt; tag (note: not wicket:head). Provided the markup contains a
  * &lt;body&gt; tag it will automatically prepend a &lt;head&gt; tag if missing.
+ * </p>
+ * <p>
+ * Additionally this filter handles &lt;wicket:header-items/&gt;. If there is such tag then it is marked
+ * as the one that should be used as {@link org.apache.wicket.markup.html.internal.HtmlHeaderContainer}, by
+ * setting its id to {@value #HEADER_ID}.
+ * </p>
  * <p>
  * Note: This handler is only relevant for Pages (see MarkupParser.newFilterChain())
  * 
  * @see org.apache.wicket.markup.MarkupParser
+ * @see org.apache.wicket.markup.resolver.HtmlHeaderResolver
  * @author Juergen Donnerstag
  */
 public final class HtmlHeaderSectionHandler extends AbstractMarkupFilter


[3/7] git commit: WICKET-5531 Create new placeholder tag to indicate where header contributions should appear

Posted by mg...@apache.org.
WICKET-5531 Create new placeholder tag to indicate where header contributions should appear


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

Branch: refs/heads/5531-wicket-header-items
Commit: a3aec20d2e4c489b26dbd796d9a8efbfe3354b05
Parents: 5da0113
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Mar 12 11:44:55 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Mar 12 11:44:55 2014 +0200

----------------------------------------------------------------------
 .../parser/filter/HtmlHeaderSectionHandler.java |  11 ++
 .../internal/HtmlHeaderItemsContainerTest.java  | 140 -----------------
 .../HtmlHeaderItemsContainerTest.java           | 157 +++++++++++++++++++
 .../PageWithHeaderItemsOutOfHead.html           |  21 +++
 .../PageWithHeaderItemsOutOfHead.java           |  27 ++++
 .../headeritems/PageWithTwoHeaderItems.html     |  22 +++
 .../headeritems/PageWithTwoHeaderItems.java     |  27 ++++
 7 files changed, 265 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
index 7042da2..0536d95 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/HtmlHeaderSectionHandler.java
@@ -125,6 +125,17 @@ public final class HtmlHeaderSectionHandler extends AbstractMarkupFilter
 		else if (HtmlHeaderResolver.HEADER_ITEMS.equalsIgnoreCase(tag.getName()) &&
 				tag.getNamespace().equalsIgnoreCase(getWicketNamespace()))
 		{
+			if (foundHeaderItemsTag)
+			{
+				throw new MarkupException(new MarkupStream(markup),
+						"More than one <wicket:header-items/> detected in the <head> element. Only one is allowed.");
+			}
+			else if (foundClosingHead)
+			{
+				throw new MarkupException(new MarkupStream(markup),
+						"Detected <wicket:header-items/> after the closing </head> element.");
+			}
+
 			foundHeaderItemsTag = true;
 			tag.setId(HEADER_ID);
 			tag.setAutoComponentTag(true);

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainerTest.java
deleted file mode 100644
index 37ae40c..0000000
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HtmlHeaderItemsContainerTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * 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.internal;
-
-import static org.hamcrest.number.OrderingComparison.lessThan;
-
-import org.apache.wicket.WicketTestCase;
-import org.apache.wicket.markup.html.internal.headeritems.PageWithHeaderItems;
-import org.apache.wicket.markup.html.internal.headeritems.PageWithoutHeaderItems;
-import org.apache.wicket.markup.html.internal.headeritems.SubPageWithHeaderItemsAndWicketHead;
-import org.apache.wicket.markup.html.internal.headeritems.SubPageWithoutHeaderItemsAndWicketHead;
-import org.junit.Test;
-
-/**
- * Tests for <wicket:header-items/> element
- */
-public class HtmlHeaderItemsContainerTest extends WicketTestCase
-{
-	@Test
-	public void withHeaderItems()
-	{
-		tester.startPage(PageWithHeaderItems.class);
-		String responseAsString = tester.getLastResponseAsString();
-//		System.err.println("RES:\n" + responseAsString);
-		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
-		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
-		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
-		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
-		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
-
-		assertThat("<meta charset> should be rendered before <meta name=\"panel-wicket-head\"",
-				idxMetaCharset, lessThan(idxMetaPanelWicketHead));
-
-		assertThat("<meta  name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
-				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
-
-		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before the <title> element",
-				idxWicketAjaxJs, lessThan(idxTitleElement));
-
-		assertThat("<meta name='fromBasePage'> should be rendered before the <title> element",
-				idxMetaFromBasePage, lessThan(idxTitleElement));
-	}
-
-	@Test
-	public void withoutHeaderItems()
-	{
-		tester.startPage(PageWithoutHeaderItems.class);
-		String responseAsString = tester.getLastResponseAsString();
-//		System.err.println("RES:\n" + responseAsString);
-		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
-		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
-		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
-		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
-		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
-
-		assertThat("<meta name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
-				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
-
-		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before <meta charset>",
-				idxWicketAjaxJs, lessThan(idxMetaCharset));
-
-		assertThat("<meta charset> should be rendered before the <title> element",
-				idxMetaCharset, lessThan(idxTitleElement));
-
-		assertThat("<title> should be rendered before the <meta name='fromBasePage'> element",
-				idxTitleElement, lessThan(idxMetaFromBasePage));
-	}
-
-	@Test
-	public void withoutHeaderItemsWithWicketHead()
-	{
-		tester.startPage(SubPageWithoutHeaderItemsAndWicketHead.class);
-		String responseAsString = tester.getLastResponseAsString();
-//		System.err.println("RES:\n" + responseAsString);
-		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
-		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
-		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
-		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
-		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
-		int idxMetaFromSubPage = responseAsString.indexOf("<meta name=\"SubPageWithoutHeaderItemsAndWicketHead\"");
-
-		assertThat("<meta name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
-				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
-
-		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before <meta charset>",
-				idxWicketAjaxJs, lessThan(idxMetaCharset));
-
-		assertThat("<meta charset> should be rendered before the <title> element",
-				idxMetaCharset, lessThan(idxTitleElement));
-
-		assertThat("<title> should be rendered before the <meta name=\"SubPageWithoutHeaderItemsAndWicketHead\" element",
-				idxTitleElement, lessThan(idxMetaFromSubPage));
-
-		assertThat("<meta name='fromBasePage'> should be rendered before the <meta name=\"SubPageWithoutHeaderItemsAndWicketHead\" element",
-				idxMetaFromSubPage, lessThan(idxMetaFromBasePage));
-	}
-
-	@Test
-	public void withHeaderItemsWithWicketHead()
-	{
-		tester.startPage(SubPageWithHeaderItemsAndWicketHead.class);
-		String responseAsString = tester.getLastResponseAsString();
-//		System.err.println("RES:\n" + responseAsString);
-		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
-		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
-		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
-		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
-		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
-		int idxMetaFromSubPage = responseAsString.indexOf("<meta name=\"SubPageWithHeaderItemsAndWicketHead\"");
-
-		assertThat("<meta charset> should be rendered before <meta name=\"panel-wicket-head\"",
-				idxMetaCharset, lessThan(idxMetaPanelWicketHead));
-
-		assertThat("<meta  name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
-				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
-
-		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before the <title> element",
-				idxWicketAjaxJs, lessThan(idxTitleElement));
-
-		assertThat("<meta name=\"SubPageWithoutHeaderItemsAndWicketHead\"> should be rendered before the <meta name='fromBasePage'> element",
-				idxMetaFromSubPage, lessThan(idxMetaFromBasePage));
-
-		assertThat("<meta name='fromBasePage'> should be rendered before the <title> element",
-				idxMetaFromBasePage, lessThan(idxTitleElement));
-	}
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
new file mode 100644
index 0000000..f1602cc
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/HtmlHeaderItemsContainerTest.java
@@ -0,0 +1,157 @@
+/*
+ * 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.internal.headeritems;
+
+import static org.hamcrest.number.OrderingComparison.lessThan;
+
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.MarkupException;
+import org.junit.Test;
+
+/**
+ * Tests for <wicket:header-items/> element
+ */
+public class HtmlHeaderItemsContainerTest extends WicketTestCase
+{
+	@Test
+	public void withHeaderItems()
+	{
+		tester.startPage(PageWithHeaderItems.class);
+		String responseAsString = tester.getLastResponseAsString();
+//		System.err.println("RES:\n" + responseAsString);
+		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
+		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
+		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
+		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
+		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
+
+		assertThat("<meta charset> should be rendered before <meta name=\"panel-wicket-head\"",
+				idxMetaCharset, lessThan(idxMetaPanelWicketHead));
+
+		assertThat("<meta  name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
+				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
+
+		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before the <title> element",
+				idxWicketAjaxJs, lessThan(idxTitleElement));
+
+		assertThat("<meta name='fromBasePage'> should be rendered before the <title> element",
+				idxMetaFromBasePage, lessThan(idxTitleElement));
+	}
+
+	@Test
+	public void withoutHeaderItems()
+	{
+		tester.startPage(PageWithoutHeaderItems.class);
+		String responseAsString = tester.getLastResponseAsString();
+//		System.err.println("RES:\n" + responseAsString);
+		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
+		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
+		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
+		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
+		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
+
+		assertThat("<meta name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
+				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
+
+		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before <meta charset>",
+				idxWicketAjaxJs, lessThan(idxMetaCharset));
+
+		assertThat("<meta charset> should be rendered before the <title> element",
+				idxMetaCharset, lessThan(idxTitleElement));
+
+		assertThat("<title> should be rendered before the <meta name='fromBasePage'> element",
+				idxTitleElement, lessThan(idxMetaFromBasePage));
+	}
+
+	@Test
+	public void withoutHeaderItemsWithWicketHead()
+	{
+		tester.startPage(SubPageWithoutHeaderItemsAndWicketHead.class);
+		String responseAsString = tester.getLastResponseAsString();
+//		System.err.println("RES:\n" + responseAsString);
+		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
+		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
+		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
+		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
+		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
+		int idxMetaFromSubPage = responseAsString.indexOf("<meta name=\"SubPageWithoutHeaderItemsAndWicketHead\"");
+
+		assertThat("<meta name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
+				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
+
+		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before <meta charset>",
+				idxWicketAjaxJs, lessThan(idxMetaCharset));
+
+		assertThat("<meta charset> should be rendered before the <title> element",
+				idxMetaCharset, lessThan(idxTitleElement));
+
+		assertThat("<title> should be rendered before the <meta name=\"SubPageWithoutHeaderItemsAndWicketHead\" element",
+				idxTitleElement, lessThan(idxMetaFromSubPage));
+
+		assertThat("<meta name='fromBasePage'> should be rendered before the <meta name=\"SubPageWithoutHeaderItemsAndWicketHead\" element",
+				idxMetaFromSubPage, lessThan(idxMetaFromBasePage));
+	}
+
+	@Test
+	public void withHeaderItemsWithWicketHead()
+	{
+		tester.startPage(SubPageWithHeaderItemsAndWicketHead.class);
+		String responseAsString = tester.getLastResponseAsString();
+//		System.err.println("RES:\n" + responseAsString);
+		int idxMetaCharset = responseAsString.indexOf("<meta charset=\"utf-8\"");
+		int idxMetaPanelWicketHead = responseAsString.indexOf("meta name=\"panel-wicket-head\"");
+		int idxWicketAjaxJs = responseAsString.indexOf("wicket-ajax-jquery.js");
+		int idxTitleElement = responseAsString.indexOf("<title>Apache Wicket Quickstart</title>");
+		int idxMetaFromBasePage = responseAsString.indexOf("<meta name='fromBasePage' content='1'");
+		int idxMetaFromSubPage = responseAsString.indexOf("<meta name=\"SubPageWithHeaderItemsAndWicketHead\"");
+
+		assertThat("<meta charset> should be rendered before <meta name=\"panel-wicket-head\"",
+				idxMetaCharset, lessThan(idxMetaPanelWicketHead));
+
+		assertThat("<meta  name=\"panel-wicket-head\"> should be rendered before <script src=wicket-ajax-jquery.js>",
+				idxMetaPanelWicketHead, lessThan(idxWicketAjaxJs));
+
+		assertThat("<script src=wicket-ajax-jquery.js> should be rendered before the <title> element",
+				idxWicketAjaxJs, lessThan(idxTitleElement));
+
+		assertThat("<meta name=\"SubPageWithoutHeaderItemsAndWicketHead\"> should be rendered before the <meta name='fromBasePage'> element",
+				idxMetaFromSubPage, lessThan(idxMetaFromBasePage));
+
+		assertThat("<meta name='fromBasePage'> should be rendered before the <title> element",
+				idxMetaFromBasePage, lessThan(idxTitleElement));
+	}
+
+	/**
+	 * Only one <wicket:header-items/> is allowed only in <head>
+	 * @see org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler
+	 */
+	@Test(expected = MarkupException.class)
+	public void pageWithTwoHeaderItems()
+	{
+		tester.startPage(PageWithTwoHeaderItems.class);
+	}
+
+	/**
+	 * <wicket:header-items/> is allowed only in <head>
+	 * @see org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler
+	 */
+	@Test(expected = MarkupException.class)
+	public void pageWithHeaderItemsOutOfHead()
+	{
+		tester.startPage(PageWithHeaderItemsOutOfHead.class);
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.html
new file mode 100644
index 0000000..99b0834
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org">
+	<head>
+		<meta charset="utf-8" />
+		<title>Apache Wicket Quickstart</title>
+	</head>
+    <wicket:header-items/>
+	<body>
+        <div id="hd">
+			<div id="logo">
+				<h1>Apache Wicket</h1>
+			</div>
+		</div>
+		<div id="bd">
+            <div wicket:id="panel"></div>
+            <wicket:child/>
+		</div>
+		<div id="ft">
+		</div>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.java
new file mode 100644
index 0000000..29249de
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithHeaderItemsOutOfHead.java
@@ -0,0 +1,27 @@
+/*
+ * 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.internal.headeritems;
+
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class PageWithHeaderItemsOutOfHead extends BasePage {
+	private static final long serialVersionUID = 1L;
+
+	public PageWithHeaderItemsOutOfHead(final PageParameters parameters) {
+		super(parameters);
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.html
new file mode 100644
index 0000000..82cbe0b
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org">
+	<head>
+		<meta charset="utf-8" />
+        <wicket:header-items/>
+		<title>Apache Wicket Quickstart</title>
+        <wicket:header-items/>
+	</head>
+	<body>
+		<div id="hd">
+			<div id="logo">
+				<h1>Apache Wicket</h1>
+			</div>
+		</div>
+		<div id="bd">
+            <div wicket:id="panel"></div>
+            <wicket:child/>
+		</div>
+		<div id="ft">
+		</div>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/a3aec20d/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.java
new file mode 100644
index 0000000..a70331a
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/headeritems/PageWithTwoHeaderItems.java
@@ -0,0 +1,27 @@
+/*
+ * 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.internal.headeritems;
+
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class PageWithTwoHeaderItems extends BasePage {
+	private static final long serialVersionUID = 1L;
+
+	public PageWithTwoHeaderItems(final PageParameters parameters) {
+		super(parameters);
+	}
+}