diff -r cce62ebc198e -r 93c594350b9a radiohswidget/tsrc/src/t_radiohswidget.cpp --- a/radiohswidget/tsrc/src/t_radiohswidget.cpp Tue Aug 31 15:15:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,405 +0,0 @@ -/* -* Copyright (c) 2010 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: -* -*/ - -// System includes -#include - -// User Includes -#include "t_radiohswidget.h" -#include "xqsettingsmanager.h" -#include "xqapplicationmanager.h" -#include "xqaiwrequest.h" -#include "xqaiwinterfacedescriptor.h" -#include "radioservicedef.h" -#include "radiologger.h" - -// Constants -/** -* From ProfileEngineSDKCRKeys.h -* The id of the currently active profile, integer value. -* Possible values: -* -* 0 = General profile (default value)
-* 1 = Silent profile
-* 2 = Meeting profile
-* 3 = Outdoor profile
-* 4 = Pager profile
-* 5 = Off-line profile
-* 6 = Drive profile
-* 30-49 = User-created profiles
-**/ -const int PROFILE_GENERAL(0); -const int PROFILE_SILENT(1); -const int PROFILE_MEETING(2); -const int PROFILE_OUTDOOR(3); -const int PROFILE_PAGER(4); -const int PROFILE_OFFLINE(5); -const int PROFILE_DRIVE(6); -const int PROFILE_USER_CREATED(35); - -/** Requests are not embedded. */ -const bool EMBEDDED_REQUEST(false); - -/** Last request should be answered with empty reply. */ -int EMPTY_REPLY(-5); - -/** Test values for favorite station count. */ -const int FAVORITE_STATION_COUNT_INVALID_TOO_LOW1(-56); -const int FAVORITE_STATION_COUNT_INVALID_TOO_LOW2(-1); -const int FAVORITE_STATION_COUNT_VALID_LOWER_BOUNDARY(0); -const int FAVORITE_STATION_COUNT_VALID1(1); -const int FAVORITE_STATION_COUNT_VALID2(2); -const int FAVORITE_STATION_COUNT_VALID3(3); -const int FAVORITE_STATION_COUNT_VALID4(9); -const int FAVORITE_STATION_COUNT_VALID5(78); -const int FAVORITE_STATION_COUNT_VALID_UPPER_BOUNDARY(100); -const int FAVORITE_STATION_COUNT_INVALID_TOO_HIGH1(101); -const int FAVORITE_STATION_COUNT_INVALID_TOO_HIGH2(1256); - -/** Test values for textual information. */ -const QString TEST_FREQUENCY("99.9"); -const QString TEST_NAME("Radio Test"); -const QString TEST_GENRE("Test GenRe"); -const QString TEST_RADIO_TEXT("Test RDS"); -const QString TEST_DYNAMIC_PSNAME("Dynamic PS Name test"); -const QString TEST_EMPTY_STRING(""); -const QString TEST_INVALID_STRING; -/** This test string contains 1000 characters. */ -const QString TEST_TOO_LONG_STRING("1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); - -/** Test values for service notification types. */ -const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW1(-357); -const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW2(-1); -const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW3(0); -const int RADIO_SERVICE_NOTIFICATION_ID_VALID_LOWER_BOUNDARY(1); -const int RADIO_SERVICE_NOTIFICATION_ID_VALID_UPPER_BOUNDARY(8); -const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH1(9); -const int RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH2(57982); -const int RADIO_STATUS_INVALID_TOO_LOW1(-581); -const int RADIO_STATUS_INVALID_TOO_LOW2(-1); -const int RADIO_STATUS_VALID_LOWER_BOUNDARY(0); -const int RADIO_STATUS_VALID_UPPER_BOUNDARY(5); -const int RADIO_STATUS_INVALID_TOO_HIGH1(6); -const int RADIO_STATUS_INVALID_TOO_HIGH2(456); - -/** Mock returns for settings manager stub. */ -QVariant settings_manager_mock_return_profile; -QVariant settings_manager_mock_return_2nd_profile; -bool settings_manager_mock_bool_return; - -/** These request are defined in stub xqapplicationmanager.cpp. */ -extern XQAiwRequest *application_manager_mock_refresh_request; -extern XQAiwRequest *application_manager_mock_monitor_request; - -/** List for request mocks. */ -QVariantList request_mocks; -/** Amount of requests send. */ -int send_count; - - -/*! - \class TestRadioHsWidget - \brief Unit testing for FM Radio hs widget. - - TestRadioHsWidget implements needed functions for the FM Radio home screen - widget unit tests. -*/ - -// ======== MEMBER FUNCTIONS ======== - -/*! - Main function. - - There's been problems with QTEST_MAIN macro, so main function is defined - here. -*/ -int main(int /* argc*/, char *argv[]) -{ - LOG_METHOD_ENTER; - TestRadioHsWidget tv; - - char *pass[3]; - pass[0] = argv[0]; - pass[1] = "-o"; - pass[2] = "c:\\data\\testradiohswidget.txt"; - - int res = QTest::qExec(&tv, 3, pass); - - return res; -} - -/*! - Constructor. - */ -TestRadioHsWidget::TestRadioHsWidget() -{ - LOG_METHOD_ENTER; -} - - -/*! - Destructor. - */ -TestRadioHsWidget::~TestRadioHsWidget() -{ - LOG_METHOD_ENTER; -} - -/*! - Called before each testfunction is executed. - */ -void TestRadioHsWidget::init() -{ - LOG_METHOD_ENTER; - settings_manager_mock_return_profile = PROFILE_GENERAL; - request_mocks.clear(); - mSendInfos.clear(); - send_count = -1; - mRadioHsWidgetStub.data()->reset(); -} - -/*! - Called after every testfunction. - */ -void TestRadioHsWidget::cleanup() -{ - LOG_METHOD_ENTER; -} - -/*! - Called before the first testfunction is executed - */ -void TestRadioHsWidget::initTestCase() -{ - LOG_METHOD_ENTER; - mRadioHsWidgetStub.reset(new RadioHsWidget()); - QVERIFY(mRadioHsWidgetStub); - mProfileReader.reset(new RadioHsWidgetProfileReader(mRadioHsWidgetStub.data())); - QVERIFY(mProfileReader); - mServiceClient.reset(new RadioHsWidgetRadioServiceClient(mRadioHsWidgetStub.data())); - QVERIFY(mServiceClient); -} - -/*! - Called after the last testfunction was executed. - */ -void TestRadioHsWidget::cleanupTestCase() -{ - LOG_METHOD_ENTER; -} - -/*! - Tests RadioHsWidgetProfileReader and it's isCurrentProfileOffline() - function. - */ -void TestRadioHsWidget::offlineModeTest() -{ - LOG_METHOD; - settings_manager_mock_return_profile = PROFILE_GENERAL; - bool isOffline = mProfileReader.data()->isCurrentProfileOffline(); - QVERIFY2(( isOffline == false ), "FmRadioHsWidget:RadioHsWidget profile is offline"); - settings_manager_mock_return_profile = PROFILE_OFFLINE; - isOffline = mProfileReader.data()->isCurrentProfileOffline(); - QVERIFY2(( isOffline == true ), "FmRadioHsWidget:RadioHsWidget profile is not offline"); - settings_manager_mock_return_profile = PROFILE_USER_CREATED; - isOffline = mProfileReader.data()->isCurrentProfileOffline(); - QVERIFY2(( isOffline == false ), "FmRadioHsWidget:RadioHsWidget profile is offline"); -} - -/*! - Tests RadioHsWidgetRadioServiceClient class and it's ability to receive - and forward valid information. - */ -void TestRadioHsWidget::validReplies() -{ - LOG_METHOD; - // Replies that should be ok. - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID_LOWER_BOUNDARY)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID1)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID2)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID3)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID4)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID5)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_VALID_UPPER_BOUNDARY)); - createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant(true)); - createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant(false)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::UnSpecified)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Playing)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Muted)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::Seeking)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::NoAntenna)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RadioStatus::PoweringOff)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_VALID_LOWER_BOUNDARY)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_VALID_UPPER_BOUNDARY)); - createSendInfo(RadioServiceNotification::Frequency, QVariant(TEST_FREQUENCY)); - createSendInfo(RadioServiceNotification::Name, QVariant(TEST_NAME)); - createSendInfo(RadioServiceNotification::Name, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RadioServiceNotification::Genre, QVariant(TEST_GENRE)); - createSendInfo(RadioServiceNotification::RadioText, QVariant(TEST_RADIO_TEXT)); - createSendInfo(RadioServiceNotification::DynamicPS, QVariant(TEST_DYNAMIC_PSNAME)); - // Empty reply should be last to put RServiceClient to make an request, which is not replied. - createSendInfo(EMPTY_REPLY, QVariant(EMPTY_REPLY)); - - send_count = mSendInfos.count(); - - mServiceClient.data()->startMonitoring(FmRadio::VisibiltyToBackground); - mServiceClient.data()->stopMonitoring(); - - int receivedCount = mRadioHsWidgetStub.data()->receivedInformationCount(); - QVERIFY2((receivedCount == send_count - 1), "Send and received counts doesn't match"); - - ReceivedInfo temp; - for (int i = 0; i < send_count - 1; i++) { - temp = mRadioHsWidgetStub.data()->receivedInformation(); - QVERIFY(temp.informationType == mSendInfos.at(i).informationType); - verifyReceivedInformation(temp.informationType, temp.information, mSendInfos.at(i).information); - } -} - -/*! - Tests RadioHsWidgetRadioServiceClient class and it's ability to receive - and forward invalid information. - */ -void TestRadioHsWidget::invalidReplies() -{ - LOG_METHOD; - QList skipSendInfo; - // Replies that should not be ok. - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_LOW1)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_LOW2)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_HIGH1)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant(FAVORITE_STATION_COUNT_INVALID_TOO_HIGH2)); - createSendInfo(RadioServiceNotification::FavoriteCount, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::CurrentIsFavorite, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_LOW1)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_LOW1)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_HIGH1)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant(RADIO_STATUS_INVALID_TOO_HIGH2)); - createSendInfo(RadioServiceNotification::RadioStatus, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::Frequency, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::Name, QVariant(TEST_INVALID_STRING)); - createSendInfo(RadioServiceNotification::Name, QVariant(TEST_TOO_LONG_STRING)); - createSendInfo(RadioServiceNotification::Name, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::Genre, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::RadioText, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - createSendInfo(RadioServiceNotification::DynamicPS, QVariant()); - skipSendInfo.append(request_mocks.count() - 1); - // Replies that should generate a warning. - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_VALID_LOWER_BOUNDARY, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_VALID_UPPER_BOUNDARY, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW1, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW2, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_LOW3, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH1, QVariant(TEST_EMPTY_STRING)); - createSendInfo(RADIO_SERVICE_NOTIFICATION_ID_INVALID_TOO_HIGH2, QVariant(TEST_EMPTY_STRING)); - // Empty reply should be last to put RServiceClient to make an request, which is not replied. - createSendInfo(EMPTY_REPLY, QVariant(EMPTY_REPLY)); - - send_count = mSendInfos.count(); - - mServiceClient.data()->startMonitoring(FmRadio::VisibiltyToBackground); - mServiceClient.data()->stopMonitoring(); - - int receivedCount = mRadioHsWidgetStub.data()->receivedInformationCount(); - int skippedCount = skipSendInfo.count(); - QVERIFY2((receivedCount == send_count - skippedCount - 1), "Send and received counts doesn't match"); - - ReceivedInfo temp; - for (int i = 0; i < send_count - 1; i++) { - if (skipSendInfo.contains(i)) { - // Skip verification for information that was filtered in - // RadioHsWidgetRadioServiceClient. - continue; - } - temp = mRadioHsWidgetStub.data()->receivedInformation(); - QVERIFY(temp.informationType == mSendInfos.at(i).informationType); - verifyReceivedInformation(temp.informationType, temp.information, mSendInfos.at(i).information); - } -} - -/*! - Helper function to store send information and append it to a request - mocks. - */ -void TestRadioHsWidget::createSendInfo(int informationType, const QVariant information) -{ - SendInfo info; - QVariantList notificationList; - - info.informationType = informationType; - info.information = information; - info.data = QVariant(mServiceClient.data()-> - createRadioNotificationData( - info.informationType, - info.information - )); - - mSendInfos.append(info); - - notificationList.append(info.data); - request_mocks.append(QVariant(notificationList)); -} - -/*! - Helper function to verify receved information. - */ -void TestRadioHsWidget::verifyReceivedInformation(int informationType, - const QVariant &receivedInformation, const QVariant &sendInformation) -{ - switch (informationType) { - case RadioServiceNotification::CurrentIsFavorite: - QVERIFY(receivedInformation.canConvert(QVariant::Bool)); - QCOMPARE(receivedInformation.toBool(), sendInformation.toBool()); - break; - case RadioServiceNotification::FavoriteCount: - // Fall through because of similar handling - case RadioServiceNotification::RadioStatus: - QVERIFY(receivedInformation.canConvert(QVariant::Int)); - QCOMPARE(receivedInformation.toInt(), sendInformation.toInt()); - break; - case RadioServiceNotification::Frequency: - // Fall through because of similar type of information and thus - // similar handling - case RadioServiceNotification::Name: - // Fall through because of similar type of information and thus - // similar handling - case RadioServiceNotification::Genre: - // Fall through because of similar type of information and thus - // similar handling - case RadioServiceNotification::RadioText: - // Fall through because of similar type of information and thus - // similar handling - case RadioServiceNotification::DynamicPS: - QVERIFY(receivedInformation.canConvert(QVariant::String)); - QCOMPARE(receivedInformation.toString(), sendInformation.toString()); - break; - default: - QWARN("Default case, shouldn't be here except if specifically testing RadioServiceNotification id out of bounds."); - QVERIFY(receivedInformation.canConvert(QVariant::String)); - QCOMPARE(receivedInformation.toString(), sendInformation.toString()); - break; - } -} - -//QTEST_MAIN(t_radiohswidget)