public static GetSizeCommand fromFlags(ParsedFlags flags) { Path apksArchivePath = APKS_ARCHIVE_FILE_FLAG.getRequiredValue(flags); Optional<Path> deviceSpecPath = DEVICE_SPEC_FLAG.getValue(flags); Optional<ImmutableSet<String>> modules = MODULES_FLAG.getValue(flags); Optional<Boolean> instant = INSTANT_FLAG.getValue(flags); ImmutableSet<Dimension> dimensions = DIMENSIONS_FLAG.getValue(flags).orElse(ImmutableSet.of()); flags.checkNoUnknownFlags(); checkFileExistsAndReadable(apksArchivePath); deviceSpecPath.ifPresent(FilePreconditions::checkFileExistsAndReadable); DeviceSpec deviceSpec = deviceSpecPath .map(DeviceSpecParser::parsePartialDeviceSpec) .orElse(DeviceSpec.getDefaultInstance()); GetSizeCommand.Builder command = builder() .setApksArchivePath(apksArchivePath) .setDeviceSpec(deviceSpec) .setGetSizeSubCommand(parseGetSizeSubCommand(flags)); modules.ifPresent(command::setModules); instant.ifPresent(command::setInstant); if (dimensions.contains(Dimension.ALL)) { dimensions = SUPPORTED_DIMENSIONS; } command.setDimensions(dimensions); return command.build(); }
public static Builder builder() { return new AutoValue_GetSizeCommand.Builder() .setDeviceSpec(DeviceSpec.getDefaultInstance()) .setInstant(false) .setDimensions(ImmutableSet.of()); }
@Test public void testExtractFromDirectoryNoTableOfContents_throws() throws Exception { Files.createFile(tmpDir.resolve("base-master.apk")); Exception e = assertThrows( IllegalArgumentException.class, () -> ExtractApksCommand.builder() .setApksArchivePath(tmpDir) .setDeviceSpec(DeviceSpec.getDefaultInstance()) .build() .execute()); assertThat(e).hasMessageThat().matches("File '.*toc.pb' was not found."); }
new VariantMatcher(DeviceSpec.getDefaultInstance()) .getAllMatchingVariants(buildApksResult)) .isEqualTo(variants);
@Test public void deviceSpecFromTargetingBuilder_setSdkVersion() { assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSdkVersion(SdkVersionTargeting.getDefaultInstance()) .build()) .isEqualToDefaultInstance(); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSdkVersion(sdkVersionTargeting(sdkVersionFrom(25))) .build()) .isEqualTo(sdkVersion(25)); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSdkVersion( sdkVersionTargeting(sdkVersionFrom(21), ImmutableSet.of(sdkVersionFrom(23)))) .build()) .isEqualTo(sdkVersion(21)); }
@Test public void deviceSpecFromTargetingBuilder_setScreenDensity() { assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setScreenDensity(ScreenDensityTargeting.getDefaultInstance()) .build()) .isEqualToDefaultInstance(); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setScreenDensity(screenDensityTargeting(XXHDPI)) .build()) .isEqualTo(density(480)); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setScreenDensity(screenDensityTargeting(LDPI, ImmutableSet.of(MDPI))) .build()) .isEqualTo(density(120)); }
@Test public void deviceSpecFromTargetingBuilder_setSupportedAbis() { assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSupportedAbis(AbiTargeting.getDefaultInstance()) .build()) .isEqualToDefaultInstance(); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSupportedAbis(abiTargeting(ARMEABI)) .build()) .isEqualTo(abis("armeabi")); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSupportedAbis(abiTargeting(ARMEABI_V7A, ImmutableSet.of(X86))) .build()) .isEqualTo(abis("armeabi-v7a")); }
@Test public void builderAndFlagsConstruction_equivalent() throws Exception { BuildApksResult tableOfContentsProto = BuildApksResult.getDefaultInstance(); Path apksArchiveFile = createApksArchiveFile(tableOfContentsProto, tmpDir.resolve("bundle.apks")); GetSizeCommand fromFlags = GetSizeCommand.fromFlags( new FlagParser().parse("get-size", "total", "--apks=" + apksArchiveFile)); GetSizeCommand fromBuilderApi = GetSizeCommand.builder() .setApksArchivePath(apksArchiveFile) .setDeviceSpec(DeviceSpec.getDefaultInstance()) .setGetSizeSubCommand(GetSizeSubcommand.TOTAL) .build(); assertThat(fromFlags).isEqualTo(fromBuilderApi); }
@Test public void nonExistentApksArchiveFile_throws() throws Exception { Path deviceSpecFile = createDeviceSpecFile(DeviceSpec.getDefaultInstance(), tmpDir.resolve("device.json")); ParsedFlags flags = new FlagParser() .parse("get-size", "total", "--device-spec=" + deviceSpecFile, "--apks=nonexistent"); Throwable exception = assertThrows(IllegalArgumentException.class, () -> GetSizeCommand.fromFlags(flags)); assertThat(exception).hasMessageThat().contains("File 'nonexistent' was not found"); }
@Test public void deviceSpecFromTargetingBuilder_setMultipleTargetings() { assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSdkVersion( sdkVersionTargeting(sdkVersionFrom(25), ImmutableSet.of(sdkVersionFrom(23)))) .setSupportedAbis(abiTargeting(X86_64, ImmutableSet.of(ARM64_V8A))) .setScreenDensity(screenDensityTargeting(XXXHDPI, ImmutableSet.of(XHDPI))) .setSupportedLocales(languageTargeting("fr")) .build()) .isEqualTo(mergeSpecs(sdkVersion(25), abis("x86_64"), density(640), locales("fr"))); } }
@Test public void deviceSpecFromTargetingBuilder_setSupportedLocales() { assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSupportedLocales(LanguageTargeting.getDefaultInstance()) .build()) .isEqualToDefaultInstance(); assertThat( new DeviceSpecFromTargetingBuilder(DeviceSpec.getDefaultInstance()) .setSupportedLocales(languageTargeting("fr")) .build()) .isEqualTo(locales("fr")); }
@Test public void missingApksArchiveFlag_throws() throws Exception { Path deviceSpecFile = createDeviceSpecFile(DeviceSpec.getDefaultInstance(), tmpDir.resolve("device.json")); expectMissingRequiredFlagException( "apks", () -> ExtractApksCommand.fromFlags( new FlagParser().parse("--device-spec=" + deviceSpecFile))); }