You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by hn...@apache.org on 2017/10/12 11:39:04 UTC

[myfaces-tobago] branch master updated: TOBAGO-1721 Optimize HTML output when two renderer are involved * fix message layout: has-{danger|warning|info} CSS classes doesn't exist anymore in Bootstrap. Now: border-{danger|warning|info} CSS class must be set on input/select fields

This is an automated email from the ASF dual-hosted git repository.

hnoeth pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new ad1e655  TOBAGO-1721 Optimize HTML output when two renderer are involved * fix message layout: has-{danger|warning|info} CSS classes doesn't exist anymore in Bootstrap. Now: border-{danger|warning|info} CSS class must be set on input/select fields
ad1e655 is described below

commit ad1e655e02a7fe750d2f05b5a77c064691029b5a
Author: Henning Noeth <hn...@apache.org>
AuthorDate: Thu Oct 12 13:37:32 2017 +0200

    TOBAGO-1721 Optimize HTML output when two renderer are involved
    * fix message layout: has-{danger|warning|info} CSS classes doesn't exist anymore in Bootstrap. Now: border-{danger|warning|info} CSS class must be set on input/select fields
---
 .../internal/renderkit/renderer/FileRenderer.java  |  5 ++-
 .../internal/renderkit/renderer/InRenderer.java    |  1 +
 .../renderer/LabelLayoutRendererBase.java          |  1 -
 .../renderer/MessageLayoutRendererBase.java        | 24 ++-----------
 .../renderer/SelectManyListboxRenderer.java        |  1 +
 .../renderer/SelectManyShuttleRenderer.java        |  5 ++-
 .../renderer/SelectOneChoiceRenderer.java          |  1 +
 .../renderer/SelectOneListboxRenderer.java         |  1 +
 .../renderkit/renderer/TextareaRenderer.java       |  1 +
 .../tobago/renderkit/css/BootstrapClass.java       | 38 ++++++++++++++++++++
 .../myfaces/tobago/renderkit/css/TobagoClass.java  |  4 +++
 .../apache/myfaces/tobago/util/ComponentUtils.java | 26 +++++++++-----
 .../tobago/util/ComponentUtilsUnitTest.java        | 41 ++++++++++++++++++++++
 13 files changed, 116 insertions(+), 33 deletions(-)

diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
index f85d5d7..ec2193b 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/FileRenderer.java
@@ -139,7 +139,10 @@ public class FileRenderer extends MessageLayoutRendererBase implements Component
     writer.writeAttribute(HtmlAttributes.TABINDEX, -1);
     writer.writeAttribute(HtmlAttributes.DISABLED, file.isDisabled() || file.isReadonly());
     writer.writeAttribute(HtmlAttributes.READONLY, file.isReadonly());
-    writer.writeClassAttribute(TobagoClass.FILE__PRETTY, BootstrapClass.FORM_CONTROL);
+    writer.writeClassAttribute(
+        TobagoClass.FILE__PRETTY,
+        BootstrapClass.FORM_CONTROL,
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(file)));
     // TODO Focus
     //HtmlRendererUtils.renderFocus(clientId, file.isFocus(), ComponentUtils.isError(file), facesContext, writer);
     writer.endElement(HtmlElements.INPUT);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/InRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/InRenderer.java
index 56845ea..945fae7 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/InRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/InRenderer.java
@@ -140,6 +140,7 @@ public class InRenderer extends MessageLayoutRendererBase {
         getRendererCssClass(),
         getRendererCssClass().createMarkup(input.getMarkup()),
         getRendererCssClass().createDefaultMarkups(input),
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(input)),
         BootstrapClass.FORM_CONTROL,
         input.getCustomClass());
 
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
index 780ba51..45cdcde 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/LabelLayoutRendererBase.java
@@ -170,7 +170,6 @@ public abstract class LabelLayoutRendererBase extends DecodingInputRendererBase
         flex ? BootstrapClass.D_FLEX : null,
         TobagoClass.LABEL__CONTAINER,
         BootstrapClass.FORM_GROUP,
-        BootstrapClass.maximumSeverity(component),
         ComponentUtils.getBooleanAttribute(component, Attributes.required) ? TobagoClass.REQUIRED : null);
 
     switch (labelLayout) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
index 14b4b57..824930c 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/MessageLayoutRendererBase.java
@@ -26,6 +26,7 @@ import org.apache.myfaces.tobago.renderkit.html.DataAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlAttributes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlButtonTypes;
 import org.apache.myfaces.tobago.renderkit.html.HtmlElements;
+import org.apache.myfaces.tobago.util.ComponentUtils;
 import org.apache.myfaces.tobago.webapp.TobagoResponseWriter;
 
 import javax.faces.application.FacesMessage;
