[telepathy-qt4/master] streamed-media-chan test: Added tests for StreamedMediaChannel hold interface support.

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Wed Aug 12 08:56:52 PDT 2009


---
 tests/dbus/streamed-media-chan.cpp |  149 ++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 0 deletions(-)

diff --git a/tests/dbus/streamed-media-chan.cpp b/tests/dbus/streamed-media-chan.cpp
index f26f48c..0de4d08 100644
--- a/tests/dbus/streamed-media-chan.cpp
+++ b/tests/dbus/streamed-media-chan.cpp
@@ -44,6 +44,8 @@ protected Q_SLOTS:
     void onChanInvalidated(Tp::DBusProxy *,
             const QString &, const QString &);
     void onNewChannels(const Tp::ChannelDetailsList &);
+    void onHoldStateChanged(Tp::LocalHoldState,
+            Tp::LocalHoldStateReason);
 
 private Q_SLOTS:
     void initTestCase();
@@ -54,6 +56,8 @@ private Q_SLOTS:
     void testOutgoingCallNoAnswer();
     void testOutgoingCallTerminate();
     void testIncomingCall();
+    void testHold();
+    void testHoldNoUnhold();
 
     void cleanup();
     void cleanupTestCase();
@@ -78,6 +82,8 @@ private:
     Tp::MediaStreamPendingSend mSDCPendingReturn;
     MediaStreamPtr mSSCStreamReturn;
     Tp::MediaStreamState mSSCStateReturn;
+    UIntList mHoldStates;
+    UIntList mHoldStateReasons;
 };
 
 void TestStreamedMediaChan::expectRequestContactsFinished(PendingOperation *op)
@@ -226,6 +232,14 @@ void TestStreamedMediaChan::onNewChannels(const Tp::ChannelDetailsList &channels
     }
 }
 
+void TestStreamedMediaChan::onHoldStateChanged(Tp::LocalHoldState holdState,
+        Tp::LocalHoldStateReason holdStateReason)
+{
+    mHoldStates.append(holdState);
+    mHoldStateReasons.append(holdStateReason);
+    mLoop->exit(0);
+}
+
 void TestStreamedMediaChan::initTestCase()
 {
     initTestCaseImpl();
@@ -286,6 +300,8 @@ void TestStreamedMediaChan::init()
     mSDCPendingReturn = (Tp::MediaStreamPendingSend) -1;
     mSSCStateReturn = (Tp::MediaStreamState) -1;
     mSSCStreamReturn.reset();
+    mHoldStates.clear();
+    mHoldStateReasons.clear();
 }
 
 void TestStreamedMediaChan::testOutgoingCall()
@@ -795,6 +811,139 @@ void TestStreamedMediaChan::testIncomingCall()
     QCOMPARE(mSSCStateReturn, Tp::MediaStreamStateConnected);
 }
 
+void TestStreamedMediaChan::testHold()
+{
+    QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList() << "bob"),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectRequestContactsFinished(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mRequestContactsReturn.size() == 1);
+    ContactPtr otherContact = mRequestContactsReturn.first();
+    QVERIFY(otherContact);
+
+    QVariantMap request;
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".ChannelType"),
+                   TELEPATHY_INTERFACE_CHANNEL_TYPE_STREAMED_MEDIA);
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".TargetHandleType"),
+                   Tp::HandleTypeContact);
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".TargetHandle"),
+                   otherContact->handle()[0]);
+    QVERIFY(connect(mConn->createChannel(request),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectCreateChannelFinished(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mChan);
+
+    QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureHoldState),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureHoldState));
+
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateUnheld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonNone));
+
+    QVERIFY(connect(mChan.data(),
+                    SIGNAL(holdStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)),
+                    SLOT(onHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason))));
+    // Request hold
+    QVERIFY(connect(mChan->requestHold(true),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    while (mHoldStates.size() != 2) {
+        QCOMPARE(mLoop->exec(), 0);
+    }
+    QCOMPARE(mHoldStates.first(), static_cast<uint>(LocalHoldStatePendingHold));
+    QCOMPARE(mHoldStateReasons.first(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(mHoldStates.last(), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(mHoldStateReasons.last(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
+
+    mHoldStates.clear();
+    mHoldStateReasons.clear();
+
+    // Request unhold
+    QVERIFY(connect(mChan->requestHold(false),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    while (mHoldStates.size() != 2) {
+        QCOMPARE(mLoop->exec(), 0);
+    }
+    QCOMPARE(mHoldStates.first(), static_cast<uint>(LocalHoldStatePendingUnhold));
+    QCOMPARE(mHoldStateReasons.first(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(mHoldStates.last(), static_cast<uint>(LocalHoldStateUnheld));
+    QCOMPARE(mHoldStateReasons.last(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateUnheld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
+}
+
+void TestStreamedMediaChan::testHoldNoUnhold()
+{
+    QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList() << "bob (no unhold)"),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectRequestContactsFinished(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mRequestContactsReturn.size() == 1);
+    ContactPtr otherContact = mRequestContactsReturn.first();
+    QVERIFY(otherContact);
+
+    QVariantMap request;
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".ChannelType"),
+                   TELEPATHY_INTERFACE_CHANNEL_TYPE_STREAMED_MEDIA);
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".TargetHandleType"),
+                   Tp::HandleTypeContact);
+    request.insert(QLatin1String(TELEPATHY_INTERFACE_CHANNEL ".TargetHandle"),
+                   otherContact->handle()[0]);
+    QVERIFY(connect(mConn->createChannel(request),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectCreateChannelFinished(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mChan);
+
+    QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureHoldState),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureHoldState));
+
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateUnheld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonNone));
+
+    QVERIFY(connect(mChan.data(),
+                    SIGNAL(holdStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)),
+                    SLOT(onHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason))));
+    // Request hold
+    QVERIFY(connect(mChan->requestHold(true),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    while (mHoldStates.size() != 2) {
+        QCOMPARE(mLoop->exec(), 0);
+    }
+    QCOMPARE(mHoldStates.first(), static_cast<uint>(LocalHoldStatePendingHold));
+    QCOMPARE(mHoldStateReasons.first(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(mHoldStates.last(), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(mHoldStateReasons.last(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
+
+    mHoldStates.clear();
+    mHoldStateReasons.clear();
+
+    // Request unhold (fail)
+    QVERIFY(connect(mChan->requestHold(false),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 1);
+    QCOMPARE(mHoldStates.size(), 0);
+    QCOMPARE(mHoldStateReasons.size(), 0);
+    QCOMPARE(static_cast<uint>(mChan->holdState()), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(static_cast<uint>(mChan->holdStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
+}
+
 void TestStreamedMediaChan::cleanup()
 {
     mChan.reset();
-- 
1.5.6.5




More information about the telepathy-commits mailing list