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

tibordigana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git


The following commit(s) were added to refs/heads/master by this push:
     new 4241d8f  forks mixed up characters in standard output
4241d8f is described below

commit 4241d8f4e87b4bfc6201ce68cc9502dc176fc4a4
Author: Tibor17 <tibordig...@apache.org>
AuthorDate: Wed Sep 19 04:55:28 2018 +0200

    forks mixed up characters in standard output
---
 .../surefire/report/DirectConsoleOutput.java       | 31 ++++++-----
 .../jiras/Surefire1535TestNGParallelSuitesIT.java  | 60 +++++++++++++---------
 2 files changed, 55 insertions(+), 36 deletions(-)

diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DirectConsoleOutput.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DirectConsoleOutput.java
index acc19ba..cd14b11 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DirectConsoleOutput.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DirectConsoleOutput.java
@@ -20,13 +20,15 @@ package org.apache.maven.plugin.surefire.report;
  */
 
 import java.io.PrintStream;
-import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
 
 import org.apache.maven.surefire.report.ReportEntry;
 
+import static java.nio.ByteBuffer.wrap;
 import static java.nio.charset.Charset.defaultCharset;
+import static 
org.apache.maven.surefire.util.internal.ObjectUtils.requireNonNull;
 
 /**
  * Outputs test system out/system err directly to the console
@@ -39,29 +41,34 @@ import static java.nio.charset.Charset.defaultCharset;
 public class DirectConsoleOutput
     implements TestcycleConsoleOutputReceiver
 {
+    private static final Charset STANDARD_CHARSET = defaultCharset();
+
     private final PrintStream sout;
 
     private final PrintStream serr;
 
     public DirectConsoleOutput( PrintStream sout, PrintStream serr )
     {
-        this.sout = sout;
-        this.serr = serr;
+        this.sout = requireNonNull( sout );
+        this.serr = requireNonNull( serr );
     }
 
-
     @Override
     public void writeTestOutput( byte[] buf, int off, int len, boolean stdout )
     {
-        final PrintStream stream = stdout ? sout : serr;
-        try
-        {
-            CharBuffer decode = defaultCharset().newDecoder().decode( 
ByteBuffer.wrap( buf, off, len ) );
-            stream.append( decode );
-        }
-        catch ( CharacterCodingException e )
+        PrintStream stream = stdout ? sout : serr;
+        //noinspection SynchronizationOnLocalVariableOrMethodParameter
+        synchronized ( stream )
         {
-            stream.write( buf, off, len );
+            try
+            {
+                CharBuffer decode = STANDARD_CHARSET.newDecoder().decode( 
wrap( buf, off, len ) );
+                stream.append( decode );
+            }
+            catch ( CharacterCodingException e )
+            {
+                stream.write( buf, off, len );
+            }
         }
     }
 
diff --git 
a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1535TestNGParallelSuitesIT.java
 
b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1535TestNGParallelSuitesIT.java
index 0c8061d..ec6ea34 100644
--- 
a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1535TestNGParallelSuitesIT.java
+++ 
b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1535TestNGParallelSuitesIT.java
@@ -36,6 +36,13 @@ public class Surefire1535TestNGParallelSuitesIT
         extends SurefireJUnit4IntegrationTestCase
 {
     private static final Charset UTF8 = Charset.forName( "UTF-8" );
+    private static final String TEST_RESULT_1 = platformEncoding( "Tests run: 
1, Failures: 0, Errors: 0, Skipped: 0, " );
+    private static final String TEST_RESULT_2 = platformEncoding( "Tests run: 
2, Failures: 0, Errors: 0, Skipped: 0" );
+    private static final String SUITE1 = platformEncoding( "Suite1.xml" );
+    private static final String SUITE2 = platformEncoding( "Suite2.xml" );
+    private static final String TEST1 = platformEncoding( "test 1" );
+    private static final String TEST2 = platformEncoding( "test 2" );
+    private static final String TEST_SUITE = platformEncoding( "Running 
TestSuite" );
 
     @Test
     public void forks2() throws VerificationException
@@ -53,13 +60,13 @@ public class Surefire1535TestNGParallelSuitesIT
         testFile.assertFileExists();
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest" );
 
-        validator.assertThatLogLine( containsString( "Tests run: 2, Failures: 
0, Errors: 0, Skipped: 0" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Tests run: 1, Failures: 
0, Errors: 0, Skipped: 0, " ), is( 2 ) )
-                .assertThatLogLine( containsString( "Suite1.xml" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Suite2.xml" ), is( 1 ) )
-                .assertThatLogLine( containsString( "test 1" ), is( 1 ) )
-                .assertThatLogLine( containsString( "test 2" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Running TestSuite" ), is( 
2 ) );
+        validator.assertThatLogLine( containsString( TEST_RESULT_2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST_RESULT_1 ), is( 2 ) )
+                .assertThatLogLine( containsString( SUITE1 ), is( 1 ) )
+                .assertThatLogLine( containsString( SUITE2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST1 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST_SUITE ), is( 2 ) );
     }
 
     @Test
@@ -79,19 +86,19 @@ public class Surefire1535TestNGParallelSuitesIT
         testFile.assertFileExists();
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest" );
 
-        validator.assertThatLogLine( containsString( "Tests run: 2, Failures: 
0, Errors: 0, Skipped: 0" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Tests run: 1, Failures: 
0, Errors: 0, Skipped: 0, " ), is( 2 ) )
-                .assertThatLogLine( containsString( "Running TestSuite" ), is( 
2 ) );
+        validator.assertThatLogLine( containsString( TEST_RESULT_2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST_RESULT_1 ), is( 2 ) )
+                .assertThatLogLine( containsString( TEST_SUITE ), is( 2 ) );
 
         TestFile outFile = validator.getSurefireReportsFile( 
"../surefire-reports-1/TestSuite-output.txt" );
         outFile.assertFileExists();
-        outFile.assertContainsText( anyOf( containsString( "Suite1.xml" ), 
containsString( "Suite2.xml" ) ) );
-        outFile.assertContainsText( anyOf( containsString( "test 1" ), 
containsString( "test 2" ) ) );
+        outFile.assertContainsText( anyOf( containsString( SUITE1 ), 
containsString( SUITE2 ) ) );
+        outFile.assertContainsText( anyOf( containsString( TEST1 ), 
containsString( TEST2 ) ) );
 
         outFile = validator.getSurefireReportsFile( 
"../surefire-reports-2/TestSuite-output.txt" );
         outFile.assertFileExists();
-        outFile.assertContainsText( anyOf( containsString( "Suite1.xml" ), 
containsString( "Suite2.xml" ) ) );
-        outFile.assertContainsText( anyOf( containsString( "test 1" ), 
containsString( "test 2" ) ) );
+        outFile.assertContainsText( anyOf( containsString( SUITE1 ), 
containsString( SUITE2 ) ) );
+        outFile.assertContainsText( anyOf( containsString( TEST1 ), 
containsString( TEST2 ) ) );
     }
 
     @Test
@@ -106,11 +113,11 @@ public class Surefire1535TestNGParallelSuitesIT
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest1\"" );
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest2\"" );
 
-        validator.assertThatLogLine( containsString( "Suite1.xml" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Suite2.xml" ), is( 1 ) )
-                .assertThatLogLine( containsString( "test 1" ), is( 1 ) )
-                .assertThatLogLine( containsString( "test 2" ), is( 1 ) )
-                .assertThatLogLine( containsString( "Running TestSuite" ), is( 
1 ) );
+        validator.assertThatLogLine( containsString( SUITE1 ), is( 1 ) )
+                .assertThatLogLine( containsString( SUITE2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST1 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST2 ), is( 1 ) )
+                .assertThatLogLine( containsString( TEST_SUITE ), is( 1 ) );
     }
 
     @Test
@@ -126,18 +133,23 @@ public class Surefire1535TestNGParallelSuitesIT
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest1\"" );
         testFile.assertContainsText( "<testcase name=\"test\" 
classname=\"it.ParallelTest2\"" );
 
-        validator.assertThatLogLine( containsString( "Running TestSuite" ), 
is( 1 ) );
+        validator.assertThatLogLine( containsString( TEST_SUITE ), is( 1 ) );
 
         TestFile outFile = validator.getSurefireReportsFile( 
"TestSuite-output.txt" );
         outFile.assertFileExists();
-        outFile.assertContainsText( "Suite1.xml" );
-        outFile.assertContainsText( "Suite1.xml" );
-        outFile.assertContainsText( "test 1" );
-        outFile.assertContainsText( "test 2" );
+        outFile.assertContainsText( SUITE1 );
+        outFile.assertContainsText( SUITE2 );
+        outFile.assertContainsText( TEST1 );
+        outFile.assertContainsText( TEST2 );
     }
 
     private SurefireLauncher unpack()
     {
         return unpack("/surefire-1535-parallel-testng");
     }
+
+    private static String platformEncoding( String text )
+    {
+        return new String( text.getBytes( UTF8 ) );
+    }
 }

Reply via email to