aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google')
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java37
-rw-r--r--src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java168
3 files changed, 218 insertions, 2 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
index 2af98f4b5a..531baefda5 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/CustomCommandLineTest.java
@@ -18,9 +18,11 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
+import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.CustomArgv;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.CustomMultiArgv;
@@ -35,6 +37,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
+import java.util.Collection;
+
/**
* Tests for CustomCommandLine.
*/
@@ -238,6 +242,39 @@ public class CustomCommandLineTest {
}
+ @Test
+ public void testJoinExpandedTreeArtifactExecPath() {
+ Artifact treeArtifact = createTreeArtifact("myTreeArtifact");
+
+ CommandLine commandLine = CustomCommandLine.builder()
+ .add("hello")
+ .addJoinExpandedTreeArtifactExecPath(":", treeArtifact)
+ .build();
+
+ assertThat(commandLine.arguments()).containsExactly(
+ "hello",
+ "JoinExpandedTreeArtifactExecPathsArg{ delimiter: :, treeArtifact: myTreeArtifact}");
+
+ final Iterable<TreeFileArtifact> treeFileArtifacts = ImmutableList.of(
+ createTreeFileArtifact(treeArtifact, "children/child1"),
+ createTreeFileArtifact(treeArtifact, "children/child2"));
+
+ ArtifactExpander artifactExpander = new ArtifactExpander() {
+ @Override
+ public void expand(Artifact artifact, Collection<? super Artifact> output) {
+ for (TreeFileArtifact treeFileArtifact : treeFileArtifacts) {
+ if (treeFileArtifact.getParent().equals(artifact)) {
+ output.add(treeFileArtifact);
+ }
+ }
+ }
+ };
+
+ assertThat(commandLine.arguments(artifactExpander)).containsExactly(
+ "hello",
+ "myTreeArtifact/children/child1:myTreeArtifact/children/child2");
+ }
+
private Artifact createTreeArtifact(String rootRelativePath) {
PathFragment relpath = new PathFragment(rootRelativePath);
return new SpecialArtifact(
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
index aae837f087..0ba8f7a20c 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/ActionsTestUtil.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.lib.actions.ActionGraph;
import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.MutableActionGraph;
@@ -91,7 +92,7 @@ public final class ActionsTestUtil {
metadataHandler,
fileOutErr,
actionGraph == null
- ? null
+ ? createDummyArtifactExpander()
: ActionInputHelper.actionGraphArtifactExpander(actionGraph));
}
@@ -108,7 +109,17 @@ public final class ActionsTestUtil {
public static ActionExecutionContext createContext(EventHandler eventHandler) {
DummyExecutor dummyExecutor = new DummyExecutor(eventHandler);
- return new ActionExecutionContext(dummyExecutor, null, null, null, null);
+ return new ActionExecutionContext(
+ dummyExecutor, null, null, null, createDummyArtifactExpander());
+ }
+
+ private static ArtifactExpander createDummyArtifactExpander() {
+ return new ArtifactExpander() {
+ @Override
+ public void expand(Artifact artifact, Collection<? super Artifact> output) {
+ return;
+ }
+ };
}
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java
new file mode 100644
index 0000000000..21b79759fd
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/analysis/actions/ParamFileWriteActionTest.java
@@ -0,0 +1,168 @@
+// Copyright 2015 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.analysis.actions;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionExecutionContext;
+import com.google.devtools.build.lib.actions.ActionInputHelper;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
+import com.google.devtools.build.lib.actions.Artifact.SpecialArtifact;
+import com.google.devtools.build.lib.actions.Artifact.SpecialArtifactType;
+import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
+import com.google.devtools.build.lib.actions.ArtifactOwner;
+import com.google.devtools.build.lib.actions.Executor;
+import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
+import com.google.devtools.build.lib.actions.Root;
+import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
+import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.exec.util.TestExecutorBuilder;
+import com.google.devtools.build.lib.util.io.FileOutErr;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
+import com.google.devtools.build.lib.vfs.PathFragment;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+
+/** Tests for ParamFileWriteAction. */
+@RunWith(JUnit4.class)
+public class ParamFileWriteActionTest extends BuildViewTestCase {
+ private Root rootDir;
+ private Artifact outputArtifact;
+ private Artifact treeArtifact;
+
+ @Before
+ public void createArtifacts() throws Exception {
+ rootDir = Root.asDerivedRoot(scratch.dir("/exec/root"));
+ outputArtifact = getBinArtifactWithNoOwner("destination.txt");
+ FileSystemUtils.createDirectoryAndParents(outputArtifact.getPath().getParentDirectory());
+ treeArtifact = createTreeArtifact("artifact/myTreeFileArtifact");
+ }
+
+
+ @Test
+ public void testOutputs() {
+ Action action = createParameterFileWriteAction(
+ ImmutableList.<Artifact>of(), createNormalCommandLine());
+ assertThat(Artifact.toRootRelativePaths(action.getOutputs())).containsExactly(
+ "destination.txt");
+ }
+
+ @Test
+ public void testInputs() {
+ Action action = createParameterFileWriteAction(
+ ImmutableList.of(treeArtifact),
+ createTreeArtifactExpansionCommandLine());
+ assertThat(Artifact.toExecPaths(action.getInputs())).containsExactly(
+ "artifact/myTreeFileArtifact");
+ }
+
+ @Test
+ public void testWriteCommandLineWithoutTreeArtifactExpansion() throws Exception {
+ Action action = createParameterFileWriteAction(
+ ImmutableList.<Artifact>of(), createNormalCommandLine());
+ ActionExecutionContext context = actionExecutionContext();
+ action.execute(context);
+ String content = new String(FileSystemUtils.readContentAsLatin1(outputArtifact.getPath()));
+ assertEquals("--flag1\n--flag2\n--flag3\nvalue1\nvalue2", content.trim());
+ }
+
+ @Test
+ public void testWriteCommandLineWithTreeArtifactExpansion() throws Exception {
+ Action action = createParameterFileWriteAction(
+ ImmutableList.of(treeArtifact),
+ createTreeArtifactExpansionCommandLine());
+ ActionExecutionContext context = actionExecutionContext();
+ action.execute(context);
+ String content = new String(FileSystemUtils.readContentAsLatin1(outputArtifact.getPath()));
+ assertEquals(
+ "--flag1\n"
+ + "artifact/myTreeFileArtifact/artifacts/treeFileArtifact1:"
+ + "artifact/myTreeFileArtifact/artifacts/treeFileArtifact2",
+ content.trim());
+ }
+
+ private Artifact createTreeArtifact(String rootRelativePath) {
+ PathFragment relpath = new PathFragment(rootRelativePath);
+ return new SpecialArtifact(
+ rootDir.getPath().getRelative(relpath),
+ rootDir,
+ rootDir.getExecPath().getRelative(relpath),
+ ArtifactOwner.NULL_OWNER,
+ SpecialArtifactType.TREE);
+ }
+
+ private TreeFileArtifact createTreeFileArtifact(
+ Artifact inputTreeArtifact, String parentRelativePath) {
+ return ActionInputHelper.treeFileArtifact(
+ inputTreeArtifact,
+ new PathFragment(parentRelativePath));
+ }
+
+ private ParameterFileWriteAction createParameterFileWriteAction(
+ Iterable<Artifact> inputTreeArtifacts, CommandLine commandLine) {
+ return new ParameterFileWriteAction(
+ ActionsTestUtil.NULL_ACTION_OWNER,
+ inputTreeArtifacts,
+ outputArtifact,
+ commandLine,
+ ParameterFileType.UNQUOTED,
+ StandardCharsets.ISO_8859_1);
+ }
+
+ private CommandLine createNormalCommandLine() {
+ return CustomCommandLine.builder()
+ .add("--flag1")
+ .add("--flag2")
+ .add("--flag3", ImmutableList.of("value1", "value2"))
+ .build();
+ }
+
+ private CommandLine createTreeArtifactExpansionCommandLine() {
+ return CustomCommandLine.builder()
+ .add("--flag1")
+ .addJoinExpandedTreeArtifactExecPath(":", treeArtifact)
+ .build();
+ }
+
+ private ActionExecutionContext actionExecutionContext() throws Exception {
+ final Iterable<TreeFileArtifact> treeFileArtifacts = ImmutableList.of(
+ createTreeFileArtifact(treeArtifact, "artifacts/treeFileArtifact1"),
+ createTreeFileArtifact(treeArtifact, "artifacts/treeFileArtifact2"));
+
+ ArtifactExpander artifactExpander = new ArtifactExpander() {
+ @Override
+ public void expand(Artifact artifact, Collection<? super Artifact> output) {
+ for (TreeFileArtifact treeFileArtifact : treeFileArtifacts) {
+ if (treeFileArtifact.getParent().equals(artifact)) {
+ output.add(treeFileArtifact);
+ }
+ }
+ }
+ };
+
+ Executor executor = new TestExecutorBuilder(directories, binTools).build();
+ return new ActionExecutionContext(
+ executor, null, null, new FileOutErr(), artifactExpander);
+ }
+}