Added: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java?rev=410544&view=auto ============================================================================== --- maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java (added) +++ maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java Wed May 31 07:35:13 2006 @@ -0,0 +1,956 @@ +package org.apache.maven.shared.invoker; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; +import java.util.Set; + +import junit.framework.TestCase; + +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.Os; +import org.codehaus.plexus.util.cli.Commandline; + +public class MavenCommandLineBuilderTest + extends TestCase +{ + private List toDelete = new ArrayList(); + + public void testShouldFailToSetLocalRepoLocationGloballyWhenItIsAFile() + throws IOException + { + logTestStart(); + + File lrd = File.createTempFile( "workdir-test", "file" ).getCanonicalFile(); + + toDelete.add( lrd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setLocalRepositoryDirectory( lrd ); + + Commandline cli = new Commandline(); + + try + { + tcb.setEnvironmentPaths( new DefaultInvocationRequest(), cli ); + fail( "Should not set local repo location to point to a file." ); + } + catch ( IllegalArgumentException e ) + { + } + } + + public void testShouldFailToSetLocalRepoLocationFromRequestWhenItIsAFile() + throws IOException + { + logTestStart(); + + File lrd = File.createTempFile( "workdir-test", "file" ).getCanonicalFile(); + + toDelete.add( lrd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + + Commandline cli = new Commandline(); + + try + { + tcb.setEnvironmentPaths( new DefaultInvocationRequest().setLocalRepositoryDirectory( lrd ), cli ); + fail( "Should not set local repo location to point to a file." ); + } + catch ( IllegalArgumentException e ) + { + } + } + + public void testShouldSetLocalRepoLocationGlobally() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File lrd = new File( tmpDir, "workdir" ).getCanonicalFile(); + + lrd.mkdirs(); + toDelete.add( lrd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setLocalRepositoryDirectory( lrd ); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( new DefaultInvocationRequest(), cli ); + + assertArgumentsPresent( Collections.singleton( "-Dmaven.repo.local=" + lrd.getPath() ), cli ); + } + + public void testShouldSetLocalRepoLocationFromRequest() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File lrd = new File( tmpDir, "workdir" ).getCanonicalFile(); + + lrd.mkdirs(); + toDelete.add( lrd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( new DefaultInvocationRequest().setLocalRepositoryDirectory( lrd ), cli ); + + assertArgumentsPresent( Collections.singleton( "-Dmaven.repo.local=" + lrd.getPath() ), cli ); + } + + public void testRequestProvidedLocalRepoLocationShouldOverrideGlobal() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File lrd = new File( tmpDir, "workdir" ).getCanonicalFile(); + File glrd = new File( tmpDir, "global/workdir" ).getCanonicalFile(); + + lrd.mkdirs(); + glrd.mkdirs(); + + toDelete.add( lrd ); + toDelete.add( glrd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setLocalRepositoryDirectory( glrd ); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( new DefaultInvocationRequest().setLocalRepositoryDirectory( lrd ), cli ); + + assertArgumentsPresent( Collections.singleton( "-Dmaven.repo.local=" + lrd.getPath() ), cli ); + } + + public void testShouldSetWorkingDirectoryGlobally() + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File wd = new File( tmpDir, "workdir" ); + + wd.mkdirs(); + + toDelete.add( wd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setWorkingDirectory( wd ); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( new DefaultInvocationRequest(), cli ); + + assertEquals( cli.getWorkingDirectory(), wd ); + } + + public void testShouldSetWorkingDirectoryFromRequest() + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File wd = new File( tmpDir, "workdir" ); + + wd.mkdirs(); + + toDelete.add( wd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + InvocationRequest req = new DefaultInvocationRequest(); + req.setBaseDirectory( wd ); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( req, cli ); + + assertEquals( cli.getWorkingDirectory(), wd ); + } + + public void testRequestProvidedWorkingDirectoryShouldOverrideGlobal() + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File wd = new File( tmpDir, "workdir" ); + File gwd = new File( tmpDir, "global/workdir" ); + + wd.mkdirs(); + gwd.mkdirs(); + + toDelete.add( wd ); + toDelete.add( gwd ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setWorkingDirectory( gwd ); + + InvocationRequest req = new DefaultInvocationRequest(); + req.setBaseDirectory( wd ); + + Commandline cli = new Commandline(); + + tcb.setEnvironmentPaths( req, cli ); + + assertEquals( cli.getWorkingDirectory(), wd ); + } + + public void testShouldUseSystemOutLoggerWhenNoneSpecified() + throws IOException + { + logTestStart(); + setupTempMavenHomeIfMissing(); + + TestCommandLineBuilder tclb = new TestCommandLineBuilder(); + tclb.checkRequiredState(); + } + + private File setupTempMavenHomeIfMissing() + throws IOException + { + String mavenHome = System.getProperty( "maven.home" ); + + File appDir = null; + + if ( mavenHome == null || !new File( mavenHome ).exists() ) + { + String tmpDir = System.getProperty( "java.io.tmpdir" ); + appDir = new File( tmpDir, "invoker-tests/maven-home" ); + + File binDir = new File( appDir, "bin" ); + + binDir.mkdirs(); + toDelete.add( appDir ); + + if ( Os.isFamily( "windows" ) ) + { + createDummyFile( binDir, "mvn.bat" ); + } + else + { + createDummyFile( binDir, "mvn" ); + } + + Properties props = System.getProperties(); + props.setProperty( "maven.home", appDir.getCanonicalPath() ); + + System.setProperties( props ); + } + else + { + appDir = new File( mavenHome ); + } + + return appDir; + } + + public void testShouldFailIfLoggerSetToNull() + { + logTestStart(); + + TestCommandLineBuilder tclb = new TestCommandLineBuilder(); + tclb.setLogger( null ); + + try + { + tclb.checkRequiredState(); + fail( "Should not allow execution to proceed when logger is missing." ); + } + catch ( IllegalStateException e ) + { + } + } + + public void testShouldFindDummyMavenExecutable() + throws IOException, CommandLineConfigurationException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + + File base = new File( tmpDir, "invoker-tests" ); + + File dummyMavenHomeBin = new File( base, "dummy-maven-home/bin" ); + + dummyMavenHomeBin.mkdirs(); + + toDelete.add( base ); + + File check; + if ( Os.isFamily( "windows" ) ) + { + check = createDummyFile( dummyMavenHomeBin, "mvn.bat" ); + } + else + { + check = createDummyFile( dummyMavenHomeBin, "mvn" ); + } + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setMavenHome( dummyMavenHomeBin.getParentFile() ); + + File mavenExe = tcb.findMavenExecutable(); + + assertEquals( check.getCanonicalPath(), mavenExe.getCanonicalPath() ); + } + + public void testShouldSetBatchModeFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setInteractive( false ), cli ); + + assertArgumentsPresent( Collections.singleton( "-B" ), cli ); + } + + public void testShouldSetOfflineFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setOffline( true ), cli ); + + assertArgumentsPresent( Collections.singleton( "-o" ), cli ); + } + + public void testShouldSetUpdateSnapshotsFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setUpdateSnapshots( true ), cli ); + + assertArgumentsPresent( Collections.singleton( "-U" ), cli ); + } + + public void testShouldSetDebugFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setDebug( true ), cli ); + + assertArgumentsPresent( Collections.singleton( "-X" ), cli ); + } + + public void testShouldSetErrorFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setShowErrors( true ), cli ); + + assertArgumentsPresent( Collections.singleton( "-e" ), cli ); + } + + public void testDebugOptionShouldMaskShowErrorsOption() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setDebug( true ).setShowErrors( true ), cli ); + + assertArgumentsPresent( Collections.singleton( "-X" ), cli ); + assertArgumentsNotPresent( Collections.singleton( "-e" ), cli ); + } + + public void testShouldSetStrictChecksumPolityFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setGlobalChecksumPolicy( InvocationRequest.CHECKSUM_POLICY_FAIL ), + cli ); + + assertArgumentsPresent( Collections.singleton( "-C" ), cli ); + } + + public void testShouldSetLaxChecksumPolicyFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setFlags( new DefaultInvocationRequest().setGlobalChecksumPolicy( InvocationRequest.CHECKSUM_POLICY_WARN ), + cli ); + + assertArgumentsPresent( Collections.singleton( "-c" ), cli ); + } + + public void testShouldSetFailAtEndFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setReactorBehavior( new DefaultInvocationRequest() + .setFailureBehavior( InvocationRequest.REACTOR_FAIL_AT_END ), cli ); + + assertArgumentsPresent( Collections.singleton( "-fae" ), cli ); + } + + public void testShouldSetFailNeverFlagFromRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb.setReactorBehavior( new DefaultInvocationRequest() + .setFailureBehavior( InvocationRequest.REACTOR_FAIL_NEVER ), cli ); + + assertArgumentsPresent( Collections.singleton( "-fn" ), cli ); + } + + public void testShouldUseDefaultOfFailFastWhenSpecifiedInRequest() + { + logTestStart(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + Commandline cli = new Commandline(); + + tcb + .setReactorBehavior( new DefaultInvocationRequest() + .setFailureBehavior( InvocationRequest.REACTOR_FAIL_FAST ), cli ); + + Set banned = new HashSet(); + banned.add( "-fae" ); + banned.add( "-fn" ); + + assertArgumentsNotPresent( banned, cli ); + } + + public void testShouldSpecifyFileOptionUsingNonStandardPomFileLocation() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "file-option-nonstd-pom-file-location" ).getCanonicalFile(); + + projectDir.mkdirs(); + + File pomFile = createDummyFile( projectDir, "non-standard-pom.xml" ).getCanonicalFile(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setPomFile( pomFile ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "non-standard-pom.xml" ); + + assertArgumentsPresent( args, cli ); + } + + public void testShouldSpecifyFileOptionUsingNonStandardPomInBasedir() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "file-option-nonstd-basedir" ).getCanonicalFile(); + + projectDir.mkdirs(); + + File basedir = createDummyFile( projectDir, "non-standard-pom.xml" ).getCanonicalFile(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setBaseDirectory( basedir ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "non-standard-pom.xml" ); + + assertArgumentsPresent( args, cli ); + } + + public void testShouldNotSpecifyFileOptionUsingStandardPomFileLocation() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "std-pom-file-location" ).getCanonicalFile(); + + projectDir.mkdirs(); + + File pomFile = createDummyFile( projectDir, "pom.xml" ).getCanonicalFile(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setPomFile( pomFile ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "pom.xml" ); + + assertArgumentsNotPresent( args, cli ); + } + + public void testShouldNotSpecifyFileOptionUsingStandardPomInBasedir() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "std-basedir-is-pom-file" ).getCanonicalFile(); + + projectDir.mkdirs(); + + File basedir = createDummyFile( projectDir, "pom.xml" ).getCanonicalFile(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setBaseDirectory( basedir ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "pom.xml" ); + + assertArgumentsNotPresent( args, cli ); + } + + public void testShouldUseDefaultPomFileWhenBasedirSpecifiedWithoutPomFileName() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "std-basedir-no-pom-filename" ).getCanonicalFile(); + + projectDir.mkdirs(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setBaseDirectory( projectDir ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "pom.xml" ); + + assertArgumentsNotPresent( args, cli ); + } + + public void testShouldSpecifyPomFileWhenBasedirSpecifiedWithPomFileName() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "std-basedir-with-pom-filename" ).getCanonicalFile(); + + projectDir.mkdirs(); + + Commandline cli = new Commandline(); + + InvocationRequest req = new DefaultInvocationRequest().setBaseDirectory( projectDir ) + .setPomFileName( "non-standard-pom.xml" ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setEnvironmentPaths( req, cli ); + tcb.setPomLocation( req, cli ); + + assertEquals( projectDir, cli.getWorkingDirectory() ); + + Set args = new HashSet(); + args.add( "-f" ); + args.add( "non-standard-pom.xml" ); + + assertArgumentsPresent( args, cli ); + } + + public void testShouldSpecifyCustomSettingsLocationFromRequest() + throws IOException + { + logTestStart(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File base = new File( tmpDir, "invoker-tests" ); + + toDelete.add( base ); + + File projectDir = new File( base, "custom-settings" ).getCanonicalFile(); + + projectDir.mkdirs(); + + File settingsFile = createDummyFile( projectDir, "settings.xml" ); + + Commandline cli = new Commandline(); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setSettingsLocation( new DefaultInvocationRequest().setUserSettingsFile( settingsFile ), cli ); + + Set args = new HashSet(); + args.add( "-s" ); + args.add( settingsFile.getCanonicalPath() ); + + assertArgumentsPresent( args, cli ); + } + + public void testShouldSpecifyCustomPropertyFromRequest() + throws IOException + { + logTestStart(); + + Commandline cli = new Commandline(); + + Properties properties = new Properties(); + properties.setProperty( "key", "value" ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setProperties( new DefaultInvocationRequest().setProperties( properties ), cli ); + + assertArgumentsPresent( Collections.singleton( "-Dkey=value" ), cli ); + } + + public void testShouldSpecifySingleGoalFromRequest() + throws IOException + { + logTestStart(); + + Commandline cli = new Commandline(); + + List goals = new ArrayList(); + goals.add( "test" ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setGoals( new DefaultInvocationRequest().setGoals( goals ), cli ); + + assertArgumentsPresent( Collections.singleton( "test" ), cli ); + } + + public void testShouldSpecifyTwoGoalsFromRequest() + throws IOException + { + logTestStart(); + + Commandline cli = new Commandline(); + + List goals = new ArrayList(); + goals.add( "test" ); + goals.add( "clean" ); + + TestCommandLineBuilder tcb = new TestCommandLineBuilder(); + tcb.setGoals( new DefaultInvocationRequest().setGoals( goals ), cli ); + + assertArgumentsPresent( new HashSet( goals ), cli ); + assertArgumentsPresentInOrder( goals, cli ); + } + + public void testBuildTypicalMavenInvocationEndToEnd() + throws IOException, CommandLineConfigurationException + { + logTestStart(); + File mavenDir = setupTempMavenHomeIfMissing(); + + InvocationRequest request = new DefaultInvocationRequest(); + + String tmpDir = System.getProperty( "java.io.tmpdir" ); + File projectDir = new File( tmpDir, "invoker-tests/typical-end-to-end-cli-build" ); + + projectDir.mkdirs(); + toDelete.add( projectDir.getParentFile() ); + + request.setBaseDirectory( projectDir ); + + Set expectedArgs = new HashSet(); + Set bannedArgs = new HashSet(); + + createDummyFile( projectDir, "pom.xml" ); + + bannedArgs.add( "-f" ); + bannedArgs.add( "pom.xml" ); + + Properties properties = new Properties(); + // this is REALLY bad practice, but since it's just a test... + properties.setProperty( "maven.tests.skip", "true" ); + + expectedArgs.add( "-Dmaven.tests.skip=true" ); + + request.setProperties( properties ); + + request.setOffline( true ); + + expectedArgs.add( "-o" ); + + List goals = new ArrayList(); + + goals.add( "post-clean" ); + goals.add( "deploy" ); + goals.add( "site-deploy" ); + + request.setGoals( goals ); + + MavenCommandLineBuilder commandLineBuilder = new MavenCommandLineBuilder(); + + Commandline commandline = commandLineBuilder.build( request ); + + assertArgumentsPresent( expectedArgs, commandline ); + assertArgumentsNotPresent( bannedArgs, commandline ); + assertArgumentsPresentInOrder( goals, commandline ); + + File mavenFile; + if ( Os.isFamily( "windows" ) ) + { + mavenFile = new File( mavenDir, "bin/mvn.bat" ); + } + else + { + mavenFile = new File( mavenDir, "bin/mvn" ); + } + + assertEquals( mavenFile.getCanonicalPath(), commandline.getExecutable() ); + assertEquals( projectDir.getCanonicalPath(), commandline.getWorkingDirectory().getCanonicalPath() ); + } + + public void tearDown() + throws IOException + { + for ( Iterator it = toDelete.iterator(); it.hasNext(); ) + { + File file = (File) it.next(); + + if ( file.exists() ) + { + if ( file.isDirectory() ) + { + FileUtils.deleteDirectory( file ); + } + else + { + file.delete(); + } + } + } + } + + // this is just a debugging helper for separating unit test output... + private void logTestStart() + { +// NullPointerException npe = new NullPointerException(); +// StackTraceElement element = npe.getStackTrace()[1]; +// +// System.out.println( "Starting: " + element.getMethodName() ); + } + + private void assertArgumentsPresentInOrder( List expected, Commandline cli ) + { + String[] arguments = cli.getArguments(); + + int expectedCounter = 0; + +// System.out.println( "Command-line has " + arguments.length + " arguments." ); + + for ( int i = 0; i < arguments.length; i++ ) + { +// System.out.println( "Checking argument: " + arguments[i] + " against: " + expected.get( expectedCounter ) ); + + if ( arguments[i].equals( expected.get( expectedCounter ) ) ) + { + expectedCounter++; + } + } + + assertEquals( "Arguments: " + expected + " were not found or are in the wrong order.", expected.size(), + expectedCounter ); + } + + private void assertArgumentsPresent( Set requiredArgs, Commandline cli ) + { + String[] argv = cli.getArguments(); + List args = Arrays.asList( argv ); + + // System.out.println( "Command-line: " + cli ); + // System.out.println( "Arguments: " + args ); + + for ( Iterator it = requiredArgs.iterator(); it.hasNext(); ) + { + String arg = (String) it.next(); + + assertTrue( "Command-line argument: \'" + arg + "\' is missing.", args.contains( arg ) ); + } + } + + private void assertArgumentsNotPresent( Set bannedArgs, Commandline cli ) + { + String[] argv = cli.getArguments(); + List args = Arrays.asList( argv ); + + for ( Iterator it = bannedArgs.iterator(); it.hasNext(); ) + { + String arg = (String) it.next(); + + assertFalse( "Command-line argument: \'" + arg + "\' should not be present.", args.contains( arg ) ); + } + } + + private File createDummyFile( File directory, String filename ) + throws IOException + { + File dummyFile = new File( directory, filename ); + + FileWriter writer = null; + try + { + writer = new FileWriter( dummyFile ); + writer.write( "This is a dummy file." ); + } + finally + { + IOUtil.close( writer ); + } + + toDelete.add( dummyFile ); + + return dummyFile; + } + + private static final class TestCommandLineBuilder + extends MavenCommandLineBuilder + { + public void checkRequiredState() + { + super.checkRequiredState(); + } + + public File findMavenExecutable() + throws CommandLineConfigurationException + { + return super.findMavenExecutable(); + } + + public void setEnvironmentPaths( InvocationRequest request, Commandline cli ) + { + super.setEnvironmentPaths( request, cli ); + } + + public void setFlags( InvocationRequest request, Commandline cli ) + { + super.setFlags( request, cli ); + } + + public void setGoals( InvocationRequest request, Commandline cli ) + { + super.setGoals( request, cli ); + } + + public void setPomLocation( InvocationRequest request, Commandline cli ) + { + super.setPomLocation( request, cli ); + } + + public void setProperties( InvocationRequest request, Commandline cli ) + { + super.setProperties( request, cli ); + } + + public void setReactorBehavior( InvocationRequest request, Commandline cli ) + { + super.setReactorBehavior( request, cli ); + } + + public void setSettingsLocation( InvocationRequest request, Commandline cli ) + { + super.setSettingsLocation( request, cli ); + } + + public void setShellEnvironment( InvocationRequest request, Commandline cli ) + throws CommandLineConfigurationException + { + super.setShellEnvironment( request, cli ); + } + + } + +}
Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/MavenCommandLineBuilderTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java?rev=410544&view=auto ============================================================================== --- maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java (added) +++ maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java Wed May 31 07:35:13 2006 @@ -0,0 +1,35 @@ +package org.apache.maven.shared.invoker; + +import junit.framework.TestCase; + +public class SystemOutHandlerTest + extends TestCase +{ + + public void testConsumeWithoutAlwaysFlush() + { + logTestStart(); + new SystemOutHandler( false ).consumeLine( "This is a test." ); + } + + public void testConsumeWithAlwaysFlush() + { + logTestStart(); + new SystemOutHandler( true ).consumeLine( "This is a test." ); + } + + public void testConsumeNullLine() + { + logTestStart(); + new SystemOutHandler().consumeLine( null ); + } + + // this is just a debugging helper for separating unit test output... + private void logTestStart() + { + NullPointerException npe = new NullPointerException(); + StackTraceElement element = npe.getStackTrace()[1]; + + System.out.println( "Starting: " + element.getMethodName() ); + } +} Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutHandlerTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java?rev=410544&view=auto ============================================================================== --- maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java (added) +++ maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java Wed May 31 07:35:13 2006 @@ -0,0 +1,173 @@ +package org.apache.maven.shared.invoker; + +import java.net.MalformedURLException; + +import junit.framework.TestCase; + +public class SystemOutLoggerTest + extends TestCase +{ + + private static final Throwable EXCEPTION = new MalformedURLException( "This is meant to happen. It's part of the test." ); + + private static final String MESSAGE = "This is a test message."; + + public void testDebugWithMessageOnly() + { + logTestStart(); + new SystemOutLogger().debug( MESSAGE ); + } + + public void testDebugWithMessageAndError() + { + logTestStart(); + new SystemOutLogger().debug( MESSAGE, EXCEPTION ); + } + + public void testDebugWithNullMessageAndNoError() + { + logTestStart(); + new SystemOutLogger().debug( null ); + } + + public void testDebugWithNullMessageError() + { + logTestStart(); + new SystemOutLogger().debug( null, EXCEPTION ); + } + + public void testDebugWithMessageNullError() + { + logTestStart(); + new SystemOutLogger().debug( MESSAGE, null ); + } + + public void testInfoWithMessageOnly() + { + logTestStart(); + new SystemOutLogger().info( MESSAGE ); + } + + public void testInfoWithMessageAndError() + { + logTestStart(); + new SystemOutLogger().info( MESSAGE, EXCEPTION ); + } + + public void testInfoWithNullMessageAndNoError() + { + logTestStart(); + new SystemOutLogger().info( null ); + } + + public void testInfoWithNullMessageError() + { + logTestStart(); + new SystemOutLogger().info( null, EXCEPTION ); + } + + public void testInfoWithMessageNullError() + { + logTestStart(); + new SystemOutLogger().info( MESSAGE, null ); + } + + public void testWarnWithMessageOnly() + { + logTestStart(); + new SystemOutLogger().warn( MESSAGE ); + } + + public void testWarnWithMessageAndError() + { + logTestStart(); + new SystemOutLogger().warn( MESSAGE, EXCEPTION ); + } + + public void testWarnWithNullMessageAndNoError() + { + logTestStart(); + new SystemOutLogger().warn( null ); + } + + public void testWarnWithNullMessageError() + { + logTestStart(); + new SystemOutLogger().warn( null, EXCEPTION ); + } + + public void testWarnWithMessageNullError() + { + logTestStart(); + new SystemOutLogger().warn( MESSAGE, null ); + } + + public void testErrorWithMessageOnly() + { + logTestStart(); + new SystemOutLogger().error( MESSAGE ); + } + + public void testErrorWithMessageAndError() + { + logTestStart(); + new SystemOutLogger().error( MESSAGE, EXCEPTION ); + } + + public void testErrorWithNullMessageAndNoError() + { + logTestStart(); + new SystemOutLogger().error( null ); + } + + public void testErrorWithNullMessageError() + { + logTestStart(); + new SystemOutLogger().error( null, EXCEPTION ); + } + + public void testErrorWithMessageNullError() + { + logTestStart(); + new SystemOutLogger().error( MESSAGE, null ); + } + + public void testFatalErrorWithMessageOnly() + { + logTestStart(); + new SystemOutLogger().fatalError( MESSAGE ); + } + + public void testFatalErrorWithMessageAndError() + { + logTestStart(); + new SystemOutLogger().fatalError( MESSAGE, EXCEPTION ); + } + + public void testFatalErrorWithNullMessageAndNoError() + { + logTestStart(); + new SystemOutLogger().fatalError( null ); + } + + public void testFatalErrorWithNullMessageError() + { + logTestStart(); + new SystemOutLogger().fatalError( null, EXCEPTION ); + } + + public void testFatalErrorWithMessageNullError() + { + logTestStart(); + new SystemOutLogger().fatalError( MESSAGE, null ); + } + + // this is just a debugging helper for separating unit test output... + private void logTestStart() + { + NullPointerException npe = new NullPointerException(); + StackTraceElement element = npe.getStackTrace()[1]; + + System.out.println( "Starting: " + element.getMethodName() ); + } +} Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/shared/trunk/maven-invoker/src/test/java/org/apache/maven/shared/invoker/SystemOutLoggerTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision"