--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/tsrc/cxuitestbat.cpp Fri Apr 16 14:51:30 2010 +0300
@@ -0,0 +1,365 @@
+/*
+* 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 <hbmainwindow.h>
+#include <hbslider.h>
+#include <hbaction.h>
+#include "cxuitestbat.h"
+#include "cxeengine.h"
+#include "cxenamespace.h"
+#include "cxevideocapturecontrol.h"
+#include "cxeviewfindercontrol.h"
+#include "cxuiviewmanager.h"
+#include "cxutils.h"
+#include "cxuienums.h"
+#include "cxuicapturekeyhandler.h"
+#include "cxuidocumentloader.h"
+
+
+// Run before each test
+void TestCxUiBat::initTestCase()
+{
+
+ mMainWindow = new HbMainWindow;
+ mMainWindow->setOrientation(Qt::Horizontal);
+ mEngine = CxeEngine::createEngine();
+
+ mKeyHandler = new CxuiCaptureKeyHandler(*mEngine);
+ mViewManager = new CxuiViewManager(*mMainWindow, *mEngine, *mKeyHandler);
+
+ mViewManager->prepareWindow();
+ mMainWindow->showFullScreen();
+}
+
+// Run after each test
+void TestCxUiBat::cleanup()
+{
+ //delete mEngine;
+}
+
+// Run after each test
+void TestCxUiBat::cleanupTestCase()
+{
+ delete mMainWindow;
+ delete mKeyHandler;
+ delete mViewManager;
+ //delete mEngine;
+}
+
+void TestCxUiBat::initStillImageMode()
+{
+ mEngine->initMode( Cxe::ImageMode );
+
+}
+
+void TestCxUiBat::sendCameraKeyEvent(QEvent::Type event)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QKeyEvent* captureKeyEvent;
+ if (event == QEvent::None) {
+ captureKeyEvent = QKeyEvent::createExtendedKeyEvent(QEvent::KeyPress, Qt::Key_unknown, 0,
+ 0xab, 0, 0);
+ QApplication::postEvent(mMainWindow, captureKeyEvent);
+ captureKeyEvent = QKeyEvent::createExtendedKeyEvent(QEvent::KeyRelease, Qt::Key_unknown, 0,
+ 0xab, 0, 0);
+ QApplication::postEvent(mMainWindow, captureKeyEvent);
+
+ } else {
+ captureKeyEvent = QKeyEvent::createExtendedKeyEvent(event, Qt::Key_unknown, 0, 0xab, 0, 0);
+ QApplication::postEvent(mMainWindow, captureKeyEvent);
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void TestCxUiBat::sendAutofocusKeyEvent(QEvent::Type event)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ QKeyEvent* autofocusKeyEvent = QKeyEvent::createExtendedKeyEvent(event, Qt::Key_unknown, 0,
+ 0xe2, 0, 0);
+ QApplication::postEvent(mMainWindow, autofocusKeyEvent);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+void TestCxUiBat::initVideoMode()
+{
+ mEngine->initMode( Cxe::VideoMode );
+
+ QSignalSpy deviceStateSpy(&mEngine->videoCaptureControl(),
+ SIGNAL(stateChanged(CxeVideoCaptureControl::State, CxeError::Id)));
+ QVERIFY( deviceStateSpy.isValid() );
+
+ QTest::qWait( 3000 );
+
+ QCOMPARE( deviceStateSpy.count(), 3 );
+
+ QList<QVariant> initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Open );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Preparing );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Ready );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+}
+
+// Tests capture key in still mode
+void TestCxUiBat::testCaptureKeyInImageMode()
+ {
+ mEngine->initMode(Cxe::ImageMode);
+ QTest::qWait(3000);
+ // Test if we are in still VF
+ QVERIFY(mMainWindow->currentViewIndex() == CxUi::StillPreCaptureView );
+
+ CX_DEBUG(("testCaptureKey in still capture mode"));
+ sendCameraKeyEvent();
+
+ QSignalSpy deviceStateSpy(&mEngine->stillCaptureControl(),
+ SIGNAL(snapshotReady(int, CxeError::Id)));
+ QVERIFY( deviceStateSpy.isValid() );
+ QTest::qWait(2000);
+ QCOMPARE( deviceStateSpy.count(), 1 );
+ if (deviceStateSpy.count() > 0) {
+ // Expect zero error code
+ QList<QVariant> initModeArguments = deviceStateSpy.takeFirst();
+ QVERIFY( initModeArguments.at(0).toInt() == 0 );
+ }
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::StillPostCaptureView );
+
+ CX_DEBUG(("Test to get back viewfinder with capture key"));
+ sendCameraKeyEvent();
+ QTest::qWait(1000);
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::StillPreCaptureView );
+
+ // Test autofocus with halfkeypress and releasing
+ CX_DEBUG(("testAutoFocus_1"));
+
+ QSignalSpy autofocusStateSpy(&mEngine->autoFocusControl(),
+ SIGNAL(stateChanged(CxeAutoFocusControl::State, CxeError::Id)));
+ QVERIFY( autofocusStateSpy.isValid() );
+
+ // Test autofocus with halfkeypress and canceling it
+ sendAutofocusKeyEvent(QEvent::KeyPress);
+ CX_DEBUG(("testAutoFocus_2"));
+ sendAutofocusKeyEvent(QEvent::KeyRelease);
+ QTest::qWait(1000);
+
+ QCOMPARE( autofocusStateSpy.count(), 3 );
+ if (autofocusStateSpy.count() > 0) {
+ QList<QVariant> initModeArguments = autofocusStateSpy.takeFirst();
+ QVERIFY( initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::InProgress );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ CX_DEBUG(("testAutoFocus_2a"));
+ initModeArguments = autofocusStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ QVERIFY( initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::Canceling );
+ initModeArguments = autofocusStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::Unknown );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ }
+
+ // Test autofocus with halfkeypress and capture focused image
+ CX_DEBUG(("testAutoFocus_3"));
+
+ sendAutofocusKeyEvent(QEvent::KeyPress);
+ CX_DEBUG(("Capture autofocused image"));
+ QTest::qWait(3000);
+ sendCameraKeyEvent();
+ sendAutofocusKeyEvent(QEvent::KeyRelease);
+ QTest::qWait(1000);
+
+ QCOMPARE( autofocusStateSpy.count(), 2 );
+ if (autofocusStateSpy.count() > 0) {
+ QList<QVariant> initModeArguments = autofocusStateSpy.takeFirst();
+ QVERIFY( initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::InProgress );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ initModeArguments = autofocusStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::Ready ||
+ initModeArguments.at(0).value<CxeAutoFocusControl::State>() == CxeAutoFocusControl::Failed );
+
+ }
+
+ QCOMPARE( deviceStateSpy.count(), 1 );
+ if (deviceStateSpy.count() > 0) {
+ // Expect zero error code
+ QList<QVariant> initModeArguments = deviceStateSpy.takeFirst();
+ QVERIFY( initModeArguments.at(0).toInt() == 0 );
+ }
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::StillPostCaptureView );
+ }
+
+// Tests capture key in video mode
+void TestCxUiBat::testCaptureKeyInVideoMode()
+{
+
+ connect(this, SIGNAL(toPrecaptureView()), mViewManager, SLOT(changeToPrecaptureView()));
+ QSignalSpy deviceStateSpy(&mEngine->videoCaptureControl(),
+ SIGNAL(stateChanged(CxeVideoCaptureControl::State, CxeError::Id)));
+ QVERIFY( deviceStateSpy.isValid() );
+ emit toPrecaptureView();
+ QTest::qWait(1500);
+ // Test if we are in still VF
+ QVERIFY(mMainWindow->currentViewIndex() == CxUi::VideoPreCaptureView );
+
+
+ // Generate camera key event to start recording
+ CX_DEBUG(("Start video recording"));
+ sendCameraKeyEvent();
+ QTest::qWait(5000);
+
+ // Generate camera key event to stop recording
+ CX_DEBUG(("Stop video recording"));
+ sendCameraKeyEvent();
+ QTest::qWait(3000);
+
+ QCOMPARE( deviceStateSpy.count(), 4 );
+
+ QList<QVariant> initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::PlayingStartSound );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Recording );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Stopping );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Idle );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::VideoPostCaptureView );
+
+ CX_DEBUG(("Test to get back viewfinder with capture key"));
+ sendCameraKeyEvent();
+ QTest::qWait(5000);
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::VideoPreCaptureView );
+
+ QCOMPARE(deviceStateSpy.count(), 3);
+ if (deviceStateSpy.count() > 0) {
+ QList<QVariant> initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Open );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Preparing );
+ initModeArguments = deviceStateSpy.takeAt(0);
+ QVERIFY( initModeArguments.at(0).value<CxeVideoCaptureControl::State>() == CxeVideoCaptureControl::Ready );
+ QVERIFY( initModeArguments.at(1).toInt() == 0 );
+ }
+
+
+}
+
+// Tests only that correct view is activated
+void TestCxUiBat::testItemVisibilityInPrecaptureview()
+{
+ CX_DEBUG(("testZoomInPrecaptureview"));
+ mEngine->initMode(Cxe::ImageMode);
+ emit toPrecaptureView();
+ QTest::qWait(1000);
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::StillPreCaptureView );
+
+ QSignalSpy zoomStateSpy(&mEngine->zoomControl(),
+ SIGNAL(stateChanged(CxeZoomControl::State, CxeError::Id)));
+ QVERIFY( zoomStateSpy.isValid() );
+
+ QSignalSpy zoomLevelStateSpy(&mEngine->zoomControl(),
+ SIGNAL(zoomLevelChanged(int)));
+ QVERIFY( zoomLevelStateSpy.isValid() );
+
+ CX_DEBUG(("ShowControls"));
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(180,60),5 );
+ QTest::qWait(300);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::TitlePaneItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::NaviPaneItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::ToolBarItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::IndicatorItems), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::PrimarySoftKeyItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::SecondarySoftKeyItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::MiddleSoftKeyItem), true);
+ QCOMPARE(mMainWindow->isItemVisible(Hb::SoftKeyItems), true);
+
+
+ CX_DEBUG(("test Zoom slider - touch events control zoom level"));
+ QTest::qWait(1000);
+
+ HbAction *zoomAction = qobject_cast<HbAction *>(mViewManager->documentLoader()->findObject("cxui_action_zoom"));
+ HbSlider *zoom = qobject_cast<HbSlider *>(mViewManager->documentLoader()->findWidget("zoom"));
+ CX_DEBUG_ASSERT(zoomAction);
+ CX_DEBUG_ASSERT(zoom);
+
+ // trigger zoom action on toolbar
+ zoomAction->trigger();
+
+ // get the zoom position
+ QPoint centerPoint = zoom->geometry().toRect().center();
+ QPoint firstPoint = zoom->geometry().toRect().topLeft();
+ QPoint secondPoint = zoom->geometry().toRect().bottomRight();
+
+ CX_DEBUG( ("zoom slider coordinates topleft(%d,%d) and bottomright(%d,%d)",
+ firstPoint.x(), firstPoint.y(), secondPoint.x(), secondPoint.y() ));
+
+ firstPoint = (centerPoint - firstPoint);
+ secondPoint = (secondPoint - centerPoint);
+
+ CX_DEBUG( ("dragging zoom from (%d,%d) to (%d,%d)",
+ firstPoint.x(), firstPoint.y(),
+ secondPoint.x(), secondPoint.y() ));
+
+ // click on zoom
+ QTest::mousePress( mMainWindow->viewport(), Qt::LeftButton,0, firstPoint );
+ QTest::mouseMove ( mMainWindow->viewport(), secondPoint, 1000 );
+ QTest::mouseRelease( mMainWindow->viewport(), Qt::LeftButton,0, secondPoint);
+ // At least ZoominIn/ZoominOut and Ready states are set
+ QVERIFY(zoomStateSpy.count() > 2 );
+ // At least once zoom value has been changed.
+ QVERIFY(zoomLevelStateSpy.count() > 2 );
+
+ CX_DEBUG( ("mouse click on (%d,%d)", centerPoint.x(), centerPoint.y() ));
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, centerPoint);
+ // At least ZoominIn/ZoominOut and Ready states are set
+ QVERIFY(zoomStateSpy.count() > 2 );
+ // At least once zoom value has been changed.
+ QVERIFY(zoomLevelStateSpy.count() > 2 );
+ QTest::qWait(1000);
+
+ /*CX_DEBUG(("testFlash"));
+ QTest::qWait(1000);
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(35,150));
+ QTest::qWait(1000);
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(185,150));
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(35,150));
+ sendCameraKeyEvent(QEvent::KeyPress);
+ sendCameraKeyEvent(QEvent::KeyRelease);*/
+
+
+ CX_DEBUG(("testGoToVideo"));
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(35,100), 500 );
+ QTest::qWait(3000);
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::VideoPreCaptureView );
+
+ CX_DEBUG(("testGoToStill"));
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(180,60) );
+ QTest::qWait(1000);
+ QTest::mouseClick( mMainWindow->viewport(), Qt::LeftButton,0, QPoint(35,100), 500 );
+ QTest::qWait(3000);
+ QVERIFY( mMainWindow->currentViewIndex()== CxUi::StillPreCaptureView );
+}
+
+// main() function non-GUI testing
+QTEST_MAIN( TestCxUiBat );