From ff92ba945b32f8f0d11a85add7df932ec61af766 Mon Sep 17 00:00:00 2001 From: Philip Rauwolf Date: Wed, 16 Jan 2013 16:53:35 +0100 Subject: [PATCH] Added tests for Variant input --- src/test/DBusInputStreamTest.cpp | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/test/DBusInputStreamTest.cpp b/src/test/DBusInputStreamTest.cpp index 947d20e..7e997ff 100644 --- a/src/test/DBusInputStreamTest.cpp +++ b/src/test/DBusInputStreamTest.cpp @@ -5,6 +5,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include +#include #include #include @@ -234,6 +235,8 @@ TEST_F(InputStreamTest, ReadsStrings) { } } + + namespace bmw { namespace test { @@ -377,6 +380,87 @@ TEST_F(InputStreamTest, ReadsArraysInArrays) { } } +TEST_F(InputStreamTest, ReadsBasicVariants) { + int32_t fromInt = 5; + int8_t varIndex = 3; + + for (int i = 0; i < numOfElements; i += 1) { + DBusMessageIter subIter; + dbus_message_iter_open_container(&libdbusMessageWriteIter, DBUS_TYPE_STRUCT, NULL, &subIter); + dbus_message_iter_append_basic(&subIter, DBUS_TYPE_BYTE, &varIndex); + DBusMessageIter subSubIter; + dbus_message_iter_open_container(&subIter, DBUS_TYPE_VARIANT, "i", &subSubIter); + dbus_message_iter_append_basic(&subSubIter, DBUS_TYPE_INT32, &fromInt); + dbus_message_iter_close_container(&subIter, &subSubIter); + dbus_message_iter_close_container(&libdbusMessageWriteIter, &subIter); + } + + CommonAPI::DBus::DBusMessage scopedMessage(libdbusMessage); + CommonAPI::DBus::DBusInputStream inStream(scopedMessage); + + CommonAPI::Variant referenceVariant(fromInt); + + bool success; + int32_t referenceResult = referenceVariant.get(success); + EXPECT_TRUE(success); + + EXPECT_EQ(numOfElements*4 + numOfElements*4, scopedMessage.getBodyLength()); + for (int i = 0; i < numOfElements; i += 1) { + CommonAPI::Variant readVariant; + inStream >> readVariant; + + bool readSuccess; + int32_t actualResult = readVariant.get(readSuccess); + EXPECT_TRUE(readSuccess); + + bool varEq = (referenceVariant == readVariant); + EXPECT_TRUE(varEq); + EXPECT_EQ(referenceResult, actualResult); + } +} + +TEST_F(InputStreamTest, ReadsStringVariants) { + std::string fromString = "Hello World with CommonAPI Variants!"; + int8_t varIndex = 1; + + for (int i = 0; i < numOfElements; i += 1) { + DBusMessageIter subIter; + dbus_message_iter_open_container(&libdbusMessageWriteIter, DBUS_TYPE_STRUCT, NULL, &subIter); + dbus_message_iter_append_basic(&subIter, DBUS_TYPE_BYTE, &varIndex); + DBusMessageIter subSubIter; + dbus_message_iter_open_container(&subIter, DBUS_TYPE_VARIANT, "s", &subSubIter); + dbus_message_iter_append_basic(&subSubIter, DBUS_TYPE_STRING, &fromString); + dbus_message_iter_close_container(&subIter, &subSubIter); + dbus_message_iter_close_container(&libdbusMessageWriteIter, &subIter); + } + + CommonAPI::DBus::DBusMessage scopedMessage(libdbusMessage); + CommonAPI::DBus::DBusInputStream inStream(scopedMessage); + + CommonAPI::Variant referenceVariant(fromString); + + bool success; + std::string referenceResult = referenceVariant.get(success); + EXPECT_TRUE(success); + + //Variant: type-index(1) + padding(3) + stringLength(4) + string(37) = 45 + // +struct-padding inbetween (alignment 8) + EXPECT_EQ(numOfElements * (1+3+4+fromString.length()+1) + (numOfElements - 1) * (8-((fromString.length()+1)%8)) , scopedMessage.getBodyLength()); + for (int i = 0; i < numOfElements; i += 1) { + CommonAPI::Variant readVariant; + inStream >> readVariant; + + bool readSuccess; + std::string actualResult = readVariant.get(readSuccess); + EXPECT_TRUE(readSuccess); + + bool variantsAreEqual = (referenceVariant == readVariant); + EXPECT_TRUE(variantsAreEqual); + EXPECT_EQ(referenceResult, actualResult); + } +} + + int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); -- 2.7.4