diff options
author | George Kiagiadakis <george.kiagiadakis@collabora.com> | 2012-04-13 17:49:44 +0300 |
---|---|---|
committer | George Kiagiadakis <george.kiagiadakis@collabora.com> | 2012-04-13 17:49:48 +0300 |
commit | 9cd3b18be5b410d60f20c4bd066054698e304a3d (patch) | |
tree | c6b2608d6d78413d3f019ca34e5d251ae4310c9b | |
parent | b85446e1ee7a75de412f0de8e948139b31579532 (diff) | |
parent | b47b911b7bb1d3298be0be1f2a3cafe43169d6f5 (diff) |
Merge branch 'presence-additions'
Reviewed-by: Andre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>
-rw-r--r-- | TelepathyQt/presence.cpp | 118 | ||||
-rw-r--r-- | TelepathyQt/presence.h | 26 | ||||
-rw-r--r-- | tests/dbus/base-protocol.cpp | 34 | ||||
-rw-r--r-- | tests/presence.cpp | 35 |
4 files changed, 207 insertions, 6 deletions
diff --git a/TelepathyQt/presence.cpp b/TelepathyQt/presence.cpp index 3cb8756b..823067dc 100644 --- a/TelepathyQt/presence.cpp +++ b/TelepathyQt/presence.cpp @@ -80,6 +80,11 @@ Presence Presence::available(const QString &statusMessage) return Presence(ConnectionPresenceTypeAvailable, QLatin1String("available"), statusMessage); } +Presence Presence::chat(const QString &statusMessage) +{ + return Presence(ConnectionPresenceTypeAvailable, QLatin1String("chat"), statusMessage); +} + Presence Presence::away(const QString &statusMessage) { return Presence(ConnectionPresenceTypeAway, QLatin1String("away"), statusMessage); @@ -95,6 +100,11 @@ Presence Presence::busy(const QString &statusMessage) return Presence(ConnectionPresenceTypeBusy, QLatin1String("busy"), statusMessage); } +Presence Presence::dnd(const QString &statusMessage) +{ + return Presence(ConnectionPresenceTypeBusy, QLatin1String("dnd"), statusMessage); +} + Presence Presence::xa(const QString &statusMessage) { return Presence(ConnectionPresenceTypeExtendedAway, QLatin1String("xa"), statusMessage); @@ -253,6 +263,114 @@ PresenceSpec::~PresenceSpec() { } +PresenceSpec PresenceSpec::available(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeAvailable; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("available"), spec); +} + +PresenceSpec PresenceSpec::chat(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeAvailable; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("chat"), spec); +} + +PresenceSpec PresenceSpec::pstn(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeAvailable; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("pstn"), spec); +} + +PresenceSpec PresenceSpec::away(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeAway; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("away"), spec); +} + +PresenceSpec PresenceSpec::brb(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeAway; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("brb"), spec); +} + +PresenceSpec PresenceSpec::busy(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeBusy; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("busy"), spec); +} + +PresenceSpec PresenceSpec::dnd(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeBusy; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("dnd"), spec); +} + +PresenceSpec PresenceSpec::xa(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeExtendedAway; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("xa"), spec); +} + +PresenceSpec PresenceSpec::hidden(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeHidden; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("hidden"), spec); +} + +PresenceSpec PresenceSpec::offline(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeOffline; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("offline"), spec); +} + +PresenceSpec PresenceSpec::unknown(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeUnknown; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("unknown"), spec); +} + +PresenceSpec PresenceSpec::error(PresenceSpec::SimpleStatusFlags flags) +{ + SimpleStatusSpec spec; + spec.type = ConnectionPresenceTypeError; + spec.maySetOnSelf = flags & MaySetOnSelf; + spec.canHaveMessage = flags & CanHaveStatusMessage; + return PresenceSpec(QLatin1String("error"), spec); +} + PresenceSpec &PresenceSpec::operator=(const PresenceSpec &other) { this->mPriv = other.mPriv; diff --git a/TelepathyQt/presence.h b/TelepathyQt/presence.h index 5b07365f..31fd056a 100644 --- a/TelepathyQt/presence.h +++ b/TelepathyQt/presence.h @@ -43,9 +43,11 @@ public: ~Presence(); static Presence available(const QString &statusMessage = QString()); + static Presence chat(const QString &statusMessage = QString()); static Presence away(const QString &statusMessage = QString()); static Presence brb(const QString &statusMessage = QString()); static Presence busy(const QString &statusMessage = QString()); + static Presence dnd(const QString &statusMessage = QString()); static Presence xa(const QString &statusMessage = QString()); static Presence hidden(const QString &statusMessage = QString()); static Presence offline(const QString &statusMessage = QString()); @@ -75,11 +77,32 @@ private: class TP_QT_EXPORT PresenceSpec { public: + enum SimpleStatusFlag { + NoFlags = 0, + MaySetOnSelf = 0x1, + CanHaveStatusMessage = 0x2, + AllFlags = MaySetOnSelf | CanHaveStatusMessage + }; + Q_DECLARE_FLAGS(SimpleStatusFlags, SimpleStatusFlag); + PresenceSpec(); PresenceSpec(const QString &status, const SimpleStatusSpec &spec); PresenceSpec(const PresenceSpec &other); ~PresenceSpec(); + static PresenceSpec available(SimpleStatusFlags flags = AllFlags); + static PresenceSpec chat(SimpleStatusFlags flags = AllFlags); + static PresenceSpec pstn(SimpleStatusFlags flags = CanHaveStatusMessage); + static PresenceSpec away(SimpleStatusFlags flags = AllFlags); + static PresenceSpec brb(SimpleStatusFlags flags = AllFlags); + static PresenceSpec dnd(SimpleStatusFlags flags = AllFlags); + static PresenceSpec busy(SimpleStatusFlags flags = AllFlags); + static PresenceSpec xa(SimpleStatusFlags flags = AllFlags); + static PresenceSpec hidden(SimpleStatusFlags flags = AllFlags); + static PresenceSpec offline(SimpleStatusFlags flags = CanHaveStatusMessage); + static PresenceSpec unknown(SimpleStatusFlags flags = CanHaveStatusMessage); + static PresenceSpec error(SimpleStatusFlags flags = CanHaveStatusMessage); + bool isValid() const { return mPriv.constData() != 0; } PresenceSpec &operator=(const PresenceSpec &other); @@ -137,9 +160,12 @@ public: } }; +Q_DECLARE_OPERATORS_FOR_FLAGS(PresenceSpec::SimpleStatusFlags) + } // Tp Q_DECLARE_METATYPE(Tp::Presence); Q_DECLARE_METATYPE(Tp::PresenceSpec); +Q_DECLARE_METATYPE(Tp::PresenceSpecList); #endif diff --git a/tests/dbus/base-protocol.cpp b/tests/dbus/base-protocol.cpp index 3eaf985e..c73c46f4 100644 --- a/tests/dbus/base-protocol.cpp +++ b/tests/dbus/base-protocol.cpp @@ -118,7 +118,11 @@ void TestBaseProtocolCM::createCM(TestBaseProtocolCMPtr &cm) QVERIFY(protocol->plugInterface(avatarsIface)); BaseProtocolPresenceInterfacePtr presenceIface = BaseProtocolPresenceInterface::create(); - //TODO add statuses on presenceIface + presenceIface->setStatuses(PresenceSpecList() + << PresenceSpec::available() + << PresenceSpec::away() + << PresenceSpec::busy() + << PresenceSpec::offline()); QVERIFY(protocol->plugInterface(presenceIface)); QVERIFY(cm->addProtocol(protocol)); @@ -620,9 +624,24 @@ void TestBaseProtocol::presenceIfaceSvcSideCb(TestBaseProtocolCMPtr &cm) //presence interface PresenceSpecList statuses = iface->statuses(); - QVERIFY(statuses.isEmpty()); + QCOMPARE(statuses.size(), 4); + QVERIFY(statuses.contains(PresenceSpec::available())); + QVERIFY(statuses.contains(PresenceSpec::away())); + QVERIFY(statuses.contains(PresenceSpec::busy())); + QVERIFY(statuses.contains(PresenceSpec::offline())); + QVERIFY(!statuses.contains(PresenceSpec::xa())); - //TODO properly test statuses + //immutable properties + QVariantMap props = protocol->immutableProperties(); + QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses"))); + statuses = PresenceSpecList(qvariant_cast<SimpleStatusSpecMap>(props.value( + TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses")))); + QCOMPARE(statuses.size(), 4); + QVERIFY(statuses.contains(PresenceSpec::available())); + QVERIFY(statuses.contains(PresenceSpec::away())); + QVERIFY(statuses.contains(PresenceSpec::busy())); + QVERIFY(statuses.contains(PresenceSpec::offline())); + QVERIFY(!statuses.contains(PresenceSpec::xa())); } void TestBaseProtocol::presenceIfaceSvcSide() @@ -646,9 +665,12 @@ void TestBaseProtocol::presenceIfaceClientSide() //presence interface PresenceSpecList statuses = protocol.allowedPresenceStatuses(); - QVERIFY(statuses.isEmpty()); - - //TODO properly test statuses + QCOMPARE(statuses.size(), 4); + QVERIFY(statuses.contains(PresenceSpec::available())); + QVERIFY(statuses.contains(PresenceSpec::away())); + QVERIFY(statuses.contains(PresenceSpec::busy())); + QVERIFY(statuses.contains(PresenceSpec::offline())); + QVERIFY(!statuses.contains(PresenceSpec::xa())); } void TestBaseProtocol::cleanup() diff --git a/tests/presence.cpp b/tests/presence.cpp index c89bcb7d..9283513d 100644 --- a/tests/presence.cpp +++ b/tests/presence.cpp @@ -47,6 +47,11 @@ void TestPresence::testPresence() pr = Presence::available(QLatin1String("I am available")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("available"), QLatin1String("I am available")); + pr = Presence::chat(); + TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("chat"), QString()); + pr = Presence::chat(QLatin1String("I am chat")); + TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("chat"), QLatin1String("I am chat")); + pr = Presence::away(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAway, QLatin1String("away"), QString()); pr = Presence::away(QLatin1String("I am away")); @@ -62,6 +67,11 @@ void TestPresence::testPresence() pr = Presence::busy(QLatin1String("I am busy")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("busy"), QLatin1String("I am busy")); + pr = Presence::dnd(); + TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("dnd"), QString()); + pr = Presence::dnd(QLatin1String("I am dnd")); + TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("dnd"), QLatin1String("I am dnd")); + pr = Presence::xa(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeExtendedAway, QLatin1String("xa"), QString()); pr = Presence::xa(QLatin1String("I am xa")); @@ -124,6 +134,31 @@ void TestPresence::testPresenceSpec() TEST_PRESENCE_SPEC_FULL(QLatin1String("away"), ConnectionPresenceTypeAway, true, true); TEST_PRESENCE_SPEC_FULL(QLatin1String("xa"), ConnectionPresenceTypeExtendedAway, false, false); TEST_PRESENCE_SPEC_FULL(QLatin1String("offline"), ConnectionPresenceTypeOffline, true, false); + + spec = PresenceSpec::available(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("available"), ConnectionPresenceTypeAvailable, true, true); + spec = PresenceSpec::chat(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("chat"), ConnectionPresenceTypeAvailable, true, true); + spec = PresenceSpec::pstn(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("pstn"), ConnectionPresenceTypeAvailable, false, true); + spec = PresenceSpec::away(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("away"), ConnectionPresenceTypeAway, true, true); + spec = PresenceSpec::brb(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("brb"), ConnectionPresenceTypeAway, true, true); + spec = PresenceSpec::busy(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("busy"), ConnectionPresenceTypeBusy, true, true); + spec = PresenceSpec::dnd(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("dnd"), ConnectionPresenceTypeBusy, true, true); + spec = PresenceSpec::xa(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("xa"), ConnectionPresenceTypeExtendedAway, true, true); + spec = PresenceSpec::hidden(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("hidden"), ConnectionPresenceTypeHidden, true, true); + spec = PresenceSpec::offline(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("offline"), ConnectionPresenceTypeOffline, false, true); + spec = PresenceSpec::unknown(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("unknown"), ConnectionPresenceTypeUnknown, false, true); + spec = PresenceSpec::error(); + TEST_PRESENCE_SPEC(spec, true, QLatin1String("error"), ConnectionPresenceTypeError, false, true); } QTEST_MAIN(TestPresence) |