[MNG-6915] Add a helper method to get the terminal width
diff --git a/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java b/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
index 74b85a4..dab346f 100644
--- a/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
+++ b/src/main/java/org/apache/maven/shared/utils/logging/MessageUtils.java
@@ -201,4 +201,22 @@
             Runtime.getRuntime().addShutdownHook( shutdownHook );
         }
     }
+
+    /**
+     * Get the terminal width or -1 if the width cannot be determined.
+     *
+     * @return the terminal width
+     */
+    public static int getTerminalWidth()
+    {
+        if ( JANSI )
+        {
+            int width = AnsiConsole.getTerminalWidth();
+            return width > 0 ? width : -1;
+        }
+        else
+        {
+            return -1;
+        }
+    }
 }
diff --git a/src/test/java/org/apache/maven/shared/utils/logging/MessageUtilsTest.java b/src/test/java/org/apache/maven/shared/utils/logging/MessageUtilsTest.java
index a53c4d9..e80fe38 100644
--- a/src/test/java/org/apache/maven/shared/utils/logging/MessageUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/logging/MessageUtilsTest.java
@@ -22,9 +22,18 @@
 import static org.hamcrest.CoreMatchers.not;

 import static org.hamcrest.CoreMatchers.sameInstance;

 import static org.hamcrest.MatcherAssert.assertThat;

+import static org.junit.Assert.assertEquals;

 

+import java.io.ByteArrayOutputStream;

 import java.io.PrintStream;

+import java.nio.charset.StandardCharsets;

 

+import org.fusesource.jansi.AnsiColors;

+import org.fusesource.jansi.AnsiConsole;

+import org.fusesource.jansi.AnsiMode;

+import org.fusesource.jansi.AnsiPrintStream;

+import org.fusesource.jansi.AnsiType;

+import org.fusesource.jansi.io.AnsiOutputStream;

 import org.junit.Test;

 

 public class MessageUtilsTest

@@ -45,4 +54,24 @@
             System.setOut( currentOut );

         }

     }

+

+    @Test

+    public void testTerminalWidth()

+    {

+        AnsiOutputStream.WidthSupplier width = new AnsiOutputStream.WidthSupplier()

+        {

+            @Override

+            public int getTerminalWidth()

+            {

+                return 33;

+            }

+        };

+        AnsiOutputStream aos = new AnsiOutputStream( new ByteArrayOutputStream(), width, AnsiMode.Default,

+                null, AnsiType.Emulation, AnsiColors.Colors256, StandardCharsets.UTF_8,

+                null, null, false );

+        AnsiConsole.systemInstall();

+        AnsiConsole.out = new AnsiPrintStream( aos, true );

+        assertEquals( 33, MessageUtils.getTerminalWidth() );

+        AnsiConsole.systemUninstall();

+    }

 }