Reflection for RapidJSON 0.0.17
Reflection for serializing/deserializing with RapidJSON
Loading...
Searching...
No Matches
binarygenerator.cpp
Go to the documentation of this file.
1#include "./helper.h"
2#include "./morestructs.h"
3#include "./structs.h"
4
5#include "../codefactory.h"
7
8#include "resources/config.h"
9
10#include <c++utilities/conversion/stringconversion.h>
11#include <c++utilities/io/misc.h>
12#include <c++utilities/tests/testutils.h>
13
14#include <cppunit/TestFixture.h>
15#include <cppunit/extensions/HelperMacros.h>
16
17#include <iostream>
18#include <memory>
19#include <sstream>
20
21using namespace CPPUNIT_NS;
22using namespace CppUtilities;
23using namespace CppUtilities::Literals;
24
28class BinaryGeneratorTests : public TestFixture {
29 CPPUNIT_TEST_SUITE(BinaryGeneratorTests);
31 CPPUNIT_TEST(testPointerHandling);
32 CPPUNIT_TEST_SUITE_END();
33
34public:
38};
39
41
45
50{
52 obj.someInt = 25;
53 obj.someSize = 27;
54 obj.someString = "foo";
55 obj.someBool = true;
56
57 stringstream stream(ios_base::in | ios_base::out | ios_base::binary);
58 stream.exceptions(ios_base::failbit | ios_base::badbit);
59
60 static_cast<BinarySerializable<DerivedTestStruct> &>(obj).toBinary(stream);
61
62 const auto deserializedObj(BinarySerializable<DerivedTestStruct>::fromBinary(stream));
63 CPPUNIT_ASSERT_EQUAL(obj.someInt, deserializedObj.someInt);
64 CPPUNIT_ASSERT_EQUAL(obj.someSize, deserializedObj.someSize);
65 CPPUNIT_ASSERT_EQUAL(obj.someString, deserializedObj.someString);
66 CPPUNIT_ASSERT_EQUAL(obj.someBool, deserializedObj.someBool);
67}
68
78{
80 ps.s1 = make_shared<PointerTarget>(0xF1F2F3F3);
81 ps.s2 = ps.s1;
82 ps.s3 = make_shared<PointerTarget>(0xBBBBBBBB);
83 ps.u1 = make_unique<PointerTarget>(0xF1F2F3F4);
84 ps.u2 = make_unique<PointerTarget>(0xDDDDDDDD);
85 ps.u3 = make_unique<PointerTarget>(0xEEEEEEEE);
86
87 // check whether shared pointer are "wired" as expected
88 ++ps.s1->n; // should affect s2 but not s3
89 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F4), asHexNumber<uint32_t>(ps.s1->n));
90 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F4), asHexNumber<uint32_t>(ps.s2->n));
91 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xBBBBBBBB), asHexNumber<uint32_t>(ps.s3->n));
92
93 // serialize and deserialize
94 stringstream stream(ios_base::in | ios_base::out | ios_base::binary);
95 stream.exceptions(ios_base::failbit | ios_base::badbit);
96 ps.toBinary(stream);
97 const auto deserializedPs(PointerStruct::fromBinary(stream));
98
99 // check shared pointer
100 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F4), asHexNumber<uint32_t>(deserializedPs.s1->n));
101 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F4), asHexNumber<uint32_t>(deserializedPs.s2->n));
102 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xBBBBBBBB), asHexNumber<uint32_t>(deserializedPs.s3->n));
103 ++deserializedPs.s1->n; // should affect s2 but not s3
104 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F5), asHexNumber<uint32_t>(deserializedPs.s1->n));
105 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F5), asHexNumber<uint32_t>(deserializedPs.s2->n));
106 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xBBBBBBBB), asHexNumber<uint32_t>(deserializedPs.s3->n));
107
108 // check unique pointer
109 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xF1F2F3F4), asHexNumber<uint32_t>(deserializedPs.u1->n));
110 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xDDDDDDDD), asHexNumber<uint32_t>(deserializedPs.u2->n));
111 CPPUNIT_ASSERT_EQUAL(asHexNumber<uint32_t>(0xEEEEEEEE), asHexNumber<uint32_t>(deserializedPs.u3->n));
112}
CPPUNIT_TEST_SUITE_REGISTRATION(BinaryGeneratorTests)
The BinaryGeneratorTests class tests the binary generator.
void testSerializationAndDeserialization()
Tests serializing some objects and deserialize them back.
void testPointerHandling()
Tests handling of std::unique_ptr and std::shared_ptr.
The DerivedTestStruct struct inherits from JsonSerializable and should hence have functional fromJson...
Definition structs.h:75
The PointerStruct struct is used to test the behavior of the binary (de)serialization with smart poin...
Definition morestructs.h:64
std::shared_ptr< PointerTarget > s2
Definition morestructs.h:68
std::unique_ptr< PointerTarget > u3
Definition morestructs.h:67
std::unique_ptr< PointerTarget > u2
Definition morestructs.h:66
std::shared_ptr< PointerTarget > s3
Definition morestructs.h:70
std::shared_ptr< PointerTarget > s1
Definition morestructs.h:65
std::unique_ptr< PointerTarget > u1
Definition morestructs.h:69
size_t someSize
Definition structs.h:30
int someInt
Definition structs.h:29
string someString
Definition structs.h:31