blob: 674ab147015be1d068524086972fea6a27329348 [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.content.browser;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import org.chromium.base.CommandLine;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.test.util.Feature;
import org.chromium.content_shell_apk.ContentShellApplication;
/**
* Test class for command lines.
*/
public class ContentCommandLineTest 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 loadJni() {
assertFalse(CommandLine.getInstance().isNativeImplementation());
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
ContentShellApplication.initializeApplicationParameters();
try {
LibraryLoader.ensureInitialized();
} catch (ProcessInitException e) {
throw new Error(e);
}
}
});
assertTrue(CommandLine.getInstance().isNativeImplementation());
}
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 checkAppendedSwitchesPassedThrough() {
CommandLine cl = CommandLine.getInstance();
assertTrue(cl.hasSwitch(CL_ADDED_SWITCH));
assertTrue(cl.hasSwitch(CL_ADDED_SWITCH_2));
assertTrue(CL_ADDED_VALUE_2.equals(cl.getSwitchValue(CL_ADDED_SWITCH_2)));
}
@MediumTest
@Feature({"Android-AppBase"})
public void testJavaNativeTransition() {
CommandLine.init(INIT_SWITCHES);
checkInitSwitches();
loadJni();
checkInitSwitches();
checkSettingThenGetting();
}
@MediumTest
@Feature({"Android-AppBase"})
public void testJavaNativeTransitionAfterAppends() {
CommandLine.init(INIT_SWITCHES);
checkInitSwitches();
checkSettingThenGetting();
loadJni();
checkInitSwitches();
checkAppendedSwitchesPassedThrough();
}
@MediumTest
@Feature({"Android-AppBase"})
public void testNativeInitialization() {
CommandLine.init(null);
loadJni();
// Drop the program name for use with appendSwitchesAndArguments.
String[] args = new String[INIT_SWITCHES.length - 1];
System.arraycopy(INIT_SWITCHES, 1, args, 0, args.length);
CommandLine.getInstance().appendSwitchesAndArguments(args);
checkInitSwitches();
checkSettingThenGetting();
}
@MediumTest
@Feature({"Android-AppBase"})
public void testFileInitialization() {
CommandLine.initFromFile(ContentShellApplication.COMMAND_LINE_FILE);
loadJni();
checkSettingThenGetting();
}
}