diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxezoomcontrolsymbian/unittest_cxezoomcontrolsymbian.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxezoomcontrolsymbian/unittest_cxezoomcontrolsymbian.cpp Fri Apr 16 14:51:30 2010 +0300 @@ -0,0 +1,247 @@ +/* + * 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 + +#include "unittest_cxezoomcontrolsymbian.h" +#include "cxezoomcontrolsymbian.h" +#include "cxefakecameradevice.h" +#include "cxefakesettings.h" +#include "cxefakefeaturemanager.h" +#include "cxefakecameradevicecontrol.h" +#include "cxeerror.h" +#include "cxezoomcontrolsymbian.h" +#include "cxetestutils.h" + + +UnitTestCxeZoomControlSymbian::UnitTestCxeZoomControlSymbian() +: mZoomControl(NULL), mFakeCameraDevice(NULL), mFakeCameraDeviceControl(NULL), mFakeSettings(NULL), mFakeFeatureManager(NULL) +{ + qRegisterMetaType("CxeError::Id"); + qRegisterMetaType("CxeZoomControl::State"); +} + +UnitTestCxeZoomControlSymbian::~UnitTestCxeZoomControlSymbian() +{ + +} + + +void UnitTestCxeZoomControlSymbian::init() +{ + CX_DEBUG_ENTER_FUNCTION(); + + mFakeCameraDevice = new CxeFakeCameraDevice; + mFakeCameraDevice->newCamera(Cxe::PrimaryCameraIndex, + mFakeCameraDeviceControl); + mFakeCameraDeviceControl = new CxeFakeCameraDeviceControl; + mFakeCameraDeviceControl->setState(CxeCameraDeviceControl::Ready); + + mFakeSettings = new CxeFakeSettings(); + mFakeFeatureManager = new CxeFakeFeatureManager(); + + mZoomControl = new CxeZoomControlSymbian(*mFakeCameraDevice, + *mFakeCameraDeviceControl, + *mFakeSettings, + *mFakeFeatureManager); + + // init zoom control + connect(this, SIGNAL(prepareZoom(int)), mZoomControl, SLOT(prepareZoomForStill(int))); + + // make sure that after creation we are in correct state + QCOMPARE(mZoomControl->state(), CxeZoomControl::Idle); + + // after construction the initial values are 0 + // other cases for min and max are tested as part of other testcases + QCOMPARE(mZoomControl->min(),0); + QCOMPARE(mZoomControl->max(),0); + + CX_DEBUG_EXIT_FUNCTION(); +} + +void UnitTestCxeZoomControlSymbian::cleanup() +{ + delete mZoomControl; + mZoomControl = NULL; + + delete mFakeCameraDeviceControl; + mFakeCameraDeviceControl = NULL; + + delete mFakeCameraDevice; + mFakeCameraDevice = NULL; + + delete mFakeSettings; + mFakeSettings = NULL; + + delete mFakeFeatureManager; + mFakeFeatureManager = NULL; +} + +void UnitTestCxeZoomControlSymbian::testZoomTo() +{ + CX_DEBUG_ENTER_FUNCTION(); + + QSignalSpy spyStateChange(mZoomControl, SIGNAL(stateChanged(CxeZoomControl::State, + CxeError::Id))); + QSignalSpy spyZoomLevelChange(mZoomControl, + SIGNAL(zoomLevelChanged(int))); + QList spyArguments; + + // before prepare, this method should not do anything + mZoomControl->zoomTo(mZoomControl->max()); + QVERIFY(!CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + QCOMPARE(mZoomControl->max(), 0); + QCOMPARE(mZoomControl->min(), 0); + QCOMPARE(mZoomControl->state(), CxeZoomControl::Idle); + + // call fakeclass to emit a signal to get the zoomcontrol initialized + // and get zoom values + mFakeCameraDeviceControl->setState(CxeCameraDeviceControl::Ready); + emit prepareZoom(0); + int min = mZoomControl->min(); + int max = mZoomControl->max(); + int middle = min + (max-min)/2; + + // clear signal spies (just to be sure) + spyStateChange.clear(); + spyZoomLevelChange.clear(); + + // zoom to middle + mZoomControl->zoomTo(middle); + // verify statechanges + QVERIFY(CxeTestUtils::waitForSignal(spyStateChange, 1000, 2, false)); + spyArguments = spyStateChange.takeFirst(); // first signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::ZoomingIn); + spyArguments = spyStateChange.takeFirst(); // second signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::Ready); + // verify current zoomlevel change + QVERIFY(CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + spyArguments = spyZoomLevelChange.takeFirst(); + QCOMPARE(spyArguments.at(0).toInt(), middle); // mCurrentZoomLevel + + // clear signal spies + spyStateChange.clear(); + spyZoomLevelChange.clear(); + + // zoom to min + mZoomControl->zoomTo(min); + // verify statechanges + QVERIFY(CxeTestUtils::waitForSignal(spyStateChange, 1000, 2, false)); + spyArguments.clear(); + spyArguments = spyStateChange.takeFirst(); // first signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::ZoomingOut); + spyArguments.clear(); + spyArguments = spyStateChange.takeFirst(); // second signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::Ready); + // verify current zoomlevel change + QVERIFY(CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + spyArguments.clear(); + spyArguments = spyZoomLevelChange.takeFirst(); + QCOMPARE(spyArguments.at(0).toInt(), min); // mCurrentZoomLevel + + // clear signal spies + spyStateChange.clear(); + spyZoomLevelChange.clear(); + + // zoom to max + mZoomControl->zoomTo(max); + // verify statechanges + QVERIFY(CxeTestUtils::waitForSignal(spyStateChange, 1000, 2, false)); + spyArguments = spyStateChange.takeFirst(); // first signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::ZoomingIn); + spyArguments = spyStateChange.takeFirst(); // second signal + QCOMPARE(qvariant_cast(spyArguments.at(0)), + CxeZoomControl::Ready); + // verify current zoomlevel change + QVERIFY(CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + spyArguments = spyZoomLevelChange.takeFirst(); + QCOMPARE(spyArguments.at(0).toInt(), max); // mCurrentZoomLevel + + // clear signal spies + spyStateChange.clear(); + spyZoomLevelChange.clear(); + + // zoom to max+1 (nothing should happen, check that no signal is emitted) + mZoomControl->zoomTo(max+1); + QVERIFY(!CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + QVERIFY(!CxeTestUtils::waitForSignal(spyStateChange, 1000)); + + + CX_DEBUG_EXIT_FUNCTION(); +} + +void UnitTestCxeZoomControlSymbian::testPrepareZoomControl() +{ + QSignalSpy spyZoomLevelChange(mZoomControl, SIGNAL(zoomLevelChanged(int))); + + // setting the state of mFakeCameraDeviceControl emits stateChanged signal + // that CxeZoomControlSymbian connects to prepareZoomControl slot + + // signal parameters that are not supposed to change zoom values + mFakeCameraDeviceControl->setState(CxeCameraDeviceControl::Idle); + emit prepareZoom(0); + // zoomcontrol is in initial state and zoom values should not change + QVERIFY(!CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + QCOMPARE(mZoomControl->max(),0); + QCOMPARE(mZoomControl->min(),0); + QCOMPARE(mZoomControl->state(), CxeZoomControl::Idle); + + spyZoomLevelChange.clear(); + + // check that the zoom min and max values are updated + // when slot is called with the Ready parameter + mFakeCameraDeviceControl->setState(CxeCameraDeviceControl::Ready); + emit prepareZoom(0); + QVERIFY(CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + QList spyArguments = spyZoomLevelChange.takeFirst(); + QCOMPARE(spyArguments.at(0).toInt(), 0); // mCurrentZoomLevel should not change when prepare is called + QVERIFY(mZoomControl->max() > 0); // Must be positive, or zero if not supported. + QCOMPARE(mZoomControl->min(), 0); // Must be negative, or zero if macro zoom not supported + QCOMPARE(mZoomControl->state(), CxeZoomControl::Ready); +} + +void UnitTestCxeZoomControlSymbian::testPrepareForCameraDelete() +{ + QSignalSpy spyZoomLevelChange(mZoomControl, SIGNAL(zoomLevelChanged(int))); + + // zoomcontrol needs to be prepared in order to delete camera + // this emits a signal that calls prepareZoomControl + mFakeCameraDeviceControl->setState(CxeCameraDeviceControl::Ready); + emit prepareZoom(0); + + // call fakeclass method that emits a signal, + // which is connected to prepareForCameraDelete slot in contructor + // of CxeZoomControlSymbian + mFakeCameraDevice->deleteCamera(); + + // check that after prepareForCameraDelete default values are set + QCOMPARE(mZoomControl->max(),0); + QCOMPARE(mZoomControl->min(),0); + QCOMPARE(mZoomControl->state(),CxeZoomControl::Idle); + // check signal is emitted, and current zoom level is reset + QVERIFY(CxeTestUtils::waitForSignal(spyZoomLevelChange, 1000)); + QList spyArguments = spyZoomLevelChange.takeFirst(); + QCOMPARE(spyArguments.at(0).toInt(), 0); // mCurrentZoomLevel +} + +QTEST_MAIN(UnitTestCxeZoomControlSymbian);