[telepathy-qt4/master] streamed-media-chan test: Added test for inability to unhold (unable to reacquire a resource for example).

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Thu Aug 13 16:26:24 PDT 2009


---
 tests/dbus/streamed-media-chan.cpp |   87 +++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/tests/dbus/streamed-media-chan.cpp b/tests/dbus/streamed-media-chan.cpp
index 2229cee..21e722f 100644
--- a/tests/dbus/streamed-media-chan.cpp
+++ b/tests/dbus/streamed-media-chan.cpp
@@ -58,6 +58,7 @@ private Q_SLOTS:
     void testIncomingCall();
     void testHold();
     void testHoldNoUnhold();
+    void testHoldInabilityUnhold();
 
     void cleanup();
     void cleanupTestCase();
@@ -82,8 +83,8 @@ private:
     Tp::MediaStreamPendingSend mSDCPendingReturn;
     MediaStreamPtr mSSCStreamReturn;
     Tp::MediaStreamState mSSCStateReturn;
-    UIntList mLocalHoldStates;
-    UIntList mLocalHoldStateReasons;
+    QQueue<uint> mLocalHoldStates;
+    QQueue<uint> mLocalHoldStateReasons;
 };
 
 void TestStreamedMediaChan::expectRequestContactsFinished(PendingOperation *op)
@@ -944,6 +945,88 @@ void TestStreamedMediaChan::testHoldNoUnhold()
     QCOMPARE(static_cast<uint>(mChan->localHoldStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
 }
 
+void TestStreamedMediaChan::testHoldInabilityUnhold()
+{
+    QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList() << "bob (inability to 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::FeatureLocalHoldState),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureLocalHoldState));
+
+    QCOMPARE(static_cast<uint>(mChan->localHoldState()), static_cast<uint>(LocalHoldStateUnheld));
+    QCOMPARE(static_cast<uint>(mChan->localHoldStateReason()), static_cast<uint>(LocalHoldStateReasonNone));
+
+    QVERIFY(connect(mChan.data(),
+                    SIGNAL(localHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)),
+                    SLOT(onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason))));
+    // Request hold
+    QVERIFY(connect(mChan->requestLocalHold(true),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+    while (mLocalHoldStates.size() != 2) {
+        QCOMPARE(mLoop->exec(), 0);
+    }
+    QCOMPARE(mLocalHoldStates.first(), static_cast<uint>(LocalHoldStatePendingHold));
+    QCOMPARE(mLocalHoldStateReasons.first(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(mLocalHoldStates.last(), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(mLocalHoldStateReasons.last(), static_cast<uint>(LocalHoldStateReasonRequested));
+    QCOMPARE(static_cast<uint>(mChan->localHoldState()), static_cast<uint>(LocalHoldStateHeld));
+    QCOMPARE(static_cast<uint>(mChan->localHoldStateReason()), static_cast<uint>(LocalHoldStateReasonRequested));
+
+    mLocalHoldStates.clear();
+    mLocalHoldStateReasons.clear();
+
+    // Request unhold (fail - back to hold)
+    QVERIFY(connect(mChan->requestLocalHold(false),
+                    SIGNAL(finished(Tp::PendingOperation*)),
+                    SLOT(expectSuccessfulCall(Tp::PendingOperation*))));
+    QCOMPARE(mLoop->exec(), 0);
+
+    while (mLocalHoldStates.size() != 3) {
+        QCOMPARE(mLoop->exec(), 0);
+    }
+
+    LocalHoldState state = static_cast<LocalHoldState>(mLocalHoldStates.dequeue());
+    LocalHoldStateReason stateReason = static_cast<LocalHoldStateReason>(mLocalHoldStateReasons.dequeue());
+    QCOMPARE(state, LocalHoldStatePendingUnhold);
+    QCOMPARE(stateReason, LocalHoldStateReasonRequested);
+
+    state = static_cast<LocalHoldState>(mLocalHoldStates.dequeue());
+    stateReason = static_cast<LocalHoldStateReason>(mLocalHoldStateReasons.dequeue());
+    QCOMPARE(state, LocalHoldStatePendingHold);
+    QCOMPARE(stateReason, LocalHoldStateReasonRequested);
+
+    state = static_cast<LocalHoldState>(mLocalHoldStates.dequeue());
+    stateReason = static_cast<LocalHoldStateReason>(mLocalHoldStateReasons.dequeue());
+    QCOMPARE(state, LocalHoldStateHeld);
+    QCOMPARE(stateReason, LocalHoldStateReasonRequested);
+
+    QCOMPARE(mChan->localHoldState(), LocalHoldStateHeld);
+    QCOMPARE(mChan->localHoldStateReason(), LocalHoldStateReasonRequested);
+}
+
 void TestStreamedMediaChan::cleanup()
 {
     mChan.reset();
-- 
1.5.6.5




More information about the telepathy-commits mailing list