@Test public void testDepsEnvironmentVariableIsComplete() { BuildTarget depTarget = new BuildTarget("//foo", "bar"); BuildRule dep = new FakeBuildRule(BuildRuleType.JAVA_LIBRARY, depTarget) { @Override public String getPathToOutputFile() { return "buck-out/gen/foo/bar.jar"; } }; BuildRuleResolver ruleResolver = new BuildRuleResolver(ImmutableMap.of(depTarget, dep)); AbstractBuildRuleBuilderParams params = new FakeAbstractBuildRuleBuilderParams(); Builder builder = Genrule.newGenruleBuilder(params); builder.setBuildTarget(new BuildTarget("//foo", "baz")); builder.setBash(Optional.of("cat $DEPS > $OUT")); builder.setOut("deps.txt"); builder.addDep(depTarget); Genrule genrule = builder.build(ruleResolver); AbstractGenruleStep genruleStep = genrule.createGenruleStep(); ExecutionContext context = newEmptyExecutionContext(Platform.LINUX); Map<String, String> environmentVariables = genruleStep.getEnvironmentVariables(context); assertEquals( "Make sure that the use of $DEPS pulls in $GEN_DIR, as well.", ImmutableMap.of( "DEPS", "$GEN_DIR/foo/bar.jar", "GEN_DIR", "buck-out/gen", "OUT", "buck-out/gen/foo/deps.txt"), environmentVariables); // Ensure that $GEN_DIR is declared before $DEPS. List<String> keysInOrder = ImmutableList.copyOf(environmentVariables.keySet()); assertEquals("GEN_DIR", keysInOrder.get(1)); assertEquals("DEPS", keysInOrder.get(2)); }