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 2013/06/25 14:16:09 UTC

[4/4] git commit: WICKET-4585 WicketTester.assertErrorMessages passes even if the message isn't visible on the page WICKET-5128 Allow for Testing Component relative Feedback-Messages in Wicket-Tester

WICKET-4585 WicketTester.assertErrorMessages passes even if the message isn't visible on the page
WICKET-5128 Allow for Testing Component relative Feedback-Messages in Wicket-Tester


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

Branch: refs/heads/master
Commit: 0c412482dfba45570fe7b7b0116383e59b3245f6
Parents: ca1c4eb
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jun 25 15:15:30 2013 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jun 25 15:15:30 2013 +0300

----------------------------------------------------------------------
 .../ExactLevelFeedbackMessageFilter.java        |  36 ++++++
 .../apache/wicket/feedback/FeedbackMessage.java |   2 +-
 .../wicket/util/tester/BaseWicketTester.java    |  55 ++++++---
 .../apache/wicket/util/tester/WicketTester.java | 119 +++++++++++++++----
 .../wicket/util/tester/WicketTesterHelper.java  |  13 +-
 .../wicket/util/tester/WicketTesterTest.java    |  25 ++++
 .../ComponentFeedbackResourceTestingPage.html   |   7 ++
 .../ComponentFeedbackResourceTestingPage.java   |  30 +++++
 .../apps_8/TestResourceProvidingLabel.java      |  41 +++++++
 .../TestResourceProvidingLabel.properties       |   3 +
 10 files changed, 279 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/main/java/org/apache/wicket/feedback/ExactLevelFeedbackMessageFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/feedback/ExactLevelFeedbackMessageFilter.java b/wicket-core/src/main/java/org/apache/wicket/feedback/ExactLevelFeedbackMessageFilter.java
