Repository: maven-surefire Updated Branches: refs/heads/master c89aa69fa -> 6e5fb5695
[SUREFIRE-986] Groovy power assert incorrect indentation Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/6e5fb569 Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/6e5fb569 Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/6e5fb569 Branch: refs/heads/master Commit: 6e5fb5695a48ad072cc354e31b8fd82656b9d320 Parents: c89aa69 Author: Tibor17 <tibo...@lycos.com> Authored: Fri Jul 3 03:53:55 2015 +0200 Committer: Tibor17 <tibo...@lycos.com> Committed: Fri Jul 3 03:53:55 2015 +0200 ---------------------------------------------------------------------- .../report/LegacyPojoStackTraceWriter.java | 40 ++++++++++++++++++-- .../report/LegacyPojoStackTraceWriterTest.java | 18 +++++++++ .../surefire/report/PojoStackTraceWriter.java | 33 +++++++++++++++- .../surefire/report/SmartStackTraceParser.java | 29 +++++++++++++- .../report/PojoStackTraceWriterTest.java | 17 +++++++++ .../common/junit4/JUnit4StackTraceWriter.java | 40 +++++++++++++++++++- 6 files changed, 170 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java b/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java index aaa7f5a..685ea7b 100644 --- a/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java +++ b/surefire-api/src/main/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriter.java @@ -50,13 +50,26 @@ public class LegacyPojoStackTraceWriter public String writeTraceToString() { - StringWriter w = new StringWriter(); if ( t != null ) { - t.printStackTrace( new PrintWriter( w ) ); + StringWriter w = new StringWriter(); + PrintWriter stackTrace = new PrintWriter( w ); + t.printStackTrace( stackTrace ); + stackTrace.close(); w.flush(); + StringBuffer builder = w.getBuffer(); + if ( isMultiLineExceptionMessage( t ) ) + { + // SUREFIRE-986 + String exc = t.getClass().getName() + ": "; + if ( builder.toString().startsWith( exc ) ) + { + builder.insert( exc.length(), '\n' ); + } + } + return builder.toString(); } - return w.toString(); + return ""; } public String smartTrimmedStackTrace() @@ -84,6 +97,27 @@ public class LegacyPojoStackTraceWriter return result.toString(); } + private static boolean isMultiLineExceptionMessage( Throwable t ) + { + String msg = t.getLocalizedMessage(); + if ( msg != null ) + { + int countNewLines = 0; + for ( int i = 0, length = msg.length(); i < length; i++ ) + { + if ( msg.charAt( i ) == '\n' ) + { + if ( ++countNewLines == 2 ) + { + break; + } + } + } + return countNewLines > 1 || countNewLines == 1 && !msg.trim().endsWith( "\n" ); + } + return false; + } + private static String getTruncatedMessage( String msg, int i ) { if ( i < 0 ) http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-api/src/test/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriterTest.java ---------------------------------------------------------------------- diff --git a/surefire-api/src/test/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriterTest.java b/surefire-api/src/test/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriterTest.java index ab58186..eb81871 100644 --- a/surefire-api/src/test/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriterTest.java +++ b/surefire-api/src/test/java/org/apache/maven/surefire/report/LegacyPojoStackTraceWriterTest.java @@ -142,4 +142,22 @@ public class LegacyPojoStackTraceWriterTest } } + public void testMultiLineMessage() + { + String msg = + "assert \"foo\" == \"bar\"\n" + + " |\n" + + " false"; + try + { + throw new RuntimeException( msg ); + } + catch ( Throwable t ) + { + LegacyPojoStackTraceWriter writer = new LegacyPojoStackTraceWriter( null, null, t ); + String stackTrace = writer.writeTraceToString(); + assertTrue( stackTrace.startsWith( "java.lang.RuntimeException: \n" + msg ) ); + } + } + } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java index 3edef98..baef627 100644 --- a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java +++ b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/PojoStackTraceWriter.java @@ -53,7 +53,17 @@ public class PojoStackTraceWriter t.printStackTrace( stackTrace ); stackTrace.close(); w.flush(); - return w.toString(); + StringBuffer builder = w.getBuffer(); + if ( isMultiLineExceptionMessage( t ) ) + { + // SUREFIRE-986 + String exc = t.getClass().getName() + ": "; + if ( builder.toString().startsWith( exc ) ) + { + builder.insert( exc.length(), '\n' ); + } + } + return builder.toString(); } return ""; } @@ -72,4 +82,25 @@ public class PojoStackTraceWriter { return t == null ? null : new SafeThrowable( t ); } + + private static boolean isMultiLineExceptionMessage( Throwable t ) + { + String msg = t.getLocalizedMessage(); + if ( msg != null ) + { + int countNewLines = 0; + for ( int i = 0, length = msg.length(); i < length; i++ ) + { + if ( msg.charAt( i ) == '\n' ) + { + if ( ++countNewLines == 2 ) + { + break; + } + } + } + return countNewLines > 1 || countNewLines == 1 && !msg.trim().endsWith( "\n" ); + } + return false; + } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java index 603534c..6f4f058 100644 --- a/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java +++ b/surefire-providers/common-java5/src/main/java/org/apache/maven/surefire/report/SmartStackTraceParser.java @@ -292,8 +292,17 @@ public class SmartStackTraceParser if ( t != null ) { result += t.getClass().getName(); - result += ": "; - result += t.getMessage(); + String msg = t.getMessage(); + if ( msg != null ) + { + result += ": "; + if ( isMultiLine( msg ) ) + { + // SUREFIRE-986 + result += "\n"; + } + result += msg; + } result += "\n"; } @@ -308,4 +317,20 @@ public class SmartStackTraceParser } return result; } + + private static boolean isMultiLine( String msg ) + { + int countNewLines = 0; + for ( int i = 0, length = msg.length(); i < length; i++ ) + { + if ( msg.charAt( i ) == '\n' ) + { + if ( ++countNewLines == 2 ) + { + break; + } + } + } + return countNewLines > 1 || countNewLines == 1 && !msg.trim().endsWith( "\n" ); + } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/PojoStackTraceWriterTest.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/PojoStackTraceWriterTest.java b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/PojoStackTraceWriterTest.java index 5c3495d..4bb667e 100644 --- a/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/PojoStackTraceWriterTest.java +++ b/surefire-providers/common-java5/src/test/java/org/apache/maven/surefire/report/PojoStackTraceWriterTest.java @@ -36,6 +36,23 @@ public class PojoStackTraceWriterTest } + public void testMultiLineMessage() + { + String msg = + "assert \"foo\" == \"bar\"\n" + + " |\n" + + " false"; + try + { + throw new RuntimeException( msg ); + } + catch ( Throwable t ) + { + PojoStackTraceWriter writer = new PojoStackTraceWriter( null, null, t ); + String stackTrace = writer.writeTraceToString(); + assertTrue( stackTrace.startsWith( "java.lang.RuntimeException: \n" + msg ) ); + } + } static class ATestClass { http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/6e5fb569/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4StackTraceWriter.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4StackTraceWriter.java b/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4StackTraceWriter.java index 52cd342..8292d4b 100644 --- a/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4StackTraceWriter.java +++ b/surefire-providers/common-junit4/src/main/java/org/apache/maven/surefire/common/junit4/JUnit4StackTraceWriter.java @@ -54,7 +54,24 @@ public class JUnit4StackTraceWriter */ public String writeTraceToString() { - return junitFailure.getTrace(); + Throwable t = junitFailure.getException(); + if ( t != null ) + { + String originalTrace = junitFailure.getTrace(); + if ( isMultiLineExceptionMessage( t ) ) + { + // SUREFIRE-986 + StringBuilder builder = new StringBuilder( originalTrace ); + String exc = t.getClass().getName() + ": "; + if ( originalTrace.startsWith( exc ) ) + { + builder.insert( exc.length(), '\n' ); + } + return builder.toString(); + } + return originalTrace; + } + return ""; } @@ -106,4 +123,25 @@ public class JUnit4StackTraceWriter return new SafeThrowable( junitFailure.getException() ); } + private static boolean isMultiLineExceptionMessage( Throwable t ) + { + String msg = t.getLocalizedMessage(); + if ( msg != null ) + { + int countNewLines = 0; + for ( int i = 0, length = msg.length(); i < length; i++ ) + { + if ( msg.charAt( i ) == '\n' ) + { + if ( ++countNewLines == 2 ) + { + break; + } + } + } + return countNewLines > 1 || countNewLines == 1 && !msg.trim().endsWith( "\n" ); + } + return false; + } + }