Author: sgoeschl
Date: Mon Oct 10 21:47:27 2011
New Revision: 1181256

URL: http://svn.apache.org/viewvc?rev=1181256&view=rev
Log:
[EXEC-56] - Applied the patch from Nickolay Martinov to improve CommandLine 
toString() for troubleshooting purposes

Modified:
    
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/CommandLine.java
    
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/CommandLineTest.java

Modified: 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/CommandLine.java
URL: 
http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/CommandLine.java?rev=1181256&r1=1181255&r2=1181256&view=diff
==============================================================================
--- 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/CommandLine.java
 (original)
+++ 
commons/proper/exec/trunk/src/main/java/org/apache/commons/exec/CommandLine.java
 Mon Oct 10 21:47:27 2011
@@ -305,7 +305,7 @@ public class CommandLine {
      * @return the command line as single string
      */
     public String toString() {
-        return StringUtils.toString(toStrings(), " ");
+        return "[" + StringUtils.toString(toStrings(), ", ") + "]";
     }
 
     // --- Implementation ---------------------------------------------------

Modified: 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/CommandLineTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/CommandLineTest.java?rev=1181256&r1=1181255&r2=1181256&view=diff
==============================================================================
--- 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/CommandLineTest.java
 (original)
+++ 
commons/proper/exec/trunk/src/test/java/org/apache/commons/exec/CommandLineTest.java
 Mon Oct 10 21:47:27 2011
@@ -37,7 +37,7 @@ public class CommandLineTest extends Tes
 
     public void testExecutable() {
         CommandLine cmdl = new CommandLine("test");
-        assertEquals("test", cmdl.toString());
+        assertEquals("[test]", cmdl.toString());
         assertEquals(new String[] {"test"}, cmdl.toStrings());
         assertEquals("test", cmdl.getExecutable());
         assertTrue(cmdl.getArguments().length == 0);
@@ -75,7 +75,7 @@ public class CommandLineTest extends Tes
 
         cmdl.addArgument("foo");
         cmdl.addArgument("bar");
-        assertEquals("test foo bar", cmdl.toString());
+        assertEquals("[test, foo, bar]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar"}, cmdl.toStrings());
     }
 
@@ -83,7 +83,7 @@ public class CommandLineTest extends Tes
         CommandLine cmdl = new CommandLine("test");
 
         cmdl.addArgument(null);
-        assertEquals("test", cmdl.toString());
+        assertEquals("[test]", cmdl.toString());
         assertEquals(new String[] {"test"}, cmdl.toStrings());
     }
 
@@ -91,7 +91,7 @@ public class CommandLineTest extends Tes
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArgument("foo");
         cmdl.addArgument("ba r");
-        assertEquals("test foo \"ba r\"", cmdl.toString());
+        assertEquals("[test, foo, \"ba r\"]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "\"ba r\""}, 
cmdl.toStrings());
     }
 
@@ -99,7 +99,7 @@ public class CommandLineTest extends Tes
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArgument("foo");
         cmdl.addArgument("ba\"r");
-        assertEquals("test foo 'ba\"r'", cmdl.toString());
+        assertEquals("[test, foo, 'ba\"r']", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "'ba\"r'"}, 
cmdl.toStrings());
     }
 
@@ -108,7 +108,7 @@ public class CommandLineTest extends Tes
         cmdl.addArgument("\'foo\'");
         cmdl.addArgument("\"bar\"");
         cmdl.addArgument("\"fe z\"");
-        assertEquals("test foo bar \"fe z\"", cmdl.toString());
+        assertEquals("[test, foo, bar, \"fe z\"]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar", "\"fe z\""}, 
cmdl.toStrings());
     }
 
@@ -117,7 +117,7 @@ public class CommandLineTest extends Tes
 
         cmdl.addArgument("foo");
         cmdl.addArgument("ba'r");
-        assertEquals("test foo \"ba'r\"", cmdl.toString());
+        assertEquals("[test, foo, \"ba'r\"]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "\"ba\'r\""}, cmdl
                 .toStrings());
     }
@@ -136,21 +136,21 @@ public class CommandLineTest extends Tes
     public void testAddArguments() {
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArguments("foo bar");
-        assertEquals("test foo bar", cmdl.toString());
+        assertEquals("[test, foo, bar]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar"}, cmdl.toStrings());
     }
 
     public void testAddArgumentsWithQuotes() {
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArguments("'foo' \"bar\"");
-        assertEquals("test foo bar", cmdl.toString());
+        assertEquals("[test, foo, bar]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar"}, cmdl.toStrings());
     }
 
     public void testAddArgumentsWithQuotesAndSpaces() {
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArguments("'fo o' \"ba r\"");
-        assertEquals("test \"fo o\" \"ba r\"", cmdl.toString());
+        assertEquals("[test, \"fo o\", \"ba r\"]", cmdl.toString());
         assertEquals(new String[] {"test", "\"fo o\"", "\"ba r\""}, cmdl
                 .toStrings());
     }
