From 503d0d1f431c280ad73c4ca070d9778dba748498 Mon Sep 17 00:00:00 2001 From: tomlu Date: Wed, 20 Sep 2017 20:02:36 +0200 Subject: Add ability to write param files to disk. PiperOrigin-RevId: 169418286 --- .../SkylarkRuleImplementationFunctionsTest.java | 28 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'src/test') diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java index 983539a49a..c4f5f5af30 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java @@ -57,6 +57,7 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.regex.Pattern; import org.junit.Before; import org.junit.Rule; @@ -624,8 +625,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase { SkylarkRuleContext ruleContext = createRuleContext("//foo:foo"); checkErrorContains( ruleContext, - "Cannot convert parameter 'content' to type string, in method " - + "write(File output, int content, bool is_executable) of 'actions'", + "Cannot convert parameter 'content' to type string or Args", "ruleContext.actions.write(", " output = ruleContext.files.srcs[0],", " content = 1,", @@ -1840,6 +1840,27 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase { assertThat(action.getArguments().stream().anyMatch(arg -> arg.matches("--file=.*"))).isTrue(); } + @Test + public void testWriteArgsToParamFile() throws Exception { + SkylarkRuleContext ruleContext = createRuleContext("//foo:foo"); + evalRuleContextCode( + ruleContext, + "args = ruleContext.actions.args()", + "args.add('--foo')", + "output=ruleContext.actions.declare_file('out')", + "ruleContext.actions.write(", + " output=output,", + " content=args,", + ")"); + List actions = + ruleContext.getRuleContext().getAnalysisEnvironment().getRegisteredActions(); + Optional action = + actions.stream().filter(a -> a instanceof ParameterFileWriteAction).findFirst(); + assertThat(action.isPresent()).isTrue(); + ParameterFileWriteAction paramAction = (ParameterFileWriteAction) action.get(); + assertThat(paramAction.getContents()).containsExactly("--foo"); + } + @Test public void testLazyArgsWithParamFileInvalidFormatString() throws Exception { SkylarkRuleContext ruleContext = createRuleContext("//foo:foo"); @@ -1855,8 +1876,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase { checkError( ruleContext, "Invalid value for parameter \"format\": Expected one of \"shell\", \"multiline\"", - "args = ruleContext.actions.args()\n" - + "args.use_param_file('--file=%s', format='illegal')"); + "args = ruleContext.actions.args()\n" + "args.set_param_file_format('illegal')"); } @Test -- cgit v1.2.3