summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-08-22 15:22:22 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-08-23 11:44:04 +0200
commit2fb942fbc8ece593a312718476c638df69ef0149 (patch)
tree92a2142138dc92024cf49a61f4a5fec239842b8b /test
parent74a5fbc9644eda7f105d2d2c672a41fa5c34c6a8 (diff)
downloadjustbuild-2fb942fbc8ece593a312718476c638df69ef0149.tar.gz
Add a test verifying that out_dirs are normalized
Diffstat (limited to 'test')
-rw-r--r--test/buildtool/build_engine/target_map/data_rules/simple_rules/RULES3
-rw-r--r--test/buildtool/build_engine/target_map/data_targets/simple_targets/TARGETS16
-rw-r--r--test/buildtool/build_engine/target_map/target_map.test.cpp62
3 files changed, 80 insertions, 1 deletions
diff --git a/test/buildtool/build_engine/target_map/data_rules/simple_rules/RULES b/test/buildtool/build_engine/target_map/data_rules/simple_rules/RULES
index 564f7192..6e35d33f 100644
--- a/test/buildtool/build_engine/target_map/data_rules/simple_rules/RULES
+++ b/test/buildtool/build_engine/target_map/data_rules/simple_rules/RULES
@@ -195,13 +195,14 @@
}
}
, "action":
- { "string_fields": ["cmd", "outs"]
+ { "string_fields": ["cmd", "outs", "out_dirs"]
, "expression":
{ "type": "RESULT"
, "artifacts":
{ "type": "ACTION"
, "cmd": {"type": "FIELD", "name": "cmd"}
, "outs": {"type": "FIELD", "name": "outs"}
+ , "out_dirs": {"type": "FIELD", "name": "out_dirs"}
}
}
}
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 26511ee5..19083201 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
@@ -97,4 +97,20 @@
, "cmd": ["sh", "-c", "echo hello > ../hello.txt"]
, "outs": ["../hello.txt"]
}
+, "non-normal outs and out_dirs":
+ { "type": ["simple_rules", "action"]
+ , "cmd":
+ [ "sh"
+ , "-c"
+ , "mkdir -p install && echo Hello > install/data.txt && echo OK > log"
+ ]
+ , "outs": ["./log"]
+ , "out_dirs": ["install/."]
+ }
+, "generic non-normal outs and out_dirs":
+ { "type": "generic"
+ , "cmds": ["mkdir -P install", "echo Hello > install/data", "echo OK > log"]
+ , "outs": ["./log"]
+ , "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 061ce387..15964a7f 100644
--- a/test/buildtool/build_engine/target_map/target_map.test.cpp
+++ b/test/buildtool/build_engine/target_map/target_map.test.cpp
@@ -596,6 +596,68 @@ TEST_CASE("simple targets", "[target_map]") {
CHECK(error);
CHECK(error_msg != "NONE");
}
+
+ SECTION("non-normal outs and out_dirs") {
+ {
+ error_msg = "NONE";
+ error = false;
+ result = nullptr;
+
+ TaskSystem ts;
+ target_map.ConsumeAfterKeysReady(
+ &ts,
+ {BuildMaps::Target::ConfiguredTarget{
+ .target = BuildMaps::Base::EntityName{"",
+ "simple_targets",
+ "non-normal outs and "
+ "out_dirs"},
+ .config = empty_config}},
+ [&result](auto values) { result = *values[0]; },
+ [&error, &error_msg](std::string const& msg, bool /*unused*/) {
+ error = true;
+ error_msg = msg;
+ });
+ }
+ CHECK(not error);
+ CHECK(error_msg == "NONE");
+ REQUIRE(result->Actions().size() == 1);
+ auto action = result->Actions()[0]->ToJson();
+ CHECK(action["output_dirs"] == R"(["install"])"_json);
+ CHECK(action["output"] == R"(["log"])"_json);
+ }
+
+ SECTION("generic non-normal outs and out_dirs") {
+ {
+ {
+ error_msg = "NONE";
+ error = false;
+ result = nullptr;
+
+ TaskSystem ts;
+ target_map.ConsumeAfterKeysReady(
+ &ts,
+ {BuildMaps::Target::ConfiguredTarget{
+ .target =
+ BuildMaps::Base::EntityName{"",
+ "simple_targets",
+ "generic non-normal "
+ "outs and out_dirs"},
+ .config = empty_config}},
+ [&result](auto values) { result = *values[0]; },
+ [&error, &error_msg](std::string const& msg,
+ bool /*unused*/) {
+ error = true;
+ error_msg = msg;
+ });
+ }
+ CHECK(not error);
+ CHECK(error_msg == "NONE");
+ REQUIRE(result->Actions().size() == 1);
+ auto action = result->Actions()[0]->ToJson();
+ CHECK(action["output_dirs"] == R"(["install"])"_json);
+ CHECK(action["output"] == R"(["log"])"_json);
+ }
+ }
}
TEST_CASE("configuration deduplication", "[target_map]") {