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

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


The following commit(s) were added to refs/heads/master by this push:
     new 4a06f1f5c [MNG-7098] Keep the project counter intact when resuming a 
multi-module project.
4a06f1f5c is described below

commit 4a06f1f5c3ccc6753f8de30a6ca53af154e99f70
Author: Martin Kanters <martinkant...@apache.org>
AuthorDate: Fri Aug 5 15:39:12 2022 +0200

    [MNG-7098] Keep the project counter intact when resuming a multi-module 
project.
---
 .../maven/cli/event/ExecutionEventLogger.java      |   6 +-
 .../maven/cli/event/ExecutionEventLoggerTest.java  | 103 ++++++++++++++++++---
 2 files changed, 96 insertions(+), 13 deletions(-)

diff --git 
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
 
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
index 7d33f11c0..66f13a049 100644
--- 
a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
+++ 
b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -143,7 +143,11 @@ public class ExecutionEventLogger extends 
AbstractExecutionListener
                         project.getName(), chars( ' ', ( len > 0 ) ? len : 1 
), project.getPackaging() );
             }
 
-            totalProjects = projects.size();
+            final List<MavenProject> allProjects = 
event.getSession().getAllProjects();
+            final int projectsSkipped = allProjects.size() - projects.size();
+
+            currentVisitedProjectCount = projectsSkipped;
+            totalProjects = allProjects.size();
         }
     }
 
diff --git 
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
 
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
index 6f5b8e211..bc682edc7 100644
--- 
a/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
+++ 
b/maven-embedder/src/test/java/org/apache/maven/cli/event/ExecutionEventLoggerTest.java
@@ -19,12 +19,16 @@ package org.apache.maven.cli.event;
  * under the License.
  */
 
+import static org.mockito.ArgumentMatchers.contains;
+import static org.mockito.ArgumentMatchers.matches;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
 
+import com.google.common.collect.ImmutableList;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.maven.execution.ExecutionEvent;
 import org.apache.maven.execution.MavenSession;
