Author: dfabulich
Date: Sat Nov  6 04:37:37 2010
New Revision: 1031957

URL: http://svn.apache.org/viewvc?rev=1031957&view=rev
Log:
Add test, parent POM

Added:
    maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/
    maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/
    maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
Modified:
    maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
    
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java

Modified: maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml?rev=1031957&r1=1031956&r2=1031957&view=diff
==============================================================================
--- maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml (original)
+++ maven/sandbox/trunk/shared/scm-changes-maven-extension/pom.xml Sat Nov  6 
04:37:37 2010
@@ -21,6 +21,13 @@ under the License.
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
   <modelVersion>4.0.0</modelVersion>
+  
+  <parent>
+    <artifactId>maven-parent</artifactId>
+    <groupId>org.apache.maven</groupId>
+    <version>16</version>
+  </parent>
+  
   <groupId>org.apache.maven.shared</groupId>
   <artifactId>scm-changes-maven-extension</artifactId>
   <version>1.0-SNAPSHOT</version>
@@ -47,10 +54,41 @@ under the License.
         <artifactId>maven-scm-manager-plexus</artifactId>
         <version>1.4</version>
     </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <version>1.8.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.powermock</groupId>
+      <artifactId>powermock-module-junit4</artifactId>
+      <version>1.4.6</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.powermock</groupId>
+      <artifactId>powermock-api-mockito</artifactId>
+      <version>1.4.6</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
       <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+      <plugin>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-component-metadata</artifactId>
         <version>1.5.5</version>

Modified: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java?rev=1031957&r1=1031956&r2=1031957&view=diff
==============================================================================
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 (original)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/main/java/org/apache/maven/shared/scmchanges/MakeScmChanges.java
 Sat Nov  6 04:37:37 2010
