#include "utils.hpp" #include #include #include #include "gtest/gtest.h" using namespace std::string_literals; TEST(TemplateCharReplace, replaceOneInt) { nlohmann::json j = {{"foo", "$bus"}}; auto it = j.begin(); DBusInterface data; data["BUS"] = 23; templateCharReplace(it, data, 0); nlohmann::json expected = 23; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, replaceOneStr) { nlohmann::json j = {{"foo", "$TEST"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = std::string("Test"); templateCharReplace(it, data, 0); nlohmann::json expected = "Test"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, replaceSecondStr) { nlohmann::json j = {{"foo", "the $TEST"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = std::string("Test"); templateCharReplace(it, data, 0); nlohmann::json expected = "the Test"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, replaceMiddleStr) { nlohmann::json j = {{"foo", "the $TEST worked"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = std::string("Test"); templateCharReplace(it, data, 0); nlohmann::json expected = "the Test worked"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, replaceLastStr) { nlohmann::json j = {{"foo", "the Test $TEST"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 23; templateCharReplace(it, data, 0); nlohmann::json expected = "the Test 23"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, increment) { nlohmann::json j = {{"foo", "3 plus 1 equals $TEST + 1"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 3; templateCharReplace(it, data, 0); nlohmann::json expected = "3 plus 1 equals 4"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, decrement) { nlohmann::json j = {{"foo", "3 minus 1 equals $TEST - 1 !"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 3; templateCharReplace(it, data, 0); nlohmann::json expected = "3 minus 1 equals 2 !"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, modulus) { nlohmann::json j = {{"foo", "3 mod 2 equals $TEST % 2"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 3; templateCharReplace(it, data, 0); nlohmann::json expected = "3 mod 2 equals 1"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, multiply) { nlohmann::json j = {{"foo", "3 * 2 equals $TEST * 2"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 3; templateCharReplace(it, data, 0); nlohmann::json expected = "3 * 2 equals 6"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, divide) { nlohmann::json j = {{"foo", "4 / 2 equals $TEST / 2"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 4; templateCharReplace(it, data, 0); nlohmann::json expected = "4 / 2 equals 2"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, multiMath) { nlohmann::json j = {{"foo", "4 * 2 % 6 equals $TEST * 2 % 6"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 4; templateCharReplace(it, data, 0); nlohmann::json expected = "4 * 2 % 6 equals 2"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, twoReplacements) { nlohmann::json j = {{"foo", "$FOO $BAR"}}; auto it = j.begin(); DBusInterface data; data["FOO"] = std::string("foo"); data["BAR"] = std::string("bar"); templateCharReplace(it, data, 0); nlohmann::json expected = "foo bar"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, twoReplacementsWithMath) { nlohmann::json j = {{"foo", "4 / 2 equals $TEST / 2 $BAR"}}; auto it = j.begin(); DBusInterface data; data["TEST"] = 4; data["BAR"] = std::string("bar"); templateCharReplace(it, data, 0); nlohmann::json expected = "4 / 2 equals 2 bar"; } TEST(TemplateCharReplace, twoReplacementsWithMath2) { nlohmann::json j = {{"foo", "4 / 2 equals $ADDRESS / 2 $BAR"}}; auto it = j.begin(); DBusInterface data; data["ADDRESS"] = 4; data["BAR"] = std::string("bar"); templateCharReplace(it, data, 0); nlohmann::json expected = "4 / 2 equals 2 bar"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, hexAndWrongCase) { nlohmann::json j = {{"Address", "0x54"}, {"Bus", 15}, {"Name", "$bus sensor 0"}, {"Type", "SomeType"}}; DBusInterface data; data["BUS"] = 15; for (auto it = j.begin(); it != j.end(); it++) { templateCharReplace(it, data, 0); } nlohmann::json expected = {{"Address", 84}, {"Bus", 15}, {"Name", "15 sensor 0"}, {"Type", "SomeType"}}; EXPECT_EQ(expected, j); } TEST(TemplateCharReplace, replaceSecondAsInt) { nlohmann::json j = {{"foo", "twelve is $TEST"}}; auto it = j.begin(); DBusInterface data; data["test"] = 12; templateCharReplace(it, data, 0); nlohmann::json expected = "twelve is 12"; EXPECT_EQ(expected, j["foo"]); } TEST(TemplateCharReplace, singleHex) { nlohmann::json j = {{"foo", "0x54"}}; auto it = j.begin(); DBusInterface data; templateCharReplace(it, data, 0); nlohmann::json expected = 84; EXPECT_EQ(expected, j["foo"]); } TEST(MatchProbe, stringEqString) { nlohmann::json j = R"("foo")"_json; DBusValueVariant v = "foo"s; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, stringRegexEqString) { nlohmann::json j = R"("foo*")"_json; DBusValueVariant v = "foobar"s; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqString) { nlohmann::json j = R"("foobar")"_json; DBusValueVariant v = "foo"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringRegexError) { nlohmann::json j = R"("foo[")"_json; DBusValueVariant v = "foobar"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringRegexNotPrefix) { nlohmann::json j = R"("foo(?!bar)...foo")"_json; DBusValueVariant v1 = "foobarfoo"s; DBusValueVariant v2 = "foofoofoo"s; EXPECT_FALSE(matchProbe(j, v1)); EXPECT_TRUE(matchProbe(j, v2)); } TEST(MatchProbe, stringZeroNeqFalse) { nlohmann::json j = R"("0")"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringOneNeqTrue) { nlohmann::json j = R"("1")"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringElevenNeqTrue) { nlohmann::json j = R"("11")"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringFalseNeqFalse) { nlohmann::json j = R"("false")"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringTrueNeqTrue) { nlohmann::json j = R"("true")"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringFalseNeqTrue) { nlohmann::json j = R"("false")"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqUint8) { nlohmann::json j = R"("255")"_json; DBusValueVariant v = uint8_t(255); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqUint8Overflow) { nlohmann::json j = R"("65535")"_json; DBusValueVariant v = uint8_t(255); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringFalseNeqUint8Zero) { nlohmann::json j = R"("false")"_json; DBusValueVariant v = uint8_t(0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringTrueNeqUint8Zero) { nlohmann::json j = R"("true")"_json; DBusValueVariant v = uint8_t(1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqUint32) { nlohmann::json j = R"("11")"_json; DBusValueVariant v = uint32_t(11); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqInt32) { nlohmann::json j = R"("-11")"_json; DBusValueVariant v = int32_t(-11); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringRegexNeqInt32) { nlohmann::json j = R"("1*4")"_json; DBusValueVariant v = int32_t(124); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqUint64) { nlohmann::json j = R"("foo")"_json; DBusValueVariant v = uint64_t(65535); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqDouble) { nlohmann::json j = R"("123.4")"_json; DBusValueVariant v = double(123.4); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqEmpty) { nlohmann::json j = R"("-123.4")"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, stringNeqArray) { nlohmann::json j = R"("-123.4")"_json; DBusValueVariant v = std::vector{1, 2}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, boolNeqString) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = "false"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueEqTrue) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = true; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, falseEqFalse) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = false; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqFalse) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqInt32Zero) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = int32_t(0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqInt32NegativeOne) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = int32_t(-1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, falseNeqUint32One) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = uint32_t(1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, falseNeqUint32Zero) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = uint32_t(0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqDoubleNegativeOne) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = double(-1.1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqDoubleOne) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = double(1.0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, falseNeqDoubleOne) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = double(1.0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, falseNeqDoubleZero) { nlohmann::json j = R"(false)"_json; DBusValueVariant v = double(0.0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, falseNeqEmpty) { nlohmann::json j = R"(false)"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqEmpty) { nlohmann::json j = R"(true)"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, trueNeqArray) { nlohmann::json j = R"(true)"_json; DBusValueVariant v = std::vector{1, 2}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqString) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = "11"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqTrue) { nlohmann::json j = R"(1)"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqFalse) { nlohmann::json j = R"(0)"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintEqUint8) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = uint8_t(11); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqUint8) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = uint8_t(12); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqUint8Overflow) { nlohmann::json j = R"(65535)"_json; DBusValueVariant v = uint8_t(255); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintEqInt8) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = int8_t(11); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, uintEqDouble) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = double(11.0); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqDouble) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = double(11.7); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqEmpty) { nlohmann::json j = R"(11)"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, uintNeqArray) { nlohmann::json j = R"(11)"_json; DBusValueVariant v = std::vector{11}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intNeqString) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = "-11"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intNeqTrue) { nlohmann::json j = R"(-1)"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intNeqUint8) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = uint8_t(11); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intEqInt8) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = int8_t(-11); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, intNeqDouble) { nlohmann::json j = R"(-124)"_json; DBusValueVariant v = double(-123.0); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intEqDouble) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = double(-11.0); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, intNeqDoubleRound) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = double(-11.7); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intNeqEmpty) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, intNeqArray) { nlohmann::json j = R"(-11)"_json; DBusValueVariant v = std::vector{11}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqString) { nlohmann::json j = R"(0.0)"_json; DBusValueVariant v = "0.0"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqFalse) { nlohmann::json j = R"(0.0)"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqTrue) { nlohmann::json j = R"(1.0)"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleEqInt32) { nlohmann::json j = R"(-124.0)"_json; DBusValueVariant v = int32_t(-124); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqInt32) { nlohmann::json j = R"(-124.0)"_json; DBusValueVariant v = int32_t(-123); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleRoundNeqInt) { nlohmann::json j = R"(124.7)"_json; DBusValueVariant v = int32_t(124); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleEqDouble) { nlohmann::json j = R"(-124.2)"_json; DBusValueVariant v = double(-124.2); EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqDouble) { nlohmann::json j = R"(-124.3)"_json; DBusValueVariant v = double(-124.2); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqEmpty) { nlohmann::json j = R"(-11.0)"_json; DBusValueVariant v; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, doubleNeqArray) { nlohmann::json j = R"(-11.2)"_json; DBusValueVariant v = std::vector{11}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqString) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = "hello"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqFalse) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqTrue) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqUint8) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = uint8_t(1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqInt32) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = int32_t(-1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqDouble) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = double(1.1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayEqArray) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = std::vector{1, 2}; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqArrayDiffSize1) { nlohmann::json j = R"([1, 2, 3])"_json; DBusValueVariant v = std::vector{1, 2}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqArrayDiffSize2) { nlohmann::json j = R"([1, 2])"_json; DBusValueVariant v = std::vector{1, 2, 3}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, emptyArrayEqEmptyArray) { nlohmann::json j = R"([])"_json; DBusValueVariant v = std::vector{}; EXPECT_TRUE(matchProbe(j, v)); } TEST(MatchProbe, emptyArrayNeqArray) { nlohmann::json j = R"([])"_json; DBusValueVariant v = std::vector{1}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, arrayNeqEmptyArray) { nlohmann::json j = R"([1])"_json; DBusValueVariant v = std::vector{}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqString) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = "hello"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqFalse) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqTrue) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqUint8) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = uint8_t(1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqInt32) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = int32_t(-1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqDouble) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = double(1.1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, objNeqArray) { nlohmann::json j = R"({"foo": "bar"})"_json; DBusValueVariant v = std::vector{1, 2}; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqString) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = "hello"s; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqFalse) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = false; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqTrue) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = true; EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqUint8) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = uint8_t(1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqInt32) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = int32_t(-1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqDouble) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = double(1.1); EXPECT_FALSE(matchProbe(j, v)); } TEST(MatchProbe, nullNeqArray) { nlohmann::json j = R"(null)"_json; DBusValueVariant v = std::vector{}; EXPECT_FALSE(matchProbe(j, v)); }