@@ -77,15 +78,14 @@ public abstract class MessageLayoutRendererBase extends LabelLayoutRendererBase
   protected abstract void encodeEndField(FacesContext facesContext, UIComponent component) throws IOException;
 
   private void encodeMessages(
-          final TobagoResponseWriter writer, final List<FacesMessage> messages) throws IOException {
+      final TobagoResponseWriter writer, final List<FacesMessage> messages) throws IOException {
     writer.startElement(HtmlElements.A);
     writer.writeAttribute(HtmlAttributes.TABINDEX, "0", false);
     writer.writeAttribute(HtmlAttributes.ROLE, HtmlButtonTypes.BUTTON);
     writer.writeClassAttribute(
         TobagoClass.MESSAGES__BUTTON,
         BootstrapClass.BTN,
-        BootstrapClass.BTN_SECONDARY,
-        getHighestSeverity(messages));
+        BootstrapClass.buttonColor(ComponentUtils.getMaximumSeverity(messages)));
     writer.writeAttribute(DataAttributes.TOGGLE, "popover", false);
     writer.writeAttribute(DataAttributes.TITLE, getTitle(messages), true);
     writer.writeAttribute(DataAttributes.CONTENT, getMessage(messages), true);
@@ -95,24 +95,6 @@ public abstract class MessageLayoutRendererBase extends LabelLayoutRendererBase
     writer.endElement(HtmlElements.A);
   }
 
-  private BootstrapClass getHighestSeverity(final List<FacesMessage> messages) {
-    FacesMessage.Severity highestSeverity = FacesMessage.SEVERITY_INFO;
-    for (FacesMessage message : messages) {
-      if (highestSeverity == null || message.getSeverity().getOrdinal() > highestSeverity.getOrdinal()) {
-        highestSeverity = message.getSeverity();
-      }
-    }
-
-    switch (highestSeverity.getOrdinal()) {
-      case 1:
-        return BootstrapClass.BTN_INFO;
-      case 2:
-        return BootstrapClass.BTN_WARNING;
-      default:
-        return BootstrapClass.BTN_DANGER;
-    }
-  }
-
   private String getTitle(final List<FacesMessage> messages) {
     int fatalCount = 0;
     int errorCount = 0;
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
index c28345f..cb66eaf 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyListboxRenderer.java
@@ -72,6 +72,7 @@ public class SelectManyListboxRenderer extends SelectManyRendererBase {
         TobagoClass.SELECT_MANY_LISTBOX,
         TobagoClass.SELECT_MANY_LISTBOX.createMarkup(select.getMarkup()),
         TobagoClass.SELECT_MANY_LISTBOX.createDefaultMarkups(select),
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(select)),
         BootstrapClass.FORM_CONTROL,
         select.getCustomClass());
     writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
index 15fafdb..dd49077 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectManyShuttleRenderer.java
@@ -125,7 +125,10 @@ public class SelectManyShuttleRenderer extends SelectManyRendererBase {
     writer.writeAttribute(HtmlAttributes.DISABLED, disabled);
     writer.writeAttribute(HtmlAttributes.READONLY, readonly);
     writer.writeAttribute(HtmlAttributes.TABINDEX, select.getTabIndex());
-    writer.writeClassAttribute(TobagoClass.SELECT_MANY_SHUTTLE__SELECTED, BootstrapClass.FORM_CONTROL);
+    writer.writeClassAttribute(
+        TobagoClass.SELECT_MANY_SHUTTLE__SELECTED,
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(select)),
+        BootstrapClass.FORM_CONTROL);
     writer.writeAttribute(HtmlAttributes.MULTIPLE, true);
     writer.writeAttribute(HtmlAttributes.SIZE, size);
     HtmlRendererUtils.renderSelectItems(select, TobagoClass.SELECT_MANY_SHUTTLE__OPTION, items, values, submittedValues,
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
index d1fb15e..7d6ced4 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneChoiceRenderer.java
@@ -65,6 +65,7 @@ public class SelectOneChoiceRenderer extends SelectOneRendererBase {
         TobagoClass.SELECT_ONE_CHOICE,
         TobagoClass.SELECT_ONE_CHOICE.createMarkup(select.getMarkup()),
         TobagoClass.SELECT_ONE_CHOICE.createDefaultMarkups(select), //readonly, disabled
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(select)),
         BootstrapClass.FORM_CONTROL,
         select.getCustomClass());
     if (title != null) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
