This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new e7db20b029 fix possible Pattern collision with obj.value == {} (#794)
e7db20b029 is described below
commit e7db20b029b7846df6291a35d9b82b096ce1fbef
Author: Johannes Renoth <[email protected]>
AuthorDate: Mon Feb 26 12:33:04 2024 +0100
fix possible Pattern collision with obj.value == {} (#794)
Co-authored-by: renoth <[email protected]>
---
.../wicket/util/tester/BaseWicketTester.java | 188 +++++++++++----------
1 file changed, 99 insertions(+), 89 deletions(-)
diff --git
a/wicket-tester/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
b/wicket-tester/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index b9ada8c0db..4c409658f0 100644
---
a/wicket-tester/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++
b/wicket-tester/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -37,11 +37,6 @@ import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
-import jakarta.servlet.FilterConfig;
-import jakarta.servlet.ServletContext;
-import jakarta.servlet.http.Cookie;
-import jakarta.servlet.http.HttpSession;
-
import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.IPageManagerProvider;
@@ -135,6 +130,11 @@ import org.apache.wicket.util.visit.IVisitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpSession;
+
/**
* A helper class to ease unit testing of Wicket applications without the need
for a servlet
* container. See javadoc of <code>WicketTester</code> for example usage. This
class can be used as
@@ -287,9 +287,11 @@ public class BaseWicketTester
Args.notNull(application, "application");
}
- servletContext = servletCtx != null ? servletCtx
+ servletContext = servletCtx != null
+ ? servletCtx
// If it's provided from the container it's not
necessary to mock.
- : !init && application.getServletContext() != null ?
application.getServletContext()
+ : !init && application.getServletContext() != null
+ ? application.getServletContext()
: new MockServletContext(application, null);
// If using Arquillian and it's configured in a web.xml it'll
be provided. If not, mock it.
@@ -389,8 +391,8 @@ public class BaseWicketTester
request.setURL(request.getContextPath() +
request.getServletPath() + "/");
// assign protocol://host:port to next request unless the last
request was ajax
- final boolean assignBaseLocation = lastRequest != null &&
- lastRequest.getHeader("Wicket-Ajax") == null;
+ final boolean assignBaseLocation = lastRequest != null
+ && lastRequest.getHeader("Wicket-Ajax") == null;
// resume request processing with scheme://host:port from last
request
if (assignBaseLocation)
@@ -494,20 +496,21 @@ public class BaseWicketTester
*/
protected void cleanupFeedbackMessages(IFeedbackMessageFilter filter)
{
-
+
IVisitor<Component, Void> clearer = new IVisitor<Component,
Void>()
{
@Override
public void component(Component component, IVisit<Void>
visit)
{
- if (component.hasFeedbackMessage()) {
+ if (component.hasFeedbackMessage())
+ {
component.getFeedbackMessages().clear(filter);
}
}
};
clearer.component(getLastRenderedPage(), null);
getLastRenderedPage().visitChildren(clearer);
-
+
getSession().getFeedbackMessages().clear(filter);
}
@@ -1002,16 +1005,15 @@ public class BaseWicketTester
* @throws IOException
* @throws ParseException
*/
- public String getWicketAjaxBaseUrlEncodedInLastResponse()
- throws IOException, ParseException
+ public String getWicketAjaxBaseUrlEncodedInLastResponse() throws
IOException, ParseException
{
XmlPullParser parser = new XmlPullParser();
parser.parse(getLastResponseAsString());
XmlTag tag;
while ((tag = parser.nextTag()) != null)
{
- if (tag.isOpen() && tag.getName().equals("script") &&
-
"wicket-ajax-base-url".equals(tag.getAttribute("id")))
+ if (tag.isOpen() && tag.getName().equals("script")
+ &&
"wicket-ajax-base-url".equals(tag.getAttribute("id")))
{
parser.next();
return
parser.getString().toString().split("\\\"")[1];
@@ -1377,9 +1379,9 @@ public class BaseWicketTester
// process the component
C started = startComponentInPage(comp, pageMarkup);
-
+
componentInPage.isInstantiated = true;
-
+
return started;
}
@@ -1453,15 +1455,14 @@ public class BaseWicketTester
MarkupResourceStream markupResourceStream = new
MarkupResourceStream(
new StringResourceStream(markup),
containerInfo, page.getClass());
- MarkupParser markupParser =
getApplication().getMarkupSettings()
- .getMarkupFactory()
+ MarkupParser markupParser =
getApplication().getMarkupSettings().getMarkupFactory()
.newMarkupParser(markupResourceStream);
pageMarkup = markupParser.parse();
}
catch (Exception e)
{
- String errorMessage = "Error while parsing the
markup for the autogenerated page: " +
- e.getMessage();
+ String errorMessage = "Error while parsing the
markup for the autogenerated page: "
+ + e.getMessage();
log.error(errorMessage, e);
fail(errorMessage);
}
@@ -1484,7 +1485,7 @@ public class BaseWicketTester
componentInPage = new ComponentInPage();
componentInPage.component = component;
-
+
return component;
}
@@ -1498,8 +1499,8 @@ public class BaseWicketTester
*/
protected String createPageMarkup(final String componentId)
{
- return "<html><head></head><body><span wicket:id='" +
componentId +
- "'></span></body></html>";
+ return "<html><head></head><body><span wicket:id='" +
componentId
+ + "'></span></body></html>";
}
/**
@@ -1513,8 +1514,7 @@ public class BaseWicketTester
return new StartComponentInPage();
}
- public Component getComponentFromLastRenderedPage(String path,
- boolean wantVisibleInHierarchy)
+ public Component getComponentFromLastRenderedPage(String path, boolean
wantVisibleInHierarchy)
{
return getComponentFromLastRenderedPage(path,
wantVisibleInHierarchy, true);
}
@@ -1530,8 +1530,8 @@ public class BaseWicketTester
* @return The component at the path
* @see org.apache.wicket.MarkupContainer#get(String)
*/
- public Component getComponentFromLastRenderedPage(String path,
- boolean wantVisibleInHierarchy, boolean failOnAbsent)
+ public Component getComponentFromLastRenderedPage(String path, boolean
wantVisibleInHierarchy,
+ boolean failOnAbsent)
{
if (componentInPage != null && componentInPage.isInstantiated)
{
@@ -1547,8 +1547,8 @@ public class BaseWicketTester
{
if (failOnAbsent)
{
- fail("path: '" + path + "' does not exist for
page: " +
-
Classes.simpleName(getLastRenderedPage().getClass()));
+ fail("path: '" + path + "' does not exist for
page: "
+ +
Classes.simpleName(getLastRenderedPage().getClass()));
}
return null;
}
@@ -1578,22 +1578,26 @@ public class BaseWicketTester
}
/**
- * Returns the first {@link Component} (breadth-first search) matching
the given Wicket-ID. If no such
- * {@link Component} exists it returns {@link Optional#empty()}
+ * Returns the first {@link Component} (breadth-first search) matching
the given Wicket-ID. If
+ * no such {@link Component} exists it returns {@link Optional#empty()}
*
* @param wicketId
* the Wicket-ID of the {@link Component} to be found
- * @return Optional of the component, {@link Optional#empty()} if no
matching component can be found or wicketId is
- * null or blank.
+ * @return Optional of the component, {@link Optional#empty()} if no
matching component can be
+ * found or wicketId is null or blank.
*/
- public Optional<Component> getFirstComponentByWicketId(String wicketId)
{
- if (wicketId == null || wicketId.isBlank()) {
+ public Optional<Component> getFirstComponentByWicketId(String wicketId)
+ {
+ if (wicketId == null || wicketId.isBlank())
+ {
return Optional.empty();
}
- if (getLastRenderedPage() != null && componentInPage != null) {
+ if (getLastRenderedPage() != null && componentInPage != null)
+ {
Component component =
getLastRenderedPage().visitChildren((c, visit) -> {
- if (c.getId().equals(wicketId)) {
+ if (c.getId().equals(wicketId))
+ {
visit.stop(c);
}
});
@@ -1605,24 +1609,28 @@ public class BaseWicketTester
}
/**
- * Returns a {@link List} of all {@link Component}s matching the given
Wicket-ID. Returns an empty list if no such
- * component can be found or the Wicket-ID is null.
+ * Returns a {@link List} of all {@link Component}s matching the given
Wicket-ID. Returns an
+ * empty list if no such component can be found or the Wicket-ID is
null.
*
* @param wicketId
* the Wicket-ID of the components to be found
- * @return A list of all {@link Component}s that have the given
Wicket-ID, an empty List if no such component can be
- * found. Returns an empty List of wicketId is null or blank.
+ * @return A list of all {@link Component}s that have the given
Wicket-ID, an empty List if no
+ * such component can be found. Returns an empty List of
wicketId is null or blank.
*/
- public List<Component> getAllComponentsByWicketId(String wicketId) {
+ public List<Component> getAllComponentsByWicketId(String wicketId)
+ {
var result = new ArrayList<Component>();
- if (wicketId == null || wicketId.isBlank()) {
+ if (wicketId == null || wicketId.isBlank())
+ {
return result;
}
- if (getLastRenderedPage() != null && componentInPage != null) {
+ if (getLastRenderedPage() != null && componentInPage != null)
+ {
getLastRenderedPage().visitChildren((c, visit) -> {
- if (c.getId().equals(wicketId)) {
+ if (c.getId().equals(wicketId))
+ {
result.add(c);
}
});
@@ -1664,8 +1672,8 @@ public class BaseWicketTester
Component component = assertExists(path);
return isTrue(
- "component '" + Classes.name(component.getClass()) + "'
is not of type: " +
- Classes.name(expectedComponentClass),
+ "component '" + Classes.name(component.getClass()) + "'
is not of type: "
+ + Classes.name(expectedComponentClass),
expectedComponentClass.isAssignableFrom(component.getClass()));
}
@@ -1683,8 +1691,8 @@ public class BaseWicketTester
Component component = getComponentFromLastRenderedPage(path,
false);
if (component == null)
{
- result = Result.fail("path: '" + path + "' does not
exist for page: " +
-
Classes.simpleName(getLastRenderedPage().getClass()));
+ result = Result.fail("path: '" + path + "' does not
exist for page: "
+ +
Classes.simpleName(getLastRenderedPage().getClass()));
}
else
{
@@ -1709,8 +1717,8 @@ public class BaseWicketTester
Component component = getComponentFromLastRenderedPage(path,
false);
if (component == null)
{
- result = Result.fail("path: '" + path + "' does not
exist for page: " +
-
Classes.simpleName(getLastRenderedPage().getClass()));
+ result = Result.fail("path: '" + path + "' does not
exist for page: "
+ +
Classes.simpleName(getLastRenderedPage().getClass()));
}
else
{
@@ -1754,8 +1762,8 @@ public class BaseWicketTester
Component component = getComponentFromLastRenderedPage(path);
if (component == null)
{
- fail("path: '" + path + "' does not exist for page: " +
-
Classes.simpleName(getLastRenderedPage().getClass()));
+ fail("path: '" + path + "' does not exist for page: "
+ +
Classes.simpleName(getLastRenderedPage().getClass()));
return null;
}
return component;
@@ -1766,8 +1774,8 @@ public class BaseWicketTester
Component component = getComponentFromLastRenderedPage(path,
true, false);
if (component != null)
{
- fail("path: '" + path + "' does exists for page: " +
-
Classes.simpleName(getLastRenderedPage().getClass()));
+ fail("path: '" + path + "' does exists for page: "
+ +
Classes.simpleName(getLastRenderedPage().getClass()));
}
}
@@ -1914,8 +1922,8 @@ public class BaseWicketTester
// If it's not ajax we fail
if (isAjax == false)
{
- fail("Link " + path + "is an AjaxLink and will
" +
- "not be invoked when AJAX (javascript)
is disabled.");
+ fail("Link " + path + "is an AjaxLink and will "
+ + "not be invoked when AJAX
(javascript) is disabled.");
}
List<AjaxEventBehavior> behaviors = WicketTesterHelper
@@ -1932,8 +1940,8 @@ public class BaseWicketTester
// If it's not ajax we fail
if (isAjax == false)
{
- fail("Link " + path + " is an AjaxSubmitLink
and " +
- "will not be invoked when AJAX
(javascript) is disabled.");
+ fail("Link " + path + " is an AjaxSubmitLink
and "
+ + "will not be invoked when AJAX
(javascript) is disabled.");
}
AjaxSubmitLink link = (AjaxSubmitLink)linkComponent;
@@ -1945,8 +1953,8 @@ public class BaseWicketTester
(AjaxFormSubmitBehavior)WicketTesterHelper.findAjaxEventBehavior(link,
"click"));
}
// if the link is an IAjaxLink, use it (do check if AJAX is
expected)
- else if (isAjax &&
- (linkComponent instanceof IAjaxLink || linkComponent
instanceof AjaxFallbackLink))
+ else if (isAjax
+ && (linkComponent instanceof IAjaxLink || linkComponent
instanceof AjaxFallbackLink))
{
List<AjaxEventBehavior> behaviors = WicketTesterHelper
.findAjaxEventBehaviors(linkComponent, "click");
@@ -2009,8 +2017,8 @@ public class BaseWicketTester
}
catch (Exception e)
{
- throw new
WicketRuntimeException("Internal error in WicketTester. " +
- "Please report this in Wicket's
Issue Tracker.", e);
+ throw new
WicketRuntimeException("Internal error in WicketTester. "
+ + "Please report this in
Wicket's Issue Tracker.", e);
}
}
else if (link instanceof ResourceLink)
@@ -2036,8 +2044,8 @@ public class BaseWicketTester
// The link requires AJAX
else if (linkComponent instanceof IAjaxLink && isAjax == false)
{
- fail("Link " + path + "is an IAjaxLink and will " +
- "not be invoked when AJAX (javascript) is
disabled.");
+ fail("Link " + path + "is an IAjaxLink and will "
+ + "not be invoked when AJAX (javascript) is
disabled.");
}
else
{
@@ -2088,8 +2096,8 @@ public class BaseWicketTester
*/
private Url transform(final Url url)
{
- while (url.getSegments().size() > 0 &&
- (url.getSegments().get(0).equals("..") ||
url.getSegments().get(0).equals(".")))
+ while (url.getSegments().size() > 0
+ && (url.getSegments().get(0).equals("..") ||
url.getSegments().get(0).equals(".")))
{
url.getSegments().remove(0);
}
@@ -2148,8 +2156,9 @@ public class BaseWicketTester
* @param expectedDocument
* expected output
* @return a <code>Result</code>
- */
- public Result isResultPage(final String expectedDocument) {
+ */
+ public Result isResultPage(final String expectedDocument)
+ {
// Validate the document
String document = getLastResponseAsString();
return isTrue("expected rendered page equals",
document.equals(expectedDocument));
@@ -2258,8 +2267,10 @@ public class BaseWicketTester
{
if (obj.path.matches(".*" + filter + ".*"))
{
- log.info("[{}{}] path\t" + obj.path + " \t" +
obj.type + " \t[" + obj.value + "]",
- obj.isEnabled ? "E" : "-",
obj.isVisible ? "V" : "-");
+ var enabled = obj.isEnabled ? "E" : "-";
+ var visible = obj.isVisible ? "V" : "-";
+ log.info("[{}{}] path\t{} \t{} \t[{}]",
enabled, visible, obj.path, obj.type,
+ obj.value);
}
}
}
@@ -2289,9 +2300,9 @@ public class BaseWicketTester
String componentInfo = component.toString();
if (!component.isVisible())
{
- failMessage = "A component which is invisible and
doesn't render a placeholder tag" +
- " will not be rendered at all and thus won't be
accessible for subsequent AJAX interaction. " +
- componentInfo;
+ failMessage = "A component which is invisible and
doesn't render a placeholder tag"
+ + " will not be rendered at all and thus won't
be accessible for subsequent AJAX interaction. "
+ + componentInfo;
result = isTrue(failMessage,
component.getOutputMarkupPlaceholderTag());
if (result.wasFailed())
{
@@ -2303,13 +2314,12 @@ public class BaseWicketTester
String ajaxResponse = getLastResponseAsString();
// Test that the previous response was actually a AJAX response
- failMessage = "The previous response was not an AJAX response.
" +
- "You need to execute an AJAX event, using #clickLink()
or " +
- "#executeAjaxEvent(), before using this assertion
method";
+ failMessage = "The previous response was not an AJAX response. "
+ + "You need to execute an AJAX event, using
#clickLink() or "
+ + "#executeAjaxEvent(), before using this assertion
method";
boolean isAjaxResponse = Pattern
.compile("^<\\?xml version=\"1.0\"
encoding=\".*?\"\\?><ajax-response>")
- .matcher(ajaxResponse)
- .find();
+ .matcher(ajaxResponse).find();
result = isTrue(failMessage, isAjaxResponse);
if (result.wasFailed())
{
@@ -2319,8 +2329,8 @@ public class BaseWicketTester
// See if the component has a markup id
String markupId = component.getMarkupId();
- failMessage = "The component doesn't have a markup id, " +
- "which means that it can't have been added to the AJAX
response. " + componentInfo;
+ failMessage = "The component doesn't have a markup id, "
+ + "which means that it can't have been added to the
AJAX response. " + componentInfo;
result = isTrue(failMessage, !Strings.isEmpty(markupId));
if (result.wasFailed())
{
@@ -2696,15 +2706,15 @@ public class BaseWicketTester
if (component.isVisibleInHierarchy() == false)
{
res = Result.fail(
- "The component is currently not visible in the
hierarchy and thus you can not be used." +
- " Component: " + component);
+ "The component is currently not visible in the
hierarchy and thus you can not be used."
+ + " Component: " + component);
}
if (component.isEnabledInHierarchy() == false)
{
res = Result.fail(
- "The component is currently not enabled in the
hierarchy and thus you can not be used." +
- " Component: " + component);
+ "The component is currently not enabled in the
hierarchy and thus you can not be used."
+ + " Component: " + component);
}
if (throwException && res.wasFailed())
@@ -2913,8 +2923,8 @@ public class BaseWicketTester
if
(handler.getPageProvider().hasPageInstance())
{
Page renderedPage =
(Page)handler.getPageProvider().getPageInstance();
- if (componentInPage != null &&
lastPage != null && renderedPage != null &&
- lastPage.getPageClass()
!= renderedPage.getPageClass())
+ if (componentInPage != null &&
lastPage != null && renderedPage != null
+ &&
lastPage.getPageClass() != renderedPage.getPageClass())
{
// WICKET-3913: reset
startComponent if a new page
// type is rendered