Improve option support & tests for key-value trees
[alexxy/gromacs.git] / src / gromacs / utility / tests / keyvaluetreeserializer.cpp
index f94866c8a6766a42086265227a2df0e284ac7c5b..6f2e092c07133d1f67c0f7e7e7d1249aa2d6aa75 100644 (file)
@@ -38,6 +38,7 @@
 
 #include <gtest/gtest.h>
 
+#include "gromacs/utility/inmemoryserializer.h"
 #include "gromacs/utility/iserializer.h"
 #include "gromacs/utility/keyvaluetreebuilder.h"
 
 namespace
 {
 
-class RefDataWriteSerializer : public gmx::ISerializer
+class RefDataSerializer : public gmx::ISerializer
 {
     public:
-        RefDataWriteSerializer(gmx::test::TestReferenceChecker *parentChecker,
-                               const char                      *id)
+        RefDataSerializer(gmx::test::TestReferenceChecker *parentChecker,
+                          const char                      *id)
             : checker_(parentChecker->checkCompound("SerializedData", id))
         {
         }
@@ -86,46 +87,6 @@ class RefDataWriteSerializer : public gmx::ISerializer
         gmx::test::TestReferenceChecker checker_;
 };
 
-class RefDataReadSerializer : public gmx::ISerializer
-{
-    public:
-        RefDataReadSerializer(gmx::test::TestReferenceChecker *parentChecker,
-                              const char                      *id)
-            : checker_(parentChecker->checkCompound("SerializedData", id))
-        {
-        }
-
-        virtual bool reading() const { return true; }
-
-        virtual void doUChar(unsigned char *value)
-        {
-            *value = checker_.readUChar(nullptr);
-        }
-        virtual void doInt(int *value)
-        {
-            *value = checker_.readInteger(nullptr);
-        }
-        virtual void doInt64(gmx_int64_t *value)
-        {
-            *value = checker_.readInt64(nullptr);
-        }
-        virtual void doFloat(float *value)
-        {
-            *value = checker_.readFloat(nullptr);
-        }
-        virtual void doDouble(double *value)
-        {
-            *value = checker_.readDouble(nullptr);
-        }
-        virtual void doString(std::string *value)
-        {
-            *value = checker_.readString(nullptr);
-        }
-
-    private:
-        gmx::test::TestReferenceChecker checker_;
-};
-
 class KeyValueTreeSerializerTest : public ::testing::Test
 {
     public:
@@ -136,18 +97,27 @@ class KeyValueTreeSerializerTest : public ::testing::Test
             gmx::test::TestReferenceChecker   checker(data.rootChecker());
             checker.checkKeyValueTreeObject(input, "Input");
             {
-                RefDataWriteSerializer        serializer(&checker, "Stream");
+                RefDataSerializer             serializer(&checker, "Stream");
                 gmx::serializeKeyValueTree(input, &serializer);
             }
+            std::vector<char>                 buffer = serializeTree(input);
             {
-                RefDataReadSerializer         serializer(&checker, "Stream");
+                gmx::InMemoryDeserializer     deserializer(buffer);
                 gmx::KeyValueTreeObject       output
-                    = gmx::deserializeKeyValueTree(&serializer);
+                    = gmx::deserializeKeyValueTree(&deserializer);
                 checker.checkKeyValueTreeObject(output, "Input");
             }
         }
 
         gmx::KeyValueTreeBuilder builder_;
+
+    private:
+        std::vector<char> serializeTree(const gmx::KeyValueTreeObject &tree)
+        {
+            gmx::InMemorySerializer serializer;
+            gmx::serializeKeyValueTree(tree, &serializer);
+            return serializer.finishAndGetBuffer();
+        }
 };
 
 TEST_F(KeyValueTreeSerializerTest, EmptyTree)