@@ -29,7 +29,6 @@ import org.apache.maven.AbstractMavenLif
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.execution.RuntimeInformation;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
@@ -51,7 +50,7 @@ public class MakeScmChanges
     extends AbstractMavenLifecycleParticipant
 {
     @Requirement
-    private Logger logger;
+    Logger logger;
 
     @Requirement
     ScmManager scmManager;
@@ -68,6 +67,9 @@ public class MakeScmChanges
     /** Disabled by default; activate via -Dmake.scmChanges=true */
     boolean enabled = false;
 
+    // TODO configurable baseDir
+    // TODO Don't just build from the root because we can't figure out what to 
do
+    
     public void afterProjectsRead( MavenSession session )
         throws MavenExecutionException
     {
@@ -147,7 +149,7 @@ public class MakeScmChanges
 
     }
 
-    private void readParameters( MavenSession session )
+    void readParameters( MavenSession session )
         throws MavenExecutionException
     {
         Properties sessionProps = session.getUserProperties();
@@ -172,7 +174,7 @@ public class MakeScmChanges
     }
 
     @SuppressWarnings( "unchecked" )
-    private List<ScmFile> getChangedFilesFromScm( File baseDir )
+    List<ScmFile> getChangedFilesFromScm( File baseDir )
         throws MavenExecutionException
     {
         StatusScmResult result = null;

Added: 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
URL: 
http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java?rev=1031957&view=auto
==============================================================================
--- 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
 (added)
+++ 
maven/sandbox/trunk/shared/scm-changes-maven-extension/src/test/java/org/apache/maven/shared/scmchanges/MakeScmChangesTest.java
 Sat Nov  6 04:37:37 2010
@@ -0,0 +1,287 @@
+package org.apache.maven.shared.scmchanges;
+
+import static org.hamcrest.core.Is.*;
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.MavenExecutionException;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Scm;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.logging.Logger;
+import org.junit.Before;
+import org.junit.Test;
+import org.powermock.api.mockito.PowerMockito;
+
+
+public class MakeScmChangesTest
+{
+
+    MakeScmChanges msc;
+
+    @Before
+    public void setUp()
+    {
+        msc = new MakeScmChanges();
+        msc.logger = mock(Logger.class);
+    }
+
+    @Test( expected = MavenExecutionException.class )
+    public void readParametersNoScmConnection()
+        throws Exception
+    {
+        MavenSession session = mock( MavenSession.class );
+        Properties props = new Properties();
+        when( session.getUserProperties() ).thenReturn( props );
+
+        msc.readParameters( session );
+    }
+
+    @Test
+    public void readParameters()
+        throws Exception
+    {
+        MavenSession session = mock( MavenSession.class );
+        Properties props = new Properties();
+        when( session.getUserProperties() ).thenReturn( props );
+
+        Scm scm = mock( Scm.class );
+        String scmConnection = "foo";
+        when( scm.getConnection() ).thenReturn( scmConnection );
+
+        MavenProject project = mock( MavenProject.class );
+        when( project.getScm() ).thenReturn( scm );
+
+        when( session.getTopLevelProject() ).thenReturn( project );
+
+        msc.readParameters( session );
+
+        assertThat( msc.enabled, is( false ) );
+        assertThat( msc.ignoreUnknown, is( true ) );
+        assertThat( msc.scmConnection, is( scmConnection ) );
+    }
+
+    @Test
+    public void getChangedFilesFromScm()
+        throws Exception
+    {
+        StatusScmResult result = mock( StatusScmResult.class );
+        ScmManager scmManager = mock( ScmManager.class );
+        when( scmManager.status( (ScmRepository) any(), (ScmFileSet) any() ) 
).thenReturn( result );
+
+        msc.scmManager = scmManager;
+
+        msc.getChangedFilesFromScm( new File( "" ) );
+
+    }
+
+    @Test( expected = MavenExecutionException.class )
+    public void getChangedFilesFromScmFailure()
+        throws MavenExecutionException
+    {
+        msc.getChangedFilesFromScm( new File( "" ) );
+    }
+    
+    @Test
+    public void disabled() throws MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        msc.afterProjectsRead( session );
+    }
+    
+    @Test(expected = MavenExecutionException.class)
+    public void nothingToDo() throws MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        List<ScmFile> changedFiles = new ArrayList<ScmFile>();
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( null );
+        
+        MavenProject project = mock(MavenProject.class);
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        msc.afterProjectsRead( session );
+    }
+    
+    @Test
+    public void normalFlow() throws MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        ScmFile changedFile = new ScmFile("pom.xml", ScmFileStatus.MODIFIED);
+        
+        List<ScmFile> changedFiles = Arrays.asList( changedFile );
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
+        
+        MavenProject project = new MavenProject();
+        
+        project.setFile( new File("pom.xml").getAbsoluteFile() );
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        when ( session.getProjects() ).thenReturn( Arrays.asList( project ));
+        
+        MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+        when (session.getRequest()).thenReturn( request );
+        
+        msc.afterProjectsRead( session );
+        
+        List<String> selectedProjects = request.getSelectedProjects();
+        assertThat(selectedProjects.toString(), is("[unknown:empty-project]"));
+        assertThat(request.getMakeBehavior(), 
is(MavenExecutionRequest.REACTOR_MAKE_DOWNSTREAM));
+    }
+    
+    @Test
+    public void alreadyBuildingUpstream() throws MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        ScmFile changedFile = new ScmFile("pom.xml", ScmFileStatus.MODIFIED);
+        
+        List<ScmFile> changedFiles = Arrays.asList( changedFile );
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
+        
+        MavenProject project = new MavenProject();
+        
+        project.setFile( new File("pom.xml").getAbsoluteFile() );
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        when ( session.getProjects() ).thenReturn( Arrays.asList( project ));
+        
+        MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+        request.setMakeBehavior( MavenExecutionRequest.REACTOR_MAKE_UPSTREAM );
+        when (session.getRequest()).thenReturn( request );
+        
+        msc.afterProjectsRead( session );
+        
+        List<String> selectedProjects = request.getSelectedProjects();
+        assertThat(selectedProjects.toString(), is("[unknown:empty-project]"));
+        assertThat(request.getMakeBehavior(), 
is(MavenExecutionRequest.REACTOR_MAKE_BOTH));
+    }
+
+    @Test(expected = MavenExecutionException.class)
+    public void nothingToDoBecauseIgnoringRootPom() throws 
MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        msc.ignoreRootPom = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        ScmFile changedFile = new ScmFile("pom.xml", ScmFileStatus.MODIFIED);
+        
+        List<ScmFile> changedFiles = Arrays.asList( changedFile );
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
+        
+        MavenProject project = new MavenProject();
+        
+        project.setFile( new File("pom.xml").getAbsoluteFile() );
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        when ( session.getProjects() ).thenReturn( Arrays.asList( project ));
+        
+        msc.afterProjectsRead( session );
+        
+    }
+    
+    @Test(expected = MavenExecutionException.class)
+    public void nothingToDoBecauseIgnoringUnknown() throws 
MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        msc.ignoreUnknown = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        ScmFile changedFile = new ScmFile("pom.xml", ScmFileStatus.UNKNOWN);
+        
+        List<ScmFile> changedFiles = Arrays.asList( changedFile );
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
+        
+        MavenProject project = new MavenProject();
+        
+        project.setFile( new File("pom.xml").getAbsoluteFile() );
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        when ( session.getProjects() ).thenReturn( Arrays.asList( project ));
+        
+        msc.afterProjectsRead( session );
+        
+    }
+    
+    @Test(expected = MavenExecutionException.class)
+    public void nothingToDoBecauseIgnoringMissing() throws 
MavenExecutionException {
+        MavenSession session = mock(MavenSession.class);
+        
+        msc.enabled = true;
+        
+        msc = PowerMockito.spy( msc );
+        
+        PowerMockito.doNothing().when( msc ).readParameters( (MavenSession) 
any() );
+        
+        ScmFile changedFile = new ScmFile("pom.xml", ScmFileStatus.MISSING);
+        
+        List<ScmFile> changedFiles = Arrays.asList( changedFile );
+        
+        PowerMockito.doReturn( changedFiles ).when( msc 
).getChangedFilesFromScm( (File) any() );
+        
+        MavenProject project = new MavenProject();
+        
+        project.setFile( new File("pom.xml").getAbsoluteFile() );
+        
+        when ( session.getTopLevelProject() ).thenReturn( project);
+        
+        when ( session.getProjects() ).thenReturn( Arrays.asList( project ));
+        
+        msc.afterProjectsRead( session );
+        
+    }
+    
+}


Reply via email to