This is an automated email from the ASF dual-hosted git repository.
tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/deltaspike.git
The following commit(s) were added to refs/heads/master by this push:
new 2b57ef0b2 fixed clientwindow handling
2b57ef0b2 is described below
commit 2b57ef0b2bb738620714d75927f99ad72f23ab25
Author: Thomas Andraschko <[email protected]>
AuthorDate: Tue Nov 14 11:46:14 2023 +0100
fixed clientwindow handling
---
.../impl/clientwindow/ClientSideClientWindow.java | 29 +--
.../impl/clientwindow/DeltaSpikeClientWindow.java | 39 ++-
.../jsf/impl/clientwindow/LazyClientWindow.java | 39 +--
.../request/DeltaSpikeLifecycleFactoryWrapper.java | 1 -
.../request/DeltaSpikeLifecycleWrapper.java | 1 +
.../jsf/impl/util/ClientWindowHelper.java | 11 +-
.../apache/deltaspike/jsf/impl/util/JsfUtils.java | 37 ++-
.../test/jsf/impl/util/JsfUtilsTest.java | 288 +++++++++++----------
8 files changed, 226 insertions(+), 219 deletions(-)
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/ClientSideClientWindow.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/ClientSideClientWindow.java
index e240141ce..f69a3388d 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/ClientSideClientWindow.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/ClientSideClientWindow.java
@@ -23,9 +23,9 @@ import java.io.OutputStream;
import jakarta.faces.FacesException;
import jakarta.faces.context.ExternalContext;
import jakarta.faces.context.FacesContext;
-import jakarta.faces.render.ResponseStateManager;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletResponse;
+import java.util.Collections;
import java.util.Map;
import org.apache.deltaspike.jsf.impl.util.ClientWindowHelper;
import org.apache.deltaspike.jsf.impl.util.JsfUtils;
@@ -51,44 +51,42 @@ public class ClientSideClientWindow extends
DeltaSpikeClientWindow
@Override
- protected String getOrCreateWindowId(FacesContext facesContext)
+ public void decode(FacesContext facesContext)
{
- String windowId = null;
-
boolean post = isPost(facesContext);
if (post)
{
- windowId = getWindowIdPostParameter(facesContext);
+ id = getWindowIdPostParameter(facesContext);
}
else if (isNoscriptRequest(facesContext.getExternalContext()))
{
// the client has JavaScript disabled
getClientWindowConfig().setJavaScriptEnabled(false);
- windowId = DEFAULT_WINDOW_ID;
+ id = DEFAULT_WINDOW_ID;
}
else
{
- windowId =
getVerifiedWindowIdFromCookie(facesContext.getExternalContext());
+ id =
getVerifiedWindowIdFromCookie(facesContext.getExternalContext());
boolean newWindowIdRequested = false;
- if (AUTOMATED_ENTRY_POINT_PARAMETER_KEY.equals(windowId))
+ if (AUTOMATED_ENTRY_POINT_PARAMETER_KEY.equals(id))
{
// this is a marker for generating a new windowId
- windowId = generateNewWindowId();
+ id = generateNewWindowId();
newWindowIdRequested = true;
}
- if (windowId == null || newWindowIdRequested)
+ if (id == null || newWindowIdRequested)
{
// GET request without windowId - send
windowhandlerfilter.html to get the windowId
- sendWindowHandlerHtml(facesContext.getExternalContext(),
windowId);
+ sendWindowHandlerHtml(facesContext.getExternalContext(), id);
facesContext.responseComplete();
}
}
- return windowId;
+ id = sanitiseWindowId(id);
}
protected boolean isNoscriptRequest(ExternalContext externalContext)
@@ -234,11 +232,6 @@ public class ClientSideClientWindow extends
DeltaSpikeClientWindow
requestToken,
windowId);
- url = JsfUtils.addParameter(facesContext.getExternalContext(),
- url,
- true,
- ResponseStateManager.CLIENT_WINDOW_URL_PARAM,
- windowId);
url = JsfUtils.addParameter(facesContext.getExternalContext(),
url,
true,
@@ -260,7 +253,7 @@ public class ClientSideClientWindow extends
DeltaSpikeClientWindow
@Override
public Map<String, String> getQueryURLParameters(FacesContext facesContext)
{
- return null;
+ return Collections.emptyMap();
}
@Override
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/DeltaSpikeClientWindow.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/DeltaSpikeClientWindow.java
index 75552a02d..aca4715c8 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/DeltaSpikeClientWindow.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/DeltaSpikeClientWindow.java
@@ -36,28 +36,13 @@ public abstract class DeltaSpikeClientWindow extends
ClientWindow
*/
public static final String DEFAULT_WINDOW_ID = "default";
- private String id;
- private int maxWindowIdCount = 10;
+ protected String id;
+ protected int maxWindowIdCount = 10;
public DeltaSpikeClientWindow()
{
this.maxWindowIdCount = ClientWindowHelper.getMaxWindowIdLength();
}
-
- @Override
- public void decode(FacesContext facesContext)
- {
- id = getOrCreateWindowId(facesContext);
-
- if (id != null)
- {
- id = sanitiseWindowId(id);
- if (id.length() > this.maxWindowIdCount)
- {
- id = id.substring(0, this.maxWindowIdCount);
- }
- }
- }
@Override
public String getId()
@@ -65,16 +50,26 @@ public abstract class DeltaSpikeClientWindow extends
ClientWindow
return id;
}
- /**
+ /**
* We have to escape some characters to make sure we do not open
* any XSS vectors. E.g. replace (,<, & etc to
* prevent attackers from injecting JavaScript function calls or html.
*/
protected String sanitiseWindowId(String windowId)
{
- return StringUtils.removeSpecialChars(windowId);
+ if (windowId == null)
+ {
+ return null;
+ }
+
+ windowId = StringUtils.removeSpecialChars(windowId);
+ if (windowId.length() > this.maxWindowIdCount)
+ {
+ windowId = windowId.substring(0, this.maxWindowIdCount);
+ }
+ return windowId;
}
-
+
protected String generateNewWindowId()
{
//X TODO proper mechanism
@@ -121,9 +116,7 @@ public abstract class DeltaSpikeClientWindow extends
ClientWindow
{
return BeanProvider.getContextualReference(ClientWindowConfig.class);
}
-
- protected abstract String getOrCreateWindowId(FacesContext facesContext);
-
+
/**
* @return true if the implementation possible sends an initial redirect.
*/
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/LazyClientWindow.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/LazyClientWindow.java
index 6b0368134..dbbc04ef1 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/LazyClientWindow.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/clientwindow/LazyClientWindow.java
@@ -21,8 +21,7 @@ package org.apache.deltaspike.jsf.impl.clientwindow;
import org.apache.deltaspike.jsf.impl.util.ClientWindowHelper;
import jakarta.faces.context.FacesContext;
-import jakarta.faces.render.ResponseStateManager;
-import java.util.HashMap;
+import java.util.Collections;
import java.util.Map;
import org.apache.deltaspike.core.api.provider.BeanProvider;
import org.apache.deltaspike.core.util.StringUtils;
@@ -31,52 +30,42 @@ import org.apache.deltaspike.jsf.api.config.JsfModuleConfig;
public class LazyClientWindow extends DeltaSpikeClientWindow
{
@Override
- protected String getOrCreateWindowId(FacesContext facesContext)
+ public void decode(FacesContext facesContext)
{
- String windowId =
ClientWindowHelper.getInitialRedirectWindowId(facesContext);
+ id = ClientWindowHelper.getInitialRedirectWindowId(facesContext);
- if (StringUtils.isEmpty(windowId))
+ if (StringUtils.isEmpty(id))
{
- windowId = getWindowIdParameter(facesContext);
+ id = getWindowIdParameter(facesContext);
}
boolean post = isPost(facesContext);
- if (StringUtils.isEmpty(windowId) && post)
+ if (StringUtils.isEmpty(id) && post)
{
- windowId = getWindowIdPostParameter(facesContext);
+ id = getWindowIdPostParameter(facesContext);
}
- if (StringUtils.isEmpty(windowId))
+ if (StringUtils.isEmpty(id))
{
+ id = generateNewWindowId();
+
JsfModuleConfig jsfModuleConfig =
BeanProvider.getContextualReference(JsfModuleConfig.class);
if (jsfModuleConfig.isInitialRedirectEnabled() && !post)
{
- ClientWindowHelper.handleInitialRedirect(facesContext,
generateNewWindowId());
+ id = sanitiseWindowId(id); // handleInitialRedirect already
takes the id, just be sure and sanitise now
+ ClientWindowHelper.handleInitialRedirect(facesContext, id);
facesContext.responseComplete();
- windowId = null;
- }
- else
- {
- windowId = generateNewWindowId();
}
}
- return windowId;
+ id = sanitiseWindowId(id);
}
@Override
public Map<String, String> getQueryURLParameters(FacesContext facesContext)
{
- String windowId = getId();
- if (windowId == null)
- {
- return null;
- }
-
- Map<String, String> parameters = new HashMap<>();
- parameters.put(ResponseStateManager.CLIENT_WINDOW_URL_PARAM, windowId);
- return parameters;
+ return Collections.emptyMap();
}
@Override
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleFactoryWrapper.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleFactoryWrapper.java
index 80d65371b..137ed88d7 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleFactoryWrapper.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleFactoryWrapper.java
@@ -18,7 +18,6 @@
*/
package org.apache.deltaspike.jsf.impl.listener.request;
-
import org.apache.deltaspike.core.spi.activation.Deactivatable;
import org.apache.deltaspike.core.util.ClassDeactivationUtils;
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleWrapper.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleWrapper.java
index e644df3b8..8fd721100 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleWrapper.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/request/DeltaSpikeLifecycleWrapper.java
@@ -159,6 +159,7 @@ class DeltaSpikeLifecycleWrapper extends Lifecycle
{
facesContext.getExternalContext().setClientWindow(new
ClientSideClientWindow());
}
+
facesContext.getExternalContext().getClientWindow().decode(facesContext);
}
}
}
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
index 61c650ff0..91799da12 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
@@ -26,6 +26,7 @@ import jakarta.enterprise.inject.Typed;
import jakarta.faces.FacesException;
import jakarta.faces.context.ExternalContext;
import jakarta.faces.context.FacesContext;
+import jakarta.faces.render.ResponseStateManager;
import org.apache.deltaspike.jsf.api.config.base.JsfBaseConfig;
@@ -56,12 +57,12 @@ public abstract class ClientWindowHelper
{
url += externalContext.getRequestPathInfo();
}
-
+
url = JsfUtils.addRequestParameters(externalContext, url, true);
- //TODO check if it isn't better to fix addRequestParameters itself
- //only #encodeResourceURL is portable currently
- url = externalContext.encodeResourceURL(url);
-
+ // always remove jfwid to force adding new jfwid as JSF impl otherwise
just ignores it
+ url = JsfUtils.removeUrlParameter(url,
ResponseStateManager.CLIENT_WINDOW_URL_PARAM);
+ url = externalContext.encodeRedirectURL(url, null);
+
return url;
}
diff --git
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
index fe99ca45f..3a1fdcfc8 100644
---
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
+++
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/JsfUtils.java
@@ -35,6 +35,7 @@ import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.net.URLEncoder;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -42,6 +43,7 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
import org.apache.deltaspike.core.util.StringUtils;
public abstract class JsfUtils
@@ -65,7 +67,7 @@ public abstract class JsfUtils
{
ExternalContext externalContext =
FacesContext.getCurrentInstance().getExternalContext();
- Set<RequestParameter> result = new HashSet<RequestParameter>();
+ Set<RequestParameter> result = new HashSet<>();
if (externalContext == null || //detection of early config for
different mojarra versions
externalContext.getRequestParameterValuesMap() == null ||
externalContext.getRequest() == null)
@@ -105,7 +107,7 @@ public abstract class JsfUtils
for (String parameterValue : requestParam.getValues())
{
if (!url.contains(key + "=" + parameterValue) &&
- !url.contains(key + "=" +
encodeURLParameterValue(parameterValue, externalContext)))
+ !url.contains(key + "=" +
encodeUrlParameterValue(parameterValue, externalContext)))
{
if (!existingParameters)
{
@@ -139,7 +141,7 @@ public abstract class JsfUtils
{
// don't append if already available
if (url.contains(name + "=" + value)
- || url.contains(name + "=" + encodeURLParameterValue(value,
externalContext)))
+ || url.contains(name + "=" + encodeUrlParameterValue(value,
externalContext)))
{
return url;
}
@@ -184,7 +186,7 @@ public abstract class JsfUtils
for (String value : entry.getValue())
{
if (!url.contains(entry.getKey() + "=" + value) &&
- !url.contains(entry.getKey() + "=" +
encodeURLParameterValue(value, externalContext)))
+ !url.contains(entry.getKey() + "=" +
encodeUrlParameterValue(value, externalContext)))
{
if (StringUtils.isEmpty(entry.getKey()) &&
StringUtils.isEmpty(value))
{
@@ -214,7 +216,7 @@ public abstract class JsfUtils
{
if (encode)
{
- url.append(encodeURLParameterValue(name, externalContext));
+ url.append(encodeUrlParameterValue(name, externalContext));
}
else
{
@@ -225,7 +227,7 @@ public abstract class JsfUtils
if (encode)
{
- url.append(encodeURLParameterValue(value, externalContext));
+ url.append(encodeUrlParameterValue(value, externalContext));
}
else
{
@@ -233,6 +235,25 @@ public abstract class JsfUtils
}
}
+ public static String removeUrlParameter(String url, String name)
+ {
+ if (url == null || !url.contains(name) || (!url.contains("?") &&
!url.contains("&")))
+ {
+ return url;
+ }
+
+ String[] array = url.split("\\?");
+ String params = Arrays.asList(array[1].split("&"))
+ .stream()
+ .filter(item -> !item.split("=")[0].equalsIgnoreCase(name) &&
!"".equals(item.split("=")[1]))
+ .collect(Collectors.joining("&"));
+ if (params == null || params.isBlank())
+ {
+ return array[0];
+ }
+ return String.join("?", array[0], params);
+ }
+
/**
* Encodes the given value using URLEncoder.encode() with the charset
returned
* from ExternalContext.getResponseCharacterEncoding().
@@ -242,7 +263,7 @@ public abstract class JsfUtils
* @param externalContext current external-context
* @return encoded value
*/
- public static String encodeURLParameterValue(String value, ExternalContext
externalContext)
+ public static String encodeUrlParameterValue(String value, ExternalContext
externalContext)
{
// copied from MyFaces ServletExternalContextImpl.encodeURL()
try
@@ -309,7 +330,7 @@ public abstract class JsfUtils
@SuppressWarnings({ "unchecked" })
List<FacesMessageEntry> facesMessageEntryList =
windowMetaData.getFacesMessageEntryList();
- List<FacesMessage> originalMessageList = new
ArrayList<FacesMessage>(facesContext.getMessageList());
+ List<FacesMessage> originalMessageList = new
ArrayList<>(facesContext.getMessageList());
if (facesMessageEntryList != null)
{
diff --git
a/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/util/JsfUtilsTest.java
b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/util/JsfUtilsTest.java
index 0175d9427..ec9fa9e02 100644
---
a/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/util/JsfUtilsTest.java
+++
b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/util/JsfUtilsTest.java
@@ -1,139 +1,149 @@
-/*
- * 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.deltaspike.test.jsf.impl.util;
-
-import org.apache.deltaspike.jsf.impl.util.JsfUtils;
-import org.junit.Assert;
-import org.junit.Test;
-
-import jakarta.faces.application.FacesMessage;
-import java.util.ArrayList;
-import java.util.List;
-
-//several tests are only needed to check that there won't be a
NullPointerException
-public class JsfUtilsTest
-{
- @Test
- public void testNewMessageWithoutExistingMessages()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, new
FacesMessage("test")));
- }
-
- @Test
- public void testExistingSimpleMessage()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("test"));
- FacesMessage messageToCheck = new FacesMessage("test");
- Assert.assertEquals(Boolean.FALSE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testExistingMessageWithoutSummary()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage(null, "test"));
- FacesMessage messageToCheck = new FacesMessage(null, "test");
- Assert.assertEquals(Boolean.FALSE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testExistingMessageWithoutDetails()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("test", null));
- FacesMessage messageToCheck = new FacesMessage("test", null);
- Assert.assertEquals(Boolean.FALSE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithExistingMessageWithoutText()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage(null, null));
- FacesMessage messageToCheck = new FacesMessage("test");
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithoutText()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("existing", "message"));
- FacesMessage messageToCheck = new FacesMessage(null, null);
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithoutSummary()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("existing", "message"));
- FacesMessage messageToCheck = new FacesMessage(null, "test");
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithoutDetails()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("existing", "message"));
- FacesMessage messageToCheck = new FacesMessage("test", null);
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testMessagesWithoutText()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage(null, null));
- FacesMessage messageToCheck = new FacesMessage(null, null);
- Assert.assertEquals(Boolean.FALSE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithExistingMessageWithoutSummary()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage(null, "message"));
- FacesMessage messageToCheck = new FacesMessage("new", "message");
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-
- @Test
- public void testNewMessageWithExistingMessageWithoutDetails()
- {
- List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
- existingFacesMessage.add(new FacesMessage("existing", null));
- FacesMessage messageToCheck = new FacesMessage("new", "message");
- Assert.assertEquals(Boolean.TRUE,
- JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
- }
-}
+/*
+ * 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.deltaspike.test.jsf.impl.util;
+
+import org.apache.deltaspike.jsf.impl.util.JsfUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import jakarta.faces.application.FacesMessage;
+import java.util.ArrayList;
+import java.util.List;
+
+//several tests are only needed to check that there won't be a
NullPointerException
+public class JsfUtilsTest
+{
+ @Test
+ public void testNewMessageWithoutExistingMessages()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, new
FacesMessage("test")));
+ }
+
+ @Test
+ public void testExistingSimpleMessage()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("test"));
+ FacesMessage messageToCheck = new FacesMessage("test");
+ Assert.assertEquals(Boolean.FALSE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testExistingMessageWithoutSummary()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage(null, "test"));
+ FacesMessage messageToCheck = new FacesMessage(null, "test");
+ Assert.assertEquals(Boolean.FALSE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testExistingMessageWithoutDetails()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("test", null));
+ FacesMessage messageToCheck = new FacesMessage("test", null);
+ Assert.assertEquals(Boolean.FALSE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithExistingMessageWithoutText()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage(null, null));
+ FacesMessage messageToCheck = new FacesMessage("test");
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithoutText()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("existing", "message"));
+ FacesMessage messageToCheck = new FacesMessage(null, null);
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithoutSummary()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("existing", "message"));
+ FacesMessage messageToCheck = new FacesMessage(null, "test");
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithoutDetails()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("existing", "message"));
+ FacesMessage messageToCheck = new FacesMessage("test", null);
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testMessagesWithoutText()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage(null, null));
+ FacesMessage messageToCheck = new FacesMessage(null, null);
+ Assert.assertEquals(Boolean.FALSE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithExistingMessageWithoutSummary()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage(null, "message"));
+ FacesMessage messageToCheck = new FacesMessage("new", "message");
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testNewMessageWithExistingMessageWithoutDetails()
+ {
+ List<FacesMessage> existingFacesMessage = new
ArrayList<FacesMessage>();
+ existingFacesMessage.add(new FacesMessage("existing", null));
+ FacesMessage messageToCheck = new FacesMessage("new", "message");
+ Assert.assertEquals(Boolean.TRUE,
+ JsfUtils.isNewMessage(existingFacesMessage, messageToCheck));
+ }
+
+ @Test
+ public void testRemoveUrlParameter()
+ {
+
Assert.assertEquals("http://localhost:58481/windowScopedContextTest/page.xhtml",
+
JsfUtils.removeUrlParameter("http://localhost:58481/windowScopedContextTest/page.xhtml?jfwid=-1281",
"jfwid"));
+
+
Assert.assertEquals("http://localhost:58481/windowScopedContextTest/page.xhtml",
+
JsfUtils.removeUrlParameter("http://localhost:58481/windowScopedContextTest/page.xhtml?jfwid=",
"jfwid"));
+ }
+}