1
#include <tests/lib/test.h>
3
#include <TelepathyQt/Constants>
4
#include <TelepathyQt/ConnectionCapabilities>
5
#include <TelepathyQt/ConnectionManager>
6
#include <TelepathyQt/PendingReady>
7
#include <TelepathyQt/RequestableChannelClassSpec>
8
#include <TelepathyQt/Types>
10
#include <QtDBus/QtDBus>
13
using namespace Tp::Client;
18
PresenceSpec getPresenceSpec(const PresenceSpecList &specs, const QString &status)
20
Q_FOREACH (const PresenceSpec &spec, specs) {
21
if (spec.presence().status() == status) {
25
return PresenceSpec();
30
class ConnectionManagerAdaptor : public QDBusAbstractAdaptor
33
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ConnectionManager")
34
Q_CLASSINFO("D-Bus Introspection", ""
35
" <interface name=\"org.freedesktop.Telepathy.ConnectionManager\" >\n"
36
" <property name=\"Interfaces\" type=\"as\" access=\"read\" />\n"
37
" <property name=\"Protocols\" type=\"a{sa{sv}}\" access=\"read\" >\n"
38
" <annotation name=\"com.trolltech.QtDBus.QtTypeName\" value=\"Tp::ProtocolPropertiesMap\" />\n"
43
Q_PROPERTY(QStringList Interfaces READ Interfaces)
44
Q_PROPERTY(Tp::ProtocolPropertiesMap Protocols READ Protocols)
47
ConnectionManagerAdaptor(ProtocolPropertiesMap &protocols, QObject *parent)
48
: QDBusAbstractAdaptor(parent),
53
virtual ~ConnectionManagerAdaptor()
58
inline QStringList Interfaces() const
63
inline ProtocolPropertiesMap Protocols() const
69
ProtocolPropertiesMap mProtocols;
70
ParamSpecList mParameters;
73
class ProtocolAdaptor : public QDBusAbstractAdaptor
76
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol")
77
Q_CLASSINFO("D-Bus Introspection", ""
78
" <interface name=\"org.freedesktop.Telepathy.Protocol\" >\n"
79
" <property name=\"Interfaces\" type=\"as\" access=\"read\" />\n"
80
" <property name=\"Parameters\" type=\"a(susv)\" access=\"read\" >\n"
81
" <annotation name=\"com.trolltech.QtDBus.QtTypeName\" value=\"Tp::ParamSpecList\" />\n"
83
" <property name=\"ConnectionInterfaces\" type=\"as\" access=\"read\" />\n"
84
" <property name=\"RequestableChannelClasses\" type=\"a(a{sv}as)\" access=\"read\" >\n"
85
" <annotation name=\"com.trolltech.QtDBus.QtTypeName\" value=\"Tp::RequestableChannelClassList\" />\n"
87
" <property name=\"VCardField\" type=\"s\" access=\"read\" />\n"
88
" <property name=\"EnglishName\" type=\"s\" access=\"read\" />\n"
89
" <property name=\"Icon\" type=\"s\" access=\"read\" />\n"
93
Q_PROPERTY(QStringList Interfaces READ Interfaces)
94
Q_PROPERTY(Tp::ParamSpecList Parameters READ Parameters)
95
Q_PROPERTY(QStringList ConnectionInterfaces READ ConnectionInterfaces)
96
Q_PROPERTY(Tp::RequestableChannelClassList RequestableChannelClasses READ RequestableChannelClasses)
97
Q_PROPERTY(QString VCardField READ VCardField)
98
Q_PROPERTY(QString EnglishName READ EnglishName)
99
Q_PROPERTY(QString Icon READ Icon)
102
ProtocolAdaptor(QObject *parent)
103
: QDBusAbstractAdaptor(parent),
104
introspectionCalled(0)
106
mInterfaces << TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING <<
107
TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS <<
108
TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE;
110
mConnInterfaces << TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS;
112
mRCCs.append(RequestableChannelClassSpec::textChatroom().bareClass());
114
mVCardField = QLatin1String("x-adaptor");
115
mEnglishName = QLatin1String("Adaptor");
116
mIcon = QLatin1String("icon-adaptor");
119
virtual ~ProtocolAdaptor()
123
inline QVariantMap immutableProperties() const
126
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces"),
128
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters"),
129
qVariantFromValue(mParameters));
130
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces"),
132
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"),
133
qVariantFromValue(mRCCs));
134
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField"),
136
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName"),
138
ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon"),
143
public: // Properties
144
inline QStringList Interfaces() const
146
// if we request all properties we are going to get here, so marking as
147
// introspectionCalled;
148
introspectionCalled++;
152
inline Tp::ParamSpecList Parameters() const
157
inline QStringList ConnectionInterfaces() const
159
return mConnInterfaces;
162
inline Tp::RequestableChannelClassList RequestableChannelClasses() const
167
inline QString VCardField() const
172
inline QString EnglishName() const
177
inline QString Icon() const
182
mutable int introspectionCalled;
185
QStringList mInterfaces;
186
ParamSpecList mParameters;
187
QStringList mConnInterfaces;
188
RequestableChannelClassList mRCCs;
190
QString mEnglishName;
194
class ProtocolAddressingAdaptor : public QDBusAbstractAdaptor
197
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Addressing")
198
Q_CLASSINFO("D-Bus Introspection", ""
199
" <interface name=\"org.freedesktop.Telepathy.Protocol.Interface.Addressing\" >\n"
200
" <property name=\"AddressableVCardFields\" type=\"as\" access=\"read\" />\n"
201
" <property name=\"AddressableURISchemes\" type=\"as\" access=\"read\" />\n"
205
Q_PROPERTY(QStringList AddressableVCardFields READ AddressableVCardFields)
206
Q_PROPERTY(QStringList AddressableURISchemes READ AddressableURISchemes)
209
ProtocolAddressingAdaptor(QObject *parent)
210
: QDBusAbstractAdaptor(parent),
211
introspectionCalled(0)
213
mVCardFields << QLatin1String("x-adaptor");
214
mUris << QLatin1String("adaptor");
217
virtual ~ProtocolAddressingAdaptor()
221
inline QVariantMap immutableProperties() const
224
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableVCardFields"),
226
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableURISchemes"),
232
public: // Properties
233
inline QStringList AddressableVCardFields() const
235
// if we request all properties we are going to get here, so marking as
236
// introspectionCalled;
237
introspectionCalled++;
241
inline QStringList AddressableURISchemes() const
246
mutable int introspectionCalled;
249
QStringList mVCardFields;
253
class ProtocolAvatarsAdaptor : public QDBusAbstractAdaptor
256
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Avatars")
257
Q_CLASSINFO("D-Bus Introspection", ""
258
" <interface name=\"org.freedesktop.Telepathy.Protocol.Interface.Avatars\" >\n"
259
" <property name=\"SupportedAvatarMIMETypes\" type=\"as\" access=\"read\" />\n"
260
" <property name=\"MinimumAvatarHeight type=\"u\" access=\"read\" />\n"
261
" <property name=\"MinimumAvatarWidth type=\"u\" access=\"read\" />\n"
262
" <property name=\"RecommendedAvatarHeight type=\"u\" access=\"read\" />\n"
263
" <property name=\"RecommendedAvatarWidth type=\"u\" access=\"read\" />\n"
264
" <property name=\"MaximumAvatarHeight type=\"u\" access=\"read\" />\n"
265
" <property name=\"MaximumAvatarWidth type=\"u\" access=\"read\" />\n"
266
" <property name=\"MaximumAvatarBytes type=\"u\" access=\"read\" />\n"
270
Q_PROPERTY(QStringList SupportedAvatarMIMETypes READ SupportedAvatarMIMETypes)
271
Q_PROPERTY(uint MinimumAvatarHeight READ MinimumAvatarHeight)
272
Q_PROPERTY(uint MinimumAvatarWidth READ MinimumAvatarWidth)
273
Q_PROPERTY(uint RecommendedAvatarHeight READ RecommendedAvatarHeight)
274
Q_PROPERTY(uint RecommendedAvatarWidth READ RecommendedAvatarWidth)
275
Q_PROPERTY(uint MaximumAvatarHeight READ MaximumAvatarHeight)
276
Q_PROPERTY(uint MaximumAvatarWidth READ MaximumAvatarWidth)
277
Q_PROPERTY(uint MaximumAvatarBytes READ MaximumAvatarBytes)
280
ProtocolAvatarsAdaptor(QObject *parent)
281
: QDBusAbstractAdaptor(parent),
282
introspectionCalled(0)
284
mMimeTypes << QLatin1String("image/png");
285
mMinimumAvatarHeight = 16;
286
mMinimumAvatarWidth = 16;
287
mRecommendedAvatarHeight = 32;
288
mRecommendedAvatarWidth = 32;
289
mMaximumAvatarHeight = 64;
290
mMaximumAvatarWidth = 64;
291
mMaximumAvatarBytes = 4096;
294
virtual ~ProtocolAvatarsAdaptor()
298
inline QVariantMap immutableProperties() const
301
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes"),
303
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight"),
304
mMinimumAvatarHeight);
305
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth"),
306
mMinimumAvatarWidth);
307
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight"),
308
mMaximumAvatarHeight);
309
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth"),
310
mMaximumAvatarWidth);
311
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight"),
312
mRecommendedAvatarHeight);
313
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth"),
314
mRecommendedAvatarWidth);
315
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes"),
316
mMaximumAvatarBytes);
320
public: // Properties
321
inline QStringList SupportedAvatarMIMETypes() const
323
// if we request all properties we are going to get here, so marking as
324
// introspectionCalled;
325
introspectionCalled++;
329
inline uint MinimumAvatarHeight() const
331
return mMinimumAvatarHeight;
334
inline uint MinimumAvatarWidth() const
336
return mMinimumAvatarWidth;
339
inline uint RecommendedAvatarHeight() const
341
return mRecommendedAvatarHeight;
344
inline uint RecommendedAvatarWidth() const
346
return mRecommendedAvatarWidth;
349
inline uint MaximumAvatarHeight() const
351
return mMaximumAvatarHeight;
354
inline uint MaximumAvatarWidth() const
356
return mMaximumAvatarWidth;
359
inline uint MaximumAvatarBytes() const
361
return mMaximumAvatarBytes;
364
mutable int introspectionCalled;
367
QStringList mMimeTypes;
368
uint mMinimumAvatarHeight;
369
uint mMinimumAvatarWidth;
370
uint mRecommendedAvatarHeight;
371
uint mRecommendedAvatarWidth;
372
uint mMaximumAvatarHeight;
373
uint mMaximumAvatarWidth;
374
uint mMaximumAvatarBytes;
377
class ProtocolPresenceAdaptor : public QDBusAbstractAdaptor
380
Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Presence")
381
Q_CLASSINFO("D-Bus Introspection", ""
382
" <interface name=\"org.freedesktop.Telepathy.Protocol.Interface.Presence\" >\n"
383
" <property name=\"Statuses\" type=\"a{s(ubb)}\" access=\"read\" >\n"
384
" <annotation name=\"com.trolltech.QtDBus.QtTypeName\" value=\"Tp::SimpleStatusSpecMap\" />\n"
389
Q_PROPERTY(Tp::SimpleStatusSpecMap Statuses READ Statuses)
392
ProtocolPresenceAdaptor(QObject *parent)
393
: QDBusAbstractAdaptor(parent),
394
introspectionCalled(0)
396
SimpleStatusSpec spec;
397
spec.type = ConnectionPresenceTypeAvailable;
398
spec.maySetOnSelf = true;
399
spec.canHaveMessage = false;
400
mStatuses.insert(QLatin1String("available"), spec);
403
virtual ~ProtocolPresenceAdaptor()
407
inline QVariantMap immutableProperties() const
410
ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses"),
411
qVariantFromValue(mStatuses));
415
public: // Properties
416
inline SimpleStatusSpecMap Statuses() const
418
// if we request all properties we are going to get here, so marking as
419
// introspectionCalled;
420
introspectionCalled++;
424
mutable int introspectionCalled;
427
SimpleStatusSpecMap mStatuses;
432
CMHelper(const QString &cmName,
433
bool withProtocolProps = false,
434
bool withProtocolAddressingProps = false,
435
bool withProtocolAvatarsProps = false,
436
bool withProtocolPresenceProps = false)
438
QDBusConnection bus = QDBusConnection::sessionBus();
440
QString cmBusNameBase = TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE;
441
QString cmPathBase = TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE;
443
protocolObject = new QObject();
444
protocolAdaptor = new ProtocolAdaptor(protocolObject);
445
protocolAddressingAdaptor = new ProtocolAddressingAdaptor(protocolObject);
446
protocolAvatarsAdaptor = new ProtocolAvatarsAdaptor(protocolObject);
447
protocolPresenceAdaptor = new ProtocolPresenceAdaptor(protocolObject);
448
QVERIFY(bus.registerService(cmBusNameBase + cmName));
449
QVERIFY(bus.registerObject(cmPathBase + cmName + QLatin1String("/") + cmName,
452
ProtocolPropertiesMap protocols;
453
QVariantMap immutableProperties;
454
if (withProtocolProps) {
455
immutableProperties.unite(protocolAdaptor->immutableProperties());
457
if (withProtocolAddressingProps) {
458
immutableProperties.unite(protocolAddressingAdaptor->immutableProperties());
460
if (withProtocolAvatarsProps) {
461
immutableProperties.unite(protocolAvatarsAdaptor->immutableProperties());
463
if (withProtocolPresenceProps) {
464
immutableProperties.unite(protocolPresenceAdaptor->immutableProperties());
466
protocols.insert(cmName, immutableProperties);
468
cmObject = new QObject();
469
cmAdaptor = new ConnectionManagerAdaptor(protocols, cmObject);
470
QVERIFY(bus.registerService(cmBusNameBase + cmName));
471
QVERIFY(bus.registerObject(cmPathBase + cmName, cmObject));
473
cm = ConnectionManager::create(bus, cmName);
479
delete protocolObject;
482
ConnectionManagerPtr cm;
484
QObject *protocolObject;
485
ConnectionManagerAdaptor *cmAdaptor;
486
ProtocolAdaptor *protocolAdaptor;
487
ProtocolAddressingAdaptor *protocolAddressingAdaptor;
488
ProtocolAvatarsAdaptor *protocolAvatarsAdaptor;
489
ProtocolPresenceAdaptor *protocolPresenceAdaptor;
492
class TestCmProtocol : public Test
497
TestCmProtocol(QObject *parent = 0)
507
void testIntrospection();
508
void testIntrospectionWithManager();
509
void testIntrospectionWithProperties();
510
void testIntrospectionWithSomeProperties();
513
void cleanupTestCase();
516
void testIntrospectionWithAdaptorCommon(const ConnectionManagerPtr &cm);
521
void TestCmProtocol::initTestCase()
526
void TestCmProtocol::init()
531
void TestCmProtocol::testIntrospection()
533
mCM = new CMHelper(QLatin1String("protocolnomanager"), false);
535
ConnectionManagerPtr cm = mCM->cm;
537
QVERIFY(connect(cm->becomeReady(),
538
SIGNAL(finished(Tp::PendingOperation *)),
539
SLOT(expectSuccessfulCall(Tp::PendingOperation *))));
540
QCOMPARE(mLoop->exec(), 0);
541
QCOMPARE(cm->isReady(), true);
543
testIntrospectionWithAdaptorCommon(cm);
545
QVERIFY(mCM->protocolAdaptor->introspectionCalled > 0);
546
QVERIFY(mCM->protocolAddressingAdaptor->introspectionCalled > 0);
547
QVERIFY(mCM->protocolAvatarsAdaptor->introspectionCalled > 0);
548
QVERIFY(mCM->protocolPresenceAdaptor->introspectionCalled > 0);
551
void TestCmProtocol::testIntrospectionWithManager()
553
mCM = new CMHelper(QLatin1String("protocol"), false);
555
ConnectionManagerPtr cm = mCM->cm;
557
QVERIFY(connect(cm->becomeReady(),
558
SIGNAL(finished(Tp::PendingOperation *)),
559
SLOT(expectSuccessfulCall(Tp::PendingOperation *))));
560
QCOMPARE(mLoop->exec(), 0);
561
QCOMPARE(cm->isReady(), true);
563
QCOMPARE(cm->interfaces(), QStringList());
564
QCOMPARE(cm->supportedProtocols(), QStringList() << QLatin1String("protocol"));
566
QVERIFY(cm->hasProtocol(QLatin1String("protocol")));
567
QVERIFY(!cm->hasProtocol(QLatin1String("not-there")));
569
ProtocolInfo info = cm->protocol(QLatin1String("protocol"));
570
QVERIFY(info.isValid());
572
QCOMPARE(info.cmName(), QLatin1String("protocol"));
573
QCOMPARE(info.name(), QLatin1String("protocol"));
574
QCOMPARE(info.parameters().size(), 1);
575
ProtocolParameter param = info.parameters().at(0);
576
QCOMPARE(param.name(), QLatin1String("account"));
577
QCOMPARE(static_cast<uint>(param.type()), static_cast<uint>(QVariant::String));
578
QCOMPARE(param.defaultValue().isNull(), true);
579
QCOMPARE(param.dbusSignature().signature(), QLatin1String("s"));
580
QCOMPARE(param.isRequired(), true);
581
QCOMPARE(param.isRequiredForRegistration(), true); // though it can't register!
582
QCOMPARE(param.isSecret(), false);
583
QVERIFY(!info.canRegister());
584
QVERIFY(!info.capabilities().isSpecificToContact());
585
QVERIFY(!info.capabilities().textChatrooms());
586
QVERIFY(info.capabilities().textChats());
587
QCOMPARE(info.vcardField(), QLatin1String("x-telepathy-protocol"));
588
QCOMPARE(info.englishName(), QLatin1String("Telepathy Protocol"));
589
QCOMPARE(info.iconName(), QLatin1String("im-protocol"));
591
QStringList addressableVCardFields = info.addressableVCardFields();
592
QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-protocol"));
593
QStringList addressableUriSchemes = info.addressableUriSchemes();
594
QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("protocol"));
596
AvatarSpec avatarReqs = info.avatarRequirements();
597
QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes();
598
QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/jpeg"));
599
QCOMPARE(avatarReqs.minimumHeight(), (uint) 32);
600
QCOMPARE(avatarReqs.maximumHeight(), (uint) 96);
601
QCOMPARE(avatarReqs.recommendedHeight(), (uint) 64);
602
QCOMPARE(avatarReqs.minimumWidth(), (uint) 32);
603
QCOMPARE(avatarReqs.maximumWidth(), (uint) 96);
604
QCOMPARE(avatarReqs.recommendedWidth(), (uint) 64);
605
QCOMPARE(avatarReqs.maximumBytes(), (uint) 37748736);
607
PresenceSpecList statuses = info.allowedPresenceStatuses();
608
QCOMPARE(statuses.size(), 2);
609
PresenceSpec spec = getPresenceSpec(statuses, QLatin1String("available"));
610
QVERIFY(spec.isValid());
611
QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable);
612
QVERIFY(spec.maySetOnSelf());
613
QVERIFY(spec.canHaveStatusMessage());
614
spec = getPresenceSpec(statuses, QLatin1String("offline"));
615
QVERIFY(spec.isValid());
616
QVERIFY(spec.presence().type() == ConnectionPresenceTypeOffline);
617
QVERIFY(!spec.maySetOnSelf());
618
QVERIFY(!spec.canHaveStatusMessage());
620
QCOMPARE(mCM->protocolAdaptor->introspectionCalled, 0);
621
QCOMPARE(mCM->protocolAddressingAdaptor->introspectionCalled, 0);
622
QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0);
623
QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0);
626
void TestCmProtocol::testIntrospectionWithProperties()
628
mCM = new CMHelper(QLatin1String("protocolwithprops"),
629
true, true, true, true);
631
ConnectionManagerPtr cm = mCM->cm;
633
QVERIFY(connect(cm->becomeReady(),
634
SIGNAL(finished(Tp::PendingOperation *)),
635
SLOT(expectSuccessfulCall(Tp::PendingOperation *))));
636
QCOMPARE(mLoop->exec(), 0);
637
QCOMPARE(cm->isReady(), true);
639
testIntrospectionWithAdaptorCommon(cm);
641
QCOMPARE(mCM->protocolAdaptor->introspectionCalled, 0);
642
QCOMPARE(mCM->protocolAddressingAdaptor->introspectionCalled, 0);
643
QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0);
644
QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0);
647
void TestCmProtocol::testIntrospectionWithSomeProperties()
649
mCM = new CMHelper(QLatin1String("protocolwithsomeprops"),
650
false, false, true, true);
652
ConnectionManagerPtr cm = mCM->cm;
654
QVERIFY(connect(cm->becomeReady(),
655
SIGNAL(finished(Tp::PendingOperation *)),
656
SLOT(expectSuccessfulCall(Tp::PendingOperation *))));
657
QCOMPARE(mLoop->exec(), 0);
658
QCOMPARE(cm->isReady(), true);
660
testIntrospectionWithAdaptorCommon(cm);
662
QVERIFY(mCM->protocolAdaptor->introspectionCalled > 0);
663
QVERIFY(mCM->protocolAddressingAdaptor->introspectionCalled > 0);
664
QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0);
665
QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0);
668
void TestCmProtocol::testIntrospectionWithAdaptorCommon(const ConnectionManagerPtr &cm)
670
QCOMPARE(cm->interfaces(), QStringList());
671
QCOMPARE(cm->supportedProtocols(), QStringList() << cm->name());
673
QVERIFY(cm->hasProtocol(cm->name()));
674
QVERIFY(!cm->hasProtocol(QLatin1String("not-there")));
676
ProtocolInfo info = cm->protocol(cm->name());
677
QVERIFY(info.isValid());
679
QCOMPARE(info.cmName(), cm->name());
680
QCOMPARE(info.name(), cm->name());
682
QCOMPARE(info.parameters().size(), 0);
683
QVERIFY(!info.canRegister());
684
QVERIFY(!info.capabilities().isSpecificToContact());
685
QVERIFY(info.capabilities().textChatrooms());
686
QVERIFY(!info.capabilities().textChats());
687
QCOMPARE(info.vcardField(), QLatin1String("x-adaptor"));
688
QCOMPARE(info.englishName(), QLatin1String("Adaptor"));
689
QCOMPARE(info.iconName(), QLatin1String("icon-adaptor"));
691
QStringList addressableVCardFields = info.addressableVCardFields();
692
QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-adaptor"));
693
QStringList addressableUriSchemes = info.addressableUriSchemes();
694
QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("adaptor"));
696
AvatarSpec avatarReqs = info.avatarRequirements();
697
QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes();
698
QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/png"));
699
QCOMPARE(avatarReqs.minimumHeight(), (uint) 16);
700
QCOMPARE(avatarReqs.maximumHeight(), (uint) 64);
701
QCOMPARE(avatarReqs.recommendedHeight(), (uint) 32);
702
QCOMPARE(avatarReqs.minimumWidth(), (uint) 16);
703
QCOMPARE(avatarReqs.maximumWidth(), (uint) 64);
704
QCOMPARE(avatarReqs.recommendedWidth(), (uint) 32);
705
QCOMPARE(avatarReqs.maximumBytes(), (uint) 4096);
707
PresenceSpecList statuses = info.allowedPresenceStatuses();
708
QCOMPARE(statuses.size(), 1);
709
PresenceSpec spec = getPresenceSpec(statuses, QLatin1String("available"));
710
QVERIFY(spec.isValid());
711
QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable);
712
QVERIFY(spec.maySetOnSelf());
713
QVERIFY(!spec.canHaveStatusMessage());
714
spec = getPresenceSpec(statuses, QLatin1String("offline"));
715
QVERIFY(!spec.isValid());
718
void TestCmProtocol::cleanup()
723
void TestCmProtocol::cleanupTestCase()
727
cleanupTestCaseImpl();
730
QTEST_MAIN(TestCmProtocol)
731
#include "_gen/cm-protocol.cpp.moc.hpp"