camerauis/cameraxui/cxengine/tsrc/unit/utils/cxetestutils.cpp
branchRCL_3
changeset 23 61bc0f252b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/utils/cxetestutils.cpp	Tue Aug 31 15:03:46 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <QSignalSpy>
+#include <QTest>
+
+#include "cxetestutils.h"
+
+/*!
+* Wait for a signal (or multiple instances of the same signal) to be caught
+* by signal spy. Returns false if signal is not received within the given
+* timeout.
+*
+* @param spy               Signal spy attached to the signal to wait for.
+* @param ms                Timeout in milliseconds
+* @param count             How many instances of the signal to wait for
+*                          (default 1)
+* @param allowExtraSignals True to ignore any extranous signal. Setting
+*                          this as false will cause this function to return
+*                          false the spy receives more signals than received
+* @return       True if signal(s) were received, false if timed out or
+*               signal spy was invalid.
+*/
+bool CxeTestUtils::waitForSignal(
+    QSignalSpy &spy, int ms, int count, bool allowExtraSignals)
+{
+    int waitingTime = 0;
+
+    if (spy.isValid()) {
+        while (spy.count() < count && waitingTime < ms) {
+            QTest::qWait(CXE_TEST_POLL_TIME);
+            waitingTime += CXE_TEST_POLL_TIME;
+        }
+        if (spy.count() > count && !allowExtraSignals) {
+            CX_DEBUG(("waitForSignal() - got too many signals for %s, count = %d",
+                      spy.signal().constData(), spy.count()));
+            return false;
+        } else if (spy.count() >= count) {
+            CX_DEBUG(("waitForSignal() - got signal %s successfully, count = %d",
+                      spy.signal().constData(), spy.count()));
+            return true;
+        } else {
+            CX_DEBUG(("waitForSignal() - signal %s timed out, waitingTime = %d",
+                      spy.signal().constData(), waitingTime));
+            return false;
+        }
+    } else {
+        CX_DEBUG(("waitForSignal() - given signalspy is not valid!"));
+        return false;
+    }
+}