new file mode 100644
index 0000000..5b6fcd6
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/feedback/ExactLevelFeedbackMessageFilter.java
@@ -0,0 +1,36 @@
+/*
+ * 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.feedback;
+
+/**
+ * Filter for accepting feedback messages of a certain error level.
+ */
+public class ExactLevelFeedbackMessageFilter implements IFeedbackMessageFilter
+{
+	private final int level;
+
+	public ExactLevelFeedbackMessageFilter(int level)
+	{
+		this.level = level;
+	}
+
+	@Override
+	public boolean accept(FeedbackMessage message)
+	{
+		return message.getLevel() == level;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackMessage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackMessage.java b/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackMessage.java
index 9520f6f..fbee466 100644
--- a/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackMessage.java
+++ b/wicket-core/src/main/java/org/apache/wicket/feedback/FeedbackMessage.java
@@ -59,7 +59,7 @@ public class FeedbackMessage implements IDetachable
 	public static final int FATAL = 500;
 
 	/** Levels as strings for debugging. */
-	private static final Map<Integer, String> levelStrings = new HashMap<Integer, String>();
+	private static final Map<Integer, String> levelStrings = new HashMap<>();
 
 	static
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index 8880e29..3e4e178 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -30,6 +30,7 @@ import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
@@ -68,6 +69,7 @@ import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.PageAndComponentProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
 import org.apache.wicket.feedback.FeedbackCollector;
 import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.IFeedbackMessageFilter;
@@ -2012,31 +2014,43 @@ public class BaseWicketTester
 	 * Asserts no error-level feedback messages.
 	 * 
 	 * @return a <code>Result</code>
+	 * @see #hasNoFeedbackMessage(int)
 	 */
 	public Result hasNoErrorMessage()
 	{
-		List<Serializable> messages = getMessages(FeedbackMessage.ERROR);
-		return isTrue(
-			"expect no error message, but contains\n" + WicketTesterHelper.asLined(messages),
-			messages.isEmpty());
+		return hasNoFeedbackMessage(FeedbackMessage.ERROR);
 	}
 
 	/**
 	 * Asserts no info-level feedback messages.
 	 * 
 	 * @return a <code>Result</code>
+	 * @see #hasNoFeedbackMessage(int)
 	 */
 	public Result hasNoInfoMessage()
 	{
-		List<Serializable> messages = getMessages(FeedbackMessage.INFO);
+		return hasNoFeedbackMessage(FeedbackMessage.INFO);
+	}
+
+	/**
+	 * Asserts there are no feedback messages with the given level.
+	 *
+	 * @param level
+	 *              the level of the feedback message
+	 * @return a <code>Result</code>
+	 */
+	public Result hasNoFeedbackMessage(int level)
+	{
+		List<Serializable> messages = getMessages(level);
 		return isTrue(
-			"expect no info message, but contains\n" + WicketTesterHelper.asLined(messages),
-			messages.isEmpty());
+				String.format("expected no %s message, but contains\n%s",
+						new FeedbackMessage(null, "", level).getLevelAsString().toLowerCase(Locale.ENGLISH), WicketTesterHelper.asLined(messages)),
+				messages.isEmpty());
 	}
 
 	/**
 	 * Retrieves <code>FeedbackMessages</code>.
-	 * 
+	 *
 	 * @param level
 	 *            level of feedback message, for example:
 	 *            <code>FeedbackMessage.DEBUG or FeedbackMessage.INFO.. etc</code>
@@ -2045,18 +2059,10 @@ public class BaseWicketTester
 	 */
 	public List<Serializable> getMessages(final int level)
 	{
-		List<FeedbackMessage> allMessages = new FeedbackCollector(getLastRenderedPage()).collect(new IFeedbackMessageFilter()
-		{
-
-			@Override
-			public boolean accept(FeedbackMessage message)
-			{
-				return message.getLevel() == level;
-			}
-		});
+		List<FeedbackMessage> messages = getFeedbackMessages(new ExactLevelFeedbackMessageFilter(level));
 
 		List<Serializable> actualMessages = Generics.newArrayList();
-		for (FeedbackMessage message : allMessages)
+		for (FeedbackMessage message : messages)
 		{
 			actualMessages.add(message.getMessage());
 		}
@@ -2064,6 +2070,19 @@ public class BaseWicketTester
 	}
 
 	/**
+	 * Retrieves <code>FeedbackMessages</code>.
+	 *
+	 * @param filter
+	 *            A filter that decides which messages to collect
+	 * @return <code>List</code> of messages (as <code>String</code>s)
+	 * @see FeedbackMessage
+	 */
+	public List<FeedbackMessage> getFeedbackMessages(final IFeedbackMessageFilter filter)
+	{
+		return new FeedbackCollector(getLastRenderedPage()).collect(filter);
+	}
+
+	/**
 	 * Dumps the source of last rendered <code>Page</code>.
 	 */
 	public void dumpPage()

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java
index a8b6032..af16454 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java
@@ -17,8 +17,9 @@
 package org.apache.wicket.util.tester;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
 import java.io.Serializable;
@@ -33,17 +34,22 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
 import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.feedback.IFeedback;
+import org.apache.wicket.feedback.IFeedbackMessageFilter;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ValidationErrorFeedback;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Objects;
+import org.hamcrest.core.IsCollectionContaining;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -329,15 +335,9 @@ public class WicketTester extends BaseWicketTester
 	 * @param expectedErrorMessages
 	 *            expected error messages
 	 */
-	public void assertErrorMessages(String... expectedErrorMessages)
+	public void assertErrorMessages(Serializable... expectedErrorMessages)
 	{
-		List<Serializable> actualMessages = getMessages(FeedbackMessage.ERROR);
-		List<Serializable> msgs = new ArrayList<Serializable>();
-		for (Serializable actualMessage : actualMessages)
-		{
-			msgs.add(actualMessage.toString());
-		}
-		WicketTesterHelper.assertEquals(Arrays.asList(expectedErrorMessages), msgs);
+		assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR), expectedErrorMessages);
 	}
 
 	/**
@@ -346,12 +346,77 @@ public class WicketTester extends BaseWicketTester
 	 * @param expectedInfoMessages
 	 *            expected info messages
 	 */
-	public void assertInfoMessages(String... expectedInfoMessages)
+	public void assertInfoMessages(Serializable... expectedInfoMessages)
+	{
+		assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.INFO), expectedInfoMessages);
+	}
+
+	/**
+	 * Assert there are feedback messages accepted by the provided filter.
+	 *
+	 * @param filter
+	 *            the filter that will decide which messages to check
+	 * @param expectedMessages
+	 *            expected feedback messages
+	 */
+	public void assertFeedbackMessages(IFeedbackMessageFilter filter, Serializable... expectedMessages)
 	{
-		List<Serializable> actualMessages = getMessages(FeedbackMessage.INFO);
-		WicketTesterHelper.assertEquals(Arrays.asList(expectedInfoMessages), actualMessages);
+		List<FeedbackMessage> feedbackMessages = getFeedbackMessages(filter);
+		List<Serializable> actualMessages = getActualFeedbackMessages(feedbackMessages);
+		WicketTesterHelper.assertEquals(Arrays.asList(expectedMessages), actualMessages);
 	}
 
