aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--paludis/util/config_file.cc5
-rw-r--r--paludis/util/config_file_TEST.cc19
2 files changed, 23 insertions, 1 deletions
diff --git a/paludis/util/config_file.cc b/paludis/util/config_file.cc
index 112c53a34..708df8186 100644
--- a/paludis/util/config_file.cc
+++ b/paludis/util/config_file.cc
@@ -810,7 +810,10 @@ KeyValueConfigFile::KeyValueConfigFile(
want = false;
if (want)
- _imp->values[key] = transformation_function()(*this, key, get(key), value);
+ {
+ std::string new_value(transformation_function()(*this, key, get(key), value));
+ _imp->values[key] = new_value;
+ }
}
_imp->active_key_prefix = "";
diff --git a/paludis/util/config_file_TEST.cc b/paludis/util/config_file_TEST.cc
index 4c0376b8e..d6c102bc6 100644
--- a/paludis/util/config_file_TEST.cc
+++ b/paludis/util/config_file_TEST.cc
@@ -56,6 +56,11 @@ namespace
{
return f.get(s);
}
+
+ std::string concatenate(const KeyValueConfigFile &, const std::string &, const std::string & prev, const std::string & value)
+ {
+ return prev + value;
+ }
}
TEST(LineConfigFile, Works)
@@ -238,6 +243,20 @@ TEST(KeyValueConfigFile, Defaults)
EXPECT_EQ("cow", ff.get("y"));
}
+TEST(KeyValueConfigFile, DefaultsAndTransformations)
+{
+ auto predef(std::make_shared<Map<std::string, std::string>>());
+ predef->insert("magic", "xyzzy");
+
+ std::stringstream d_s;
+ d_s << "magic=plugh" << std::endl;
+ KeyValueConfigFile ff(d_s, { },
+ std::bind(&predefined, predef, std::placeholders::_1, std::placeholders::_2),
+ &concatenate);
+
+ EXPECT_EQ("xyzzyplugh", ff.get("magic"));
+}
+
TEST(KeyValueConfigFile, Source)
{
std::stringstream d_s;