Kaynağa Gözat

Implement serialization for bool

- Implement serialization for bool
- Add tests
Alexey Edelev 6 yıl önce
ebeveyn
işleme
b0cacc0e54
2 değiştirilmiş dosya ile 22 ekleme ve 0 silme
  1. 7 0
      src/lib/protobufobject.h
  2. 15 0
      tests/serializationtest.cpp

+ 7 - 0
src/lib/protobufobject.h

@@ -183,6 +183,13 @@ public:
                 fieldIndex = NotUsedFieldIndex;
             }
             break;
+        case QMetaType::Bool:
+            type = Varint;
+            result.append(serializeVarint(propertyValue.toUInt()));
+            if (resultSize == result.size()) {
+                fieldIndex = NotUsedFieldIndex;
+            }
+            break;
         default:
             Q_ASSERT_X(false, staticMetaObject.className(), "Serialization of unknown type is impossible");
         }

+ 15 - 0
tests/serializationtest.cpp

@@ -45,6 +45,7 @@
 #include "repeatedbytesmessage.h"
 #include "repeatedfloatmessage.h"
 #include "repeatedcomplexmessage.h"
+#include "simpleboolmessage.h"
 #include "qtprotobuf.h"
 
 using namespace qtprotobufnamespace::tests;
@@ -1485,3 +1486,17 @@ TEST_F(SerializationTest, RepeatedComplexMessageTest)
     result = test.serialize();
     ASSERT_TRUE(result.isEmpty());
 }
+
+TEST_F(SerializationTest, BoolMessageSerializeTest)
+{
+    SimpleBoolMessage test;
+    test.setTestFieldBool(true);
+    QByteArray result = test.serialize();
+    ASSERT_EQ(2, result.size());
+    ASSERT_TRUE(result == QByteArray::fromHex("0801"));
+
+    test.setTestFieldBool(false);
+    result = test.serialize();
+    ASSERT_EQ(0, result.size());
+    ASSERT_TRUE(result == QByteArray::fromHex(""));
+}