#include "configuration.h" #include #include #include #include #include class ConfigurationTest : public ::testing::Test { protected: void SetUp() override { conf.read_file(std::getenv("CONFIGFILE")); } Configuration conf{ { "name", std::string() }, { "over", std::string() }, { "other", std::string("not in cfg") }, // this entry is not in the conf file { "comment", std::string() }, // commented out entry in the conf file { "number", int(0) }, { "toggle", bool(false) }, { "main/name", std::string() }, { "main/number", int(0) }, { "main/toggle", bool(true) }, { "extra/name", std::string() }, { "extra/number", int(0) }, { "extra/toggle", bool(false) }, }; std::unique_ptr global_conf = std::make_unique>>({ { "name", std::string("global") }, { "number", int(123) }, { "toggle", bool(true) }, }); }; TEST_F(ConfigurationTest, NoSection) { EXPECT_EQ(conf.value("name").value(), "Top level"); EXPECT_EQ(conf.value("other").value(), "not in cfg"); EXPECT_EQ(conf.value("comment").value(), ""); EXPECT_EQ(conf.value("number").value(), 12); EXPECT_TRUE(conf.value("toggle").value()); EXPECT_FALSE(conf.value("nullopt")); EXPECT_FALSE(conf.value("nullopt")); EXPECT_FALSE(conf.value("nullopt")); } TEST_F(ConfigurationTest, TypeCasts) { EXPECT_EQ(conf.value("number").value(), "12"); EXPECT_EQ(conf.value("toggle").value(), "true"); EXPECT_EQ(conf.value("main/toggle").value(), "false"); } TEST_F(ConfigurationTest, QtSpecialization) { EXPECT_EQ(conf.value("name").value(), "Top level"); EXPECT_EQ(conf.value("number").value(), "12"); EXPECT_EQ(conf.value("toggle").value(), "true"); EXPECT_EQ(conf.value("main/toggle").value(), "false"); EXPECT_FALSE(conf.value("nullopt")); EXPECT_EQ(conf.value("list").value(), QStringList({ "one", "two", "three", "for four" })); EXPECT_FALSE(conf.value("nullopt")); } TEST_F(ConfigurationTest, QtShortcut) { QAction action; EXPECT_EQ(conf.shortcut(action, "qt/shortcut").shortcut().toString(), "Ctrl+Q"); EXPECT_EQ(conf.shortcut(action, "qt/nil").shortcut().toString(), "Ctrl+Q"); QKeySequence sequence; EXPECT_EQ(conf.shortcut(sequence, "qt/shortcut").toString(), "Ctrl+Q"); EXPECT_EQ(conf.shortcut(sequence, "qt/nil").toString(), "Ctrl+Q"); } TEST_F(ConfigurationTest, MainSection) { EXPECT_EQ(conf.value("main/name").value(), "Section Testing"); EXPECT_EQ(conf.value("main/number").value(), 10); EXPECT_FALSE(conf.value("main/toggle").value()); } TEST_F(ConfigurationTest, ExtraSection) { EXPECT_EQ(conf.value("over").value(), "extra"); EXPECT_EQ(conf.value("extra/name").value(), "extra section"); EXPECT_EQ(conf.value("extra/number").value(), 12); EXPECT_TRUE(conf.value("extra/toggle").value()); } TEST_F(ConfigurationTest, GlobalInstance) { std::stringstream output; output << *global_conf; EXPECT_EQ(output.str(), "name=global\nnumber=123\ntoggle=true\n") << "operator<< on global_conf before move"; Configuration::move_global(std::move(global_conf)); Configuration g; EXPECT_TRUE(g.value("name")); EXPECT_EQ(g.value("name").value(), "global"); EXPECT_TRUE(g.value("number")); EXPECT_EQ(g.value("number").value(), 123); EXPECT_TRUE(g.value("toggle")); EXPECT_EQ(g.value("toggle").value(), true); EXPECT_FALSE(g.value("nullopt")); output.str(std::string()); output << g; EXPECT_EQ(output.str(), "name=global\nnumber=123\ntoggle=true\n") << "operator<< on global_conf after move"; } int main(int argc, char **argv) { QApplication a(argc, argv); testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }