--- 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 <QTest>
-#include <QSignalSpy>
-#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<QVariant> 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<count ; i++) {
- QList<QVariant> capArgs = stillStateSpy.takeAt(0);
- qDebug("State:%d, err:%d", capArgs.at(0).value<CxeStillCaptureControl::State> (),
- capArgs.at(1).toInt());
- }
- */
-
- QCOMPARE( stillStateSpy.count(), 1 );
- QList<QVariant> initArgs = stillStateSpy.takeFirst();
- QVERIFY( initArgs.at(0).value<CxeStillCaptureControl::State>() == 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<count; i++) {
- QList<QVariant> afArgs = afDeviceStateSpy.takeAt(0);
- qDebug("State:%d, err:%d", afArgs.at(0).value<CxeAutoFocusControl::State> (),
- afArgs.at(1).toInt());
- }
-
- /*
- QCOMPARE( afDeviceStateSpy.count(), 2 );
-
- QList<QVariant> afArguments = afDeviceStateSpy.takeAt(0);
- QVERIFY( afArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::InProgress );
- QVERIFY( afArguments.at(1).toInt() == 0 );
-
- afArguments = afDeviceStateSpy.takeAt(0);
- QVERIFY( afArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::Ready ||
- afArguments.at(0).value<CxeAutoFocusControl::State>() == 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<QVariant> capArguments = stillStateSpy.takeAt(0);
- QVERIFY( capArguments.at(0).value<CxeStillCaptureControl::State>() == CxeStillCaptureControl::Capturing );
- QVERIFY( capArguments.at(1).toInt() == 0 );
-
- capArguments = stillStateSpy.takeAt(0);
- QVERIFY( capArguments.at(0).value<CxeStillCaptureControl::State>() == 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<count ; i++) {
- QList<QVariant> capArgs = deviceStateSpy.takeAt(0);
- qDebug("State:%d, err:%d", capArgs.at(0).value<CxeVideoCaptureControl::State> (),
- capArgs.at(1).toInt());
- }
- */
-
- QList<QVariant> initArgs = deviceStateSpy.takeAt(0);
- QVERIFY(initArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Initialized);
- QVERIFY( initArgs.at(1).toInt() == 0 );
-
- initArgs = deviceStateSpy.takeAt(0);
- QVERIFY( initArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Preparing );
- QVERIFY( initArgs.at(1).toInt() == 0 );
-
- initArgs = deviceStateSpy.takeAt(0);
- QVERIFY( initArgs.at(0).value<CxeVideoCaptureControl::State>() == 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<QVariant> stateArgs = videoStateSpy.takeAt(0);
- QVERIFY( stateArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::PlayingStartSound );
- QVERIFY( stateArgs.at(1).toInt() == 0 );
-
- stateArgs = videoStateSpy.takeAt(0);
- QVERIFY( stateArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Recording );
- QVERIFY( stateArgs.at(1).toInt() == 0 );
-
- stateArgs = videoStateSpy.takeAt(0);
- QVERIFY( stateArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Stopping );
- QVERIFY( stateArgs.at(1).toInt() == 0 );
-
- stateArgs = videoStateSpy.takeAt(0);
- QVERIFY( stateArgs.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Idle );
- QVERIFY( stateArgs.at(1).toInt() == 0 );
-
- /*
- int count = videoStateSpy.count();
- for (int i=0; i<count; i++) {
- QList<QVariant> capArgs = videoStateSpy.takeAt(0);
- qDebug("State:%d, err:%d", capArgs.at(0).value<CxeVideoCaptureControl::State> (),
- 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 );