aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java
index f9539acaed..4bb3e6a7cd 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcToolchainConfigureTest.java
@@ -13,6 +13,7 @@
// limitations under the License.
package com.google.devtools.build.lib.rules.cpp;
+import com.google.common.base.Joiner;
import com.google.devtools.build.lib.packages.util.ResourceLoader;
import com.google.devtools.build.lib.syntax.SkylarkList.MutableList;
import com.google.devtools.build.lib.syntax.util.EvaluationTestCase;
@@ -27,6 +28,15 @@ import org.junit.runners.JUnit4;
public class SkylarkCcToolchainConfigureTest extends EvaluationTestCase {
@Test
+ public void testActionNames() throws Exception {
+ newTest()
+ .testStatement("COMPILE_ACTIONS", MutableList.copyOf(env, CcCommon.ALL_COMPILE_ACTIONS))
+ .testStatement("LINK_ACTIONS", MutableList.copyOf(env, CcCommon.ALL_LINK_ACTIONS))
+ .testStatement("ARCHIVE_ACTIONS", MutableList.copyOf(env, CcCommon.ALL_ARCHIVE_ACTIONS))
+ .testStatement("OTHER_ACTIONS", MutableList.copyOf(env, CcCommon.ALL_OTHER_ACTIONS));
+ }
+
+ @Test
public void testSplitEscaped() throws Exception {
newTest()
.testStatement("split_escaped('a:b:c', ':')", MutableList.of(env, "a", "b", "c"))
@@ -48,6 +58,131 @@ public class SkylarkCcToolchainConfigureTest extends EvaluationTestCase {
.testStatement("split_escaped('a%:', ':')", MutableList.of(env, "a:"));
}
+ @Test
+ public void testActionConfig() throws Exception {
+ testStatementWithMultilineOutput(
+ "action_config('c++-compile', '/usr/bin/gcc')",
+ "",
+ " action_config {",
+ " config_name: 'c++-compile'",
+ " action_name: 'c++-compile'",
+ " tool {",
+ " tool_path: '/usr/bin/gcc'",
+ " }",
+ " }");
+ }
+
+ @Test
+ public void testFeature() throws Exception {
+ testStatementWithMultilineOutput(
+ "feature("
+ + "'fully_static_link', "
+ + " [ "
+ + " flag_set("
+ + " ['c++-link-dynamic-library', 'c++-link-nodeps-dynamic-library'], "
+ + " [flag_group([flag('-a'), flag('-b'), flag('-c')])])])",
+ "",
+ " feature {",
+ " name: 'fully_static_link'",
+ " enabled: true",
+ " flag_set {",
+ " action: 'c++-link-dynamic-library'",
+ " action: 'c++-link-nodeps-dynamic-library'",
+ " flag_group {",
+ " flag: '-a'",
+ " flag: '-b'",
+ " flag: '-c'",
+ " }",
+ " }",
+ " }");
+ }
+
+ @Test
+ public void testFeatureThoroughly() throws Exception {
+ testStatementWithMultilineOutput(
+ "feature("
+ + "'fully_static_link', "
+ + " [ "
+ + " flag_set("
+ + " ['c++-link-dynamic-library'], "
+ + " [flag_group([flag('-a')])]),"
+ + " flag_set("
+ + " ['c++-link-dynamic-library'],"
+ + " ["
+ + " flag_group("
+ + " [flag('-a')],"
+ + " iterate_over='a'),"
+ + " flag_group("
+ + " [flag('-c')],"
+ + " expand_if_all_available=['a','b'],"
+ + " expand_if_none_available=['a'],"
+ + " expand_if_true=['a','b'],"
+ + " expand_if_false=['a'],"
+ + " expand_if_equal=[['a','val']],"
+ + " ),"
+ + " flag_group("
+ + " [flag('-c')],"
+ + " iterate_over='a',"
+ + " expand_if_all_available=['a','b'],"
+ + " expand_if_none_available=['a'],"
+ + " expand_if_true=['a','b'],"
+ + " expand_if_false=['a'],"
+ + " expand_if_equal=[['a','val']],"
+ + " )"
+ + " ]),"
+ + " flag_set("
+ + " ['c++-link-dynamic-library'], "
+ + " [flag_group([flag_group([flag('-a')])])])"
+ + " ])",
+ "",
+ " feature {",
+ " name: 'fully_static_link'",
+ " enabled: true",
+ " flag_set {",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag: '-a'",
+ " }",
+ " }",
+ " flag_set {",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " iterate_over: 'a'",
+ " flag: '-a'",
+ " }",
+ " flag_group {",
+ " expand_if_all_available: 'a'",
+ " expand_if_all_available: 'b'",
+ " expand_if_none_available: 'a'",
+ " expand_if_true: 'a'",
+ " expand_if_true: 'b'",
+ " expand_if_false: 'a'",
+ " expand_if_equal { variable: 'a' value: 'val' }",
+ " flag: '-c'",
+ " }",
+ " flag_group {",
+ " expand_if_all_available: 'a'",
+ " expand_if_all_available: 'b'",
+ " expand_if_none_available: 'a'",
+ " expand_if_true: 'a'",
+ " expand_if_true: 'b'",
+ " expand_if_false: 'a'",
+ " expand_if_equal { variable: 'a' value: 'val' }",
+ " iterate_over: 'a'",
+ " flag: '-c'",
+ " }",
+ " }",
+ " flag_set {",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag_group {",
+ " flag: '-a'",
+ " }",
+ " }",
+ " }",
+ " }");
+ }
+
private ModalTestCase newTest(String... skylarkOptions) throws IOException {
return new SkylarkTest(skylarkOptions)
// A mock implementation of Label to be able to parse lib_cc_configure under default
@@ -61,4 +196,9 @@ public class SkylarkCcToolchainConfigureTest extends EvaluationTestCase {
ResourceLoader.readFromResources(
TestConstants.BAZEL_REPO_PATH + "tools/cpp/crosstool_utils.bzl"));
}
+
+ private void testStatementWithMultilineOutput(String skylarkCode, String... expectedOutput)
+ throws IOException {
+ newTest(skylarkCode, Joiner.on(System.getProperty("line.separator")).join(expectedOutput));
+ }
}