1
0
Fork 0
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:
Alena Laskavaia 2008-11-04 18:57:00 +00:00
parent e7b542359a
commit 37ec649c07
2 changed files with 63 additions and 45 deletions

View file

@ -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]);
}
} }

View file

@ -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()]);
} }
} }