index 6878699..f0445c3 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/SelectOneListboxRenderer.java
@@ -71,6 +71,7 @@ public class SelectOneListboxRenderer extends SelectOneRendererBase {
         TobagoClass.SELECT_ONE_LISTBOX,
         TobagoClass.SELECT_ONE_LISTBOX.createMarkup(select.getMarkup()),
         TobagoClass.SELECT_ONE_LISTBOX.createDefaultMarkups(select),
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(select)),
         BootstrapClass.FORM_CONTROL,
         select.getCustomClass());
     final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, select);
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
index b73be9e..8f0f575 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TextareaRenderer.java
@@ -107,6 +107,7 @@ public class TextareaRenderer extends MessageLayoutRendererBase {
         TobagoClass.TEXTAREA,
         TobagoClass.TEXTAREA.createMarkup(input.getMarkup()),
         TobagoClass.TEXTAREA.createDefaultMarkups(input),
+        BootstrapClass.borderColor(ComponentUtils.getMaximumSeverity(input)),
         BootstrapClass.FORM_CONTROL,
         input.getCustomClass());
     int maxLength = 0;
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
index 0524e83..5f0abb0 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/BootstrapClass.java
@@ -75,6 +75,9 @@ public enum BootstrapClass implements CssItem {
   BADGE_PRIMARY("badge-primary"),
   BADGE_SUCCESS("badge-success"),
   BADGE_WARNING("badge-warning"),
+  BORDER_DANGER("border-danger"),
+  BORDER_INFO("border-info"),
+  BORDER_WARNING("border-warning"),
   BTN("btn"),
   BTN_DANGER("btn-danger"),
   BTN_GROUP("btn-group"),
@@ -432,6 +435,41 @@ public enum BootstrapClass implements CssItem {
     }
   }
 
