diff options
Diffstat (limited to 'tests/domainadaptortest.cpp')
-rw-r--r-- | tests/domainadaptortest.cpp | 154 |
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 | |||
16 | class TestEventAdaptor : public Akonadi2::Domain::BufferAdaptor | ||
17 | { | ||
18 | public: | ||
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 | |||
50 | class TestFactory : public DomainTypeAdaptorFactory<Akonadi2::Domain::Event, Akonadi2::Domain::Buffer::Event, Akonadi2::Domain::Buffer::Event> | ||
51 | { | ||
52 | public: | ||
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 | |||
102 | class DomainAdaptorTest : public QObject | ||
103 | { | ||
104 | Q_OBJECT | ||
105 | private 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 | |||
153 | QTEST_MAIN(DomainAdaptorTest) | ||
154 | #include "domainadaptortest.moc" | ||