diff -r afea38384506 -r a2b50a479edf radioapp/radiouiengine/tsrc/src/t_radiostation.cpp --- a/radioapp/radiouiengine/tsrc/src/t_radiostation.cpp Fri May 14 15:52:32 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1014 +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: radiostation test implementation -* -*/ - -#define UNIT_TESTS_FOR_10_1 -#ifdef UNIT_TESTS_FOR_10_1 -#include -#include -#endif -#include "t_radiostation.h" -#include "radiopresetstorage.h" -#include "radiostation.h" -#include "radiostationmodel.h" -#include "radiohistorymodel.h" -#include "radioenginewrapper.h" -#include "radiouiengine.h" -#include "radiologger.h" //connectAndTest - -// Constants -const uint KTestFrequency1 = 89000000; -const uint KTestFrequency2 = 89500000; -const uint KTestFrequency3 = 90000000; -const uint KTestFrequency4 = 90500000; -const uint KTestFrequency5 = 91000000; -const uint KTestFrequency6 = 91500000; -const uint KTestGenre1 = 1; -const uint KTestGenre2 = 2; -const QString KTestStationName1 = "Radio Noice"; -const QString KTestStationName2 = "RN RENAMED"; -const QString KTestUrl1 = "http://qt.nokia.com"; -const QString KTestUrl2 = "http://www.radionoice.com"; -const QString KTestFrequencyString1 = "89000000"; -const QString KTestFrequencyString2 = "89500000"; -const QString KTestFrequencyString3 = "90000000"; -const QString KTestFrequencyString6 = "91500000"; -const QString KTestArtist1 = "Eläkeläiset"; -const QString KTestArtist2 = "Jope"; -const QString KTestArtist3 = "Motorhead"; -const QString KTestTitle1 = "Humppa^2"; -const QString KTestTitle2 = "´åäö´ ^&%¤^"; -const QString KTestTitle3 = "Dancing queen"; -const QString KTestRadioTextRadioText = "NOW! Metallica - Enter sandman in MusicStore for free"; -const QString KTestRadioTextPlusArtist = "Metallica"; -const QString KTestRadioTextPlusTitle = "Enter sandman"; -const QString KTestRadioTextPlusUrl = "www.metallica.com"; -const QString KTestRadioTextPlusUnsupportedTag = "*#*#*#"; -const QString KTestDynamicPSText = "MAKKARAA"; - -/*! - * - */ -int main(int /* argc*/, char *argv[]) -{ - TestRadioUiEngine tv; - - char *pass[3]; - pass[0] = argv[0]; - pass[1] = "-o"; - pass[2] = "c:\\data\\testradiouiengine.txt"; - - int res = QTest::qExec(&tv, 3, pass); - - return res; -} - - -TestRadioUiEngine::TestRadioUiEngine() -{ -} - - -void TestRadioUiEngine::tunedToFrequency( uint /* frequency */, int /* commandSender */) -{ -} - - -void TestRadioUiEngine::seekingStarted( Seeking::Direction /* direction */) -{ -} - -void TestRadioUiEngine::radioStatusChanged( bool /* radioIsOn */) -{ -} - -void TestRadioUiEngine::rdsAvailabilityChanged( bool /* available */) -{ -} - -void TestRadioUiEngine::volumeChanged( int /* volume */) -{ -} - -void TestRadioUiEngine::muteChanged( bool /* muted */) -{ -} - -void TestRadioUiEngine::audioRouteChanged( bool /* loudspeaker */) -{ -} - -void TestRadioUiEngine::scanAndSaveFinished() -{ -} - - -void TestRadioUiEngine::headsetStatusChanged( bool /* connected */) -{ -} - -void TestRadioUiEngine::skipPrevious() -{ -} - -void TestRadioUiEngine::skipNext() -{ -} - -/*! - * Destructor - */ -TestRadioUiEngine::~TestRadioUiEngine() -{ - delete mRadioStationModel; - delete mUiEngine; -} - -/*! - * called before each testfunction is executed - */ -void TestRadioUiEngine::init() -{ -} - -/*! - * called after every testfunction - */ -void TestRadioUiEngine::cleanup() -{ -} - -/*! - * called before the first testfunction is executed - */ -void TestRadioUiEngine::initTestCase() -{ -#ifdef UNIT_TESTS_FOR_10_1 -// Workaround for the below panic, occured after porting to 10.1 -// Main Panic E32USER-CBase 44 -// Create and install the active scheduler - CActiveScheduler* scheduler = new(ELeave) CActiveScheduler; - CleanupStack::PushL(scheduler); - CActiveScheduler::Install(scheduler); -// CCoeEnv::Static() call in CRadioEngineTls returns NULL - CCoeEnv* env = new CCoeEnv; -#endif - mUiEngine = new RadioUiEngine; - mRadioStationModel = new RadioStationModel( *mUiEngine ); - mhistoryModel = new RadioHistoryModel( *mUiEngine ); - - mEngineWrapper.reset( new RadioEngineWrapper( mRadioStationModel->stationHandlerIf(), *this ) ); - mPresetStorage.reset( new RadioPresetStorage() ); - mRadioStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() ); - - //TODO:: Check why ASSERT fails when mModel->rowCount() == 0 - if(mRadioStationModel->rowCount()>0) - { - mRadioStationModel->removeAll(); //ASSERT: \"last >= first\" in file qabstractitemmodel.cpp, line 2110 - } - - connectAndTest( mRadioStationModel, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)), - this, SLOT(dataChanged(const QModelIndex, const QModelIndex)) ); - - connectAndTest( mRadioStationModel, SIGNAL(stationAdded(RadioStation)), - this, SLOT(stationAdded(RadioStation)) ); - - connectAndTest( mRadioStationModel, SIGNAL(stationDataChanged(RadioStation)), - this, SLOT(stationDataChanged(RadioStation)) ); - - connectAndTest( mRadioStationModel, SIGNAL(favoriteChanged(RadioStation)), - this, SLOT(favoriteChanged(RadioStation)) ); - - connectAndTest( mhistoryModel, SIGNAL(itemAdded()), - this, SLOT(itemAdded()) ); -} - -/*! - * called after the last testfunction was executed - */ -void TestRadioUiEngine::cleanupTestCase() -{ - delete mRadioStationModel; - delete mUiEngine; -} - -/*! - * - */ -void TestRadioUiEngine::dataChanged(const QModelIndex /* topLeft */, const QModelIndex /* bottomRight */) -{ - mEnteredSlots |= DataChanged; -} - -/*! - * - */ -void TestRadioUiEngine::stationDataChanged( RadioStation /* addedStation */ ) -{ - mEnteredSlots |= StationDataChanged; -} - -/*! - * - */ -void TestRadioUiEngine::favoriteChanged( RadioStation /* addedStation */) -{ - mEnteredSlots |= FavoriteChanged; -} - -/*! - * - */ -void TestRadioUiEngine::itemAdded() -{ - mEnteredSlots |= ItemAdded; -} - -/*! - * - */ -void TestRadioUiEngine::stationAdded( RadioStation addedStation ) -{ - mEnteredSlots |= StationAdded; - - QVERIFY2(( mStationToBeAdded == addedStation.name() ), "API:RadioStationModel stationAdded 1"); - QVERIFY2(( mExpectedStationCount == mRadioStationModel->rowCount() ), "API:RadioStationModel stationAdded 2"); -} - - -/*! - * Testing of implicit sharing a.k.a. copy-on-write - */ -void TestRadioUiEngine::testImplicitSharing() -{ - RadioStation t_RadioStation_1; - - int originalPresetIndex = t_RadioStation_1.presetIndex(); - // before any values assigned into any data field - QVERIFY2(( originalPresetIndex == RadioStation::SharedNull ), "API:Radiostation init failed 1"); - t_RadioStation_1.setName("Noice"); - originalPresetIndex = t_RadioStation_1.presetIndex(); - // once some value assigned into some other data field - QVERIFY2(( originalPresetIndex == RadioStation::Invalid ), "API:Radiostation init failed 2"); - - t_RadioStation_1.setFrequency( KTestFrequency1 ); - //const int newIndex = mModel->findUnusedPresetIndex(); - t_RadioStation_1.setPresetIndex( 2 ); - t_RadioStation_1.setGenre(1); - t_RadioStation_1.setUrl("http://qt.nokia.com"); - - RadioStation* t_RadioStation_2 = new RadioStation(t_RadioStation_1); - // test that changing the content of copied data doesn't cause - // detach in the copying data structure - uint originalFrequency = t_RadioStation_1.frequency(); - t_RadioStation_1.setFrequency( originalFrequency + 1 ); - // should be detached - bool detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ freq 1"); - - // test that changing the content of data sets detach true - originalFrequency = t_RadioStation_2->frequency(); - t_RadioStation_2->setFrequency( originalFrequency + 1 ); - // should be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ freq 2"); - delete t_RadioStation_2; - t_RadioStation_2 = NULL; - - //------------------------------------------------------------------------- - // test that changing the content of copied data doesn't cause - // detach in the copying data structure - t_RadioStation_2 = new RadioStation(t_RadioStation_1); - // should not be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(!detached, "API:Radiostation Implicit sharing/ preset index 1"); - originalPresetIndex = t_RadioStation_1.presetIndex(); - t_RadioStation_1.setPresetIndex( originalPresetIndex + 1 ); - // should be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ preset index 2"); - - // test that changing the content of data sets detach true - originalPresetIndex = t_RadioStation_2->presetIndex(); - //newIndex = mModel->findUnusedPresetIndex(); - t_RadioStation_2->setPresetIndex( originalPresetIndex + 1 ); - // should be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ preset index 3"); - delete t_RadioStation_2; - t_RadioStation_2 = NULL; - - // test that changing the content of copied data doesn't cause - // detach in the copying data structure - t_RadioStation_2 = new RadioStation(t_RadioStation_1); - // should not be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(!detached, "API:Radiostation Implicit sharing/ name 1"); - //QString originalName = t_RadioStation_1.name(); - t_RadioStation_1.setName("RadioOne"); - // should be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ name 2"); - // test that changing the content of data sets detach true - t_RadioStation_2->setName("RadioTwo"); - // should be detached - detached = t_RadioStation_2->isDetached(); - QVERIFY2(detached, "API:Radiostation Implicit sharing/ name 3"); -} - -/*! - * Testing of change flags set by RadioStation class - */ -void TestRadioUiEngine::testChangeFlags() -{ - RadioStation t_RadioStation; - - QVERIFY2(!t_RadioStation.isValid(), "API:Radiostation Init failure"); - t_RadioStation.setUserDefinedName(""); - t_RadioStation.setUserDefinedName("Radio Noice"); - t_RadioStation.setFrequency( KTestFrequency1 ); - //const int newIndex = mModel->findUnusedPresetIndex(); - t_RadioStation.setPresetIndex( 2 ); - t_RadioStation.setGenre( KTestGenre1 ); - t_RadioStation.setUrl( KTestUrl1 ); - - t_RadioStation.resetChangeFlags(); - bool persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(!persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 1"); - t_RadioStation.setUserDefinedName("Radio Noice+"); - bool nameChanged = t_RadioStation.hasDataChanged( RadioStation::NameChanged ); - QVERIFY2(nameChanged, "API:Radiostation Change flags/ NameChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 2"); - t_RadioStation.resetChangeFlags(); - - uint originalGenre = t_RadioStation.genre(); - t_RadioStation.setGenre( originalGenre + 1 ); - bool genreChanged = t_RadioStation.hasDataChanged( RadioStation::GenreChanged ); - QVERIFY2(genreChanged, "API:Radiostation Change flags/ GenreChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 3"); - t_RadioStation.resetChangeFlags(); - - QString originalUrl = t_RadioStation.url(); - t_RadioStation.setUrl(originalUrl); - // previous url set so no url or persistent data change flags should be set - bool urlChanged = t_RadioStation.hasDataChanged( RadioStation::UrlChanged ); - QVERIFY2(!urlChanged, "API:Radiostation Change flags/ UrlChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(!persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 4"); - t_RadioStation.resetChangeFlags(); - - QString originalRadioText = t_RadioStation.radioText(); - t_RadioStation.setRadioText( originalRadioText + "buy sausage" ); - bool radioTextChanged = t_RadioStation.hasDataChanged( RadioStation::RadioTextChanged ); - QVERIFY2(radioTextChanged, "API:Radiostation Change flags/ RadioTextChanged"); - // radio text not stored into cenrep - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(!persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 5"); - t_RadioStation.resetChangeFlags(); - t_RadioStation.setRadioText( t_RadioStation.radioText() ); - // because current radio text is reset change flags must not be affected - radioTextChanged = t_RadioStation.hasDataChanged( RadioStation::RadioTextChanged ); - QVERIFY2(!radioTextChanged, "API:Radiostation Change flags/ RadioTextChanged"); - t_RadioStation.resetChangeFlags(); - - QVERIFY2((t_RadioStation.psType()==RadioStation::Unknown), "API:Radiostation PS type check"); - t_RadioStation.setPsType( RadioStation::Dynamic ); - bool psTypeChanged = t_RadioStation.hasDataChanged( RadioStation::PsTypeChanged ); - QVERIFY2(psTypeChanged, "API:Radiostation Change flags/ PsTypeChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - // PS type not stored as persistent data - QVERIFY2(!persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 6"); - t_RadioStation.resetChangeFlags(); - - t_RadioStation.setFavorite(t_RadioStation.isFavorite()); - bool favouriteChanged = t_RadioStation.hasDataChanged( RadioStation::FavoriteChanged ); - QVERIFY2(!favouriteChanged, "API:Radiostation Change flags/ FavoriteChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(!persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 7"); - t_RadioStation.resetChangeFlags(); - - // initially there should not be PI code defined - QVERIFY2(!t_RadioStation.hasPiCode(), "API:Radiostation Pi code check"); - // non-clear channel - t_RadioStation.setPiCode(0xC004, RadioRegion::Default); //88.1 CBEE-FM - Chatham, ON - bool piCodeChanged = t_RadioStation.hasDataChanged( RadioStation::PiCodeChanged ); - QVERIFY2(piCodeChanged, "API:Radiostation Change flags/ PiCodeChanged"); - persistentDataChanged = t_RadioStation.hasDataChanged( RadioStation::PersistentDataChanged ); - QVERIFY2(persistentDataChanged, "API:Radiostation Change flags/ PersistentDataChanged 8"); -} - -/*! - * Testing of call sign integer to char conversion - */ -void TestRadioUiEngine::TestCallSignChar() -{ - for(uint i = 0; i < KLastCallSignCharCode; i++) - { - RadioStation t_RadioStation; - bool passed = t_RadioStation.callSignChar(i) == static_cast( 'A' + i ); - QVERIFY2(passed, "API:Radiostation TestCallSignChar 1"); - } - RadioStation t_RadioStation; - bool passed = t_RadioStation.callSignChar(KLastCallSignCharCode + 1) == static_cast( '?' ); - QVERIFY2(passed, "API:Radiostation TestCallSignChar 2"); -} - -/*! - * Testing of PI code to call sign conversion - */ -void TestRadioUiEngine::testPICodeToCallSign() -{ - RadioStation t_RadioStation; - - // boundary values, two typical values and three chars call sign case - QString callSign = t_RadioStation.piCodeToCallSign( KKxxxCallSignPiFirst - 1 ); - QVERIFY2((callSign==""), "API:Radiostation Call sign <"); - callSign = t_RadioStation.piCodeToCallSign( KKxxxCallSignPiFirst ); - QVERIFY2((callSign=="KAAA"), "API:Radiostation Call sign KAAA"); - callSign = t_RadioStation.piCodeToCallSign( 0x243F ); - QVERIFY2((callSign=="KHRJ"), "API:Radiostation Call sign KHRJ"); - callSign = t_RadioStation.piCodeToCallSign( KWxxxCallSignPiFirst - 1 ); - QVERIFY2((callSign=="KZZZ"), "API:Radiostation Call sign KZZZ"); - callSign = t_RadioStation.piCodeToCallSign( KWxxxCallSignPiFirst ); - QVERIFY2((callSign=="WAAA"), "API:Radiostation Call sign WAAA"); - callSign = t_RadioStation.piCodeToCallSign( 0x74B9 ); - QVERIFY2((callSign=="WMDT"), "API:Radiostation Call sign WMDT"); - callSign = t_RadioStation.piCodeToCallSign( KWxxxCallSignPiLast ); - QVERIFY2((callSign=="WZZZ"), "API:Radiostation Call sign WZZZ"); - callSign = t_RadioStation.piCodeToCallSign( KWxxxCallSignPiLast + 1 ); - QVERIFY2((callSign=="KEX"), "API:Radiostation Call sign KEX"); - callSign = t_RadioStation.piCodeToCallSign( 0x99B5 ); - QVERIFY2((callSign=="WJZ"), "API:Radiostation Call sign WJZ"); - callSign = t_RadioStation.piCodeToCallSign( 0x99C0 ); - QVERIFY2((callSign==""), "API:Radiostation Call sign ????"); -} - -/*! - * Testing of RadioStationModel initial state - */ -void TestRadioUiEngine::testRadioStationModelInit() -{ - //TODO:: Check why ASSERT fails when mModel->rowCount() == 0 - if( mRadioStationModel->rowCount()>0 ) - { - mRadioStationModel->removeAll(); - QVERIFY2((mRadioStationModel->rowCount()==0), "API:RadioStationModel removeAll()"); - } - - RadioStation foundStation; - // no stations in the model in this phase - QVERIFY2(!(mRadioStationModel->findFrequency( KTestFrequency1, foundStation )), - "API:RadioStationModel findFrequency 1"); -} - -/*! - * Testing of RadioStationModel addStation method and resulting RadioStationModel signals - */ -void TestRadioUiEngine::testAddStation1() -{ - RadioStation station; - station.setFrequency( KTestFrequency1 ); - station.setFrequency( KTestFrequency1 ); - station.setGenre( KTestGenre1 ); - station.setGenre( KTestGenre1 ); - station.setUrl( KTestUrl1 ); - station.setType( RadioStation::LocalStation ); - station.setType( RadioStation::LocalStation ); - station.setName(""); - station.setName( KTestStationName1 ); - station.setDynamicPsText( KTestDynamicPSText ); - station.setPiCode( 0xC004, RadioRegion::America ); //88.1 CBEE-FM - Chatham, ON - QVERIFY2(!(station.dynamicPsText().compare(KTestDynamicPSText)), "API:RadioStationModel addStation 1"); - station.setDynamicPsText( KTestDynamicPSText ); - // check that adding station increases model row count - mExpectedStationCount = mRadioStationModel->rowCount() + 1; - mStationToBeAdded = station.name(); - mRadioStationModel->addStation( station ); - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel addStation 2"); - bool correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( StationAdded ) && mEnteredSlots.testFlag( DataChanged ); - - bool frequencyUpdated = station.frequencyMhz().toDouble()*1000000 == KTestFrequency1; - QVERIFY2(frequencyUpdated, "API:RadioStationModel addStation 1"); - // check that correct signals received - QVERIFY2(correctSignalsReceived, "API:RadioStationModel addStation 3"); - mEnteredSlots = NoSlotsEntered; - - // check that added station can be found by frequency - QModelIndex index = mRadioStationModel->modelIndexFromFrequency( KTestFrequency1 ); - QVariant stationData = mRadioStationModel->data( index, Qt::DisplayRole ); - QString stationName = stationData.toString().right( KTestStationName1.length() ); - QVERIFY2(!(stationName.compare(KTestStationName1)), "API:RadioStationModel modelIndexFromFrequency"); -} - -/*! - * Testing of RadioStationModel saveStation method and resulting RadioStationModel signals - */ -void TestRadioUiEngine::testSaveStation1() -{ - RadioStation newStation1; - // check that find by frequency works - // this is needed for preset index to be updated into newStation1 - QVERIFY2((mRadioStationModel->findFrequency( KTestFrequency1, newStation1 )), - "API:RadioStationModel findFrequency 2"); - newStation1.setType( RadioStation::Favorite ); - mRadioStationModel->saveStation( newStation1 ); - bool correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( FavoriteChanged ) && mEnteredSlots.testFlag( DataChanged );; - QVERIFY2(correctSignalsReceived, "API:RadioStationModel saveStation 1"); - - newStation1.setGenre(newStation1.genre()+1); - mRadioStationModel->saveStation( newStation1 ); - correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && mEnteredSlots.testFlag( DataChanged ); - // check that correct signals received - QVERIFY2(correctSignalsReceived, "API:RadioStationModel saveStation 2"); -} - -/*! - * Testing of RadioStationModel addStation method and rowCount methods - */ -void TestRadioUiEngine::testAddStation2() -{ - RadioStation newStation2; - newStation2.setFrequency( KTestFrequency2 ); - QVERIFY2(!newStation2.hasRds(), "API:RadioStationModel addStation 1"); - newStation2.setGenre( KTestGenre2 ); - // setting genre should set this true - QVERIFY2(newStation2.hasRds(), "API:RadioStationModel addStation 2"); - newStation2.setUrl( KTestUrl2 ); - newStation2.setType( RadioStation::LocalStation | RadioStation::Favorite ); - newStation2.setName("Radio ice"); - // check that adding station increases model row count - mExpectedStationCount = mRadioStationModel->rowCount()+1; - mStationToBeAdded = newStation2.name(); - mRadioStationModel->addStation( newStation2 ); - - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel addStation 3"); - mEnteredSlots = NoSlotsEntered; -} - -/*! - * Testing of RadioStationModel saveStation method special cases - */ -void TestRadioUiEngine::testSaveStation2() -{ - RadioStation newStation1; - // this is needed for preset index to be updated into newStation1 - QVERIFY2((mRadioStationModel->findFrequency( KTestFrequency1, newStation1 )), - "API:RadioStationModel findFrequency 2"); - - newStation1.setFrequency( KTestFrequency2 ); - mExpectedStationCount = mRadioStationModel->rowCount(); - // updating existing station data must not increase station count - mRadioStationModel->saveStation( newStation1 ); - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel saveStation 1"); - // because frequency tried to be updated no signals should be received either - bool correctSignalsReceived = mEnteredSlots.testFlag( NoSlotsEntered ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel saveStation 2"); - mEnteredSlots = NoSlotsEntered; - - // original frequency resumed - newStation1.setFrequency( KTestFrequency1 ); - newStation1.setGenre(newStation1.genre()+1); - mExpectedStationCount = mRadioStationModel->rowCount(); - // now that frequency resumed signal should be received also - mRadioStationModel->saveStation( newStation1 ); - correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && mEnteredSlots.testFlag( DataChanged ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel saveStation 3"); - // updating existing station data must not increase station count - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel saveStation 2"); - - mExpectedStationCount = mRadioStationModel->rowCount(); - mStationToBeAdded = newStation1.name(); - // adding station must fail because the frequency is the same as previously used frequency - mRadioStationModel->addStation( newStation1 ); - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel addStation 3"); -} - -/*! - * Testing of RadioStationModel addStation method special cases - */ -void TestRadioUiEngine::testAddStation3() -{ - RadioStation newStation3; - newStation3.setFrequency( KTestFrequency2 ); - newStation3.setGenre(3); - newStation3.setUrl("http://www.radio4noice.com"); - newStation3.setType( RadioStation::LocalStation | RadioStation::Favorite ); - newStation3.setName("Radio e"); - // adding station must fail because frequency is the same as previously used frequency - mExpectedStationCount = mRadioStationModel->rowCount(); - mStationToBeAdded = newStation3.name(); - mRadioStationModel->addStation( newStation3 ); - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel addStation 4"); - // adding station must success because the station frequency is different now - newStation3.setFrequency( KTestFrequency2 + 1 ); - mExpectedStationCount = mRadioStationModel->rowCount() + 1; - mRadioStationModel->addStation( newStation3 ); - QVERIFY2((mRadioStationModel->rowCount()==mExpectedStationCount), "API:RadioStationModel addStation 5"); - // test that station can be found by frequency range - QList stations; - stations = mRadioStationModel->stationsInRange( KTestFrequency1, KTestFrequency3 ); - QVERIFY2((stations.count()==3), "API:RadioStationModel stationsInRange"); -} - -/*! - * Testing of RadioStationModel saveStation method special cases - */ -void TestRadioUiEngine::testSaveStation3() -{ - RadioStation newStation3; - RadioStation foundStation; - QVERIFY2(mRadioStationModel->findFrequency( KTestFrequency2 + 1, newStation3 ), - "API:RadioStationModel findFrequency 4"); - - newStation3.setFrequency( KTestFrequency3 ); - // because frequency or preset index don't have change flag the frequency must not be updated - mRadioStationModel->saveStation( newStation3 ); - - QVERIFY2(!(mRadioStationModel->findFrequency( KTestFrequency3, foundStation )), - "API:RadioStationModel findFrequency 3"); - - int stationGenre; - stationGenre = newStation3.genre(); - newStation3.setGenre( newStation3.genre() + 1 ); - // allthough genre changed so the frequency update must not become effective - mRadioStationModel->saveStation( newStation3 ); - - QVERIFY2(!(mRadioStationModel->findFrequency( KTestFrequency3, foundStation )), - "API:RadioStationModel findFrequency 4"); - - - mEnteredSlots = NoSlotsEntered; - foreach( const RadioStation& station, mRadioStationModel->list() ) - { - if ( station.frequency() == KTestFrequency2 ) - { - mRadioStationModel->setFavoriteByFrequency( KTestFrequency2, !station.isFavorite() ); - } - } - bool correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( FavoriteChanged ) && mEnteredSlots.testFlag( DataChanged ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel findFrequency 5"); -} - - - -/*! - * Test that stations are stored into RadioStationModel in ascending frequency order - */ -void TestRadioUiEngine::testSortByFrequency() -{ - int role = RadioStationModel::RadioStationRole; - int previousFrequency(0); // int not initialized zero as default - - for (int i = 0; i< mRadioStationModel->rowCount(); i++ ) - { - QModelIndex index = mRadioStationModel->index( i, 0 ); - QVariant stationData = mRadioStationModel->data( index, role ); - RadioStation station = stationData.value(); - // stations must be obtainded at ascending frequency order - QVERIFY2((station.frequency()>previousFrequency), "API:RadioStationModel testSortByFrequency"); - previousFrequency = station.frequency(); - } -} - -/*! - * Test that preset indexes match - */ -void TestRadioUiEngine::testFindPresetIndex() -{ - RadioStation station; - for (int i = 0; i< mRadioStationModel->rowCount(); i++ ) - { - QVERIFY2((mRadioStationModel->findPresetIndex(i) != RadioStation::NotFound), - "API:RadioStationModel testFindPresetIndex 1"); - QVERIFY2((mRadioStationModel->findPresetIndex( i, station ) != RadioStation::NotFound), - "API:RadioStationModel testFindPresetIndex 2"); - QVERIFY2((station.presetIndex() == i), "API:RadioStationModel testFindPresetIndex 3"); - } -} - -/*! - * Test that preset can be removed from model by frequency - */ -void TestRadioUiEngine::testRemoveByFrequency() -{ - RadioStation station; - int initialStationCount( mRadioStationModel->rowCount() ); - int presetIndex(0); - - // find valid preset index - for(int i = 0; irowCount(); i++) - { - presetIndex = mRadioStationModel->findPresetIndex( i, station ); - if(presetIndex!=RadioStation::NotFound) - break; - } - QVERIFY2((presetIndex != RadioStation::NotFound), "API:RadioStationModel testRemoveByFrequency 1"); - - mRadioStationModel->removeByFrequency( station.frequency() ); - QVERIFY2((mRadioStationModel->rowCount()==(initialStationCount-1)), "API:RadioStationModel testRemoveByFrequency 2"); -} - -/*! - * Test that station can be removed from model by preset index - */ -void TestRadioUiEngine::testRemoveByPresetIndex() -{ - RadioStation station; - station.setFrequency( KTestFrequency4 ); - mStationToBeAdded = ""; - mExpectedStationCount = mRadioStationModel->rowCount() + 1; - mRadioStationModel->addStation( station ); - // for updating station preset index - QVERIFY2((mRadioStationModel->findFrequency( KTestFrequency4, station )), - "API:RadioStationModel testRemoveByPresetIndex 1"); - - int initialStationCount( mRadioStationModel->rowCount() ); - mRadioStationModel->removeByPresetIndex( station.presetIndex() ); - QVERIFY2((mRadioStationModel->rowCount()==(initialStationCount-1)), "API:RadioStationModel testRemoveByPresetIndex 2"); -} - -/*! - * Test RadioStationModel method removeStation - */ -void TestRadioUiEngine::testRemoveStation() -{ - RadioStation station; - station.setFrequency( KTestFrequency5 ); - mStationToBeAdded = ""; - mExpectedStationCount = mRadioStationModel->rowCount() + 1; - mRadioStationModel->addStation( station ); - int initialStationCount( mRadioStationModel->rowCount() ); - // for updating station preset index - QVERIFY2(mRadioStationModel->findFrequency( KTestFrequency5, station ), - "API:RadioStationModel testRemoveStation"); - - mRadioStationModel->removeStation( station ); - QVERIFY2((mRadioStationModel->rowCount()==(initialStationCount-1)), "API:RadioStationModel testRemoveStation"); -} - - -/*! - * Test setting and unsetting station type favourite - */ -void TestRadioUiEngine::testSetFavorite() -{ - RadioStation station; - station.setFrequency( KTestFrequency6 ); - station.setType( RadioStation::Favorite ); - QVERIFY2(station.isFavorite(), "API:RadioStationModel testSetFavorite 1"); - mRadioStationModel->addStation( station ); - mEnteredSlots = NoSlotsEntered; - - mRadioStationModel->setFavoriteByFrequency( KTestFrequency6, false ); - bool correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( FavoriteChanged ) && mEnteredSlots.testFlag( DataChanged ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel testSetFavorite 2"); - - mRadioStationModel->findFrequency( KTestFrequency6, station ); - QVERIFY2(!station.isFavorite(), "API:RadioStationModel testSetFavorite 3"); - mEnteredSlots = NoSlotsEntered; - - mRadioStationModel->setFavoriteByPreset( station.presetIndex(), true ); - correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( FavoriteChanged ) && mEnteredSlots.testFlag( DataChanged ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel testSetFavorite 4"); - - // test toggling the favorite - QModelIndex index = mRadioStationModel->modelIndexFromFrequency( KTestFrequency6 ); - mRadioStationModel->setData( index, KTestFrequencyString6 ,RadioStationModel::ToggleFavoriteRole); - RadioStation station1 = mRadioStationModel->stationAt( index.row() ); - QVERIFY2(!station1.isFavorite(), "API:RadioStationModel testToggleFavourite"); - -} - -/*! - * Test renaming station - */ -void TestRadioUiEngine::testRenameStation() -{ - RadioStation station; - int presetIndex(0); - // find valid preset index - for( int i = 0; irowCount(); i++ ) - { - if( mRadioStationModel->findPresetIndex( i, station ) != RadioStation::NotFound ) - { - presetIndex = i; - break; - } - } - QString initialStationName( station.name() ); - mEnteredSlots = NoSlotsEntered; - mRadioStationModel->renameStation( presetIndex, initialStationName + "Renamed" ); - bool correctSignalsReceived = mEnteredSlots.testFlag( StationDataChanged ) && - mEnteredSlots.testFlag( DataChanged ); - QVERIFY2(correctSignalsReceived, "API:RadioStationModel testRenameStation 1"); - QVERIFY2(initialStationName!=mRadioStationModel->stationAt(presetIndex).name(), "API:RadioStationModel testRenameStation 2"); - - station.setUserDefinedName( KTestStationName2 ); - QVERIFY2(station.isRenamed(), "API:RadioStationModel testRenameStation 1"); - -} - -/*! - * Test setting radio text - */ -void TestRadioUiEngine::testSetRadioTextPlus() -{ - RadioStation station; - mRadioStationModel->findFrequency( KTestFrequency6, station ); - station.setRadioText( "" ); - station.setRadioText( KTestRadioTextRadioText ); - station.setRadioText( KTestRadioTextRadioText ); - station.setRadioTextPlus( RtPlus::Artist, KTestRadioTextPlusArtist ); - station.setRadioTextPlus( RtPlus::Title, KTestRadioTextPlusTitle ); - station.setRadioTextPlus( RtPlus::Homepage, KTestRadioTextPlusUrl ); - station.setRadioTextPlus( RtPlus::Homepage + 1, KTestRadioTextPlusUnsupportedTag ); - mRadioStationModel->saveStation( station ); - bool effective = station.radioText().contains( KTestRadioTextPlusArtist, Qt::CaseSensitive ); - QVERIFY2(effective, "API:RadioStationModel testSetRadioTextPlus 1"); - effective = station.radioText().contains( KTestRadioTextPlusTitle, Qt::CaseSensitive ); - QVERIFY2(effective, "API:RadioStationModel testSetRadioTextPlus 2"); - effective = !station.url().compare( KTestRadioTextPlusUrl ); - QVERIFY2(effective, "API:RadioStationModel testSetRadioTextPlus 3"); -} - -/*! - * Test RadioStationModel API - */ -void TestRadioUiEngine::testRadioStationModel() -{ - testRadioStationModelInit(); - testAddStation1(); - testSaveStation1(); - testAddStation2(); - testSaveStation2(); - testAddStation3(); - testSaveStation3(); - testSortByFrequency(); - testFindPresetIndex(); - testRemoveByFrequency(); - testRemoveByPresetIndex(); - testRemoveStation(); - testSetFavorite(); - testRenameStation(); - testSetRadioTextPlus(); -} -/*! - * Test RadioHistoryModel API - */ -void TestRadioUiEngine::testhistoryModel() - { - testHistoryModelInit(); - testHistoryModelAddItem(); - testHistoryModelFindItem(); - testHistoryModelUpdateItem(); - testHistoryModelSetData(); - testAddRadioTextPlus(); - testClearRadioTextPlus(); - } - -/*! - * Testing of RadioHistoryModel initial state - */ -void TestRadioUiEngine::testHistoryModelInit() -{ - //TODO:: Check why ASSERT fails when mhistoryModel->rowCount() == 0 - if( mhistoryModel->rowCount()>0 ) - { - mhistoryModel->removeAll(); - QVERIFY2((mRadioStationModel->rowCount()==0), "API:RadioHistoryModel removeAll() 1"); - } - QVERIFY2((mhistoryModel->rowCount()==0), "API:RadioHistoryModel removeAll() 2"); -} - -/*! - * - */ -void TestRadioUiEngine::testHistoryModelAddItem() -{ - int expectedHistoryItemCount( mhistoryModel->rowCount() + 1 ); - mEnteredSlots = NoSlotsEntered; - mhistoryModel->addItem( KTestArtist1, KTestTitle1 ); - bool correctSignalsReceived = mEnteredSlots.testFlag( ItemAdded ); - // check that correct signals received - QVERIFY2(correctSignalsReceived, "API:RadioHistoryModel addItem() 1"); - // check that item count increases - QVERIFY2((mhistoryModel->rowCount()==expectedHistoryItemCount), "API:RadioHistoryModel addItem() 2"); - - // check that artist/title stored into the model conforms to the one read from the model - QModelIndex index = mhistoryModel->index( 0, 0 ); - QStringList stringList = mhistoryModel->data( index, Qt::DisplayRole ).value(); - QString artistTitle = stringList.at(0); - QVERIFY2(!(artistTitle.compare(KTestArtist1+" - "+KTestTitle1)), "API:RadioHistoryModel addItem() 3"); - - - expectedHistoryItemCount = mhistoryModel->rowCount(); - // trying to add an item that allready exists must not increase the item count - mhistoryModel->addItem( KTestArtist1, KTestTitle1 ); - QVERIFY2((mhistoryModel->rowCount()==expectedHistoryItemCount), "API:RadioHistoryModel addItem() 4"); -} - -/*! - * - */ -void TestRadioUiEngine::testHistoryModelFindItem() -{ - RadioHistoryItem item; - mhistoryModel->findItem( KTestArtist1, KTestTitle1, item ); - QVERIFY2((item.artist()==KTestArtist1), "API:RadioHistoryModel findItem() 1"); - QVERIFY2((item.title()==KTestTitle1), "API:RadioHistoryModel findItem() 2"); - // try to find an item that doesn't exist - int ret = mhistoryModel->findItem( KTestArtist1+"+", KTestTitle1, item ); - QVERIFY2(ret==-1, "API:RadioHistoryModel findItem() 3"); -} - -/*! - * - */ -void TestRadioUiEngine::testHistoryModelUpdateItem() -{ - RadioHistoryItem item; - mhistoryModel->findItem( KTestArtist1, KTestTitle1, item ); - item.setTitle( KTestTitle2 ); - // update an existing item - mhistoryModel->updateItem( 0, item, true ); - - RadioHistoryItem foundItem; - // original item must not be found any more - int ret = mhistoryModel->findItem(KTestArtist1, KTestTitle1, foundItem); - QVERIFY2(ret==-1, "API:RadioHistoryModel updateItem() 1"); - // but the updated one instead - mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem); - QVERIFY2((foundItem.title()==KTestTitle2), "API:RadioHistoryModel updateItem() 2"); -} - -/*! - * - */ -void TestRadioUiEngine::testHistoryModelSetData() -{ - RadioHistoryItem foundItem; - mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem); - QVERIFY2(!foundItem.isFavorite(), "API:RadioHistoryModel SetData() 1"); - - QModelIndex index = mhistoryModel->index( 0, 0 ); - QString artistTitle = KTestArtist1 + KTestTitle2; - mhistoryModel->setData( index, artistTitle, RadioHistoryModel::SetFavoriteRole ); - mhistoryModel->findItem(KTestArtist1, KTestTitle2, foundItem); - // item should be now favorite - QVERIFY2(foundItem.isFavorite(), "API:RadioHistoryModel SetData() 2"); -} - -/*! - * - */ -void TestRadioUiEngine::testAddRadioTextPlus() -{ - mhistoryModel->addRadioTextPlus( RtPlus::Artist, KTestArtist1 ); - mhistoryModel->addRadioTextPlus( RtPlus::Title, KTestTitle1 ); -} - -/*! - * - */ -void TestRadioUiEngine::testClearRadioTextPlus() -{ - mhistoryModel->clearRadioTextPlus(); -} - -/*! - * Test RadioHistoryModelItem API - */ -void TestRadioUiEngine::testHistoryModelItem() -{ - RadioHistoryItem* item = new RadioHistoryItem( KTestArtist3, KTestTitle3 ); - item->setArtist( KTestArtist3 ); - QVERIFY2(!(item->artist().compare(KTestArtist3)), "API:testHistoryModelItem setArtist()"); - item->setTitle( KTestTitle3 ); - QVERIFY2(!(item->title().compare(KTestTitle3)), "API:testHistoryModelItem setTitle()"); - QVERIFY2(!item->isFavorite(), "API:testHistoryModelItem isFavorite() 1"); - item->setFavorite(); - QVERIFY2(item->isFavorite(), "API:testHistoryModelItem isFavorite() 2"); - item->setFavorite(); - delete item; - item = NULL; -}