@@ -32,6 +36,7 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
@@ -39,6 +44,10 @@ import org.slf4j.Logger;
 
 class ExecutionEventLoggerTest
 {
+
+    private Logger logger;
+    private ExecutionEventLogger executionEventLogger;
+
     @BeforeAll
     public static void setUp()
     {
@@ -51,14 +60,17 @@ class ExecutionEventLoggerTest
         MessageUtils.setColorEnabled( true );
     }
 
+    @BeforeEach
+    void beforeEach() {
+        logger = mock( Logger.class );
+        when( logger.isInfoEnabled() ).thenReturn( true );
+        executionEventLogger = new ExecutionEventLogger( logger );
+    }
+
     @Test
     void testProjectStarted()
     {
         // prepare
-        Logger logger = mock( Logger.class );
-        when( logger.isInfoEnabled() ).thenReturn( true );
-        ExecutionEventLogger executionEventLogger = new ExecutionEventLogger( 
logger );
-
         File basedir = new File( "" ).getAbsoluteFile();
         ExecutionEvent event = mock( ExecutionEvent.class );
         MavenProject project = mock( MavenProject.class );
@@ -92,10 +104,6 @@ class ExecutionEventLoggerTest
     void testProjectStartedOverflow()
     {
         // prepare
-        Logger logger = mock( Logger.class );
-        when( logger.isInfoEnabled() ).thenReturn( true );
-        ExecutionEventLogger executionEventLogger = new ExecutionEventLogger( 
logger );
-
         File basedir = new File( "" ).getAbsoluteFile();
         ExecutionEvent event = mock( ExecutionEvent.class );
         MavenProject project = mock( MavenProject.class );
@@ -161,13 +169,10 @@ class ExecutionEventLoggerTest
         Mockito.verify( logger ).info( 
"-----------------------------------------------------[ maven-plugin 
]-----------------------------------------------------" );
     }
 
+    @Test
     public void testProjectStartedNoPom()
     {
         // prepare
-        Logger logger = mock( Logger.class );
-        when( logger.isInfoEnabled() ).thenReturn( true );
-        ExecutionEventLogger executionEventLogger = new ExecutionEventLogger( 
logger );
-
         File basedir = new File( "" ).getAbsoluteFile();
         ExecutionEvent event = mock( ExecutionEvent.class );
         MavenProject project = mock( MavenProject.class );
@@ -191,6 +196,80 @@ class ExecutionEventLoggerTest
         inOrder.verify( logger ).info( "--------------------------------[ pom 
]---------------------------------" );
     }
 
+    @Test
+    void testMultiModuleProjectProgress()
+    {
+        // prepare
+        MavenProject project1 = generateMavenProject("Apache Maven Embedder 
1");
+        MavenProject project2 = generateMavenProject("Apache Maven Embedder 
2");
+        MavenProject project3 = generateMavenProject("Apache Maven Embedder 
3");
+
+        MavenSession session = mock( MavenSession.class );
+        when( session.getProjects() ).thenReturn( ImmutableList.of( project1, 
project2, project3 ) );
+        when( session.getAllProjects() ).thenReturn( ImmutableList.of( 
project1, project2, project3 ) );
+
+        ExecutionEvent sessionStartedEvent = mock( ExecutionEvent.class );
+        when( sessionStartedEvent.getSession() ).thenReturn( session );
+        ExecutionEvent projectStartedEvent1 = mock( ExecutionEvent.class );
+        when( projectStartedEvent1.getProject() ).thenReturn( project1 );
+        ExecutionEvent projectStartedEvent2 = mock( ExecutionEvent.class );
+        when( projectStartedEvent2.getProject() ).thenReturn( project2 );
+        ExecutionEvent projectStartedEvent3 = mock( ExecutionEvent.class );
+        when( projectStartedEvent3.getProject() ).thenReturn( project3 );
+
+        // execute
+        executionEventLogger.sessionStarted( sessionStartedEvent );
+        executionEventLogger.projectStarted( projectStartedEvent1 );
+        executionEventLogger.projectStarted( projectStartedEvent2 );
+        executionEventLogger.projectStarted( projectStartedEvent3 );
+
+        // verify
+        InOrder inOrder = inOrder( logger );
+        inOrder.verify( logger ).info( matches(".*Apache Maven Embedder 
1.*\\[1\\/3\\]") );
+        inOrder.verify( logger ).info( matches(".*Apache Maven Embedder 
2.*\\[2\\/3\\]") );
+        inOrder.verify( logger ).info( matches(".*Apache Maven Embedder 
3.*\\[3\\/3\\]") );
+    }
+
+    @Test
+    void testMultiModuleProjectResumeFromProgress()
+    {
+        // prepare
+        MavenProject project1 = generateMavenProject("Apache Maven Embedder 
1");
+        MavenProject project2 = generateMavenProject("Apache Maven Embedder 
2");
+        MavenProject project3 = generateMavenProject("Apache Maven Embedder 
3");
+
+        MavenSession session = mock( MavenSession.class );
+        when( session.getProjects() ).thenReturn( ImmutableList.of( project2, 
project3 ) );
+        when( session.getAllProjects() ).thenReturn( ImmutableList.of( 
project1, project2, project3 ) );
+
+        ExecutionEvent sessionStartedEvent = mock( ExecutionEvent.class );
+        when( sessionStartedEvent.getSession() ).thenReturn( session );
+        ExecutionEvent projectStartedEvent2 = mock( ExecutionEvent.class );
+        when( projectStartedEvent2.getProject() ).thenReturn( project2 );
+        ExecutionEvent projectStartedEvent3 = mock( ExecutionEvent.class );
+        when( projectStartedEvent3.getProject() ).thenReturn( project3 );
+
+        // execute
+        executionEventLogger.sessionStarted( sessionStartedEvent );
+        executionEventLogger.projectStarted( projectStartedEvent2 );
+        executionEventLogger.projectStarted( projectStartedEvent3 );
+
+        // verify
+        InOrder inOrder = inOrder( logger );
+        inOrder.verify( logger, never() ).info( matches(".*Apache Maven 
Embedder 1.*\\[1\\/3\\]") );
+        inOrder.verify( logger ).info( matches(".*Apache Maven Embedder 
2.*\\[2\\/3\\]") );
+        inOrder.verify( logger ).info( matches(".*Apache Maven Embedder 
3.*\\[3\\/3\\]") );
+    }
+
+    private static MavenProject generateMavenProject( String projectName )
+    {
+        MavenProject project = mock( MavenProject.class );
+        when( project.getPackaging() ).thenReturn( "jar" );
+        when( project.getVersion() ).thenReturn( "3.5.4-SNAPSHOT" );
+        when( project.getName() ).thenReturn( projectName );
+        return project;
+    }
+
     private static String adaptDirSeparator( String path )
     {
         return FilenameUtils.separatorsToSystem( path );

Reply via email to