summaryrefslogtreecommitdiffstats
path: root/tests/domainadaptortest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/domainadaptortest.cpp')
-rw-r--r--tests/domainadaptortest.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/domainadaptortest.cpp b/tests/domainadaptortest.cpp
new file mode 100644
index 0000000..d1a9d26
--- /dev/null
+++ b/tests/domainadaptortest.cpp
@@ -0,0 +1,154 @@
1#include <QtTest>
2
3#include <QString>
4#include <QSharedPointer>
5#include <QDebug>
6
7#include "dummyresource/resourcefactory.h"
8#include "clientapi.h"
9
10#include "common/domainadaptor.h"
11#include "common/entitybuffer.h"
12#include "event_generated.h"
13#include "metadata_generated.h"
14#include "entity_generated.h"
15
16class TestEventAdaptor : public Akonadi2::Domain::BufferAdaptor
17{
18public:
19 TestEventAdaptor()
20 : Akonadi2::Domain::BufferAdaptor()
21 {
22 }
23
24 void setProperty(const QString &key, const QVariant &value)
25 {
26 if (mResourceMapper->mWriteAccessors.contains(key)) {
27 // mResourceMapper.setProperty(key, value, mResourceBuffer);
28 } else {
29 // mLocalMapper.;
30 }
31 }
32
33 virtual QVariant getProperty(const QString &key) const
34 {
35 if (mResourceBuffer && mResourceMapper->mReadAccessors.contains(key)) {
36 return mResourceMapper->getProperty(key, mResourceBuffer);
37 } else if (mLocalBuffer) {
38 return mLocalMapper->getProperty(key, mLocalBuffer);
39 }
40 return QVariant();
41 }
42
43 Akonadi2::Domain::Buffer::Event const *mLocalBuffer;
44 Akonadi2::Domain::Buffer::Event const *mResourceBuffer;
45
46 QSharedPointer<PropertyMapper<Akonadi2::Domain::Buffer::Event> > mLocalMapper;
47 QSharedPointer<PropertyMapper<Akonadi2::Domain::Buffer::Event> > mResourceMapper;
48};
49
50class TestFactory : public DomainTypeAdaptorFactory<Akonadi2::Domain::Event, Akonadi2::Domain::Buffer::Event, Akonadi2::Domain::Buffer::Event>
51{
52public:
53 TestFactory()
54 {
55 mResourceMapper = QSharedPointer<PropertyMapper<Akonadi2::Domain::Buffer::Event> >::create();
56 mResourceMapper->mReadAccessors.insert("summary", [](Akonadi2::Domain::Buffer::Event const *buffer) -> QVariant {
57 if (buffer->summary()) {
58 return QString::fromStdString(buffer->summary()->c_str());
59 }
60 return QVariant();
61 });
62 }
63
64 virtual QSharedPointer<Akonadi2::Domain::BufferAdaptor> createAdaptor(const Akonadi2::Entity &entity)
65 {
66 Akonadi2::Domain::Buffer::Event const *resourceBuffer = 0;
67 if (auto resourceData = entity.resource()) {
68 flatbuffers::Verifier verifyer(resourceData->Data(), resourceData->size());
69 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
70 resourceBuffer = Akonadi2::Domain::Buffer::GetEvent(resourceData->Data());
71 if (resourceBuffer->summary()) {
72 qDebug() << QString::fromStdString(std::string(resourceBuffer->summary()->c_str()));
73 }
74 }
75 }
76
77 Akonadi2::Metadata const *metadataBuffer = 0;
78 if (auto metadataData = entity.metadata()) {
79 flatbuffers::Verifier verifyer(metadataData->Data(), metadataData->size());
80 if (Akonadi2::VerifyMetadataBuffer(verifyer)) {
81 metadataBuffer = Akonadi2::GetMetadata(metadataData);
82 }
83 }
84
85 Akonadi2::Domain::Buffer::Event const *localBuffer = 0;
86 if (auto localData = entity.local()) {
87 flatbuffers::Verifier verifyer(localData->Data(), localData->size());
88 if (Akonadi2::Domain::Buffer::VerifyEventBuffer(verifyer)) {
89 localBuffer = Akonadi2::Domain::Buffer::GetEvent(localData);
90 }
91 }
92
93 auto adaptor = QSharedPointer<TestEventAdaptor>::create();
94 adaptor->mLocalBuffer = localBuffer;
95 adaptor->mResourceBuffer = resourceBuffer;
96 adaptor->mResourceMapper = mResourceMapper;
97 adaptor->mLocalMapper = mLocalMapper;
98 return adaptor;
99 }
100};
101
102class DomainAdaptorTest : public QObject
103{
104 Q_OBJECT
105private Q_SLOTS:
106 void initTestCase()
107 {
108 }
109
110 void cleanupTestCase()
111 {
112 }
113
114 void testAdaptor()
115 {
116 //Create entity buffer
117 flatbuffers::FlatBufferBuilder metadataFbb;
118 auto metadataBuilder = Akonadi2::MetadataBuilder(metadataFbb);
119 metadataBuilder.add_revision(1);
120 metadataBuilder.add_processed(false);
121 auto metadataBuffer = metadataBuilder.Finish();
122 Akonadi2::FinishMetadataBuffer(metadataFbb, metadataBuffer);
123
124 flatbuffers::FlatBufferBuilder m_fbb;
125 auto summary = m_fbb.CreateString("summary1");
126 auto description = m_fbb.CreateString("description");
127 static uint8_t rawData[100];
128 auto attachment = m_fbb.CreateVector(rawData, 100);
129
130 auto builder = Akonadi2::Domain::Buffer::EventBuilder(m_fbb);
131 builder.add_summary(summary);
132 builder.add_description(description);
133 builder.add_attachment(attachment);
134 auto buffer = builder.Finish();
135 Akonadi2::Domain::Buffer::FinishEventBuffer(m_fbb, buffer);
136
137 flatbuffers::FlatBufferBuilder fbb;
138 Akonadi2::EntityBuffer::assembleEntityBuffer(fbb, metadataFbb.GetBufferPointer(), metadataFbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize(), m_fbb.GetBufferPointer(), m_fbb.GetSize());
139
140 //Extract entity buffer
141 {
142 std::string data(reinterpret_cast<const char*>(fbb.GetBufferPointer()), fbb.GetSize());
143 Akonadi2::EntityBuffer buffer((void*)(data.data()), data.size());
144
145 TestFactory factory;
146 auto adaptor = factory.createAdaptor(buffer.entity());
147 QCOMPARE(adaptor->getProperty("summary").toString(), QString("summary1"));
148 }
149 }
150
151};
152
153QTEST_MAIN(DomainAdaptorTest)
154#include "domainadaptortest.moc"