+	/**
+	 * Asserts that there is a feedback message provided by a given component
+	 *
+	 * @param component
+	 *          the component that provided the expected feedback message. Optional.
+	 * @param key
+	 *          the resource key for the feedback message. Mandatory.
+	 * @param model
+	 *          the model used for interpolating the feedback message. Optional.
+	 * @param filter
+	 *          the filter that decides in which messages to look in. E.g. with a specific
+	 *          level, rendered or not, etc.
+	 */
+	public void assertComponentFeedbackMessage(Component component, String key, IModel<?> model, IFeedbackMessageFilter filter)
+	{
+		Args.notNull(key, "key");
+
+		String expectedMessage = getApplication().getResourceSettings().getLocalizer().getString(key, component, model);
+
+		List<FeedbackMessage> feedbackMessages = getFeedbackMessages(filter);
+		List<Serializable> actualMessages = getActualFeedbackMessages(feedbackMessages);
+
+		assertThat(String.format("Feedback message with key '%s' cannot be found", key),
+				actualMessages, IsCollectionContaining.hasItem(expectedMessage));
+	}
+
+	/**
+	 * Extracts the actual messages from the passed feedback messages.
+	 * Specially handles ValidationErrorFeedback messages by extracting their String message
+	 *
+	 * @param feedbackMessages
+	 *            the feedback messages
+	 * @return the FeedbackMessages' messages
+	 */
+	private List<Serializable> getActualFeedbackMessages(List<FeedbackMessage> feedbackMessages)
+	{
+		List<Serializable> actualMessages = new ArrayList<>();
+		for (FeedbackMessage feedbackMessage : feedbackMessages)
+		{
+			Serializable message = feedbackMessage.getMessage();
+			if (message instanceof ValidationErrorFeedback)
+			{
+				actualMessages.add(message.toString());
+			}
+			else
+			{
+				actualMessages.add(message);
+			}
+		}
+		return actualMessages;
+	}
 
 	/**
 	 * Assert that a particular feedback panel is rendering certain messages.
@@ -365,27 +430,27 @@ public class WicketTester extends BaseWicketTester
 	 * @param messages
 	 *            messages expected to be rendered
 	 */