+  public static CssItem borderColor(final FacesMessage.Severity severity) {
+    if (severity == null) {
+      return null;
+    }
+
+    switch (severity.getOrdinal()) {
+      case 1:
+        return BootstrapClass.BORDER_INFO;
+      case 2:
+        return BootstrapClass.BORDER_WARNING;
+      default:
+        return BootstrapClass.BORDER_DANGER;
+    }
+  }
+
+  public static CssItem buttonColor(final FacesMessage.Severity severity) {
+    if (severity == null) {
+      return null;
+    }
+
+    switch (severity.getOrdinal()) {
+      case 1:
+        return BootstrapClass.BTN_INFO;
+      case 2:
+        return BootstrapClass.BTN_WARNING;
+      default:
+        return BootstrapClass.BTN_DANGER;
+    }
+  }
+
+  /**
+   * @deprecated since 4.0.0, please use ComponentUtils.getMaximumSeverity()
+   * with {@link #borderColor(FacesMessage.Severity)} or {@link #buttonColor(FacesMessage.Severity)}
+   */
+  @Deprecated
   public static CssItem maximumSeverity(final UIComponent input) {
     final FacesMessage.Severity maximumSeverity = ComponentUtils.getMaximumSeverity(input);
     if (maximumSeverity == null) {
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
index 2a1d8c9..43d8363 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/renderkit/css/TobagoClass.java
@@ -106,6 +106,10 @@ public enum TobagoClass implements CssItem {
   DROPDOWN_SUBMENU(DROPDOWN__SUBMENU.getName()),
   TABLE_LAYOUT__FIXED("tobago-tableLayout-fixed"),
 
+  /**
+   * @deprecated since 4.0.0
+   */
+  @Deprecated
   HAS__INFO("tobago-has-info"),
   /**
    * @deprecated Since 3.0.1. Please use {@link TobagoClass#HAS__INFO}
diff --git a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
index 5442f99..a162e24 100644
--- a/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
+++ b/tobago-core/src/main/java/org/apache/myfaces/tobago/util/ComponentUtils.java
@@ -92,7 +92,7 @@ public final class ComponentUtils {
   }
 
   public static boolean hasErrorMessages(final FacesContext context) {
-    for (final Iterator iter = context.getMessages(); iter.hasNext();) {
+    for (final Iterator iter = context.getMessages(); iter.hasNext(); ) {
       final FacesMessage message = (FacesMessage) iter.next();
       if (FacesMessage.SEVERITY_ERROR.compareTo(message.getSeverity()) <= 0) {
         return true;
@@ -405,12 +405,20 @@ public final class ComponentUtils {
   }
 
   public static FacesMessage.Severity getMaximumSeverity(final UIComponent component) {
-    final boolean invalid = component instanceof UIInput && !((UIInput) component).isValid();
-    FacesMessage.Severity max = invalid ? FacesMessage.SEVERITY_ERROR : null;
     final FacesContext facesContext = FacesContext.getCurrentInstance();
-    final Iterator messages = facesContext.getMessages(component.getClientId(facesContext));
-    while (messages.hasNext()) {
-      final FacesMessage message = (FacesMessage) messages.next();
+    final List<FacesMessage> messages = facesContext.getMessageList(component.getClientId(facesContext));
+    final FacesMessage.Severity maximumSeverity = getMaximumSeverity(messages);
+
+    final boolean invalid = component instanceof UIInput && !((UIInput) component).isValid();
+
+    return invalid
+        && (maximumSeverity == null || FacesMessage.SEVERITY_ERROR.getOrdinal() > maximumSeverity.getOrdinal())
+        ? FacesMessage.SEVERITY_ERROR : maximumSeverity;
+  }
+
+  public static FacesMessage.Severity getMaximumSeverity(final List<FacesMessage> messages) {
+    FacesMessage.Severity max = null;
+    for (FacesMessage message : messages) {
       if (max == null || message.getSeverity().getOrdinal() > max.getOrdinal()) {
         max = message.getSeverity();
       }
@@ -538,7 +546,7 @@ public final class ComponentUtils {
   }
 
   public static RendererBase getRenderer(final FacesContext facesContext, final String family,
-                                         final String rendererType) {
+      final String rendererType) {
     if (rendererType == null) {
       return null;
     }
@@ -771,7 +779,7 @@ public final class ComponentUtils {
     if (container instanceof UIComponent) {
       final String clientId = ((UIComponent) container).getClientId(facesContext);
       FacesMessage.Severity max = null;
-      for (final Iterator ids = facesContext.getClientIdsWithMessages(); ids.hasNext();) {
+      for (final Iterator ids = facesContext.getClientIdsWithMessages(); ids.hasNext(); ) {
         final String id = (String) ids.next();
         if (id != null && id.startsWith(clientId)) {
           final Iterator messages = facesContext.getMessages(id);
@@ -881,7 +889,7 @@ public final class ComponentUtils {
   public static UIComponent createComponent(
       final FacesContext facesContext, final String componentType, final RendererTypes rendererType,
       final String clientId) {
-    final UIComponent component  = facesContext.getApplication().createComponent(componentType);
+    final UIComponent component = facesContext.getApplication().createComponent(componentType);
     if (rendererType != null) {
       component.setRendererType(rendererType.name());
     }
diff --git a/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java b/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
index 2947c5f..2a6625a 100644
--- a/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
+++ b/tobago-core/src/test/java/org/apache/myfaces/tobago/util/ComponentUtilsUnitTest.java
@@ -21,11 +21,13 @@ package org.apache.myfaces.tobago.util;
 
 import org.apache.myfaces.tobago.component.RendererTypes;
 import org.apache.myfaces.tobago.component.UIIn;
+import org.apache.myfaces.tobago.component.UIOut;
 import org.apache.myfaces.tobago.component.UIPanel;
 import org.apache.myfaces.tobago.internal.config.AbstractTobagoTestBase;
 import org.junit.Assert;
 import org.junit.Test;
 
+import javax.faces.application.FacesMessage;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 
@@ -52,4 +54,43 @@ public class ComponentUtilsUnitTest extends AbstractTobagoTestBase {
     final UIIn in = ComponentUtils.findDescendant(p, UIIn.class);
     Assert.assertEquals(i, in);
   }
+
+  @Test
+  public void testGetMaximumSeverity() {
+    final FacesContext facesContext = FacesContext.getCurrentInstance();
+
+    UIIn input = new UIIn();
+    final String inputId = "InputID";
+    input.setId(inputId);
+
+    input.setValid(true);
+    Assert.assertEquals(null, ComponentUtils.getMaximumSeverity(input));
+    input.setValid(false);
+    Assert.assertEquals(FacesMessage.SEVERITY_ERROR, ComponentUtils.getMaximumSeverity(input));
+
+    facesContext.addMessage(inputId, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info Message", null));
+    input.setValid(true);
+    Assert.assertEquals(FacesMessage.SEVERITY_INFO, ComponentUtils.getMaximumSeverity(input));
+    input.setValid(false);
+    Assert.assertEquals(FacesMessage.SEVERITY_ERROR, ComponentUtils.getMaximumSeverity(input));
+
+    facesContext.addMessage(inputId, new FacesMessage(FacesMessage.SEVERITY_FATAL, "FATAL", null));
+    input.setValid(true);
+    Assert.assertEquals(FacesMessage.SEVERITY_FATAL, ComponentUtils.getMaximumSeverity(input));
+    input.setValid(false);
+    Assert.assertEquals(FacesMessage.SEVERITY_FATAL, ComponentUtils.getMaximumSeverity(input));
+
+
+    UIOut output = new UIOut();
+    final String outputId = "OutputID";
+    output.setId(outputId);
+
+    Assert.assertEquals(null, ComponentUtils.getMaximumSeverity(output));
+
+    facesContext.addMessage(outputId, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info Message", null));
+    Assert.assertEquals(FacesMessage.SEVERITY_INFO, ComponentUtils.getMaximumSeverity(output));
+
+    facesContext.addMessage(outputId, new FacesMessage(FacesMessage.SEVERITY_FATAL, "FATAL", null));
+    Assert.assertEquals(FacesMessage.SEVERITY_FATAL, ComponentUtils.getMaximumSeverity(output));
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@myfaces.apache.org" <co...@myfaces.apache.org>'].