ACF $AcfVersion:0$
CMemoryArchiveTest.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QObject>
7#include <QtTest/QtTest>
8
9// ACF includes
12#include <iser/ISerializable.h>
13#include <iser/IArchive.h>
14#include <iser/CArchiveTag.h>
15
16
17class CMemoryArchiveTest: public QObject
18{
19 Q_OBJECT
20
21private Q_SLOTS:
22 void BasicSerializationTest();
23 void PrimitiveTypesTest();
24 void StringSerializationTest();
25 void ResetPositionTest();
26
27private:
28 class SimpleModel: virtual public iser::ISerializable
29 {
30 public:
31 virtual bool Serialize(iser::IArchive& archive) override
32 {
33 static iser::CArchiveTag tag("Value", "Integer value");
34 bool retVal = archive.BeginTag(tag);
35 retVal = retVal && archive.Process(value);
36 retVal = retVal && archive.EndTag(tag);
37 return retVal;
38 }
39
40 int value = 0;
41 };
42
43 class ComplexModel: virtual public iser::ISerializable
44 {
45 public:
46 virtual bool Serialize(iser::IArchive& archive) override
47 {
48 static iser::CArchiveTag intTag("IntValue", "Integer value");
49 static iser::CArchiveTag doubleTag("DoubleValue", "Double value");
50 static iser::CArchiveTag stringTag("StringValue", "String value");
51
52 bool retVal = archive.BeginTag(intTag);
53 retVal = retVal && archive.Process(intValue);
54 retVal = retVal && archive.EndTag(intTag);
55
56 retVal = retVal && archive.BeginTag(doubleTag);
57 retVal = retVal && archive.Process(doubleValue);
58 retVal = retVal && archive.EndTag(doubleTag);
59
60 retVal = retVal && archive.BeginTag(stringTag);
61 retVal = retVal && archive.Process(stringValue);
62 retVal = retVal && archive.EndTag(stringTag);
63
64 return retVal;
65 }
66
67 int intValue = 0;
68 double doubleValue = 0.0;
69 QString stringValue;
70
71 bool operator==(const ComplexModel& other) const
72 {
73 return intValue == other.intValue &&
74 qFuzzyCompare(doubleValue, other.doubleValue) &&
75 stringValue == other.stringValue;
76 }
77 };
78};
79
80
Process tag used to group data in archive stream.
Definition CArchiveTag.h:22
Represents an input/output persistence archive for object serialization.
Definition IArchive.h:164
virtual bool Process(bool &value)=0
Processes (reads or writes) a boolean value.
virtual bool EndTag(const CArchiveTag &tag)=0
Ends a tagged section in the archive.
virtual bool BeginTag(const CArchiveTag &tag)=0
Begins a tagged section in the archive.
Common class for all classes which objects can be archived or restored from archive.