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 ); + + } + +}