summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2012-04-13 17:49:44 +0300
committerGeorge Kiagiadakis <george.kiagiadakis@collabora.com>2012-04-13 17:49:48 +0300
commit9cd3b18be5b410d60f20c4bd066054698e304a3d (patch)
treec6b2608d6d78413d3f019ca34e5d251ae4310c9b
parentb85446e1ee7a75de412f0de8e948139b31579532 (diff)
parentb47b911b7bb1d3298be0be1f2a3cafe43169d6f5 (diff)
Merge branch 'presence-additions'
Reviewed-by: Andre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>
-rw-r--r--TelepathyQt/presence.cpp118
-rw-r--r--TelepathyQt/presence.h26
-rw-r--r--tests/dbus/base-protocol.cpp34
-rw-r--r--tests/presence.cpp35
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)