blob: 289f0c0a494c76495204c58ec3b3ad7944ca96c8 [file] [log] [blame]
// 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.actions;
import static org.junit.Assert.assertEquals;
import com.google.common.collect.ImmutableList;
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;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.testutil.Scratch;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Tests for CustomCommandLine.
*/
@RunWith(JUnit4.class)
public class CustomCommandLineTest {
private Scratch scratch;
private Root rootDir;
private Artifact artifact1;
private Artifact artifact2;
@Before
public final void createArtifacts() throws Exception {
scratch = new Scratch();
rootDir = Root.asDerivedRoot(scratch.dir("/exec/root"));
artifact1 = new Artifact(scratch.file("/exec/root/dir/file1.txt"), rootDir);
artifact2 = new Artifact(scratch.file("/exec/root/dir/file2.txt"), rootDir);
}
@Test
public void testStringArgs() {
CustomCommandLine cl = CustomCommandLine.builder().add("--arg1").add("--arg2").build();
assertEquals(ImmutableList.of("--arg1", "--arg2"), cl.arguments());
}
@Test
public void testLabelArgs() throws LabelSyntaxException {
CustomCommandLine cl = CustomCommandLine.builder().add(Label.parseAbsolute("//a:b")).build();
assertEquals(ImmutableList.of("//a:b"), cl.arguments());
}
@Test
public void testStringsArgs() {
CustomCommandLine cl = CustomCommandLine.builder().add("--arg",
ImmutableList.of("a", "b")).build();
assertEquals(ImmutableList.of("--arg", "a", "b"), cl.arguments());
}
@Test
public void testArtifactJoinStringArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addJoinStrings("--path", ":",
ImmutableList.of("foo", "bar")).build();
assertEquals(ImmutableList.of("--path", "foo:bar"), cl.arguments());
}
@Test
public void testArtifactExecPathArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addExecPath("--path", artifact1).build();
assertEquals(ImmutableList.of("--path", "dir/file1.txt"), cl.arguments());
}
@Test
public void testArtifactExecPathsArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addExecPaths("--path",
ImmutableList.of(artifact1, artifact2)).build();
assertEquals(ImmutableList.of("--path", "dir/file1.txt", "dir/file2.txt"), cl.arguments());
}
@Test
public void testNestedSetArtifactExecPathsArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addExecPaths(
NestedSetBuilder.<Artifact>stableOrder().add(artifact1).add(artifact2).build()).build();
assertEquals(ImmutableList.of("dir/file1.txt", "dir/file2.txt"), cl.arguments());
}
@Test
public void testArtifactJoinExecPathArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addJoinExecPaths("--path", ":",
ImmutableList.of(artifact1, artifact2)).build();
assertEquals(ImmutableList.of("--path", "dir/file1.txt:dir/file2.txt"), cl.arguments());
}
@Test
public void testPathArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addPath(artifact1.getExecPath()).build();
assertEquals(ImmutableList.of("dir/file1.txt"), cl.arguments());
}
@Test
public void testJoinPathArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addJoinPaths(":",
ImmutableList.of(artifact1.getExecPath(), artifact2.getExecPath())).build();
assertEquals(ImmutableList.of("dir/file1.txt:dir/file2.txt"), cl.arguments());
}
@Test
public void testPathsArgs() {
CustomCommandLine cl = CustomCommandLine.builder().addPaths("%s:%s",
artifact1.getExecPath(), artifact1.getRootRelativePath()).build();
assertEquals(ImmutableList.of("dir/file1.txt:dir/file1.txt"), cl.arguments());
}
@Test
public void testCustomArgs() {
CustomCommandLine cl = CustomCommandLine.builder().add(new CustomArgv() {
@Override
public String argv() {
return "--arg";
}
}).build();
assertEquals(ImmutableList.of("--arg"), cl.arguments());
}
@Test
public void testCustomMultiArgs() {
CustomCommandLine cl = CustomCommandLine.builder().add(new CustomMultiArgv() {
@Override
public ImmutableList<String> argv() {
return ImmutableList.of("--arg1", "--arg2");
}
}).build();
assertEquals(ImmutableList.of("--arg1", "--arg2"), cl.arguments());
}
@Test
public void testCombinedArgs() {
CustomCommandLine cl = CustomCommandLine.builder()
.add("--arg")
.add("--args", ImmutableList.of("abc"))
.addExecPaths("--path1", ImmutableList.of(artifact1))
.addExecPath("--path2", artifact2)
.build();
assertEquals(ImmutableList.of("--arg", "--args", "abc", "--path1", "dir/file1.txt", "--path2",
"dir/file2.txt"), cl.arguments());
}
@Test
public void testAddNulls() {
CustomCommandLine cl = CustomCommandLine.builder()
.add("--args", null)
.addExecPaths(null, ImmutableList.of(artifact1))
.addExecPath(null, null)
.build();
assertEquals(ImmutableList.of(), cl.arguments());
}
}