You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/05/23 16:06:56 UTC

[maven-surefire] branch 1546-1222-v2 created (now ad1b306)

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

tibordigana pushed a change to branch 1546-1222-v2
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git.


      at ad1b306  providers do not need to have 'surefire-common' in classpath

This branch includes the following new commits:

     new fd2f7fd  refactoring
     new d1325d1  all reporters and serializer use 64KB I/O buffer
     new ad1b306  providers do not need to have 'surefire-common' in classpath

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-surefire] 03/03: providers do not need to have 'surefire-common' in classpath

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ad1b306c33dc541f1b63a2ffb8e68712aa31f3e5
Author: tibordigana <ti...@apache.org>
AuthorDate: Thu May 23 18:02:59 2019 +0200

    providers do not need to have 'surefire-common' in classpath
---
 .../plugin/surefire/AbstractSurefireMojo.java      |   2 +-
 .../surefire/SurefireDependencyResolver.java       |   9 +-
 .../surefire/SurefireDependencyResolverTest.java   |   4 +-
 .../surefire/log/api/ConsoleLoggerDecorator.java   | 193 ++++++++++++++++++++-
 4 files changed, 198 insertions(+), 10 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index 856a527..6eeeb5e 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -3159,7 +3159,7 @@ public abstract class AbstractSurefireMojo
         public Set<Artifact> getProviderClasspath()
         {
             return surefireDependencyResolver.addProviderToClasspath( getPluginArtifactMap(), getMojoArtifact(),
-                    getCommonArtifact(), getApiArtifact(), getLoggerApiArtifact() );
+                    getApiArtifact(), getLoggerApiArtifact() );
         }
     }
 
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
index 170107c..16cb6c8 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
@@ -205,7 +205,7 @@ final class SurefireDependencyResolver
     }
 
     Set<Artifact> addProviderToClasspath( Map<String, Artifact> pluginArtifactMap, Artifact mojoPluginArtifact,
-                                          Artifact surefireCommon, Artifact surefireApi, Artifact surefireLoggerApi )
+                                          Artifact surefireApi, Artifact surefireLoggerApi )
     {
         Set<Artifact> providerArtifacts = new LinkedHashSet<>();
         ArtifactResolutionResult artifactResolutionResult = resolvePluginArtifact( mojoPluginArtifact );
@@ -218,12 +218,7 @@ final class SurefireDependencyResolver
                 {
                     String groupId = dependency.getGroupId();
                     String artifactId = dependency.getArtifactId();
-                    if ( groupId.equals( surefireCommon.getGroupId() )
-                            && artifactId.equals( surefireCommon.getArtifactId() ) )
-                    {
-                        providerArtifacts.add( surefireCommon );
-                    }
-                    else if ( groupId.equals( surefireApi.getGroupId() )
+                    if ( groupId.equals( surefireApi.getGroupId() )
                             && artifactId.equals( surefireApi.getArtifactId() ) )
                     {
                         providerArtifacts.add( surefireApi );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
index fdb1bbe..c7e982d 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireDependencyResolverTest.java
@@ -359,7 +359,9 @@ public class SurefireDependencyResolverTest
         pluginArtifactsMapping.put( provider.getGroupId() + ":" + provider.getArtifactId(), provider );
         pluginArtifactsMapping.put( ext.getGroupId() + ":" + ext.getArtifactId(), ext );
 
-        Set<Artifact> cp = surefireDependencyResolver.addProviderToClasspath( pluginArtifactsMapping, plugin, common, api, logger );
+        Set<Artifact> cp =
+                surefireDependencyResolver.addProviderToClasspath( pluginArtifactsMapping, plugin, api, logger );
+
         assertThat( cp )
                 .hasSize( 4 )
                 .containsOnly( provider, api, logger, ext );
diff --git a/surefire-logger-api/src/main/java/org/apache/maven/plugin/surefire/log/api/ConsoleLoggerDecorator.java b/surefire-logger-api/src/main/java/org/apache/maven/plugin/surefire/log/api/ConsoleLoggerDecorator.java
index 02105fa..bff2c63 100644
--- a/surefire-logger-api/src/main/java/org/apache/maven/plugin/surefire/log/api/ConsoleLoggerDecorator.java
+++ b/surefire-logger-api/src/main/java/org/apache/maven/plugin/surefire/log/api/ConsoleLoggerDecorator.java
@@ -1 +1,192 @@
-package org.apache.maven.plugin.surefire.log.api;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/**
 * Decorator around {@link ConsoleLogger}.
 * This class is loaded in the isolated ClassLoader and the child logger in the in-plugi
 n ClassLoader.
 *
 * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
 * @since 2.20
 */
public final class ConsoleLoggerDecorator
        implements ConsoleLogger
{
    private final Object logger;

    public ConsoleLoggerDecorator( Object logger )
    {
        if ( logger == null )
        {
            throw new NullPointerException( "logger argument is null in " + ConsoleLoggerDecorator.class );
        }
        this.logger = logger;
    }

    @Override
    public boolean isDebugEnabled()
    {
        try
        {
            return (Boolean) logger.getClass()
                    .getMethod( "isDebugEnabled" )
                    .invoke( logger );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public void debug( String message )
    {
        try
        {
            logger.getClass()
                    .getMethod( "debug", String.cl
 ass )
                    .invoke( logger, message );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public boolean isInfoEnabled()
    {
        try
        {
            return (Boolean) logger.getClass()
                    .getMethod( "isInfoEnabled" )
                    .invoke( logger );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public void info( String message )
    {
        try
        {
            logger.getClass()
                    .getMethod( "info", String.class )
                    .invoke( logger, message );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public boolean isWarnEnabled()
    {
        try
        {
            r
 eturn (Boolean) logger.getClass()
                    .getMethod( "isWarnEnabled" )
                    .invoke( logger );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public void warning( String message )
    {
        try
        {
            logger.getClass()
                    .getMethod( "warning", String.class )
                    .invoke( logger, message );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public boolean isErrorEnabled()
    {
        try
        {
            return (Boolean) logger.getClass()
                    .getMethod( "isErrorEnabled" )
                    .invoke( logger );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
 
    public void error( String message )
    {
        try
        {
            logger.getClass()
                    .getMethod( "error", String.class )
                    .invoke( logger, message );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public void error( String message, Throwable t )
    {
        try
        {
            logger.getClass()
                    .getMethod( "error", String.class, Throwable.class )
                    .invoke( logger, message, t );
        }
        catch ( Exception e )
        {
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }

    @Override
    public void error( Throwable t )
    {
        try
        {
            logger.getClass()
                    .getMethod( "error", Throwable.class )
                    .invoke( logger, t );
        }
        catch ( Exception e )
        {
 
            throw new IllegalStateException( e.getLocalizedMessage(), e );
        }
    }
}
\ No newline at end of file
+package org.apache.maven.plugin.surefire.log.api;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Decorator around {@link ConsoleLogger}.
+ * This class is loaded in the isolated ClassLoader and the child logger in the in-plugin ClassLoader.
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 2.20
+ */
+public final class ConsoleLoggerDecorator
+        implements ConsoleLogger
+{
+    private final Object logger;
+
+    public ConsoleLoggerDecorator( Object logger )
+    {
+        if ( logger == null )
+        {
+            throw new NullPointerException( "logger argument is null in " + ConsoleLoggerDecorator.class );
+        }
+        this.logger = logger;
+    }
+
+    @Override
+    public boolean isDebugEnabled()
+    {
+        try
+        {
+            return (Boolean) logger.getClass()
+                    .getMethod( "isDebugEnabled" )
+                    .invoke( logger );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void debug( String message )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "debug", String.class )
+                    .invoke( logger, message );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public boolean isInfoEnabled()
+    {
+        try
+        {
+            return (Boolean) logger.getClass()
+                    .getMethod( "isInfoEnabled" )
+                    .invoke( logger );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void info( String message )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "info", String.class )
+                    .invoke( logger, message );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public boolean isWarnEnabled()
+    {
+        try
+        {
+            return (Boolean) logger.getClass()
+                    .getMethod( "isWarnEnabled" )
+                    .invoke( logger );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void warning( String message )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "warning", String.class )
+                    .invoke( logger, message );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public boolean isErrorEnabled()
+    {
+        try
+        {
+            return (Boolean) logger.getClass()
+                    .getMethod( "isErrorEnabled" )
+                    .invoke( logger );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void error( String message )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "error", String.class )
+                    .invoke( logger, message );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void error( String message, Throwable t )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "error", String.class, Throwable.class )
+                    .invoke( logger, message, t );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+
+    @Override
+    public void error( Throwable t )
+    {
+        try
+        {
+            logger.getClass()
+                    .getMethod( "error", Throwable.class )
+                    .invoke( logger, t );
+        }
+        catch ( Exception e )
+        {
+            throw new IllegalStateException( e.getLocalizedMessage(), e );
+        }
+    }
+}


[maven-surefire] 02/03: all reporters and serializer use 64KB I/O buffer

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d1325d14c5e05f52a2fb125e4ef557dfb9e9d0dd
Author: tibordigana <ti...@apache.org>
AuthorDate: Thu May 23 16:15:31 2019 +0200

    all reporters and serializer use 64KB I/O buffer
---
 .../apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java  | 2 +-
 .../org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
index 857b68e..1456c81 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/ConsoleOutputFileReporter.java
@@ -43,7 +43,7 @@ import static org.apache.maven.surefire.util.internal.StringUtils.NL;
 public class ConsoleOutputFileReporter
     implements TestcycleConsoleOutputReceiver
 {
-    private static final int STREAM_BUFFER_SIZE = 16 * 1024;
+    private static final int STREAM_BUFFER_SIZE = 64 * 1024;
     private static final int OPEN = 0;
     private static final int CLOSED_TO_REOPEN = 1;
     private static final int CLOSED = 2;
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
index 11cec8d..b9d387e 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
@@ -331,7 +331,7 @@ public class StatelessXmlReporter
 
         try
         {
-            return new BufferedOutputStream( new FileOutputStream( reportFile ), 16 * 1024 );
+            return new BufferedOutputStream( new FileOutputStream( reportFile ), 64 * 1024 );
         }
         catch ( Exception e )
         {


[maven-surefire] 01/03: refactoring

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fd2f7fd8a2676303b2feaede3f7af032e023f723
Author: tibordigana <ti...@apache.org>
AuthorDate: Thu May 23 01:24:37 2019 +0200

    refactoring
---
 .../output/ThreadedStreamConsumer.java             |  2 +-
 .../surefire/report/DefaultReporterFactory.java    |  3 +-
 .../maven/surefire/report/RunStatistics.java       | 21 +------
 .../plugin/surefire/SurefireReflectorTest.java     | 72 +++++++++++++++++++++-
 .../report/DefaultReporterFactoryTest.java         | 11 ++--
 .../maven/surefire/booter/SurefireReflector.java   | 49 +++------------
 6 files changed, 88 insertions(+), 70 deletions(-)

diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java
index dad88fd..388f16d 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/output/ThreadedStreamConsumer.java
@@ -40,7 +40,7 @@ public final class ThreadedStreamConsumer
 {
     private static final String END_ITEM = "";
 
-    private static final int ITEM_LIMIT_BEFORE_SLEEP = 10 * 1000;
+    private static final int ITEM_LIMIT_BEFORE_SLEEP = 10_000;
 
     private final BlockingQueue<String> items = new ArrayBlockingQueue<>( ITEM_LIMIT_BEFORE_SLEEP );
 
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
index d51b3e9..0d7ca78 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactory.java
@@ -272,7 +272,7 @@ public class DefaultReporterFactory
      * Merge all the TestMethodStats in each TestRunListeners and put results into flakyTests, failedTests and
      * errorTests, indexed by test class and method name. Update globalStatistics based on the result of the merge.
      */
-    void mergeTestHistoryResult()
+    private void mergeTestHistoryResult()
     {
         globalStats = new RunStatistics();
         flakyTests = new TreeMap<>();
@@ -388,7 +388,6 @@ public class DefaultReporterFactory
 
         for ( Map.Entry<String, List<TestMethodStats>> entry : testStats.entrySet() )
         {
-            printed = true;
             List<TestMethodStats> testMethodStats = entry.getValue();
             if ( testMethodStats.size() == 1 )
             {
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/surefire/report/RunStatistics.java b/maven-surefire-common/src/main/java/org/apache/maven/surefire/report/RunStatistics.java
index 29aa8dc..7c911ec 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/surefire/report/RunStatistics.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/surefire/report/RunStatistics.java
@@ -19,13 +19,12 @@ package org.apache.maven.surefire.report;
  * under the License.
  */
 
-import org.apache.maven.plugin.surefire.report.TestSetStats;
 import org.apache.maven.surefire.suite.RunResult;
 
 /**
  * @author Kristian Rosenvold
  */
-public class RunStatistics
+public final class RunStatistics
 {
     private int completedCount;
 
@@ -37,16 +36,6 @@ public class RunStatistics
 
     private int flakes;
 
-    public synchronized boolean hadFailures()
-    {
-        return failures > 0;
-    }
-
-    public synchronized boolean hadErrors()
-    {
-        return errors > 0;
-    }
-
     public synchronized int getCompletedCount()
     {
         return completedCount;
@@ -72,14 +61,6 @@ public class RunStatistics
         return flakes;
     }
 
-    public synchronized void add( TestSetStats testSetStats )
-    {
-        this.completedCount += testSetStats.getCompletedCount();
-        this.errors += testSetStats.getErrors();
-        this.failures += testSetStats.getFailures();
-        this.skipped += testSetStats.getSkipped();
-    }
-
     public synchronized void set( int completedCount, int errors, int failures, int skipped, int flakes )
     {
         this.completedCount = completedCount;
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireReflectorTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireReflectorTest.java
index a7c8b9d..2553617 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireReflectorTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/SurefireReflectorTest.java
@@ -1 +1,71 @@
-package org.apache.maven.plugin.surefire;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerDecorator;
import o
 rg.apache.maven.plugin.surefire.log.api.PrintStreamLogger;
import org.apache.maven.surefire.booter.IsolatedClassLoader;
import org.apache.maven.surefire.booter.SurefireReflector;
import org.junit.Before;
import org.junit.Test;

import static org.apache.maven.surefire.util.ReflectionUtils.getMethod;
import static org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

/**
 * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
 * @see ConsoleLogger
 * @see SurefireReflector
 * @since 2.20
 */
public class SurefireReflectorTest
{
  
   private ConsoleLogger logger;
    private SurefireReflector reflector;

    @Before
    public void prepareData()
    {
        logger = spy( new PrintStreamLogger( System.out ) );
        ClassLoader cl = new IsolatedClassLoader( Thread.currentThread().getContextClassLoader(), false, "role" );
        reflector = new SurefireReflector( cl );
    }

    @Test
    public void shouldProxyConsoleLogger()
    {
        Object mirror = reflector.createConsoleLogger( logger );
        assertThat( mirror, is( notNullValue() ) );
        assertThat( mirror.getClass().getInterfaces()[0].getName(), is( ConsoleLogger.class.getName() ) );
        assertThat( mirror, is( not( sameInstance( (Object) logger ) ) ) );
        assertThat( mirror, is( instanceOf( ConsoleLoggerDecorator.class ) ) );
        invokeMethodWithArray( mirror, getMethod( mirror, "info", String.class ), "Hi There!" );
        verify( logger, times( 1 ) ).info( "Hi There!" );
    }
}
\ No newline at end of file
+package org.apache.maven.plugin.surefire;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
+import org.apache.maven.plugin.surefire.log.api.ConsoleLoggerDecorator;
+import org.apache.maven.plugin.surefire.log.api.PrintStreamLogger;
+import org.apache.maven.surefire.booter.IsolatedClassLoader;
+import org.apache.maven.surefire.booter.SurefireReflector;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.apache.maven.surefire.util.ReflectionUtils.getMethod;
+import static org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+/**
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see ConsoleLogger
+ * @see SurefireReflector
+ * @since 2.20
+ */
+public class SurefireReflectorTest
+{
+    private ConsoleLogger logger;
+    private ClassLoader cl;
+
+    @Before
+    public void prepareData()
+    {
+        logger = spy( new PrintStreamLogger( System.out ) );
+        cl = new IsolatedClassLoader( Thread.currentThread().getContextClassLoader(), false, "role" );
+    }
+
+    @Test
+    public void shouldProxyConsoleLogger()
+    {
+        Object mirror = SurefireReflector.createConsoleLogger( logger, cl );
+        assertThat( mirror, is( notNullValue() ) );
+        assertThat( mirror.getClass().getInterfaces()[0].getName(), is( ConsoleLogger.class.getName() ) );
+        assertThat( mirror, is( not( sameInstance( (Object) logger ) ) ) );
+        assertThat( mirror, is( instanceOf( ConsoleLoggerDecorator.class ) ) );
+        invokeMethodWithArray( mirror, getMethod( mirror, "info", String.class ), "Hi There!" );
+        verify( logger, times( 1 ) ).info( "Hi There!" );
+    }
+}
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
index 55c3a64..4bdfe8b 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/DefaultReporterFactoryTest.java
@@ -35,6 +35,7 @@ import org.apache.maven.surefire.report.SafeThrowable;
 import org.apache.maven.surefire.report.StackTraceWriter;
 
 import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType.error;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType.failure;
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.TestResultType.flake;
@@ -44,6 +45,7 @@ import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.Tes
 import static org.apache.maven.plugin.surefire.report.DefaultReporterFactory.getTestResultType;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.powermock.reflect.Whitebox.invokeMethod;
 
 public class DefaultReporterFactoryTest
     extends TestCase
@@ -63,6 +65,7 @@ public class DefaultReporterFactoryTest
     private final static String ERROR = "error";
 
     public void testMergeTestHistoryResult()
+            throws Exception
     {
         MessageUtils.setColorEnabled( false );
         File reportsDirectory = new File("target");
@@ -111,7 +114,7 @@ public class DefaultReporterFactoryTest
         factory.addListener( secondRunListener );
         factory.addListener( thirdRunListener );
 
-        factory.mergeTestHistoryResult();
+        invokeMethod( factory, "mergeTestHistoryResult" );
         RunStatistics mergedStatistics = factory.getGlobalRunStatistics();
 
         // Only TEST_THREE is a failing test, other three are flaky tests
@@ -132,14 +135,12 @@ public class DefaultReporterFactoryTest
         reporter.reset();
         factory.printTestFailures( error );
         String[] expectedFailureOutput =
-            { "Errors: ", TEST_THREE, "  Run 1: " + ASSERTION_FAIL, "  Run 2: " + ERROR, "  Run 3: " + ERROR, ""
-            };
+            { "Errors: ", TEST_THREE, "  Run 1: " + ASSERTION_FAIL, "  Run 2: " + ERROR, "  Run 3: " + ERROR, "" };
         assertEquals( asList( expectedFailureOutput ), reporter.getMessages() );
 
         reporter.reset();
         factory.printTestFailures( failure );
-        String[] expectedErrorOutput = { };
-        assertEquals( asList( expectedErrorOutput ), reporter.getMessages() );
+        assertEquals( emptyList(), reporter.getMessages() );
     }
 
     static final class DummyTestReporter implements ConsoleLogger
diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java b/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java
index 360c802..5cc1415 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/booter/SurefireReflector.java
@@ -34,10 +34,8 @@ import org.apache.maven.surefire.testset.TestRequest;
 import org.apache.maven.surefire.util.RunOrder;
 import org.apache.maven.surefire.util.SurefireReflectionException;
 
-import javax.annotation.Nonnull;
 import java.io.File;
 import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -147,32 +145,9 @@ public class SurefireReflector
         int getSkipped = (Integer) invokeGetter( result, "getSkipped" );
         int getFailures = (Integer) invokeGetter( result, "getFailures" );
         return new RunResult( getCompletedCount1, getErrors, getFailures, getSkipped );
-
-    }
-
-    class ClassLoaderProxy
-        implements InvocationHandler
-    {
-        private final Object target;
-
-        /**
-         * @param delegate a target
-         */
-        ClassLoaderProxy( Object delegate )
-        {
-            this.target = delegate;
-        }
-
-        @Override
-        public Object invoke( Object proxy, Method method, Object[] args )
-            throws Throwable
-        {
-            Method delegateMethod = target.getClass().getMethod( method.getName(), method.getParameterTypes() );
-            return delegateMethod.invoke( target, args );
-        }
     }
 
-    Object createTestRequest( TestRequest suiteDefinition )
+    private Object createTestRequest( TestRequest suiteDefinition )
     {
         if ( suiteDefinition == null )
         {
@@ -191,7 +166,7 @@ public class SurefireReflector
         }
     }
 
-    Object createTestListResolver( TestListResolver resolver )
+    private Object createTestListResolver( TestListResolver resolver )
     {
         if ( resolver == null )
         {
@@ -204,7 +179,7 @@ public class SurefireReflector
         }
     }
 
-    Object createDirectoryScannerParameters( DirectoryScannerParameters directoryScannerParameters )
+    private Object createDirectoryScannerParameters( DirectoryScannerParameters directoryScannerParameters )
     {
         if ( directoryScannerParameters == null )
         {
@@ -222,8 +197,7 @@ public class SurefireReflector
                             RunOrder.asString( directoryScannerParameters.getRunOrder() ) );
     }
 
-
-    Object createRunOrderParameters( RunOrderParameters runOrderParameters )
+    private Object createRunOrderParameters( RunOrderParameters runOrderParameters )
     {
         if ( runOrderParameters == null )
         {
@@ -236,7 +210,7 @@ public class SurefireReflector
         return newInstance( constructor, RunOrder.asString( runOrderParameters.getRunOrder() ), runStatisticsFile );
     }
 
-    Object createTestArtifactInfo( TestArtifactInfo testArtifactInfo )
+    private Object createTestArtifactInfo( TestArtifactInfo testArtifactInfo )
     {
         if ( testArtifactInfo == null )
         {
@@ -247,7 +221,7 @@ public class SurefireReflector
         return newInstance( constructor, testArtifactInfo.getVersion(), testArtifactInfo.getClassifier() );
     }
 
-    Object createReporterConfiguration( ReporterConfiguration reporterConfig )
+    private Object createReporterConfiguration( ReporterConfiguration reporterConfig )
     {
         Constructor constructor = getConstructor( reporterConfiguration, File.class, boolean.class );
         return newInstance( constructor, reporterConfig.getReportsDirectory(), reporterConfig.isTrimStackTrace() );
@@ -315,7 +289,7 @@ public class SurefireReflector
         invokeSetter( o, "setSystemExitTimeout", Integer.class, systemExitTimeout );
     }
 
-    public void setDirectoryScannerParameters( Object o, DirectoryScannerParameters dirScannerParams )
+    void setDirectoryScannerParameters( Object o, DirectoryScannerParameters dirScannerParams )
     {
         Object param = createDirectoryScannerParameters( dirScannerParams );
         invokeSetter( o, "setDirectoryScannerParameters", directoryScannerParameters, param );
@@ -362,8 +336,7 @@ public class SurefireReflector
         }
     }
 
-
-    void setReporterConfiguration( Object o, ReporterConfiguration reporterConfiguration )
+    private void setReporterConfiguration( Object o, ReporterConfiguration reporterConfiguration )
     {
         Object param = createReporterConfiguration( reporterConfiguration );
         invokeSetter( o, "setReporterConfiguration", this.reporterConfiguration, param );
@@ -402,11 +375,6 @@ public class SurefireReflector
         return runResult.isAssignableFrom( o.getClass() );
     }
 
-    public Object createConsoleLogger( @Nonnull ConsoleLogger consoleLogger )
-    {
-        return createConsoleLogger( consoleLogger, surefireClassLoader );
-    }
-
     private static Collection<Integer> toOrdinals( Collection<? extends Enum> enums )
     {
         Collection<Integer> ordinals = new ArrayList<>( enums.size() );
@@ -429,5 +397,4 @@ public class SurefireReflector
             throw new SurefireReflectionException( e );
         }
     }
-
 }