blob: 60c84f89130cc869f3ec72f42e9c0d7952c1af08 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.base;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.test.util.Feature;
public class CommandLineTest extends InstrumentationTestCase {
// A reference command line. Note that switch2 is [brea\d], switch3 is [and "butter"],
// and switch4 is [a "quoted" 'food'!]
static final String INIT_SWITCHES[] = { "init_command", "--SWITCH", "Arg",
"--switch2=brea\\d", "--switch3=and \"butter\"",
"--switch4=a \"quoted\" 'food'!",
"--", "--actually_an_arg" };
// The same command line, but in quoted string format.
static final char INIT_SWITCHES_BUFFER[] =
("init_command --SWITCH Arg --switch2=brea\\d --switch3=\"and \\\"butt\"er\\\" "
+ "--switch4='a \"quoted\" \\'food\\'!' "
+ "-- --actually_an_arg").toCharArray();
static final String CL_ADDED_SWITCH = "zappo-dappo-doggy-trainer";
static final String CL_ADDED_SWITCH_2 = "username";
static final String CL_ADDED_VALUE_2 = "bozo";
@Override
public void setUp() throws Exception {
CommandLine.reset();
}
void checkInitSwitches() {
CommandLine cl = CommandLine.getInstance();
assertFalse(cl.hasSwitch("init_command"));
assertFalse(cl.hasSwitch("switch"));
assertTrue(cl.hasSwitch("SWITCH"));
assertFalse(cl.hasSwitch("--SWITCH"));
assertFalse(cl.hasSwitch("Arg"));
assertFalse(cl.hasSwitch("actually_an_arg"));
assertEquals("brea\\d", cl.getSwitchValue("switch2"));
assertEquals("and \"butter\"", cl.getSwitchValue("switch3"));
assertEquals("a \"quoted\" 'food'!", cl.getSwitchValue("switch4"));
assertNull(cl.getSwitchValue("SWITCH"));
assertNull(cl.getSwitchValue("non-existant"));
}
void checkSettingThenGetting() {
CommandLine cl = CommandLine.getInstance();
// Add a plain switch.
assertFalse(cl.hasSwitch(CL_ADDED_SWITCH));
cl.appendSwitch(CL_ADDED_SWITCH);
assertTrue(cl.hasSwitch(CL_ADDED_SWITCH));
// Add a switch paired with a value.
assertFalse(cl.hasSwitch(CL_ADDED_SWITCH_2));
assertNull(cl.getSwitchValue(CL_ADDED_SWITCH_2));
cl.appendSwitchWithValue(CL_ADDED_SWITCH_2, CL_ADDED_VALUE_2);
assertTrue(CL_ADDED_VALUE_2.equals(cl.getSwitchValue(CL_ADDED_SWITCH_2)));
// Append a few new things.
final String switchesAndArgs[] = { "dummy", "--superfast", "--speed=turbo" };
assertFalse(cl.hasSwitch("dummy"));
assertFalse(cl.hasSwitch("superfast"));
assertNull(cl.getSwitchValue("speed"));
cl.appendSwitchesAndArguments(switchesAndArgs);
assertFalse(cl.hasSwitch("dummy"));
assertFalse(cl.hasSwitch("command"));
assertTrue(cl.hasSwitch("superfast"));
assertTrue("turbo".equals(cl.getSwitchValue("speed")));
}
void checkTokenizer(String[] expected, String toParse) {
String[] actual = CommandLine.tokenizeQuotedAruments(toParse.toCharArray());
assertEquals(expected.length, actual.length);
for (int i = 0; i < expected.length; ++i) {
assertEquals("comparing element " + i, expected[i], actual[i]);
}
}
@SmallTest
@Feature({"Android-AppBase"})
public void testJavaInitialization() {
CommandLine.init(INIT_SWITCHES);
checkInitSwitches();
checkSettingThenGetting();
}
@SmallTest
@Feature({"Android-AppBase"})
public void testBufferInitialization() {
CommandLine.init(CommandLine.tokenizeQuotedAruments(INIT_SWITCHES_BUFFER));
checkInitSwitches();
checkSettingThenGetting();
}
@SmallTest
@Feature({"Android-AppBase"})
public void testArgumentTokenizer() {
String toParse = " a\"\\bc de\\\"f g\"\\h ij k\" \"lm";
String[] expected = { "a\\bc de\"f g\\h",
"ij",
"k lm" };
checkTokenizer(expected, toParse);
toParse = "";
expected = new String[0];
checkTokenizer(expected, toParse);
toParse = " \t\n";
checkTokenizer(expected, toParse);
toParse = " \"a'b\" 'c\"d' \"e\\\"f\" 'g\\'h' \"i\\'j\" 'k\\\"l'" +
" m\"n\\'o\"p q'r\\\"s't";
expected = new String[] { "a'b",
"c\"d",
"e\"f",
"g'h",
"i\\'j",
"k\\\"l",
"mn\\'op",
"qr\\\"st",};
checkTokenizer(expected, toParse);
}
}