/*
* Copyright 2012-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.cli;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import com.facebook.buck.step.AdbOptions;
import com.facebook.buck.step.TargetDeviceOptions;
import com.facebook.buck.testutil.integration.TemporaryPaths;
import com.google.common.base.Joiner;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import org.junit.Rule;
import org.junit.Test;
import org.kohsuke.args4j.CmdLineException;
public class InstallCommandOptionsTest {
@Rule public TemporaryPaths temporaryFolder = new TemporaryPaths();
private InstallCommand getCommand(String... args) throws CmdLineException {
InstallCommand command = new InstallCommand();
new AdditionalOptionsCmdLineParser(command).parseArgument(args);
return command;
}
private AdbOptions getAdbOptions(boolean multiInstallModeConfig, String... args)
throws CmdLineException, InterruptedException, IOException {
Reader reader =
new StringReader(
Joiner.on('\n').join("[adb]", "multi_install_mode = " + multiInstallModeConfig));
BuckConfig config = BuckConfigTestUtils.createWithDefaultFilesystem(temporaryFolder, reader);
return getCommand(args).adbOptions(config);
}
private TargetDeviceOptions getTargetDeviceOptions(String... args) throws CmdLineException {
return getCommand(args).targetDeviceOptions();
}
@Test
public void testInstallCommandOptionsRun() throws CmdLineException {
InstallCommand command =
getCommand(
InstallCommand.RUN_SHORT_ARG, "katana",
VerbosityParser.VERBOSE_SHORT_ARG, "10");
assertTrue(command.shouldStartActivity());
assertNull(command.getActivityToStart());
}
@Test
public void testInstallCommandOptionsRunAndActivity() throws CmdLineException {
InstallCommand command =
getCommand(
InstallCommand.RUN_SHORT_ARG,
VerbosityParser.VERBOSE_SHORT_ARG,
"10",
"wakizashi",
InstallCommand.ACTIVITY_SHORT_ARG,
"com.facebook.katana.LoginActivity");
assertTrue(command.shouldStartActivity());
assertEquals("com.facebook.katana.LoginActivity", command.getActivityToStart());
}
@Test
public void testInstallCommandOptionsActivity() throws CmdLineException {
InstallCommand command =
getCommand("katana", InstallCommand.ACTIVITY_SHORT_ARG, ".LoginActivity");
assertTrue(command.shouldStartActivity());
assertEquals(".LoginActivity", command.getActivityToStart());
}
@Test
public void testInstallCommandOptionsNone() throws CmdLineException {
InstallCommand command = getCommand(VerbosityParser.VERBOSE_SHORT_ARG, "10", "katana");
assertFalse(command.shouldStartActivity());
assertNull(command.getActivityToStart());
}
@Test
public void testInstallCommandOptionsEmulatorMode() throws CmdLineException {
// Short form.
TargetDeviceOptions options =
getTargetDeviceOptions(TargetDeviceCommandLineOptions.EMULATOR_MODE_SHORT_ARG);
assertTrue(options.isEmulatorsOnlyModeEnabled());
// Long form.
options = getTargetDeviceOptions(TargetDeviceCommandLineOptions.EMULATOR_MODE_LONG_ARG);
assertTrue(options.isEmulatorsOnlyModeEnabled());
// Is off by default.
options = getTargetDeviceOptions();
assertFalse(options.isEmulatorsOnlyModeEnabled());
}
@Test
public void testInstallCommandOptionsDeviceMode() throws CmdLineException {
// Short form.
TargetDeviceOptions options =
getTargetDeviceOptions(TargetDeviceCommandLineOptions.DEVICE_MODE_SHORT_ARG);
assertTrue(options.isRealDevicesOnlyModeEnabled());
// Long form.
options = getTargetDeviceOptions(TargetDeviceCommandLineOptions.DEVICE_MODE_LONG_ARG);
assertTrue(options.isRealDevicesOnlyModeEnabled());
// Is off by default.
options = getTargetDeviceOptions();
assertFalse(options.isRealDevicesOnlyModeEnabled());
}
@Test
public void testInstallCommandOptionsSerial() throws CmdLineException {
String serial = "some-random-serial-number";
// Short form.
TargetDeviceOptions options =
getTargetDeviceOptions(TargetDeviceCommandLineOptions.SERIAL_NUMBER_SHORT_ARG, serial);
assertTrue(options.getSerialNumber().isPresent());
assertEquals(serial, options.getSerialNumber().get());
// Long form.
options = getTargetDeviceOptions(TargetDeviceCommandLineOptions.SERIAL_NUMBER_LONG_ARG, serial);
assertTrue(options.getSerialNumber().isPresent());
assertEquals(serial, options.getSerialNumber().get());
// Is off by default.
options = getTargetDeviceOptions();
assertFalse(options.getSerialNumber().isPresent());
}
@Test
public void testInstallCommandOptionsMultiInstallMode()
throws CmdLineException, InterruptedException, IOException {
// Short form.
AdbOptions options = getAdbOptions(false, AdbCommandLineOptions.MULTI_INSTALL_MODE_SHORT_ARG);
assertTrue(options.isMultiInstallModeEnabled());
// Long form.
options = getAdbOptions(false, AdbCommandLineOptions.MULTI_INSTALL_MODE_LONG_ARG);
assertTrue(options.isMultiInstallModeEnabled());
// Is off by default.
options = getAdbOptions(false);
assertFalse(options.isMultiInstallModeEnabled());
}
@Test
public void testInstallCommandOptionsAdbThreads()
throws CmdLineException, InterruptedException, IOException {
// Short form.
AdbOptions options = getAdbOptions(false, AdbCommandLineOptions.ADB_THREADS_SHORT_ARG, "4");
assertEquals(4, options.getAdbThreadCount());
// Long form.
options = getAdbOptions(false, AdbCommandLineOptions.ADB_THREADS_LONG_ARG, "4");
assertEquals(4, options.getAdbThreadCount());
// Is zero by default and overridden when creating the thread pool.
options = getAdbOptions(false);
assertEquals(0, options.getAdbThreadCount());
}
@Test
public void testMultiInstallModeFromBuckConfig()
throws CmdLineException, InterruptedException, IOException {
AdbOptions options = getAdbOptions(true);
assertTrue(options.isMultiInstallModeEnabled());
options = getAdbOptions(true, AdbCommandLineOptions.MULTI_INSTALL_MODE_SHORT_ARG);
assertTrue(options.isMultiInstallModeEnabled());
}
}