public static void assertForNonDefaultSplits( Collection<ModuleSplit> splits, Consumer<ModuleSplit> assertionFn) { ImmutableList<ModuleSplit> nonDefaultSplits = filterSplitsByTargeting( splits, Predicates.not(ApkTargeting.getDefaultInstance()::equals), Predicates.alwaysTrue()); assertThat(nonDefaultSplits).isNotEmpty(); nonDefaultSplits.stream().forEach(assertionFn); }
@Override public ImmutableCollection<ModuleSplit> split(ModuleSplit split) { if (!split.getApkTargeting().equals(ApkTargeting.getDefaultInstance())) { return ImmutableList.of(split); } return splitInternal(split); }
private static ModuleSplit findModuleSplitWithDefaultTargeting( ImmutableCollection<ModuleSplit> moduleSplits) { return moduleSplits.stream() .filter(split -> split.getApkTargeting().equals(ApkTargeting.getDefaultInstance())) .collect(onlyElement()); } }
private Variant createInstantVariant() { Path apkLBase = ZipPath.create("instant/apkL-base.apk"); Path apkLFeature = ZipPath.create("instant/apkL-feature.apk"); Path apkLOther = ZipPath.create("instant/apkL-other.apk"); return createVariant( variantSdkTargeting(sdkVersionFrom(21), ImmutableSet.of(SdkVersion.getDefaultInstance())), createInstantApkSet("base", ApkTargeting.getDefaultInstance(), apkLBase), createInstantApkSet("feature", ApkTargeting.getDefaultInstance(), apkLFeature), createInstantApkSet("other", ApkTargeting.getDefaultInstance(), apkLOther)); }
/** Creates a table of content matching L+ devices. */ private static BuildApksResult createLPlusTableOfContent(ZipPath apkPath) { return BuildApksResult.newBuilder() .addVariant( createVariantForSingleSplitApk( variantSdkTargeting(sdkVersionFrom(21)), ApkTargeting.getDefaultInstance(), apkPath)) .build(); }
/** Creates {@link ModuleSplit.Builder} with fields pre-populated to default values. */ private ModuleSplit.Builder createModuleSplitBuilder() { return ModuleSplit.builder() .setAndroidManifest(DEFAULT_MANIFEST) .setEntries(ImmutableList.of()) .setMasterSplit(true) .setModuleName(BundleModuleName.create("base")) .setApkTargeting(ApkTargeting.getDefaultInstance()) .setVariantTargeting(lPlusVariantTargeting()); }
@Test public void apkMatch_deviceMatchesVariantDefaultValue_noAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( standaloneVariant( variantSdkTargeting(sdkVersionFrom(1), ImmutableSet.of()), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(21)).getMatchingApks(buildApksResult)) .containsExactly(apk); }
@Test public void apkNoMatch_deviceMatchesVariantValue_bothBetterAndNoBetterAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( oneApkSplitApkVariant( variantSdkTargeting( sdkVersionFrom(21), ImmutableSet.of(sdkVersionFrom(23), sdkVersionFrom(19))), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(25)).getMatchingApks(buildApksResult)).isEmpty(); }
private static void checkHasOnlyAbiAndDensityTargeting(ApkTargeting targeting) { ApkTargeting targetingWithoutAbiAndDensity = targeting.toBuilder().clearAbiTargeting().clearScreenDensityTargeting().build(); if (!targetingWithoutAbiAndDensity.equals(ApkTargeting.getDefaultInstance())) { throw CommandExecutionException.builder() .withMessage("Expecting only ABI and screen density targeting, got '%s'.", targeting) .build(); } }
/** Creates a table of content matching all devices to a given apkPath. */ private static BuildApksResult createSimpleTableOfContent(ZipPath apkPath) { return BuildApksResult.newBuilder() .addVariant( createVariantForSingleSplitApk( VariantTargeting.getDefaultInstance(), ApkTargeting.getDefaultInstance(), apkPath)) .build(); }
@Test public void apkNoMatch_deviceDoesntMatchVariantValue_betterAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( oneApkSplitApkVariant( variantSdkTargeting(sdkVersionFrom(21), ImmutableSet.of(sdkVersionFrom(1))), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(19)).getMatchingApks(buildApksResult)).isEmpty(); }
@Test public void apkMatch_deviceMatchesVariantValue_noAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( oneApkSplitApkVariant( variantSdkTargeting(sdkVersionFrom(21)), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(21)).getMatchingApks(buildApksResult)) .containsExactly(apk); }
private Variant createStandaloneVariant() { Path apkPreL = ZipPath.create("apkPreL.apk"); return createVariant( variantSdkTargeting(sdkVersionFrom(15), ImmutableSet.of(SdkVersion.getDefaultInstance())), createStandaloneApkSet(ApkTargeting.getDefaultInstance(), apkPreL)); }
/** Creates {@link ModuleSplit.Builder} with fields pre-populated to default values. */ public static ModuleSplit.Builder createModuleSplitBuilder() { return ModuleSplit.builder() .setAndroidManifest(DEFAULT_MANIFEST) .setEntries(ImmutableList.of()) .setMasterSplit(true) .setModuleName(BundleModuleName.create("module")) .setApkTargeting(ApkTargeting.getDefaultInstance()) .setVariantTargeting(lPlusVariantTargeting()); }
@Test public void apkNoMatch_deviceMatchesVariantValue_betterAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( oneApkSplitApkVariant( variantSdkTargeting(sdkVersionFrom(21), ImmutableSet.of(sdkVersionFrom(23))), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(25)).getMatchingApks(buildApksResult)).isEmpty(); }
@Test public void apkNoMatch_deviceMatchesVariantDefaultValue_betterAlternative() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( standaloneVariant( variantSdkTargeting(sdkVersionFrom(1), ImmutableSet.of(sdkVersionFrom(21))), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(21)).getMatchingApks(buildApksResult)).isEmpty(); }
private static ModuleSplit createModuleSplit(SplitType splitType) { return ModuleSplit.builder() .setAndroidManifest(AndroidManifest.create(androidManifest("com.test.app"))) .setEntries(ImmutableList.of()) .setMasterSplit(true) .setSplitType(splitType) .setModuleName(BundleModuleName.create("base")) .setApkTargeting(ApkTargeting.getDefaultInstance()) .setVariantTargeting(VariantTargeting.getDefaultInstance()) .build(); } }
private Variant createSystemVariant() { Path systemApk = ZipPath.create("system.apk"); return createVariant( variantSdkTargeting(sdkVersionFrom(15), ImmutableSet.of(SdkVersion.getDefaultInstance())), createSystemApkSet(ApkTargeting.getDefaultInstance(), systemApk)); } }
@Test public void apkNoMatch_deviceDoesntMatchVariantValue_bothBetterAndNoBetterAlternatives() { ZipPath apk = ZipPath.create("sample.apk"); BuildApksResult buildApksResult = buildApksResult( oneApkSplitApkVariant( variantSdkTargeting( sdkVersionFrom(21), ImmutableSet.of(sdkVersionFrom(1), sdkVersionFrom(23))), ApkTargeting.getDefaultInstance(), apk)); assertThat(new ApkMatcher(deviceWithSdk(19)).getMatchingApks(buildApksResult)).isEmpty(); }
@Test public void mergeShardTargetings_defaultInstances_ok() throws Exception { ApkTargeting targeting = ApkTargeting.getDefaultInstance(); ApkTargeting merged = MergingUtils.mergeShardTargetings(targeting, targeting); assertThat(merged).isEqualTo(targeting); assertThat(merged.hasAbiTargeting()).isFalse(); assertThat(merged.hasScreenDensityTargeting()).isFalse(); }