mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[223695] - updated to add more cases
This commit is contained in:
parent
e7b542359a
commit
37ec649c07
2 changed files with 63 additions and 45 deletions
|
@ -9,17 +9,22 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
public static Test suite() {
|
public static Test suite() {
|
||||||
return new TestSuite(CommandLineUtilTest.class);
|
return new TestSuite(CommandLineUtilTest.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String[] parse(String line) {
|
||||||
|
return CommandLineUtil.argumentsToArray(line);
|
||||||
|
}
|
||||||
|
|
||||||
public void testArgumentsToArraySimple() {
|
public void testArgumentsToArraySimple() {
|
||||||
// [A=B C]
|
String[] args = parse("A=B C");
|
||||||
String[] args = CommandLineUtil.argumentsToArray("A=B C");
|
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("A=B", args[0]);
|
assertEquals("A=B", args[0]);
|
||||||
assertEquals("C", args[1]);
|
assertEquals("C", args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void testArgumentsToArraySpaces() {
|
public void testArgumentsToArraySpaces() {
|
||||||
// [A=B C]
|
// [A=B C]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("A=B C");
|
String[] args = parse("A=B C");
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("A=B", args[0]);
|
assertEquals("A=B", args[0]);
|
||||||
assertEquals("C", args[1]);
|
assertEquals("C", args[1]);
|
||||||
|
@ -27,7 +32,7 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
|
|
||||||
public void testArgumentsToArraySpaces2() {
|
public void testArgumentsToArraySpaces2() {
|
||||||
// [ A=B C ]
|
// [ A=B C ]
|
||||||
String[] args = CommandLineUtil.argumentsToArray(" A=B C ");
|
String[] args = parse(" A=B C ");
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("A=B", args[0]);
|
assertEquals("A=B", args[0]);
|
||||||
assertEquals("C", args[1]);
|
assertEquals("C", args[1]);
|
||||||
|
@ -35,56 +40,56 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
|
|
||||||
public void testArgumentsToArrayDoubleQuotes() {
|
public void testArgumentsToArrayDoubleQuotes() {
|
||||||
// [Arg="a b c"]
|
// [Arg="a b c"]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("Arg=\"a b c\"");
|
String[] args = parse("Arg=\"a b c\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("Arg=a b c", args[0]);
|
assertEquals("Arg=a b c", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayDoubleQuotes2() {
|
public void testArgumentsToArrayDoubleQuotes2() {
|
||||||
// [Arg="\"quoted\""]
|
// [Arg="\"quoted\""]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("Arg=\"\\\"quoted\\\"\"");
|
String[] args = parse("Arg=\"\\\"quoted\\\"\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("Arg=\"quoted\"", args[0]);
|
assertEquals("Arg=\"quoted\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArraySingleQuotes() {
|
public void testArgumentsToArraySingleQuotes() {
|
||||||
// [Arg='"quoted"']
|
// [Arg='"quoted"']
|
||||||
String[] args = CommandLineUtil.argumentsToArray("Arg='\"quoted\"'");
|
String[] args = parse("Arg='\"quoted\"'");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("Arg=\"quoted\"", args[0]);
|
assertEquals("Arg=\"quoted\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayQuote() {
|
public void testArgumentsToArrayQuote() {
|
||||||
// [\"]
|
// [\"]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("\\\"");
|
String[] args = parse("\\\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("\"", args[0]);
|
assertEquals("\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayQuotSpaces() {
|
public void testArgumentsToArrayQuotSpaces() {
|
||||||
// [ \"]
|
// [ \"]
|
||||||
String[] args = CommandLineUtil.argumentsToArray(" \\\"");
|
String[] args = parse(" \\\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("\"", args[0]);
|
assertEquals("\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayOnlySpaces() {
|
public void testArgumentsToArrayOnlySpaces() {
|
||||||
// [" "]
|
// [" "]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("\" \"");
|
String[] args = parse("\" \"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals(" ", args[0]);
|
assertEquals(" ", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayJumbledString() {
|
public void testArgumentsToArrayJumbledString() {
|
||||||
// ["a b"-c]
|
// ["a b"-c]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("\"a b\"-c");
|
String[] args = parse("\"a b\"-c");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("a b-c", args[0]);
|
assertEquals("a b-c", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayJumbledString2() {
|
public void testArgumentsToArrayJumbledString2() {
|
||||||
// [x "a b"-c]
|
// [x "a b"-c]
|
||||||
String[] args = CommandLineUtil.argumentsToArray(" x \"a b\"-c");
|
String[] args = parse(" x \"a b\"-c");
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("x", args[0]);
|
assertEquals("x", args[0]);
|
||||||
assertEquals("a b-c", args[1]);
|
assertEquals("a b-c", args[1]);
|
||||||
|
@ -92,7 +97,7 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
|
|
||||||
public void testArgumentsToArrayJumbledSQ() {
|
public void testArgumentsToArrayJumbledSQ() {
|
||||||
// [x' 'x y]
|
// [x' 'x y]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("x' 'x y");
|
String[] args = parse("x' 'x y");
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("x x", args[0]);
|
assertEquals("x x", args[0]);
|
||||||
assertEquals("y", args[1]);
|
assertEquals("y", args[1]);
|
||||||
|
@ -100,21 +105,21 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
|
|
||||||
public void testArgumentsToArrayEmptyString() {
|
public void testArgumentsToArrayEmptyString() {
|
||||||
// [""]
|
// [""]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("\"\"");
|
String[] args = parse("\"\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("", args[0]);
|
assertEquals("", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayEmptyString2() {
|
public void testArgumentsToArrayEmptyString2() {
|
||||||
// ['']
|
// ['']
|
||||||
String[] args = CommandLineUtil.argumentsToArray("''");
|
String[] args = parse("''");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("", args[0]);
|
assertEquals("", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayEmpty3() {
|
public void testArgumentsToArrayEmpty3() {
|
||||||
// ['' a]
|
// ['' a]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("'' a");
|
String[] args = parse("'' a");
|
||||||
assertEquals(2, args.length);
|
assertEquals(2, args.length);
|
||||||
assertEquals("", args[0]);
|
assertEquals("", args[0]);
|
||||||
assertEquals("a", args[1]);
|
assertEquals("a", args[1]);
|
||||||
|
@ -122,31 +127,43 @@ public class CommandLineUtilTest extends TestCase {
|
||||||
|
|
||||||
public void testArgumentsToArrayQuot1() {
|
public void testArgumentsToArrayQuot1() {
|
||||||
// ['"']
|
// ['"']
|
||||||
String[] args = CommandLineUtil.argumentsToArray("'\"'");
|
String[] args = parse("'\"'");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("\"", args[0]);
|
assertEquals("\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayQuot2() {
|
public void testArgumentsToArrayQuot2() {
|
||||||
// ["\""]
|
// ["\""]
|
||||||
String[] args = CommandLineUtil.argumentsToArray("\"\\\"\"");
|
String[] args = parse("\"\\\"\"");
|
||||||
assertEquals(1, args.length);
|
assertEquals(1, args.length);
|
||||||
assertEquals("\"", args[0]);
|
assertEquals("\"", args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testArgumentsToArrayNull() {
|
public void testArgumentsToArrayNull() {
|
||||||
// []
|
// []
|
||||||
String[] args = CommandLineUtil.argumentsToArray(null);
|
String[] args = parse(null);
|
||||||
assertEquals(0, args.length);
|
assertEquals(0, args.length);
|
||||||
}
|
}
|
||||||
public void testArgumentsToArrayEmpty() {
|
public void testArgumentsToArrayEmpty() {
|
||||||
// []
|
// []
|
||||||
String[] args = CommandLineUtil.argumentsToArray("");
|
String[] args = parse("");
|
||||||
assertEquals(0, args.length);
|
assertEquals(0, args.length);
|
||||||
}
|
}
|
||||||
public void testArgumentsToArrayEmptySpaces() {
|
public void testArgumentsToArrayEmptySpaces() {
|
||||||
// [ ]
|
// [ ]
|
||||||
String[] args = CommandLineUtil.argumentsToArray(" ");
|
String[] args = parse(" ");
|
||||||
assertEquals(0, args.length);
|
assertEquals(0, args.length);
|
||||||
}
|
}
|
||||||
|
public void testArgumentsToArrayTabs() {
|
||||||
|
// [a b]
|
||||||
|
String[] args = parse("a \tb");
|
||||||
|
assertEquals(2, args.length);
|
||||||
|
assertEquals("a", args[0]);
|
||||||
|
}
|
||||||
|
public void testArgumentsToArrayNL() {
|
||||||
|
// ["a\nb"]
|
||||||
|
String[] args = parse("\"a\\nb\"");
|
||||||
|
assertEquals(1, args.length);
|
||||||
|
assertEquals("a\nb", args[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,32 +39,34 @@ public class CommandLineUtil {
|
||||||
int state = INITIAL;
|
int state = INITIAL;
|
||||||
for (int i = 0; i < array.length; i++) {
|
for (int i = 0; i < array.length; i++) {
|
||||||
char c = array[i];
|
char c = array[i];
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case IN_ARG:
|
case IN_ARG:
|
||||||
// fall through
|
// fall through
|
||||||
case INITIAL:
|
case INITIAL:
|
||||||
switch (c) {
|
if (Character.isWhitespace(c)) {
|
||||||
case ' ':
|
if (state == INITIAL) break; // ignore extra spaces
|
||||||
if (state == INITIAL) break; // ignore extra spaces
|
// add argument
|
||||||
// add argument
|
state = INITIAL;
|
||||||
state = INITIAL;
|
String arg = buffer.toString();
|
||||||
String arg = buffer.toString();
|
buffer = new StringBuilder();
|
||||||
buffer = new StringBuilder();
|
aList.add(arg);
|
||||||
aList.add(arg);
|
} else {
|
||||||
break;
|
switch (c) {
|
||||||
case '\\':
|
case '\\':
|
||||||
state = ESCAPED;
|
state = ESCAPED;
|
||||||
break;
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
state = IN_SINGLE_QUOTES;
|
state = IN_SINGLE_QUOTES;
|
||||||
break;
|
break;
|
||||||
case '\"':
|
case '\"':
|
||||||
state = IN_DOUBLE_QUOTES;
|
state = IN_DOUBLE_QUOTES;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
state = IN_ARG;
|
state = IN_ARG;
|
||||||
buffer.append(c);
|
buffer.append(c);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IN_DOUBLE_QUOTES:
|
case IN_DOUBLE_QUOTES:
|
||||||
|
@ -97,7 +99,7 @@ public class CommandLineUtil {
|
||||||
buffer.append(c);
|
buffer.append(c);
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
buffer.append('\n');
|
buffer.append("\n"); //$NON-NLS-1$
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
buffer.append('\\');
|
buffer.append('\\');
|
||||||
|
@ -118,5 +120,4 @@ public class CommandLineUtil {
|
||||||
}
|
}
|
||||||
return aList.toArray(new String[aList.size()]);
|
return aList.toArray(new String[aList.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue