diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraxui/cxengine/tsrc/cxeenginetest.cpp --- a/camerauis/cameraxui/cxengine/tsrc/cxeenginetest.cpp Tue Aug 31 15:03:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,414 +0,0 @@ -/* -* 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 -#include -#include "cxutils.h" -#include "cxeenginetest.h" -#include "cxeengine.h" -#include "cxecameradevicecontrol.h" -#include "cxestillcapturecontrol.h" -#include "cxevideocapturecontrol.h" -#include "cxeviewfindercontrol.h" -#include "cxeautofocuscontrol.h" -#include "cxeerror.h" - -using namespace Cxe; - -/** - * void TestCxeEngine::init() - * Helper function to initialize the engine. - * Run at the start of each test case. - */ -void TestCxeEngine::init() -{ - // Commented out because engine deletion fails -> engine created only once - // mEngine = CxeEngine::createEngine(); -} - -/** - * void TestCxeEngine::initTestCase() - * Tests that the engine initialization works properly - */ -void TestCxeEngine::initTestCase() -{ - mWindow = new HbMainWindow(); - mEngine = CxeEngine::createEngine(); - - mWindow->setOrientation(Qt::Horizontal); - mWindow->showFullScreen(); - - // For viewfinder to be started, window needs to be set - mEngine->viewfinderControl().setWindow( mWindow->effectiveWinId()); -} - -/** - * Cleans up the engine. - * Run after each test case. - */ -void TestCxeEngine::cleanup() -{ - // commented out because engine delete fails - // delete mEngine; - // mEngine = NULL; -} - -/** - * void TestCxeEngine::cleanupTestCase() - * Cleans up the engine and rest of the test environment. - * NOTE: This should be the last test case to be executed - */ -void TestCxeEngine::cleanupTestCase() -{ - delete mEngine; - mEngine = NULL; - delete mWindow; - mWindow = NULL; -} - -/** - * void TestCxeEngine::createAndDestroyEngine() - * Tests that the engine construction and deletion works without errors. - */ -void TestCxeEngine::createAndDestroyEngine() -{ - // Do nothing here... just test that we can create and delete the engine - // instance without problems. - QVERIFY( mEngine != NULL ); -} - -/** - * void TestCxeEngine::initStillImageMode() - * Initializes the still image mode. - * NOTE: No initialization and cleanup, so that it can be used in test cases - * requiring still image mode to be ready. - */ -void TestCxeEngine::initStillImageMode() -{ - CX_DEBUG_ENTER_FUNCTION(); - CxeCameraDeviceControl &deviceControl = mEngine->cameraDeviceControl(); - CxeStillCaptureControl &stillCaptureControl = mEngine->stillCaptureControl(); - - QSignalSpy deviceStateSpy(&deviceControl, SIGNAL(initModeComplete(CxeError::Id))); - QSignalSpy stillStateSpy(&stillCaptureControl, SIGNAL(stateChanged(CxeStillCaptureControl::State, CxeError::Id))); - - // Check that the signals were connected withtout errors - QVERIFY( deviceStateSpy.isValid() ); - QVERIFY( stillStateSpy.isValid() ); - - if (stillCaptureControl.state()!=CxeStillCaptureControl::Ready) { - mEngine->initMode(ImageMode); - - // Wait for a maximum of 7 seconds for the operation to finish - int waitCount = 0; - while (deviceStateSpy.count() < 1) { - QTest::qWait(1000); // wait one second - waitCount++; - if (waitCount >= 7) { - QFAIL("initModeComplete timed out"); - } - } - - // Wait for any unexpected extra signals - QTest::qWait(2000); - - // Check signal lists... Expect exactly one initModeComplete signal - QCOMPARE( deviceStateSpy.count(), 1 ); - - // Expect zero error code - QList initModeArguments = deviceStateSpy.takeFirst(); - QVERIFY( initModeArguments.at(0).toInt() == 0 ); // CxeError::None - - // Check signal changes for still capture control - // Just 1 state change signal expected: (Uninitialized ->) Ready - /* - int count = stillStateSpy.count(); - for (int i=0; i capArgs = stillStateSpy.takeAt(0); - qDebug("State:%d, err:%d", capArgs.at(0).value (), - capArgs.at(1).toInt()); - } - */ - - QCOMPARE( stillStateSpy.count(), 1 ); - QList initArgs = stillStateSpy.takeFirst(); - QVERIFY( initArgs.at(0).value() == CxeStillCaptureControl::Ready ); - QVERIFY( initArgs.at(1).toInt() == 0 ); - - //! @todo: check devicecontrolstate and stillcapturestate - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * void TestCxeEngine::testAutoFocusBasic() - * Test that AF either succeeds or fails when attempted. - */ -void TestCxeEngine::testAutoFocusBasic() -{ - CX_DEBUG_ENTER_FUNCTION(); - - // Initialize before every test case - init(); - - // Initialize still mode - other details tested internally - initStillImageMode(); - - // Actual test of autofocus - CxeAutoFocusControl &afControl = mEngine->autoFocusControl(); - QSignalSpy afDeviceStateSpy(&afControl, SIGNAL(stateChanged(CxeAutoFocusControl::State, CxeError::Id)) ); - QVERIFY( afDeviceStateSpy.isValid() ); - - // Wait half a second before starting AF - QTest::qWait(500); - afControl.start(); - QTest::qWait(3000); - afControl.cancel(); - - // Wait for signals - QTest::qWait(2000); - qDebug("AF signals:%d", afDeviceStateSpy.count()); - - int count = afDeviceStateSpy.count(); - for (int i=0; i afArgs = afDeviceStateSpy.takeAt(0); - qDebug("State:%d, err:%d", afArgs.at(0).value (), - afArgs.at(1).toInt()); - } - - /* - QCOMPARE( afDeviceStateSpy.count(), 2 ); - - QList afArguments = afDeviceStateSpy.takeAt(0); - QVERIFY( afArguments.at(0).value() == CxeAutoFocusControl::InProgress ); - QVERIFY( afArguments.at(1).toInt() == 0 ); - - afArguments = afDeviceStateSpy.takeAt(0); - QVERIFY( afArguments.at(0).value() == CxeAutoFocusControl::Ready || - afArguments.at(0).value() == CxeAutoFocusControl::Failed ); - QVERIFY( afArguments.at(1).toInt() == 0 ); - */ - - // Cleanup after every test case - cleanup(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * void TestCxeEngine::testImageCapture() - * Tests that image capture works properly. - */ -void TestCxeEngine::testImageCapture() -{ - CX_DEBUG_ENTER_FUNCTION(); - // Initialize before every test case - init(); - - // Initialize still mode - other details tested internally - initStillImageMode(); - - // Init signal spy for still capture control - CxeStillCaptureControl &stillCaptureControl = mEngine->stillCaptureControl(); - QSignalSpy stillStateSpy(&stillCaptureControl, SIGNAL(stateChanged(CxeStillCaptureControl::State, CxeError::Id))); - QSignalSpy stillSnapSpy(&stillCaptureControl, SIGNAL(snapshotReady(int, CxeError::Id))); - QSignalSpy stillImageSpy(&stillCaptureControl, SIGNAL(imageCaptured(CxeError::Id))); - - // Check that the signals were connected withtout errors - QVERIFY( stillStateSpy.isValid() ); - QVERIFY( stillSnapSpy.isValid() ); - QVERIFY( stillImageSpy.isValid() ); - - // Wait half a second before starting capture - CX_DEBUG(("Waiting before starting capture")); - QTest::qWait(500); - stillCaptureControl.capture(); - CX_DEBUG(("Capture command executed")); - - // Wait for signals and saving to complete - QTest::qWait(5000); - - // Confirm that one snapshot signal and one image captured signal are received - QCOMPARE( stillSnapSpy.count(), 1 ); - QCOMPARE( stillImageSpy.count(), 1 ); - - // 2 Signal expected: Capturing -> Ready/Uninitialized - qDebug("Still capture control state signals:%d", stillStateSpy.count()); - QCOMPARE( stillStateSpy.count(), 2 ); - - QList capArguments = stillStateSpy.takeAt(0); - QVERIFY( capArguments.at(0).value() == CxeStillCaptureControl::Capturing ); - QVERIFY( capArguments.at(1).toInt() == 0 ); - - capArguments = stillStateSpy.takeAt(0); - QVERIFY( capArguments.at(0).value() == CxeStillCaptureControl::Ready ); - QVERIFY( capArguments.at(1).toInt() == 0 ); - - // Cleanup after every test case - cleanup(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * void TestCxeEngine::testBatchCapture() - * Test that a number of images can be captured. - */ -void TestCxeEngine::testBatchCapture() -{ - CX_DEBUG_ENTER_FUNCTION(); - for(int i=0; i<3; i++) { - testImageCapture(); - mEngine->stillCaptureControl().reset(); - } - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * void TestCxeEngine::initVideoMode() - * Initializes the video mode. - * NOTE: No initialization and cleanup in done here, so that it can be used in - * test cases requiring video mode to be ready. - */ -void TestCxeEngine::initVideoMode() -{ - CX_DEBUG_ENTER_FUNCTION(); - - QSignalSpy deviceStateSpy(&mEngine->videoCaptureControl(), SIGNAL(stateChanged(CxeVideoCaptureControl::State, CxeError::Id))); - QVERIFY( deviceStateSpy.isValid() ); - - if (mEngine->videoCaptureControl().state()!=CxeVideoCaptureControl::Ready) { - // Call initialize and wait 500ms for signals - mEngine->initMode(VideoMode); - QTest::qWait(500); - - // 3 state change signals expected: Open -> Preparing -> Ready - QCOMPARE( deviceStateSpy.count(), 3 ); - - /* - int count = deviceStateSpy.count() - for (int i=0; i capArgs = deviceStateSpy.takeAt(0); - qDebug("State:%d, err:%d", capArgs.at(0).value (), - capArgs.at(1).toInt()); - } - */ - - QList initArgs = deviceStateSpy.takeAt(0); - QVERIFY(initArgs.at(0).value() == CxeVideoCaptureControl::Initialized); - QVERIFY( initArgs.at(1).toInt() == 0 ); - - initArgs = deviceStateSpy.takeAt(0); - QVERIFY( initArgs.at(0).value() == CxeVideoCaptureControl::Preparing ); - QVERIFY( initArgs.at(1).toInt() == 0 ); - - initArgs = deviceStateSpy.takeAt(0); - QVERIFY( initArgs.at(0).value() == CxeVideoCaptureControl::Ready ); - QVERIFY( initArgs.at(1).toInt() == 0 ); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * void TestCxeEngine::testVideoCapture() - * Tests that video capture works properly. - */ -void TestCxeEngine::testVideoCapture() -{ - CX_DEBUG_ENTER_FUNCTION(); - - // Initialize before every test case - init(); - - // Initialize the video mode - initVideoMode(); - - // Init signal spy for still capture control - CxeVideoCaptureControl &videoCaptureControl = mEngine->videoCaptureControl(); - QSignalSpy videoStateSpy(&videoCaptureControl, SIGNAL(stateChanged(CxeVideoCaptureControl::State, CxeError::Id))); - QSignalSpy videoSnapSpy(&videoCaptureControl, SIGNAL(snapshotReady(CxeError::Id))); - QSignalSpy videoSpy(&videoCaptureControl, SIGNAL(videoComposed())); - - // Check that the signals were connected withtout errors - QVERIFY( videoStateSpy.isValid() ); - QVERIFY( videoSnapSpy.isValid() ); - QVERIFY( videoSpy.isValid() ); - - // Wait half a second before starting recording - QTest::qWait(500); - videoCaptureControl.record(); - - // Wait for 2 seconds before stopping video - QTest::qWait(2000); - videoCaptureControl.stop(); - - // Wait some time for video to stop and signals to arrive - QTest::qWait(2000); - - // Expected state sequence: PlayingStartSound -> Recording -> Stopping -> Idle/Ready - qDebug("Video capture control state signals:%d", videoStateSpy.count()); - QCOMPARE(videoStateSpy.count(), 4); - - QList stateArgs = videoStateSpy.takeAt(0); - QVERIFY( stateArgs.at(0).value() == CxeVideoCaptureControl::PlayingStartSound ); - QVERIFY( stateArgs.at(1).toInt() == 0 ); - - stateArgs = videoStateSpy.takeAt(0); - QVERIFY( stateArgs.at(0).value() == CxeVideoCaptureControl::Recording ); - QVERIFY( stateArgs.at(1).toInt() == 0 ); - - stateArgs = videoStateSpy.takeAt(0); - QVERIFY( stateArgs.at(0).value() == CxeVideoCaptureControl::Stopping ); - QVERIFY( stateArgs.at(1).toInt() == 0 ); - - stateArgs = videoStateSpy.takeAt(0); - QVERIFY( stateArgs.at(0).value() == CxeVideoCaptureControl::Idle ); - QVERIFY( stateArgs.at(1).toInt() == 0 ); - - /* - int count = videoStateSpy.count(); - for (int i=0; i capArgs = videoStateSpy.takeAt(0); - qDebug("State:%d, err:%d", capArgs.at(0).value (), - capArgs.at(1).toInt()); - } - */ - - // Confirm that one snapshot signal and one video composed signal is received - QCOMPARE( videoSnapSpy.count(), 1 ); - QCOMPARE( videoSpy.count(), 1 ); - - // Cleanup after every test case - cleanup(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/* -void TestCxeEngine::testTemplate() -{ - // Initialize before every test case - init(); - - // Initialize the image mode - initTestCase(); - - // Cleanup after every test case - cleanup(); -} -*/ - -// main() function non-GUI testing -QTEST_MAIN( TestCxeEngine );