1
#include <QtCore/QString>
2
#include <QtTest/QtTest>
4
#include <maliit/attributeextension.h>
8
typedef std::tr1::shared_ptr<Maliit::AttributeExtension> SharedAttributeExtension;
10
typedef std::vector<std::pair<QString, QVariant> > KeyValueContainer;
12
Q_DECLARE_METATYPE(KeyValueContainer)
15
SharedAttributeExtension createDefault()
17
return SharedAttributeExtension(new Maliit::AttributeExtension(QString()));
20
int id(const SharedAttributeExtension &ptr)
25
template<typename Container>
26
bool containsNoDuplicates(const Container &container)
28
std::vector<typename Container::value_type> copy(container.begin(), container.end());
29
std::sort(copy.begin(), copy.end());
30
return std::unique(copy.begin(), copy.end()) == copy.end();
34
explicit SetAttribute(const SharedAttributeExtension &newExtension) :
35
extension(newExtension)
38
void operator() (const std::pair<QString, QVariant> &keyValue)
40
extension->setAttribute(keyValue.first, keyValue.second);
44
SharedAttributeExtension extension;
47
struct CompareAttribute {
48
explicit CompareAttribute(const SharedAttributeExtension &newExtension) :
49
extension(newExtension)
52
void operator() (const std::pair<QString, QVariant> &keyValue)
54
QCOMPARE(extension->attributes().value(keyValue.first), keyValue.second);
58
SharedAttributeExtension extension;
61
void compareAttributes(const SharedAttributeExtension &extension, const KeyValueContainer &result)
63
QCOMPARE(extension->attributes().size(), static_cast<int>(result.size()));
64
std::for_each(result.begin(), result.end(), CompareAttribute(extension));
68
class Ut_Maliit_AttributeExtension : public QObject
73
void testDefaultFilename();
74
void testDefaultAttributes();
77
void testAttributes();
78
void testAttributes_data();
81
void Ut_Maliit_AttributeExtension::testDefaultFilename()
83
const SharedAttributeExtension subject = createDefault();
85
QCOMPARE(subject->fileName(), QString());
88
void Ut_Maliit_AttributeExtension::testDefaultAttributes()
90
const SharedAttributeExtension subject = createDefault();
92
QVERIFY(subject->attributes().empty());
95
void Ut_Maliit_AttributeExtension::testFilename()
97
const QString testName = QString::fromLatin1("TestName");
98
const SharedAttributeExtension subject(new Maliit::AttributeExtension(testName));
100
QCOMPARE(subject->fileName(), testName);
103
void Ut_Maliit_AttributeExtension::testIdsUnique()
105
std::vector<SharedAttributeExtension> subjects(10);
106
std::generate(subjects.begin(), subjects.end(), &createDefault);
108
std::vector<int> ids(subjects.size());
109
std::transform(subjects.begin(), subjects.end(), ids.begin(), &id);
111
QVERIFY(containsNoDuplicates(ids));
114
void Ut_Maliit_AttributeExtension::testAttributes()
116
QFETCH(KeyValueContainer, attributes);
117
QFETCH(KeyValueContainer, result);
119
const SharedAttributeExtension subject = createDefault();
120
std::for_each(attributes.begin(), attributes.end(), SetAttribute(subject));
122
compareAttributes(subject, result);
125
void Ut_Maliit_AttributeExtension::testAttributes_data()
127
QTest::addColumn<KeyValueContainer>("attributes");
128
QTest::addColumn<KeyValueContainer>("result");
130
KeyValueContainer attributes;
131
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey1"), QVariant(1000)));
132
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey2"), QVariant(2000)));
133
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey3"), QVariant(3000)));
134
KeyValueContainer result(attributes.begin(), attributes.end());
136
QTest::newRow("add") << attributes << result;
138
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey1"), QVariant(1100)));
139
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey2"), QVariant(2000)));
140
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey3"), QVariant(3000)));
142
result.assign(attributes.begin() + 3, attributes.end());
144
QTest::newRow("change") << attributes << result;
146
// One cannot remove attributes just override them with an empty value
147
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey1"), QVariant()));
148
attributes.push_back(std::make_pair(QString::fromLatin1("TestKey2"), QVariant()));
150
result.assign(attributes.begin() + 5, attributes.end());
152
QTest::newRow("remove") << attributes << result;
155
QTEST_APPLESS_MAIN(Ut_Maliit_AttributeExtension)
157
#include "ut_maliit_attributeextension.moc"