o Considered file extensions in command search to enable tests for Windows

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@677452 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Benjamin Bentmann 2008-07-16 22:33:58 +00:00
parent d046f6039f
commit a14916cf8c
1 changed files with 35 additions and 8 deletions

View File

@ -16,13 +16,16 @@
*/
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.util.Os;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.cli.CommandLineUtils;
@ -31,10 +34,13 @@ public abstract class AbstractEmbedderTestCase
{
protected MavenEmbedder maven;
private String defaultPath;
private List defaultPathList;
/**
* The file extensions used to resolve command names to executables. Each extension must have a leading period.
*/
private List commandExtensions;
protected void setUp()
throws Exception
{
@ -51,7 +57,9 @@ protected void setUp()
// but if they are not present on the machine we don't want tests to fail. Case in point would be using SVN via the SCM plugin. We'll
// run it if we can, pass through gracefully otherwise.
defaultPath = CommandLineUtils.getSystemEnvVars().getProperty( "PATH" );
Properties env = CommandLineUtils.getSystemEnvVars( !Os.isFamily( Os.FAMILY_WINDOWS ) );
String defaultPath = env.getProperty( "PATH" );
if ( defaultPath == null )
{
@ -59,9 +67,7 @@ protected void setUp()
}
else
{
String separator = System.getProperty( "path.separator" );
StringTokenizer tokenizer = new StringTokenizer( defaultPath, separator );
StringTokenizer tokenizer = new StringTokenizer( defaultPath, File.pathSeparator );
defaultPathList = new LinkedList();
@ -72,6 +78,17 @@ protected void setUp()
defaultPathList.add( element );
}
}
String pathExt = env.getProperty( "PATHEXT" );
if ( pathExt == null )
{
commandExtensions = Collections.EMPTY_LIST;
}
else
{
commandExtensions = Arrays.asList( pathExt.split( "\\" + File.pathSeparatorChar + "+" ) );
}
}
protected void tearDown()
@ -118,12 +135,22 @@ public File findExecutable( String executable, List path )
return null;
}
// TODO: Need to resolve it with defaults extension of system
// ie. if executable is 'mvn', we must search 'mvn.bat'
for ( Iterator it = path.iterator(); it.hasNext(); )
{
String s = (String) it.next();
for ( Iterator ite = commandExtensions.iterator(); ite.hasNext(); )
{
String ext = (String) ite.next();
f = new File( s, executable + ext );
if ( f.isFile() )
{
return f;
}
}
f = new File( s, executable );
if ( f.isFile() )