-	public void assertFeedback(String path, String... messages)
+	public void assertFeedback(String path, Serializable... messages)
 	{
 		final FeedbackPanel fbp = (FeedbackPanel)getComponentFromLastRenderedPage(path);
 		final IModel<List<FeedbackMessage>> model = fbp.getFeedbackMessagesModel();
 		final List<FeedbackMessage> renderedMessages = model.getObject();
 		if (renderedMessages == null)
 		{
-			fail("feedback panel at path [" + path + "] returned null messages");
+			fail(String.format("feedback panel at path [%s] returned null messages", path));
 		}
 		if (messages.length != renderedMessages.size())
 		{
-			fail("you expected " + messages.length + " messages for the feedback panel [" + path +
-				"], but there were actually " + renderedMessages.size());
+			fail(String.format("you expected '%d' messages for the feedback panel [%s], but there were actually '%d'",
+					messages.length, path, renderedMessages.size()));
 		}
 		for (int i = 0; i < messages.length && i < renderedMessages.size(); i++)
 		{
-			final String expected = messages[i];
+			final Serializable expected = messages[i];
 			boolean found = false;
 			for (FeedbackMessage actual : renderedMessages)
 			{
-				if (Objects.equal(expected, actual.getMessage().toString()))
+				if (Objects.equal(expected, actual.getMessage()))
 				{
 					found = true;
 					break;
@@ -457,10 +522,7 @@ public class WicketTester extends BaseWicketTester
 	 */
 	public void assertNoErrorMessage()
 	{
-		List<Serializable> messages = getMessages(FeedbackMessage.ERROR);
-		assertTrue(
-			"expect no error message, but contains\n" + WicketTesterHelper.asLined(messages),
-			messages.isEmpty());
+		assertNoFeedbackMessage(FeedbackMessage.ERROR);
 	}
 
 	/**
@@ -468,9 +530,16 @@ public class WicketTester extends BaseWicketTester
 	 */
 	public void assertNoInfoMessage()
 	{
-		List<Serializable> messages = getMessages(FeedbackMessage.INFO);
-		assertTrue("expect no info message, but contains\n" + WicketTesterHelper.asLined(messages),
-			messages.isEmpty());
+		assertNoFeedbackMessage(FeedbackMessage.INFO);
+	}
+
+	/**
+	 * Asserts there are no feedback messages with a certain level.
+	 */
+	public void assertNoFeedbackMessage(int level)
+	{
+		Result result = hasNoFeedbackMessage(level);
+		assertFalse(result.getMessage(), result.wasFailed());
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
index 668d574..660ac7c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
@@ -70,7 +70,7 @@ public class WicketTesterHelper
 	 */
 	public static List<WicketTesterHelper.ComponentData> getComponentData(final Page page)
 	{
-		final List<ComponentData> data = new ArrayList<ComponentData>();
+		final List<ComponentData> data = new ArrayList<>();
 
 		if (page != null)
 		{
@@ -158,7 +158,7 @@ public class WicketTesterHelper
 			lined.append(objectString);
 			if (iter.hasNext())
 			{
-				lined.append("\n");
+				lined.append('\n');
 			}
 		}
 		return lined.toString();
@@ -194,7 +194,7 @@ public class WicketTesterHelper
 	public static List<AjaxEventBehavior> findAjaxEventBehaviors(Component component, String event)
 	{
 		Args.notEmpty(event, "event");
-		List<AjaxEventBehavior> behaviors = new ArrayList<AjaxEventBehavior>();
+		List<AjaxEventBehavior> behaviors = new ArrayList<>();
 		String[] eventNames = Strings.split(event, ' ');
 		for (String eventName : eventNames)
 		{
@@ -233,12 +233,9 @@ public class WicketTesterHelper
 	 */
 	public static Behavior findBehavior(Component component, Class<? extends Behavior> behaviorClass)
 	{
-		for (Behavior behavior : component.getBehaviors())
+		for (Behavior behavior : component.getBehaviors(behaviorClass))
 		{
-			if (behaviorClass.isAssignableFrom(behavior.getClass()))
-			{
-				return behavior;
-			}
+			return behavior;
 		}
 		return null;
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
index 3a10018..cc722c3 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
@@ -37,6 +37,8 @@ import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.feedback.ExactLevelFeedbackMessageFilter;
+import org.apache.wicket.feedback.FeedbackMessage;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
@@ -70,6 +72,7 @@ import org.apache.wicket.util.tester.apps_1.SuccessPage;
 import org.apache.wicket.util.tester.apps_1.ViewBook;
 import org.apache.wicket.util.tester.apps_6.LinkPage;
 import org.apache.wicket.util.tester.apps_6.ResultPage;
+import org.apache.wicket.util.tester.apps_8.ComponentFeedbackResourceTestingPage;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -1216,4 +1219,26 @@ public class WicketTesterTest extends WicketTestCase
 		tester.submitForm(page.form);
 		assertEquals(null, page.text);
 	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-5128
+	 */
+	@Test
+	public void renderComponentRelativeErrorMessage()
+	{
+		tester.startPage(new ComponentFeedbackResourceTestingPage());
+		Component label = tester.getComponentFromLastRenderedPage("label");
+		tester.assertComponentFeedbackMessage(label, "error.msg", null, new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR));
+	}
+
+	/**
+	 * https://issues.apache.org/jira/browse/WICKET-5128
+	 */
+	@Test
+	public void renderComponentRelativeInfoMessage()
+	{
+		tester.startPage(new ComponentFeedbackResourceTestingPage());
+		Component label = tester.getComponentFromLastRenderedPage("label");
+		tester.assertComponentFeedbackMessage(label, "info.msg", null, new ExactLevelFeedbackMessageFilter(FeedbackMessage.INFO));
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
new file mode 100644
index 0000000..8cfda9f
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.html
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+<body>
+    <div wicket:id="label"/>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
new file mode 100644
index 0000000..fec8efc
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/ComponentFeedbackResourceTestingPage.java
@@ -0,0 +1,30 @@
+/*
+ * 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.util.tester.apps_8;
+
+import org.apache.wicket.markup.html.WebPage;
+
+/**
+ * A simple Page that contains a Label that renders some Feedback Messages
+ */
+public class ComponentFeedbackResourceTestingPage extends WebPage
+{
+	public ComponentFeedbackResourceTestingPage()
+	{
+		add(new TestResourceProvidingLabel("label"));
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java
new file mode 100644
index 0000000..3858cb8
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.java
@@ -0,0 +1,41 @@
+/*
+ * 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.util.tester.apps_8;
+
+import org.apache.wicket.markup.html.basic.Label;
+
+/**
+ * A simple Label that renders some Feedback Messages.
+ * @author Martin Dilger
+ */
+public class TestResourceProvidingLabel extends Label
+{
+	public TestResourceProvidingLabel(String id)
+	{
+		super(id,"A simple Test Label");
+	}
+
+	@Override
+	protected void onBeforeRender()
+	{
+		super.onBeforeRender();
+
+		//provide some default messages before the component is rendered.
+		error(this.getString("error.msg"));
+		info(this.getString("info.msg"));
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/0c412482/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties
new file mode 100644
index 0000000..9da0adc
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_8/TestResourceProvidingLabel.properties
@@ -0,0 +1,3 @@
+#some feedback messages that can be tested for
+error.msg=sorry, that is an error
+info.msg=good, that is just for info
\ No newline at end of file