private void createAndroidBinaryRuleAndTestCopyNativeLibraryCommand( ImmutableSet<String> cpuFilters, String sourceDir, String destinationDir, ImmutableList<String> expectedShellCommands) { BuildRuleResolver ruleResolver = new BuildRuleResolver(); AndroidBinaryRule.Builder builder = AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams()) .setBuildTarget(BuildTargetFactory.newInstance("//:fbandroid_with_dash_debug_fbsign")) .setManifest("AndroidManifest.xml") .setKeystore(addKeystoreRule(ruleResolver)) .setTarget("Google Inc:Google APIs:16"); for (String filter : cpuFilters) { builder.addCpuFilter(filter); } ImmutableList.Builder<Step> commands = ImmutableList.builder(); AndroidBinaryRule buildRule = ruleResolver.buildAndAddToIndex(builder); buildRule.copyNativeLibrary(sourceDir, destinationDir, commands); ImmutableList<Step> steps = commands.build(); assertEquals(steps.size(), expectedShellCommands.size()); ExecutionContext context = createMock(ExecutionContext.class); replay(context); for (int i = 0; i < steps.size(); ++i) { Iterable<String> observedArgs = ((BashStep) steps.get(i)).getShellCommand(context); String observedCommand = Joiner.on(' ').join(observedArgs); assertEquals(expectedShellCommands.get(i), observedCommand); } verify(context); }
@Test public void testGetInputsToCompareToOutput() { BuildRuleResolver ruleResolver = new BuildRuleResolver(); AndroidBinaryRule.Builder androidBinaryRuleBuilder = AndroidBinaryRule.newAndroidBinaryRuleBuilder(new FakeAbstractBuildRuleBuilderParams()) .setBuildTarget(BuildTargetFactory.newInstance("//java/src/com/facebook:app")) .setManifest("java/src/com/facebook/AndroidManifest.xml") .setTarget("Google Inc.:Google APIs:16") .setKeystore(addKeystoreRule(ruleResolver)); BuildContext context = createMock(BuildContext.class); replay(context); MoreAsserts.assertListEquals( "getInputsToCompareToOutput() should include manifest.", ImmutableList.of("java/src/com/facebook/AndroidManifest.xml"), ruleResolver.buildAndAddToIndex(androidBinaryRuleBuilder).getInputsToCompareToOutput()); SourcePath proguardConfig = new FileSourcePath("java/src/com/facebook/proguard.cfg"); androidBinaryRuleBuilder.setProguardConfig(Optional.of(proguardConfig)); MoreAsserts.assertListEquals( "getInputsToCompareToOutput() should include Proguard config, if present.", ImmutableList.of( "java/src/com/facebook/AndroidManifest.xml", "java/src/com/facebook/proguard.cfg"), ruleResolver.buildAndAddToIndex(androidBinaryRuleBuilder).getInputsToCompareToOutput()); verify(context); }