diff --git a/test/properties/_properties.cxx b/test/properties/_properties.cxx index 063320f3..54c8315d 100644 --- a/test/properties/_properties.cxx +++ b/test/properties/_properties.cxx @@ -6,168 +6,190 @@ * copied verbatim in the file "LICENSE" * ********************************************************************************/ -#include #include #include #include - +#include #include namespace { using namespace std; +using namespace fair::mq; -struct TestEvent : fair::mq::Event {}; - -TEST(Properties, ConversionToString) +template +auto set_and_get(ProgOptions& options, const string& key, T value) -> void { - fair::mq::ProgOptions o; - o.SetProperty("_char", 'a'); - o.SetProperty("_signed char", -2); - o.SetProperty("_unsigned char", 2); - o.SetProperty("_const char*", "testcstring"); - o.SetProperty("_string", "teststring"); - o.SetProperty("_int", 1); - o.SetProperty("_size_t", 11); - o.SetProperty("_uint32_t", 12); - o.SetProperty("_uint64_t", 123); - o.SetProperty("_long", 1234); - o.SetProperty("_long long", 12345); - o.SetProperty("_unsigned", 3); - o.SetProperty("_unsigned long", 32); - o.SetProperty("_unsigned long long", 321); - o.SetProperty("_float", 3.2); - o.SetProperty("_double", 33.22); - o.SetProperty("_long double", 333.222); - o.SetProperty("_bool", true); - o.SetProperty>("_vector", { true, true }); - o.SetProperty("_boost::filesystem::path", boost::filesystem::path("C:\\Windows")); - o.SetProperty>("_vector", { 'a', 'b', 'c' }); - o.SetProperty>("_vector", { -1, -2, -3 }); - o.SetProperty>("_vector", { 1, 2, 3 }); - o.SetProperty>("_vector", { "aa", "bb", "cc" }); - o.SetProperty>("_vector", { 1, 2, 3 }); - o.SetProperty>("_vector", { 1, 2, 3 }); - o.SetProperty>("_vector", { 12, 13, 14 }); - o.SetProperty>("_vector", { 123, 124, 125 }); - o.SetProperty>("_vector", { 1234, 1235, 1236 }); - o.SetProperty>("_vector", { 12345, 12346, 12347 }); - o.SetProperty>("_vector", { 3, 4, 5 }); - o.SetProperty>("_vector", { 32, 33, 34 }); - o.SetProperty>("_vector", { 321, 322, 323 }); - o.SetProperty>("_vector", { 3.2, 3.3, 3.4 }); - o.SetProperty>("_vector", { 33.22, 33.23, 33.24 }); - o.SetProperty>("_vector", { 333.222, 333.223, 333.224 }); - o.SetProperty>("_vector", { boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") }); - - ASSERT_EQ(o.GetPropertyAsString("_char"), "a"); - ASSERT_EQ(o.GetPropertyAsString("_signed char"), "-2"); - ASSERT_EQ(o.GetPropertyAsString("_unsigned char"), "2"); - ASSERT_EQ(o.GetPropertyAsString("_const char*"), "testcstring"); - ASSERT_EQ(o.GetPropertyAsString("_string"), "teststring"); - ASSERT_EQ(o.GetPropertyAsString("_int"), "1"); - ASSERT_EQ(o.GetPropertyAsString("_size_t"), "11"); - ASSERT_EQ(o.GetPropertyAsString("_uint32_t"), "12"); - ASSERT_EQ(o.GetPropertyAsString("_uint64_t"), "123"); - ASSERT_EQ(o.GetPropertyAsString("_long"), "1234"); - ASSERT_EQ(o.GetPropertyAsString("_long long"), "12345"); - ASSERT_EQ(o.GetPropertyAsString("_unsigned"), "3"); - ASSERT_EQ(o.GetPropertyAsString("_unsigned long"), "32"); - ASSERT_EQ(o.GetPropertyAsString("_unsigned long long"), "321"); - ASSERT_EQ(o.GetPropertyAsString("_float"), "3.2"); - ASSERT_EQ(o.GetPropertyAsString("_double"), "33.22"); - ASSERT_EQ(o.GetPropertyAsString("_long double"), "333.222"); - ASSERT_EQ(o.GetPropertyAsString("_bool"), "true"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "true, true"); - ASSERT_EQ(o.GetPropertyAsString("_boost::filesystem::path"), "\"C:\\Windows\""); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "a, b, c"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "-1, -2, -3"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "1, 2, 3"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "aa, bb, cc"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "1, 2, 3"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "1, 2, 3"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "12, 13, 14"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "123, 124, 125"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "1234, 1235, 1236"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "12345, 12346, 12347"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "3, 4, 5"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "32, 33, 34"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "321, 322, 323"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "3.2, 3.3, 3.4"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "33.22, 33.23, 33.24"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "333.222, 333.223, 333.224"); - ASSERT_EQ(o.GetPropertyAsString("_vector"), "\"C:\\Windows\", \"C:\\Windows\\System32\""); + std::cout << key << std::endl; + options.SetProperty(key, value); + EXPECT_EQ(options.GetPropertyAsString(key), + PropertyHelper::ConvertPropertyToString(Property(value))); + EXPECT_EQ(options.GetProperty(key), value); } -TEST(Properties, EventEmissionAndStringConversion) +TEST(ProgOptions, SetAndGet) { - fair::mq::ProgOptions o; + ProgOptions o; - o.Subscribe("test", [](const string& /* key */, char e) { ASSERT_EQ(e, 'a'); }); - o.Subscribe("test", [](const string& /* key */, signed char e) { ASSERT_EQ(e, -2); }); - o.Subscribe("test", [](const string& /* key */, unsigned char e) { ASSERT_EQ(e, 2); }); - o.Subscribe("test", [](const string& /* key */, const char* e) { ASSERT_EQ(e, "testcstring"); }); - o.Subscribe("test", [](const string& /* key */, string e) { ASSERT_EQ(e, "teststring"); }); - o.Subscribe("test", [](const string& /* key */, int e) { ASSERT_EQ(e, 1); }); - o.Subscribe("test", [](const string& /* key */, long e) { ASSERT_EQ(e, 1234); }); - o.Subscribe("test", [](const string& /* key */, long long e) { ASSERT_EQ(e, 12345); }); - o.Subscribe("test", [](const string& /* key */, unsigned e) { ASSERT_EQ(e, 3); }); - o.Subscribe("test", [](const string& /* key */, unsigned long e) { ASSERT_EQ(e, 32); }); - o.Subscribe("test", [](const string& /* key */, unsigned long long e) { ASSERT_EQ(e, 321); }); - o.Subscribe("test", [](const string& /* key */, float e) { ASSERT_EQ(e, 3.2f); }); - o.Subscribe("test", [](const string& /* key */, double e) { ASSERT_EQ(e, 33.22); }); - o.Subscribe("test", [](const string& /* key */, long double e) { ASSERT_EQ(e, 333.222); }); - o.Subscribe("test", [](const string& /* key */, bool e) { ASSERT_EQ(e, true); }); - o.Subscribe("test", [](const string& /* key */, boost::filesystem::path e) { ASSERT_EQ(e, boost::filesystem::path("C:\\Windows")); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ true, true })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 'a', 'b', 'c' })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ -1, -2, -3 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 1, 2, 3 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ "aa", "bb", "cc" })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 1, 2, 3 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 1234, 1235, 1236 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 12345, 12346, 12347 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 3, 4, 5 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 32, 33, 34 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 321, 322, 323 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 3.2, 3.3, 3.4 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 33.22, 33.23, 33.24 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ 333.222, 333.223, 333.224 })); }); - o.Subscribe>("test", [](const string& /* key */, vector e) { ASSERT_EQ(e, vector({ boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") })); }); + set_and_get(o, "_char", 'a'); + set_and_get(o, "_signed char", -2); + set_and_get(o, "_unsigned char", 2); + set_and_get(o, "_const char*", "testcstring"); + set_and_get(o, "_string", "teststring"); + set_and_get(o, "_int", 1); + set_and_get(o, "_size_t", 11); + set_and_get(o, "_uint32_t", 12); + set_and_get(o, "_uint64_t", 123); + set_and_get(o, "_long", 1234); + set_and_get(o, "_long long", 12345); + set_and_get(o, "_unsigned", 3); + set_and_get(o, "_unsigned long", 32); + set_and_get(o, "_unsigned long long", 321); + set_and_get(o, "_float", 3.2); + set_and_get(o, "_double", 33.22); + set_and_get(o, "_long double", 333.222); + set_and_get(o, "_bool", true); + set_and_get(o, "_boost::filesystem::path", boost::filesystem::path("C:\\Windows")); + set_and_get>(o, "_vector", { true, true }); + set_and_get>(o, "_vector", { 'a', 'b', 'c' }); + set_and_get>(o, "_vector", { -1, -2, -3 }); + set_and_get>(o, "_vector", { 1, 2, 3 }); + set_and_get>(o, "_vector", { "aa", "bb", "cc" }); + set_and_get>(o, "_vector", { 1, 2, 3 }); + set_and_get>(o, "_vector", { 1, 2, 3 }); + set_and_get>(o, "_vector", { 12, 13, 14 }); + set_and_get>(o, "_vector", { 123, 124, 125 }); + set_and_get>(o, "_vector", { 1234, 1235, 1236 }); + set_and_get>(o, "_vector", { 12345, 12346, 12347 }); + set_and_get>(o, "_vector", { 3, 4, 5 }); + set_and_get>(o, "_vector", { 32, 33, 34 }); + set_and_get>(o, "_vector", { 321, 322, 323 }); + set_and_get>(o, "_vector", { 3.2, 3.3, 3.4 }); + set_and_get>(o, "_vector", { 33.22, 33.23, 33.24 }); + set_and_get>(o, "_vector", { 333.222, 333.223, 333.224 }); + set_and_get>(o, "_vector", { boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") }); +} - o.SetProperty("_char", 'a'); - o.SetProperty("_signed char", -2); - o.SetProperty("_unsigned char", 2); - o.SetProperty("_const char*", "testcstring"); - o.SetProperty("_string", "teststring"); - o.SetProperty("_int", 1); - o.SetProperty("_long", 1234); - o.SetProperty("_long long", 12345); - o.SetProperty("_unsigned", 3); - o.SetProperty("_unsigned long", 32); - o.SetProperty("_unsigned long long", 321); - o.SetProperty("_float", 3.2); - o.SetProperty("_double", 33.22); - o.SetProperty("_long double", 333.222); - o.SetProperty("_bool", true); - o.SetProperty>("_vector", { true, true }); - o.SetProperty("_boost::filesystem::path", boost::filesystem::path("C:\\Windows")); - o.SetProperty>("_vector", { 'a', 'b', 'c' }); - o.SetProperty>("_vector", { -1, -2, -3 }); - o.SetProperty>("_vector", { 1, 2, 3 }); - o.SetProperty>("_vector", { "aa", "bb", "cc" }); - o.SetProperty>("_vector", { 1, 2, 3 }); - o.SetProperty>("_vector", { 1234, 1235, 1236 }); - o.SetProperty>("_vector", { 12345, 12346, 12347 }); - o.SetProperty>("_vector", { 3, 4, 5 }); - o.SetProperty>("_vector", { 32, 33, 34 }); - o.SetProperty>("_vector", { 321, 322, 323 }); - o.SetProperty>("_vector", { 3.2, 3.3, 3.4 }); - o.SetProperty>("_vector", { 33.22, 33.23, 33.24 }); - o.SetProperty>("_vector", { 333.222, 333.223, 333.224 }); - o.SetProperty>("_vector", { boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") }); +template +auto subscribe_and_set(ProgOptions& options, const string& expected_key, T expected_value) + -> void +{ + std::cout << expected_key << std::endl; + const string subscriber("test"); + const string different_key("different"); + ASSERT_NE(expected_key, different_key); + int type_events(0); + int asstring_events(0); + int total_events(0); + options.Subscribe(subscriber, [&](const string& key, T value) { + if (expected_key == key) { + ++type_events; + EXPECT_EQ(value, expected_value); + } + ++total_events; + }); + options.SubscribeAsString(subscriber, [&](const string& key, string value) { + if (expected_key == key) { + ++asstring_events; + EXPECT_EQ(value, PropertyHelper::ConvertPropertyToString(Property(value))); + } + ++total_events; + }); + options.SetProperty(expected_key, expected_value); + options.Unsubscribe(subscriber); + options.SetProperty(different_key, expected_value); + options.SetProperty(expected_key, expected_value); + options.UnsubscribeAsString(subscriber); + options.SetProperty(expected_key, expected_value); + EXPECT_EQ(type_events, 1); + EXPECT_EQ(asstring_events, 2); + EXPECT_EQ(total_events, 4); +} + +TEST(ProgOptions, SubscribeAndSet) +{ + ProgOptions o; + + subscribe_and_set(o, "_char", 'a'); + subscribe_and_set(o, "_signed char", -2); + subscribe_and_set(o, "_unsigned char", 2); + subscribe_and_set(o, "_const char*", "testcstring"); + subscribe_and_set(o, "_string", "teststring"); + subscribe_and_set(o, "_int", 1); + subscribe_and_set(o, "_size_t", 11); + subscribe_and_set(o, "_uint32_t", 12); + subscribe_and_set(o, "_uint64_t", 123); + subscribe_and_set(o, "_long", 1234); + subscribe_and_set(o, "_long long", 12345); + subscribe_and_set(o, "_unsigned", 3); + subscribe_and_set(o, "_unsigned long", 32); + subscribe_and_set(o, "_unsigned long long", 321); + subscribe_and_set(o, "_float", 3.2); + subscribe_and_set(o, "_double", 33.22); + subscribe_and_set(o, "_long double", 333.222); + subscribe_and_set(o, "_bool", true); + subscribe_and_set(o, "_boost::filesystem::path", boost::filesystem::path("C:\\Windows")); + subscribe_and_set>(o, "_vector", { true, true }); + subscribe_and_set>(o, "_vector", { 'a', 'b', 'c' }); + subscribe_and_set>(o, "_vector", { -1, -2, -3 }); + subscribe_and_set>(o, "_vector", { 1, 2, 3 }); + subscribe_and_set>(o, "_vector", { "aa", "bb", "cc" }); + subscribe_and_set>(o, "_vector", { 1, 2, 3 }); + subscribe_and_set>(o, "_vector", { 1, 2, 3 }); + subscribe_and_set>(o, "_vector", { 12, 13, 14 }); + subscribe_and_set>(o, "_vector", { 123, 124, 125 }); + subscribe_and_set>(o, "_vector", { 1234, 1235, 1236 }); + subscribe_and_set>(o, "_vector", { 12345, 12346, 12347 }); + subscribe_and_set>(o, "_vector", { 3, 4, 5 }); + subscribe_and_set>(o, "_vector", { 32, 33, 34 }); + subscribe_and_set>(o, "_vector", { 321, 322, 323 }); + subscribe_and_set>(o, "_vector", { 3.2, 3.3, 3.4 }); + subscribe_and_set>(o, "_vector", { 33.22, 33.23, 33.24 }); + subscribe_and_set>(o, "_vector", { 333.222, 333.223, 333.224 }); + subscribe_and_set>(o, "_vector", { boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") }); +} + +TEST(PropertyHelper, ConvertPropertyToString) +{ + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast('a'))), "a"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(-2))), "-2"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(2))), "2"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast("testcstring"))), "testcstring"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast("teststring"))), "teststring"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(1))), "1"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(11))), "11"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(12))), "12"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(123))), "123"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(1234))), "1234"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(12345))), "12345"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(3))), "3"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(32))), "32"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(321))), "321"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(3.2))), "3.2"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(33.22))), "33.22"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(333.222))), "333.222"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(static_cast(true))), "true"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(boost::filesystem::path("C:\\Windows"))), "\"C:\\Windows\""); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 'a', 'b', 'c' }))), "a, b, c"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ -1, -2, -3 }))), "-1, -2, -3"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 1, 2, 3 }))), "1, 2, 3"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ "aa", "bb", "cc" }))), "aa, bb, cc"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 1, 2, 3 }))), "1, 2, 3"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 1, 2, 3 }))), "1, 2, 3"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 12, 13, 14 }))), "12, 13, 14"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 123, 124, 125 }))), "123, 124, 125"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 1234, 1235, 1236 }))), "1234, 1235, 1236"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 12345, 12346, 12347 }))), "12345, 12346, 12347"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 3, 4, 5 }))), "3, 4, 5"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 32, 33, 34 }))), "32, 33, 34"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 321, 322, 323 }))), "321, 322, 323"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 3.2, 3.3, 3.4 }))), "3.2, 3.3, 3.4"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 33.22, 33.23, 33.24 }))), "33.22, 33.23, 33.24"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ 333.222, 333.223, 333.224 }))), "333.222, 333.223, 333.224"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ true, true }))), "true, true"); + EXPECT_EQ(PropertyHelper::ConvertPropertyToString(Property(vector({ boost::filesystem::path("C:\\Windows"), boost::filesystem::path("C:\\Windows\\System32") }))), "\"C:\\Windows\", \"C:\\Windows\\System32\""); } } // namespace