Bugfixing TypeStream, further integration of it into OutputStream
authorPhilip Rauwolf <rauwolf@itestra.de>
Wed, 16 Jan 2013 09:15:13 +0000 (10:15 +0100)
committerPhilip Rauwolf <rauwolf@itestra.de>
Wed, 16 Jan 2013 09:15:13 +0000 (10:15 +0100)
src/CommonAPI/DBus/DBusOutputStream.h
src/test/DBusOutputStreamTest.cpp

index 15f4817..ca13fb2 100644 (file)
@@ -128,7 +128,7 @@ class DBusTypeOutputStream: public TypeOutputStream {
     }
 
     inline virtual void writeVariantType()  {
-        signature_.append("v");
+        signature_.append("(yv)");
     }
 
     inline virtual std::string retrieveSignature() {
@@ -251,6 +251,9 @@ class DBusOutputStream: public OutputStream {
         rememberCurrentStreamPosition();
     }
     virtual void beginWriteVectorOfSerializableVariants(uint32_t sizeOfVector) {
+        beginWriteGenericVector();
+        alignToBoundary(8);
+        rememberCurrentStreamPosition();
     }
     virtual void beginWriteVectorOfVectors(uint32_t sizeOfVector) {
         beginWriteGenericVector();
@@ -291,6 +294,7 @@ class DBusOutputStream: public OutputStream {
        }
 
     virtual void beginWriteSerializableVariant(const SerializableVariant& serializableVariant) {
+        alignToBoundary(8);
         writeValue(serializableVariant.getValueType());
 
         DBusTypeOutputStream typeOutputStream;
@@ -298,9 +302,7 @@ class DBusOutputStream: public OutputStream {
         writeSignature(std::move(typeOutputStream.retrieveSignature()));
     }
 
-    virtual void endWriteSerializableVariant(const SerializableVariant& serializableVariant) {
-        //TODO
-    }
+    virtual void endWriteSerializableVariant(const SerializableVariant& serializableVariant) {}
 
        virtual bool hasError() const {
                return dbusError_;
index 2b0cce3..b1c50f2 100644 (file)
@@ -11,6 +11,7 @@
 #include <CommonAPI/DBus/DBusOutputStream.h>
 #include <CommonAPI/DBus/DBusInputStream.h>
 #include <CommonAPI/SerializableStruct.h>
+#include <CommonAPI/SerializableVariant.h>
 
 
 class OutputStreamTest: public ::testing::Test {
@@ -504,6 +505,51 @@ TEST_F(OutputStreamTest, WritesArraysInArrays) {
   }
 }
 
+typedef CommonAPI::Variant<int8_t, uint32_t, double, std::string> BasicTypeVariant;
+
+TEST_F(OutputStreamTest, WritesBasicTypeVariants) {
+  numOfElements = 4;
+  const char* signature = "(yv)(yv)(yv)(yv)";
+  message = CommonAPI::DBus::DBusMessage::createMethodCall(busName, objectPath, interfaceName, methodName, signature);
+  CommonAPI::DBus::DBusOutputStream outStream(message);
+
+  int8_t fromInt8Value = 7;
+  uint32_t fromUInt32Value = 42;
+  double fromDoubleValue = 13.37;
+  std::string fromStringValue = "Hai :)";
+  BasicTypeVariant int8Variant(fromInt8Value);
+  BasicTypeVariant uint32Variant(fromUInt32Value);
+  BasicTypeVariant doubleVariant(fromDoubleValue);
+  BasicTypeVariant stringVariant(fromStringValue);
+
+  /* TODO:
+  testVector.push_back(inner);
+
+  //4 * (1(byte) + 2(signature length + content)) + 1(int8_t) + 4(uint32_t) + 8(double) +
+  outStream.reserveMemory(numOfElements * numOfElements * 4 + numOfElements * 4 + 4);
+  outStream << testVector;
+  outStream.flush();
+
+  EXPECT_EQ(numOfElements*numOfElements*4 + numOfElements*4 + 4, message.getBodyLength());
+
+  CommonAPI::DBus::DBusInputStream inStream(message);
+  std::vector<std::vector<int32_t>> verifyVector;
+  inStream >> verifyVector;
+
+  int32_t res1;
+  int32_t res2;
+  for (int i = 0; i < numOfElements; i++) {
+    std::vector<int32_t> innerVerify = verifyVector[i];
+    for (int j = 0; j < numOfElements; j += 2) {
+      res1 = innerVerify[j];
+      EXPECT_EQ(val1, res1);
+      res2 = innerVerify[j + 1];
+      EXPECT_EQ(val2, res2);
+    }
+  }
+  */
+}
+
 namespace com {
 namespace bmw {
 namespace test {