@Test public void replaceLocationOfFullyQualifiedBuildTarget() { ProjectFilesystem filesystem = EasyMock.createNiceMock(ProjectFilesystem.class); EasyMock.expect(filesystem.getPathRelativizer()).andStubReturn(relativeToAbsolutePathFunction); EasyMock.replay(filesystem); BuildRuleResolver ruleResolver = new BuildRuleResolver(); JavaBinaryRule javaBinary = createSampleJavaBinaryRule(ruleResolver); String originalCmd = String.format( "$(location :%s) $(location %s) $OUT", javaBinary.getBuildTarget().getShortName(), javaBinary.getBuildTarget().getFullyQualifiedName()); String contextBasePath = javaBinary.getBuildTarget().getBasePath(); Set<? extends BuildRule> deps = ImmutableSet.of(javaBinary); Genrule rule = createGenrule(ruleResolver, originalCmd, contextBasePath, deps); AbstractGenruleStep genruleStep = rule.createGenruleStep(); // Interpolate the build target in the genrule cmd string. String transformedString = genruleStep.replaceMatches(filesystem, originalCmd); // Verify that the correct cmd was created. Path pathToOutput = getAbsolutePathInBase(GEN_DIR + "/java/com/facebook/util/ManifestGenerator.jar"); String expectedCmd = String.format("%s %s $OUT", pathToOutput, pathToOutput); assertEquals(expectedCmd, transformedString); EasyMock.verify(filesystem); }
@Test public void testDepsGenrule() { BuildRuleResolver ruleResolver = new BuildRuleResolver(); JavaBinaryRule javaBinary = createSampleJavaBinaryRule(ruleResolver); // Interpolate the build target in the genrule cmd string. String originalCmd = "$(exe :ManifestGenerator) $OUT"; Set<? extends BuildRule> deps = ImmutableSet.of(javaBinary); String contextBasePath = "java/com/facebook/util"; Genrule rule = createGenrule(ruleResolver, originalCmd, contextBasePath, deps); AbstractGenruleStep genruleStep = rule.createGenruleStep(); String transformedString = genruleStep.replaceMatches(fakeFilesystem, originalCmd); // Verify that the correct cmd was created. Path expectedClasspath = getAbsolutePathInBase(GEN_DIR + "/java/com/facebook/util/lib__util__output/util.jar"); String expectedCmd = String.format( "java -classpath %s com.facebook.util.ManifestGenerator $OUT", expectedClasspath); assertEquals(expectedCmd, transformedString); }