You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ng...@apache.org on 2006/01/29 00:15:51 UTC
svn commit: r373258 - in /jakarta/commons/sandbox/exec/trunk/src:
main/java/org/apache/commons/exec/
main/java/org/apache/commons/exec/environment/
main/java/org/apache/commons/exec/launcher/
test/java/org/apache/commons/exec/ test/java/org/apache/comm...
Author: ngn
Date: Sat Jan 28 15:15:24 2006
New Revision: 373258
URL: http://svn.apache.org/viewcvs?rev=373258&view=rev
Log:
Patch replacing Enviroment class with Map (in line with Java 1.5) as suggested by Jerome Lacoste and myself (bugzilla 37951)
Added:
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java
- copied, changed from r356574, jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/Environment.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java (with props)
jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java
- copied, changed from r356574, jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentTest.java
Removed:
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/Environment.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentVariable.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsEnvironment.java
jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentTest.java
Modified:
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Exec.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Execute.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java
jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/ExecTest.java
jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtil.java
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Exec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Exec.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Exec.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Exec.java Sat Jan 28 15:15:24 2006
@@ -21,8 +21,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
-import org.apache.commons.exec.environment.Environment;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -203,7 +204,7 @@
execute(cl, null, new LogOutputStream(1), new LogOutputStream(2));
}
- public void execute(final CommandLine cl, final Environment env)
+ public void execute(final CommandLine cl, final Map env)
throws IOException {
execute(cl, env, new LogOutputStream(1), new LogOutputStream(2));
}
@@ -214,14 +215,14 @@
}
- public void execute(final CommandLine cmdl, final Environment env,
+ public void execute(final CommandLine cmdl, final Map env,
final OutputStream out, final OutputStream error)
throws IOException {
File savedDir = dir; // possibly altered in prepareExec
- Environment environment;
+ Map environment;
if (env == null) {
- environment = Environment.createEnvironment();
+ environment = new HashMap();
} else {
environment = env;
}
@@ -237,14 +238,14 @@
}
}
- public void execute(final CommandLine cmdl, final Environment env,
+ public void execute(final CommandLine cmdl, final Map env,
final InputStream in, final OutputStream out,
final OutputStream error) throws ExecuteException {
File savedDir = dir; // possibly altered in prepareExec
- Environment environment;
+ Map environment;
if (env == null) {
- environment = Environment.createEnvironment();
+ environment = new HashMap();
} else {
environment = env;
}
@@ -303,13 +304,13 @@
* @throws ExecuteException
* under unknown circumstances.
*/
- protected Execute prepareExec(final Environment env,
+ protected Execute prepareExec(final Map env,
final OutputStream out, final OutputStream error)
throws ExecuteException {
return prepareExec(env, null, out, error);
}
- protected Execute prepareExec(final Environment env, final InputStream in,
+ protected Execute prepareExec(final Map env, final InputStream in,
final OutputStream out, final OutputStream error)
throws ExecuteException {
// default directory to the current directory
@@ -324,7 +325,7 @@
exe.setWorkingDirectory(dir);
exe.setNewEnvironment(newEnvironment);
- exe.setEnvironment(env.getVariables());
+ exe.setEnvironment(env);
return exe;
}
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Execute.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Execute.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Execute.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/Execute.java Sat Jan 28 15:15:24 2006
@@ -21,8 +21,10 @@
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
-import org.apache.commons.exec.environment.Environment;
+import org.apache.commons.exec.environment.EnvironmentUtil;
import org.apache.commons.exec.launcher.CommandLauncher;
import org.apache.commons.exec.launcher.CommandLauncherFactory;
import org.apache.commons.logging.Log;
@@ -40,7 +42,7 @@
private CommandLine cmdl = null;
- private Environment environment = null;
+ private Map environment = null;
private int exitValue = INVALID;
@@ -161,7 +163,7 @@
* @throws IOException If the environment can not be
* retrived.
*/
- public Environment getEnvironment() throws IOException {
+ public Map getEnvironment() throws IOException {
if (environment == null || newEnvironment) {
return environment;
}
@@ -171,21 +173,10 @@
/**
* Sets the environment variables for the subprocess to launch.
*
- * @param envVars
- * array of Strings, each element of which has an environment
- * variable settings in format <em>key=value</em>
- */
- public void setEnvironment(final String[] envVars) {
- this.environment = Environment.createEnvironment(envVars);
- }
-
- /**
- * Sets the environment variables for the subprocess to launch.
- *
* @param env
* environment to set
*/
- public void setEnvironment(final Environment env) {
+ public void setEnvironment(final Map env) {
this.environment = env;
}
@@ -220,7 +211,7 @@
* @throws IOException
* forwarded from the particular launcher used
*/
- public static Process launch(final CommandLine command, final Environment env, final File dir)
+ public static Process launch(final CommandLine command, final Map env, final File dir)
throws IOException {
CommandLauncher launcher = vmLauncher;
@@ -397,7 +388,7 @@
* @return the patched environment
* @throws IOException if the procssing environment can not be retrived
*/
- private Environment patchEnvironment() throws IOException {
+ private Map patchEnvironment() throws IOException {
// On OpenVMS Runtime#exec() doesn't support the environment array,
// so we only return the new values which then will be set in
// the generated DCL script, inheriting the parent process environment
@@ -405,8 +396,8 @@
return environment;
}
- Environment procEnv = Environment.getProcEnvironment();
- Environment osEnv = (Environment) procEnv.clone();
+ Map procEnv = EnvironmentUtil.getProcEnvironment();
+ Map osEnv = new HashMap(procEnv);
osEnv.putAll(environment);
Added: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java?rev=373258&view=auto
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java (added)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/DefaultProcessingEnvironment.java Sat Jan 28 15:15:24 2006
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.commons.exec.environment;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.CommandLineImpl;
+import org.apache.commons.exec.Execute;
+import org.apache.commons.exec.OS;
+import org.apache.commons.exec.PumpStreamHandler;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class DefaultProcessingEnvironment {
+
+ private static Log LOG = LogFactory.getLog(DefaultProcessingEnvironment.class);
+
+ /**
+ * TODO move this and other final static / constants into a constants class ?
+ */
+ private static final String LINE_SEPARATOR = System.getProperty("line.separator");
+
+ protected Map procEnvironment;
+
+ /**
+ * Find the list of environment variables for this process.
+ *
+ * @return a vector containing the environment variables the vector elements
+ * are strings formatted like variable = value
+ * @throws IOException
+ */
+ public synchronized Map getProcEnvironment() throws IOException {
+ if (procEnvironment == null) {
+ try {
+ Method getenvs = System.class.getMethod( "getenv", null );
+ Map env = (Map) getenvs.invoke( null, null );
+ procEnvironment = new HashMap( env );
+ } catch ( NoSuchMethodException e ) {
+ // ok, just not on JDK 1.5
+ } catch ( IllegalAccessException e ) {
+ LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" );
+ } catch ( InvocationTargetException e ) {
+ LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" );
+ }
+ }
+
+ if(procEnvironment == null) {
+ procEnvironment = new HashMap();
+ BufferedReader in = runProcEnvCommand();
+
+ String var = null;
+ String line;
+ while ((line = in.readLine()) != null) {
+ if (line.indexOf('=') == -1) {
+ // Chunk part of previous env var (UNIX env vars can
+ // contain embedded new lines).
+ if (var == null) {
+ var = LINE_SEPARATOR + line;
+ } else {
+ var += LINE_SEPARATOR + line;
+ }
+ } else {
+ // New env var...append the previous one if we have it.
+ if (var != null) {
+ EnvironmentUtil.addVariableToEnvironment(procEnvironment, var);
+ }
+ var = line;
+ }
+ }
+ // Since we "look ahead" before adding, there's one last env var.
+ if (var != null) {
+ EnvironmentUtil.addVariableToEnvironment(procEnvironment, var);
+ }
+ }
+ return procEnvironment;
+ }
+
+ /**
+ * @return
+ * @throws IOException
+ */
+ protected BufferedReader runProcEnvCommand() throws IOException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ Execute exe = new Execute(new PumpStreamHandler(out));
+ exe.setCommandline(getProcEnvCommand());
+ // Make sure we do not recurse forever
+ exe.setNewEnvironment(true);
+ int retval = exe.execute();
+ if (retval != 0) {
+ // Just try to use what we got
+ }
+ return new BufferedReader(new StringReader(toString(out)));
+ }
+
+ protected CommandLine getProcEnvCommand() {
+ CommandLine commandLine = new CommandLineImpl();
+ if (OS.isFamilyOS2()) {
+ // OS/2 - use same mechanism as Windows 2000
+ commandLine.setExecutable("cmd");
+ commandLine.addArguments(new String[] {"/c", "set"});
+ } else if (OS.isFamilyWindows()) {
+ // Determine if we're running under XP/2000/NT or 98/95
+ if (OS.isFamilyWin9x()) {
+ commandLine.setExecutable("command.com");
+ // Windows 98/95
+ } else {
+ commandLine.setExecutable("cmd");
+ // Windows XP/2000/NT/2003
+ }
+ commandLine.addArguments(new String[] {"/c", "set"});
+ } else if (OS.isFamilyZOS() || OS.isFamilyUnix()) {
+ // On most systems one could use: /bin/sh -c env
+
+ // Some systems have /bin/env, others /usr/bin/env, just try
+ if (new File("/bin/env").canRead()) {
+ commandLine.setExecutable("/bin/env");
+ } else if (new File("/usr/bin/env").canRead()) {
+ commandLine.setExecutable("/usr/bin/env");
+ } else {
+ // rely on PATH
+ commandLine.setExecutable("env");
+ }
+ } else if (OS.isFamilyNetware() || OS.isFamilyOS400()) {
+ // rely on PATH
+ commandLine.setExecutable("env");
+ } else {
+ // MAC OS 9 and previous
+ // TODO: I have no idea how to get it, someone must fix it
+ commandLine = null;
+ }
+ return commandLine;
+ }
+
+ /**
+ * ByteArrayOutputStream#toString doesn't seem to work reliably on OS/390,
+ * at least not the way we use it in the execution context.
+ *
+ * @param bos
+ * the output stream that one wants to read
+ * @return the output stream as a string, read with special encodings in the
+ * case of z/os and os/400
+ */
+ private String toString(final ByteArrayOutputStream bos) {
+ if (OS.isFamilyZOS()) {
+ try {
+ return bos.toString("Cp1047");
+ } catch (java.io.UnsupportedEncodingException e) {
+ // noop default encoding used
+ }
+ } else if (OS.isFamilyOS400()) {
+ try {
+ return bos.toString("Cp500");
+ } catch (java.io.UnsupportedEncodingException e) {
+ // noop default encoding used
+ }
+ }
+ return bos.toString();
+ }
+}
Copied: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java (from r356574, jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/Environment.java)
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java?p2=jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java&p1=jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/Environment.java&r1=356574&r2=373258&rev=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/Environment.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/EnvironmentUtil.java Sat Jan 28 15:15:24 2006
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 The Apache Software Foundation
+ * Copyright 2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,175 +17,32 @@
package org.apache.commons.exec.environment;
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
import java.io.IOException;
-import java.io.StringReader;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-
-import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.CommandLineImpl;
-import org.apache.commons.exec.Execute;
+import java.util.Iterator;
+import java.util.Map;
+
import org.apache.commons.exec.OS;
-import org.apache.commons.exec.PumpStreamHandler;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* Wrapper for environment variables.
*/
-public class Environment implements Cloneable {
-
- private static Log LOG = LogFactory.getLog(Environment.class);
-
- /**
- * TODO move this and other final static / constants into a constants class ?
- */
- private static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
- private Map environment = new HashMap();
+public class EnvironmentUtil {
- // ----------------------------------------------------------------------
- // Static factory methods
- // ----------------------------------------------------------------------
-
- public static Environment createEnvironment() {
+ private static DefaultProcessingEnvironment procEnvironment;
+
+ static {
if (OS.isFamilyOpenVms()) {
- return new OpenVmsEnvironment();
+ procEnvironment = new OpenVmsProcessingEnvironment();
} else {
- return new Environment();
- }
- }
-
- public static Environment createEnvironment(String[] envVars) {
- Environment env = createEnvironment();
-
- if(envVars != null) {
- for (int i = 0; i < envVars.length; i++) {
- env.addVariable(EnvironmentVariable
- .createEnvironmentVariable(envVars[i]));
- }
+ procEnvironment = new DefaultProcessingEnvironment();
}
- return env;
- }
-
- /**
- * Comment for <code>serialVersionUID</code>
- */
- private static final long serialVersionUID = 3256443594801165364L;
-
- private static Environment procEnvironment;
-
+ }
+
/**
- * Default constructor, creates an empty environment
- */
- protected Environment() {
- }
-
- /**
- * Creates an environment from a @link Map of @link String
- * keys and values.
- *
- * @param env A map containg the environment variable name
- * as @link String key and the variable value as @link String
- * value
+ * Disable constructor
*/
- protected Environment(Map env) {
- Set entries = env.entrySet();
- for (Iterator iter = entries.iterator(); iter.hasNext();) {
- Map.Entry entry = (Map.Entry) iter.next();
- addVariable((String) entry.getKey(),
- (String) entry.getValue());
- }
- }
+ private EnvironmentUtil() {
- /**
- * add a variable. Validity checking is <i>not</i> performed at this point.
- * Duplicates are not caught either.
- *
- * @param var
- * new variable.
- */
- public void addVariable(final EnvironmentVariable var) {
- environment.put(var.getKey(), var);
- }
-
- /**
- * add a variable. Validity checking is <i>not</i> performed at this point.
- * Duplicates are not caught either.
- *
- * @param key
- * new key.
- * @param value
- * new value.
- * @throws NullPointerException if </CODE>key</CODE> or <CODE>value</CODE> is <CODE>null</CODE>.
- */
- public void addVariable(final String key, final String value) {
- environment.put(key, EnvironmentVariable.createEnvironmentVariable(key, value));
- }
-
- public void putAll(Map map) {
- environment.putAll( map );
- }
-
- public void putAll(Environment environment) {
- this.environment.putAll( environment.environment );
- }
-
- public Set keySet() {
- return new HashSet( environment.keySet() );
- }
-
- public Set entrySet() {
- return new HashSet( environment.entrySet() );
- }
-
- public Object get( String key )
- {
- return environment.get( key );
- }
-
- public int size()
- {
- return environment.size();
- }
-
- public void clear()
- {
- environment.clear();
- }
-
- public boolean containsKey(String key)
- {
- return environment.containsKey( key );
- }
-
- public boolean containsValue(Object value)
- {
- return environment.containsValue(value);
- }
-
- /**
- * Retrieve a variable using its key.
- *
- * @param key
- * the key.
- */
- public EnvironmentVariable getVariable(final String key) {
- return (EnvironmentVariable) environment.get(key);
- }
-
- /**
- * Retrieve a variable's value using its key.
- *
- * @param key
- * the key.
- */
- public String getVariableValue(final String key) {
- return ((EnvironmentVariable) environment.get(key)).getValue();
}
/**
@@ -193,7 +50,7 @@
*
* @return array of key=value assignment strings
*/
- public String[] getVariables() {
+ public static String[] toStrings(Map environment) {
if (environment.size() == 0) {
return null;
}
@@ -202,12 +59,27 @@
for (Iterator iter = environment.entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
- result[i] = entry.getValue().toString();
+ result[i] = entry.getKey().toString() + "=" + entry.getValue().toString();
i++;
}
return result;
}
+ private static String[] parseEnvironmentVariable(final String keyAndValue) {
+ int index = keyAndValue.indexOf('=');
+ if (index == -1) {
+ throw new IllegalArgumentException(
+ "Environment variable for this platform "
+ + "must contain an equals sign ('=')");
+ }
+
+ String[] result = new String[2];
+ result[0] = keyAndValue.substring(0, index);
+ result[1] = keyAndValue.substring(index + 1);
+
+ return result;
+ }
+
/**
* Find the list of environment variables for this process.
*
@@ -215,151 +87,13 @@
* are strings formatted like variable = value
* @throws IOException
*/
- public static synchronized Environment getProcEnvironment() throws IOException {
- if (procEnvironment == null) {
- try {
- Method getenvs = System.class.getMethod( "getenv", null );
- Map env = (Map) getenvs.invoke( null, null );
- procEnvironment = new Environment( env );
- } catch ( NoSuchMethodException e ) {
- // ok, just not on JDK 1.5
- } catch ( IllegalAccessException e ) {
- LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" );
- } catch ( InvocationTargetException e ) {
- LOG.warn( "Unexpected error obtaining environment - using JDK 1.4 method" );
- }
- }
-
- if(procEnvironment == null) {
- procEnvironment = new Environment();
- BufferedReader in = runProcEnvCommand();
-
- String var = null;
- String line;
- while ((line = in.readLine()) != null) {
- if (line.indexOf('=') == -1) {
- // Chunk part of previous env var (UNIX env vars can
- // contain embedded new lines).
- if (var == null) {
- var = LINE_SEPARATOR + line;
- } else {
- var += LINE_SEPARATOR + line;
- }
- } else {
- // New env var...append the previous one if we have it.
- if (var != null) {
- procEnvironment.addVariable(EnvironmentVariable
- .createEnvironmentVariable(var));
- }
- var = line;
- }
- }
- // Since we "look ahead" before adding, there's one last env var.
- if (var != null) {
- procEnvironment.addVariable(EnvironmentVariable
- .createEnvironmentVariable(var));
- }
- }
- return procEnvironment;
+ public static synchronized Map getProcEnvironment() throws IOException {
+ return procEnvironment.getProcEnvironment();
}
- /**
- * @return
- * @throws IOException
- */
- protected static BufferedReader runProcEnvCommand() throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- Execute exe = new Execute(new PumpStreamHandler(out));
- exe.setCommandline(getProcEnvCommand());
- // Make sure we do not recurse forever
- exe.setNewEnvironment(true);
- int retval = exe.execute();
- if (retval != 0) {
- // Just try to use what we got
- }
- return new BufferedReader(new StringReader(toString(out)));
- }
-
- protected static CommandLine getProcEnvCommand() {
- CommandLine commandLine = new CommandLineImpl();
- if (OS.isFamilyOS2()) {
- // OS/2 - use same mechanism as Windows 2000
- commandLine.setExecutable("cmd");
- commandLine.addArguments(new String[] {"/c", "set"});
- } else if (OS.isFamilyWindows()) {
- // Determine if we're running under XP/2000/NT or 98/95
- if (OS.isFamilyWin9x()) {
- commandLine.setExecutable("command.com");
- // Windows 98/95
- } else {
- commandLine.setExecutable("cmd");
- // Windows XP/2000/NT/2003
- }
- commandLine.addArguments(new String[] {"/c", "set"});
- } else if (OS.isFamilyZOS() || OS.isFamilyUnix()) {
- // On most systems one could use: /bin/sh -c env
-
- // Some systems have /bin/env, others /usr/bin/env, just try
- if (new File("/bin/env").canRead()) {
- commandLine.setExecutable("/bin/env");
- } else if (new File("/usr/bin/env").canRead()) {
- commandLine.setExecutable("/usr/bin/env");
- } else {
- // rely on PATH
- commandLine.setExecutable("env");
- }
- } else if (OS.isFamilyNetware() || OS.isFamilyOS400()) {
- // rely on PATH
- commandLine.setExecutable("env");
- } else {
- // MAC OS 9 and previous
- // TODO: I have no idea how to get it, someone must fix it
- commandLine = null;
- }
- return commandLine;
- }
-
- /**
- * ByteArrayOutputStream#toString doesn't seem to work reliably on OS/390,
- * at least not the way we use it in the execution context.
- *
- * @param bos
- * the output stream that one wants to read
- * @return the output stream as a string, read with special encodings in the
- * case of z/os and os/400
- */
- private static String toString(final ByteArrayOutputStream bos) {
- if (OS.isFamilyZOS()) {
- try {
- return bos.toString("Cp1047");
- } catch (java.io.UnsupportedEncodingException e) {
- // noop default encoding used
- }
- } else if (OS.isFamilyOS400()) {
- try {
- return bos.toString("Cp500");
- } catch (java.io.UnsupportedEncodingException e) {
- // noop default encoding used
- }
- }
- return bos.toString();
- }
-
- // ----------------------------------------------------------------------
- // Object Overrides
- // ----------------------------------------------------------------------
-
- public Object clone() {
- Environment copy = null;
-
- try {
- copy = (Environment) super.clone();
- } catch (CloneNotSupportedException e) {
- // this won't happen, the super class is Object
- }
-
- copy.environment = new HashMap( this.environment );
-
- return copy;
- }
+ public static void addVariableToEnvironment(Map environment, String keyAndValue) {
+ String[] parsedVarible = parseEnvironmentVariable(keyAndValue);
+
+ environment.put(parsedVarible[0], parsedVarible[1]);
+ }
}
Added: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java?rev=373258&view=auto
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java (added)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/environment/OpenVmsProcessingEnvironment.java Sat Jan 28 15:15:24 2006
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.commons.exec.environment;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.CommandLineImpl;
+
+public class OpenVmsProcessingEnvironment extends DefaultProcessingEnvironment {
+
+ public synchronized Map getProcEnvironment() throws IOException {
+ if (procEnvironment == null) {
+ procEnvironment = new HashMap();
+
+ BufferedReader in = runProcEnvCommand();
+
+ procEnvironment = addVMSLogicals(procEnvironment, in);
+ return procEnvironment;
+ }
+
+ return procEnvironment;
+ }
+
+ protected CommandLine getProcEnvCommand() {
+ CommandLine commandLine = new CommandLineImpl();
+ commandLine.setExecutable("show");
+ commandLine.addArgument("logical");
+ return commandLine;
+ }
+
+ /**
+ * This method is VMS specific and used by getProcEnvironment(). Parses VMS
+ * logicals from <code>in</code> and adds them to <code>environment</code>.
+ * <code>in</code> is expected to be the output of "SHOW LOGICAL". The
+ * method takes care of parsing the output correctly as well as making sure
+ * that a logical defined in multiple tables only gets added from the
+ * highest order table. Logicals with multiple equivalence names are mapped
+ * to a variable with multiple values separated by a comma (,).
+ */
+ private Map addVMSLogicals(final Map environment,
+ final BufferedReader in) throws IOException {
+ HashMap logicals = new HashMap();
+ String logName = null, logValue = null, newLogName;
+ String line = null;
+ while ((line = in.readLine()) != null) {
+ // parse the VMS logicals into required format ("VAR=VAL[,VAL2]")
+ if (line.startsWith("\t=")) {
+ // further equivalence name of previous logical
+ if (logName != null) {
+ logValue += "," + line.substring(4, line.length() - 1);
+ }
+ } else if (line.startsWith(" \"")) {
+ // new logical?
+ if (logName != null) {
+ logicals.put(logName, logValue);
+ }
+ int eqIndex = line.indexOf('=');
+ newLogName = line.substring(3, eqIndex - 2);
+ if (logicals.containsKey(newLogName)) {
+ // already got this logical from a higher order table
+ logName = null;
+ } else {
+ logName = newLogName;
+ logValue = line.substring(eqIndex + 3, line.length() - 1);
+ }
+ }
+ }
+ // Since we "look ahead" before adding, there's one last env var.
+ if (logName != null) {
+ logicals.put(logName, logValue);
+ }
+
+ for (Iterator i = logicals.keySet().iterator(); i.hasNext();) {
+ String logical = (String) i.next();
+ environment.put(logical, logicals.get(logical));
+ }
+ return environment;
+ }
+
+}
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncher.java Sat Jan 28 15:15:24 2006
@@ -19,9 +19,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.environment.Environment;
+import org.apache.commons.exec.environment.EnvironmentUtil;
public interface CommandLauncher {
@@ -36,7 +37,7 @@
* @throws IOException
* if attempting to run a command in a specific directory
*/
- Process exec(final CommandLine cmd, final Environment env)
+ Process exec(final CommandLine cmd, final Map env)
throws IOException;
/**
@@ -54,6 +55,6 @@
* @throws IOException
* if trying to change directory
*/
- Process exec(final CommandLine cmd, final Environment env,
+ Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException;
}
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherImpl.java Sat Jan 28 15:15:24 2006
@@ -19,9 +19,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.environment.Environment;
+import org.apache.commons.exec.environment.EnvironmentUtil;
/**
* A command launcher for a particular JVM/OS platform. This class is a general
@@ -30,17 +31,17 @@
*/
public abstract class CommandLauncherImpl implements CommandLauncher {
- public Process exec(final CommandLine cmd, final Environment env)
+ public Process exec(final CommandLine cmd, final Map env)
throws IOException {
String[] envVar = null;
if(env != null) {
- envVar = env.getVariables();
+ envVar = EnvironmentUtil.toStrings(env);
}
return Runtime.getRuntime().exec(cmd.getCommandline(),
envVar);
}
- public abstract Process exec(final CommandLine cmd, final Environment env,
+ public abstract Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException;
}
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/CommandLauncherProxy.java Sat Jan 28 15:15:24 2006
@@ -18,9 +18,9 @@
package org.apache.commons.exec.launcher;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.environment.Environment;
/**
* A command launcher that proxies another command launcher. Sub-classes
@@ -45,7 +45,7 @@
* @throws IOException
* forwarded from the exec method of the command launcher
*/
- public Process exec(final CommandLine cmd, final Environment env)
+ public Process exec(final CommandLine cmd, final Map env)
throws IOException {
return myLauncher.exec(cmd, env);
}
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/Java13CommandLauncher.java Sat Jan 28 15:15:24 2006
@@ -19,9 +19,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
-import org.apache.commons.exec.environment.Environment;
+import org.apache.commons.exec.environment.EnvironmentUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,13 +49,13 @@
* @throws IOException
* probably forwarded from Runtime#exec
*/
- public Process exec(final CommandLine cmd, final Environment env,
+ public Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException {
log.debug("Execute:Java13CommandLauncher: " + cmd);
String[] envVars = null;
if(env != null) {
- envVars = env.getVariables();
+ envVars = EnvironmentUtil.toStrings(env);
}
return Runtime.getRuntime().exec(cmd.getCommandline(),
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/OS2CommandLauncher.java Sat Jan 28 15:15:24 2006
@@ -19,10 +19,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.CommandLineImpl;
-import org.apache.commons.exec.environment.Environment;
/**
* A command launcher for OS/2 that uses 'cmd.exe' when launching commands in
@@ -51,7 +51,7 @@
* @throws IOException
* forwarded from the exec method of the command launcher
*/
- public Process exec(final CommandLine cmd, final Environment env,
+ public Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException {
if (workingDir == null) {
return exec(cmd, env);
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/VmsCommandLauncher.java Sat Jan 28 15:15:24 2006
@@ -22,12 +22,12 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.CommandLineImpl;
-import org.apache.commons.exec.environment.Environment;
/**
* A command launcher for VMS that writes the command to a temporary DCL script
@@ -39,7 +39,7 @@
/**
* Launches the given command in a new process.
*/
- public Process exec(final CommandLine cmd, final Environment env)
+ public Process exec(final CommandLine cmd, final Map env)
throws IOException {
CommandLine vmsCmd = new CommandLineImpl();
vmsCmd.setExecutable(createCommandFile(cmd, env).getPath());
@@ -53,7 +53,7 @@
* only works if <code>workingDir</code> is null or the logical
* JAVA$FORK_SUPPORT_CHDIR needs to be set to TRUE.
*/
- public Process exec(final CommandLine cmd, final Environment env,
+ public Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException {
CommandLine vmsCmd = new CommandLineImpl();
vmsCmd.setExecutable(createCommandFile(cmd, env).getPath());
@@ -65,7 +65,7 @@
* Writes the command into a temporary DCL script and returns the
* corresponding File object. The script will be deleted on exit.
*/
- private File createCommandFile(final CommandLine cmd, final Environment env)
+ private File createCommandFile(final CommandLine cmd, final Map env)
throws IOException {
File script = File.createTempFile("ANT", ".COM");
script.deleteOnExit();
Modified: jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/main/java/org/apache/commons/exec/launcher/WinNTCommandLauncher.java Sat Jan 28 15:15:24 2006
@@ -19,10 +19,10 @@
import java.io.File;
import java.io.IOException;
+import java.util.Map;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.CommandLineImpl;
-import org.apache.commons.exec.environment.Environment;
/**
* A command launcher for Windows XP/2000/NT that uses 'cmd.exe' when launching
@@ -46,7 +46,7 @@
* @throws IOException
* forwarded from the exec method of the command launcher
*/
- public Process exec(final CommandLine cmd, final Environment env,
+ public Process exec(final CommandLine cmd, final Map env,
final File workingDir) throws IOException {
if (workingDir == null) {
return exec(cmd, env);
Modified: jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/ExecTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/ExecTest.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/ExecTest.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/ExecTest.java Sat Jan 28 15:15:24 2006
@@ -18,11 +18,11 @@
package org.apache.commons.exec;
import java.io.ByteArrayOutputStream;
+import java.util.HashMap;
+import java.util.Map;
import junit.framework.TestCase;
-import org.apache.commons.exec.environment.Environment;
-
public class ExecTest extends TestCase {
private String testDir = "src/test/scripts";
@@ -56,8 +56,8 @@
}
public void testExecuteWithEnv() throws Exception {
- Environment env = Environment.createEnvironment();
- env.addVariable("TEST_ENV_VAR", "XYZ");
+ Map env = new HashMap();
+ env.put("TEST_ENV_VAR", "XYZ");
CommandLine cl = new CommandLineImpl();
cl.setExecutable(testScript);
Modified: jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtil.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtil.java?rev=373258&r1=373257&r2=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtil.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtil.java Sat Jan 28 15:15:24 2006
@@ -17,7 +17,10 @@
package org.apache.commons.exec;
+import java.util.Arrays;
+
import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
public final class TestUtil {
@@ -32,5 +35,30 @@
} else {
throw new AssertionFailedError("Test not supported for this OS");
}
+ }
+
+
+ public static void assertEquals(Object[] expected, Object[] actual, boolean orderSignificant) {
+
+ if(expected == null && actual == null) {
+ // all good
+ } else if (actual == null) {
+ throw new AssertionFailedError("Expected non null array");
+ } else if (expected == null) {
+ throw new AssertionFailedError("Expected null array");
+ } else {
+ if(expected.length != actual.length) {
+ throw new AssertionFailedError("Arrays not of same length");
+ }
+
+ if(!orderSignificant) {
+ Arrays.sort(expected);
+ Arrays.sort(actual);
+ }
+
+ for (int i = 0; i < actual.length; i++) {
+ TestCase.assertEquals("Array element at " + i, expected[i], actual[i]);
+ }
+ }
}
}
Added: jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java?rev=373258&view=auto
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java (added)
+++ jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java Sat Jan 28 15:15:24 2006
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.commons.exec;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+public class TestUtilTest extends TestCase {
+
+ public void testAssertArrayEquals() {
+ String[] expected = new String[]{"aaa", "bbb", "ccc"};
+ String[] actual = new String[]{"aaa", "bbb", "ccc"};
+
+ TestUtil.assertEquals(expected, actual, true);
+ }
+
+ public void testAssertArrayNotEquals() {
+ String[] expected = new String[]{"aaa", "bbb", "ccc"};
+ String[] actual = new String[]{"aaa", "ddd", "ccc"};
+
+ try{
+ TestUtil.assertEquals(expected, actual, true);
+ fail("Must throw AssertionFailedError");
+ } catch(AssertionFailedError e) {
+ // OK
+ }
+ }
+
+ public void testAssertArrayNotOrderEquals() {
+ String[] expected = new String[]{"aaa", "ccc", "bbb"};
+ String[] actual = new String[]{"aaa", "ddd", "ccc"};
+
+ try{
+ TestUtil.assertEquals(expected, actual, true);
+ fail("Must throw AssertionFailedError");
+ } catch(AssertionFailedError e) {
+ // OK
+ }
+ }
+
+ public void testAssertArrayEqualsOrderNotSignificant() {
+ String[] expected = new String[]{"aaa", "ccc", "bbb"};
+ String[] actual = new String[]{"aaa", "bbb", "ccc"};
+
+ TestUtil.assertEquals(expected, actual, false);
+ }
+
+ public void testAssertArrayEqualsNullNull() {
+ String[] expected = null;
+ String[] actual = null;
+
+ TestUtil.assertEquals(expected, actual, false);
+ }
+
+ public void testAssertArrayEqualsActualNull() {
+ String[] expected = new String[]{"aaa", "ccc", "bbb"};
+ String[] actual = null;
+
+ try{
+ TestUtil.assertEquals(expected, actual, true);
+ fail("Must throw AssertionFailedError");
+ } catch(AssertionFailedError e) {
+ // OK
+ }
+ }
+
+ public void testAssertArrayEqualsExpectedNull() {
+ String[] expected = null;
+ String[] actual = new String[]{"aaa", "ddd", "ccc"};
+
+ try{
+ TestUtil.assertEquals(expected, actual, true);
+ fail("Must throw AssertionFailedError");
+ } catch(AssertionFailedError e) {
+ // OK
+ }
+ }
+}
Propchange: jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/TestUtilTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java (from r356574, jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentTest.java)
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java?p2=jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java&p1=jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentTest.java&r1=356574&r2=373258&rev=373258&view=diff
==============================================================================
--- jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentTest.java (original)
+++ jakarta/commons/sandbox/exec/trunk/src/test/java/org/apache/commons/exec/environment/EnvironmentUtilTest.java Sat Jan 28 15:15:24 2006
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 The Apache Software Foundation
+ * Copyright 2006 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,58 +18,28 @@
package org.apache.commons.exec.environment;
import java.io.IOException;
-import java.util.Iterator;
+import java.util.HashMap;
+import java.util.Map;
import junit.framework.TestCase;
-public class EnvironmentTest extends TestCase {
+import org.apache.commons.exec.TestUtil;
- private Environment getPrePopulatedEnvironment() {
- Environment env = Environment.createEnvironment();
- env.addVariable("foo", "bar");
- env.addVariable("xxx", "yyy");
- env.addVariable("abc", "def");
+public class EnvironmentUtilTest extends TestCase {
- return env;
- }
-
- public void testAddAndGet() {
- Environment env = Environment.createEnvironment();
- env.addVariable("foo", "bar");
- assertEquals(EnvironmentVariable
- .createEnvironmentVariable("foo", "bar"), env.get("foo"));
- }
-
- public void testSizeAndClear() {
- Environment env = getPrePopulatedEnvironment();
-
- assertEquals(3, env.size());
- env.clear();
- assertEquals(0, env.size());
- }
+ public void testToStrings() throws IOException {
+ Map env = new HashMap();
+
+ env.put("foo2", "bar2");
+ env.put("foo", "bar");
- public void testContainsKey() {
- Environment env = getPrePopulatedEnvironment();
+ String[] envStrings = EnvironmentUtil.toStrings(env);
- assertTrue(env.containsKey("foo"));
- assertFalse(env.containsKey("dummy"));
+ String[] expected = new String[]{"foo=bar", "foo2=bar2"};
+
+
+ TestUtil.assertEquals(expected, envStrings, false);
}
+
- public void testContainsValue() {
- Environment env = getPrePopulatedEnvironment();
-
- assertTrue(env.containsValue(EnvironmentVariable
- .createEnvironmentVariable("foo", "bar")));
- assertFalse(env.containsValue(EnvironmentVariable
- .createEnvironmentVariable("dum", "my")));
- }
-
- public void testGetEnvironment() throws IOException {
- Environment env = Environment.getProcEnvironment();
-
- for (Iterator iter = env.keySet().iterator(); iter.hasNext();) {
- String key = (String) iter.next();
- System.out.println(env.get(key));
- }
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org