From 998877b8d6253f5507e58b158e5ac325f08d3e33 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Mon, 29 Apr 2013 11:28:41 +0200 Subject: [PATCH] closes #236 --- src/main/java/com/jcabi/log/TextDecor.java | 17 ++++++++----- .../java/com/jcabi/log/TextDecorTest.java | 24 +++++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/jcabi/log/TextDecor.java b/src/main/java/com/jcabi/log/TextDecor.java index 1af3a203..3b10bbf9 100644 --- a/src/main/java/com/jcabi/log/TextDecor.java +++ b/src/main/java/com/jcabi/log/TextDecor.java @@ -55,7 +55,7 @@ final class TextDecor implements Formattable { /** * Maximum length to show. */ - private static final int MAX = 100; + public static final int MAX = 100; /** * The object. @@ -94,12 +94,17 @@ private static String pretty(final String text) { if (text.length() < TextDecor.MAX) { result = text; } else { - result = String.format( - "%s...%s (%d chars)", - text.substring(0, (TextDecor.MAX / 2) - 2), - text.substring(text.length() - (TextDecor.MAX / 2) + 1), - text.length() + final int skip = text.length() - TextDecor.MAX; + final StringBuilder output = new StringBuilder() + .append(text.substring(0, (text.length() - skip) / 2)) + // @checkstyle MultipleStringLiterals (1 line) + .append("..") + .append(skip) + .append(".."); + output.append( + text.substring(text.length() - TextDecor.MAX + output.length()) ); + result = output.toString(); } return StringEscapeUtils.escapeJava(result); } diff --git a/src/test/java/com/jcabi/log/TextDecorTest.java b/src/test/java/com/jcabi/log/TextDecorTest.java index da731b16..16196ff0 100644 --- a/src/test/java/com/jcabi/log/TextDecorTest.java +++ b/src/test/java/com/jcabi/log/TextDecorTest.java @@ -32,6 +32,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.Formattable; +import java.util.Formatter; +import org.apache.commons.lang3.StringUtils; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @@ -75,6 +80,25 @@ public static Collection params() { ); } + /** + * Test for a long text. + */ + @Test + public void compressesLongText() { + final int len = 1000; + final String text = StringUtils.repeat('x', len); + final Formattable fmt = new TextDecor(text); + final StringBuilder output = new StringBuilder(); + fmt.formatTo(new Formatter(output), 0, 0, 0); + MatcherAssert.assertThat( + output.toString().length(), + Matchers.describedAs( + output.toString(), + Matchers.equalTo(TextDecor.MAX) + ) + ); + } + /** * {@inheritDoc} */