@@ -158,14 +158,14 @@ public class CommandLineTest extends Tes
     public void testAddArgumentsArray() {
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArguments(new String[] {"foo", "bar"});
-        assertEquals("test foo bar", cmdl.toString());
+        assertEquals("[test, foo, bar]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar"}, cmdl.toStrings());
     }
 
     public void testAddArgumentsArrayNull() {
         CommandLine cmdl = new CommandLine("test");
         cmdl.addArguments((String[]) null);
-        assertEquals("test", cmdl.toString());
+        assertEquals("[test]", cmdl.toString());
         assertEquals(new String[] {"test"}, cmdl.toStrings());
     }
 
@@ -190,13 +190,13 @@ public class CommandLineTest extends Tes
 
     public void testParseCommandLine() {
         CommandLine cmdl = CommandLine.parse("test foo bar");
-        assertEquals("test foo bar", cmdl.toString());
+        assertEquals("[test, foo, bar]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "bar"}, cmdl.toStrings());
     }
 
     public void testParseCommandLineWithQuotes() {
         CommandLine cmdl = CommandLine.parse("test \"foo\" \'ba r\'");
-        assertEquals("test foo \"ba r\"", cmdl.toString());
+        assertEquals("[test, foo, \"ba r\"]", cmdl.toString());
         assertEquals(new String[] {"test", "foo", "\"ba r\""}, 
cmdl.toStrings());
     }
 
@@ -238,7 +238,7 @@ public class CommandLineTest extends Tes
         substitutionMap.put("in", "source.jpg");
         substitutionMap.put("out", "target.jpg");
         CommandLine cmdl = CommandLine.parse("cmd /C convert ${in} -resize 
\"\'500x> \'\" ${out}", substitutionMap);
-        assertEquals("cmd /C convert source.jpg -resize \"500x> \" 
target.jpg", cmdl.toString());        
+        assertEquals("[cmd, /C, convert, source.jpg, -resize, \"500x> \", 
target.jpg]", cmdl.toString());
     }
 
     /**
@@ -434,17 +434,37 @@ public class CommandLineTest extends Tes
 
         // use no arguments
         cmdl = CommandLine.parse("AcroRd32.exe", params);
-        assertEquals(cmdl.toString(), "AcroRd32.exe");
+        assertEquals("[AcroRd32.exe]", cmdl.toString());
 
         // use an argument containing spaces
         params.put("file", "C:\\Document And Settings\\documents\\432432.pdf");
         cmdl = CommandLine.parse("AcroRd32.exe /p /h '${file}'", params);
-        assertEquals(cmdl.toString(), "AcroRd32.exe /p /h \"C:\\Document And 
Settings\\documents\\432432.pdf\"");
+        assertEquals("[AcroRd32.exe, /p, /h, \"C:\\Document And 
Settings\\documents\\432432.pdf\"]", cmdl.toString());
 
         // use an argument without spaces
         params.put("file", "C:\\documents\\432432.pdf");
         cmdl = CommandLine.parse("AcroRd32.exe /p /h '${file}'", params);
-        assertEquals(cmdl.toString(), "AcroRd32.exe /p /h 
C:\\documents\\432432.pdf");
+        assertEquals("[AcroRd32.exe, /p, /h, C:\\documents\\432432.pdf]", 
cmdl.toString());
+    }
+
+    /**
+     * Test that toString() produces output that is useful for troubleshooting.
+     *
+     * @throws Exception the test failed
+     */
+    public void testToStringTroubleshooting() throws Exception {
+        System.out.println("testToStringTroubleshooting");
+        // On HP-UX quotes handling leads to errors,
+        // also usage of quotes isn't mandatory on other platforms too
+        // so it probably should work correctly either way.
+        CommandLine cmd1 = new CommandLine("sh").addArgument("-c")
+                .addArgument("echo 1", false);
+        CommandLine cmd2 = new CommandLine("sh").addArgument("-c")
+                .addArgument("echo").addArgument("1");
+        System.out.println("cmd1: " + cmd1.toString());
+        System.out.println("cmd2: " + cmd2.toString());
+        assertTrue("toString() is useful for troubleshooting",
+                !cmd1.toString().equals(cmd2.toString()));
     }
 
     /**


Reply via email to