camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxetestutils/unittest_cxetestutils.cpp
changeset 19 d9aefe59d544
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxetestutils/unittest_cxetestutils.cpp	Fri Apr 16 14:51:30 2010 +0300
@@ -0,0 +1,131 @@
+/*
+* 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 <QTest>
+#include <QTimer>
+#include <QSignalSpy>
+#include "unittest_cxetestutils.h"
+#include "cxetestutils.h"
+#include "cxedummystatemachine.h"
+
+UnitTestCxeTestUtils::UnitTestCxeTestUtils()
+{
+}
+
+UnitTestCxeTestUtils::~UnitTestCxeTestUtils()
+{
+}
+
+/*!
+    Signal should be received within timeout
+*/
+void UnitTestCxeTestUtils::testWaitForSignal1()
+{
+    QTimer t1;
+    QSignalSpy spy1(&t1, SIGNAL(timeout()));
+    t1.setSingleShot(true);
+    t1.start(100);
+    QVERIFY(CxeTestUtils::waitForSignal(spy1, 200));
+}
+
+/*!
+    Test for signal timeout
+*/
+void UnitTestCxeTestUtils::testWaitForSignal2()
+{
+    QTimer t2;
+    QSignalSpy spy2(&t2, SIGNAL(timeout()));
+    t2.setSingleShot(true);
+    t2.start(1000);
+    QVERIFY(!CxeTestUtils::waitForSignal(spy2, 100));
+}
+
+/*!
+    Wait for multiple (3) signals
+*/
+void UnitTestCxeTestUtils::testWaitForSignal3()
+{
+    QTimer t3;
+    QSignalSpy spy3(&t3, SIGNAL(timeout()));
+    t3.setSingleShot(false);
+    t3.start(100);
+    QVERIFY(CxeTestUtils::waitForSignal(spy3, 500, 3));
+    QCOMPARE(spy3.count(), 3);
+}
+
+/*!
+    Verify that extra signals should not be tolerated if allowExtraSignals
+    is false
+*/
+void UnitTestCxeTestUtils::testWaitForSignal4()
+{
+    QTimer t4;
+    QSignalSpy spy4(&t4, SIGNAL(timeout()));
+    t4.setSingleShot(false);
+    t4.start(10);
+
+    // Wait until we get enough signals from the timer
+    while (spy4.count() < 4) {
+        QTest::qWait(10);
+    }
+
+    // waitForSignal() should return false due to too many signals
+    QVERIFY(!CxeTestUtils::waitForSignal(spy4, 500, 3, false));
+}
+
+/*!
+    Test a successful state change
+*/
+void UnitTestCxeTestUtils::testWaitForState1()
+{
+    CxeDummyStateMachine m1;
+    m1.delayedStateChange(CxeDummyStateMachine::B, 100);
+    QVERIFY(CxeTestUtils::waitForState<CxeDummyStateMachine>(
+        m1, CxeDummyStateMachine::B, 200));
+}
+
+/*!
+    // Test state change time out
+*/
+void UnitTestCxeTestUtils::testWaitForState2()
+{
+    CxeDummyStateMachine m1;
+    m1.delayedStateChange(CxeDummyStateMachine::C, 300);
+    QVERIFY(!CxeTestUtils::waitForState<CxeDummyStateMachine>(
+        m1, CxeDummyStateMachine::C, 100));
+}
+
+/*!
+    // Test a very quick state change
+*/
+void UnitTestCxeTestUtils::testWaitForState3()
+{
+    CxeDummyStateMachine m1;
+    m1.delayedStateChange(CxeDummyStateMachine::B, 0);
+    m1.delayedStateChange(CxeDummyStateMachine::C, 0);
+
+    // Even though the state changes from A to B to C immediately without
+    // allowing Qt to process events, it should be possible to catch the
+    // transition to state B using waitForState().
+
+    // waitForState() should never miss state transitions.
+
+    QVERIFY(CxeTestUtils::waitForState<CxeDummyStateMachine>(
+        m1, CxeDummyStateMachine::B, 100));
+}
+
+QTEST_MAIN(UnitTestCxeTestUtils);