summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS12
-rw-r--r--test/buildtool/build_engine/target_map/target_map.test.cpp52
2 files changed, 64 insertions, 0 deletions
diff --git a/test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS b/test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS
index 19083201..9eace0f2 100644
--- a/test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS
+++ b/test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS
@@ -113,4 +113,16 @@
, "outs": ["./log"]
, "out_dirs": ["install/."]
}
+, "stage conflict: rule":
+ { "type": ["simple_rules", "action"]
+ , "cmd": ["sh", "-c", "mkdir -p install && echo Hello > install/data.txt"]
+ , "outs": ["./install/data.txt"]
+ , "out_dirs": ["install/."]
+ }
+, "stage conflict: generic":
+ { "type": "generic"
+ , "cmds": ["mkdir -p install && echo Hello > install/data.txt"]
+ , "outs": ["./install/data.txt"]
+ , "out_dirs": ["install/."]
+ }
}
diff --git a/test/buildtool/build_engine/target_map/target_map.test.cpp b/test/buildtool/build_engine/target_map/target_map.test.cpp
index 15964a7f..85d3b104 100644
--- a/test/buildtool/build_engine/target_map/target_map.test.cpp
+++ b/test/buildtool/build_engine/target_map/target_map.test.cpp
@@ -658,6 +658,58 @@ TEST_CASE("simple targets", "[target_map]") {
CHECK(action["output"] == R"(["log"])"_json);
}
}
+
+ SECTION("staging conflict: rule") {
+ {
+ error_msg = "NONE";
+ error = false;
+ result = nullptr;
+
+ TaskSystem ts;
+ target_map.ConsumeAfterKeysReady(
+ &ts,
+ {BuildMaps::Target::ConfiguredTarget{
+ .target =
+ BuildMaps::Base::EntityName{
+ "", "simple_targets", "stage conflict: rule"},
+ .config = empty_config}},
+ [&result](auto values) { result = *values[0]; },
+ [&error, &error_msg](std::string const& msg, bool /*unused*/) {
+ error = true;
+ error_msg = msg;
+ });
+ }
+ CHECK(error);
+ CHECK(error_msg != "NONE");
+ CHECK(error_msg.find("artifacts") != std::string::npos);
+ CHECK(error_msg.find("install") != std::string::npos);
+ }
+
+ SECTION("staging conflict: generic") {
+ {
+ error_msg = "NONE";
+ error = false;
+ result = nullptr;
+
+ TaskSystem ts;
+ target_map.ConsumeAfterKeysReady(
+ &ts,
+ {BuildMaps::Target::ConfiguredTarget{
+ .target =
+ BuildMaps::Base::EntityName{
+ "", "simple_targets", "stage conflict: generic"},
+ .config = empty_config}},
+ [&result](auto values) { result = *values[0]; },
+ [&error, &error_msg](std::string const& msg, bool /*unused*/) {
+ error = true;
+ error_msg = msg;
+ });
+ }
+ CHECK(error);
+ CHECK(error_msg != "NONE");
+ CHECK(error_msg.find("artifacts") != std::string::npos);
+ CHECK(error_msg.find("install") != std::string::npos);
+ }
}
TEST_CASE("configuration deduplication", "[target_map]") {