[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();
+ }
}