clock/tsrc/unittest_timezoneclient/unittest_timezoneclient.cpp
author hgs
Fri, 15 Oct 2010 12:10:36 +0530
changeset 83 5aadd1120515
permissions -rw-r--r--
201041

/*
 * 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 the License "Symbian Foundation License v1.0"
 * which accompanies this distribution, and is available
 * at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:  TimeZoneClient unit test class.
 *
 */

// System includes
#include <QtTest/QtTest>

// User includes
#include "timezoneclient.h"
#include "clockdatatypes.h"
/*!
	\class TestTimeZoneClient
	
	This object has functions to test the public apis in the class
	TimeZoneClient.
 */
class TestTimezoneClient: public QObject
{
	Q_OBJECT

private slots:
	// Test case setup.
	void init();
	void cleanup();
	
	// Test cases.
	void testGetLocations();
	void testGetCurrentZoneInfoL();
	void testSetAsCurrentLocation();
	void testSetAsCurrentLocationWithDst();
	void testIsDSTOnL();
	void testGetStandardOffset();
	void testTimeUpdateOn();
	void testSetTimeUpdateOn();
	void testSetDateTime();
	void testGetAllTimeZoneOffsets();
	void testGetCountriesForUTCOffset();
	void testAddCity();
	void testCheckForDstChange();
	void testGetSavedLocations();
	void testSaveLocations();
	//void testGetLocationInfo();
	//void testGetCityGroupIdByName();
	//void testGetCityOffsetByNameAndId();
private:
	void doCleanup();
private:
	TimezoneClient *mTimezoneClient;
	int mError;
};

/*!
	This function will be called before each testfunction is executed.
 */
void TestTimezoneClient::init()
{
	TRAPD(mError, mTimezoneClient = TimezoneClient::getInstance());
	Q_UNUSED(mError)
	
	Q_ASSERT(!mError);
	Q_ASSERT(mTimezoneClient);
}

/*!
	This function will be called after every testfunction.
 */
void TestTimezoneClient::cleanup()
{
	if (!mTimezoneClient->isNull()) {
		mTimezoneClient->deleteInstance();
	}
}

/*!
	Tests the api TimeZoneClient::getLocations
 */
void TestTimezoneClient::testGetLocations()
{
	QList<LocationInfo> locationList = mTimezoneClient->getLocations();
	QVERIFY(0 < locationList.count());
}

/*!
	Tests the api TestTimezoneClient::getCurrentZoneInfoL
 */
void TestTimezoneClient::testGetCurrentZoneInfoL()
{
	//LocationInfo testLocationInfo = {"Canada", "Toronto", "", -300, 1528, true};
	
	LocationInfo testLocationInfo = {"India", "Chennai", "", 330, 1944, 45, false};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);
	LocationInfo retrievedLocationInfo;
	retrievedLocationInfo = mTimezoneClient->getCurrentZoneInfoL();

	// Check the location info set with retrieved info.
	QString temp = retrievedLocationInfo.countryName;
	temp = retrievedLocationInfo.cityName;
	QVERIFY(testLocationInfo.countryName == retrievedLocationInfo.countryName);
	QVERIFY(testLocationInfo.cityName == retrievedLocationInfo.cityName);
	QVERIFY(testLocationInfo.timezoneId == retrievedLocationInfo.timezoneId);
}

/*!
	Tests the api TestTimezoneClient::setAsCurrentLocation.
 */
void TestTimezoneClient::testSetAsCurrentLocation()
{
	LocationInfo testLocationInfo = {"India", "Kolkata", "", 330, 1944, false};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);
	LocationInfo retrievedLocationInfo;
	retrievedLocationInfo = mTimezoneClient->getCurrentZoneInfoL();

	// Check the location info set with retrieved info.
	QVERIFY(testLocationInfo.countryName == retrievedLocationInfo.countryName);
	QVERIFY(testLocationInfo.cityName == retrievedLocationInfo.cityName);
	QVERIFY(testLocationInfo.listImageName 
	        == retrievedLocationInfo.listImageName);
	QVERIFY(testLocationInfo.zoneOffset == retrievedLocationInfo.zoneOffset);
	QVERIFY(testLocationInfo.timezoneId == retrievedLocationInfo.timezoneId);
	QVERIFY(testLocationInfo.dstOn == retrievedLocationInfo.dstOn);
}

/*!
	Tests the api TimeZoneClient::dstOn.
 */
void TestTimezoneClient::testSetAsCurrentLocationWithDst()
{
	//QDateTime currentDateTime(QDate(2009, 05, 15), QTime(12, 30));
	//QDateTime currentDateTime(QDate(2010, 03, 28), QTime(4, 0));
	QDateTime currentDateTime(QDate(2010, 03, 31), QTime(8, 30));
	mTimezoneClient->setDateTime(currentDateTime);
	LocationInfo testLocationInfo = {"Finland", "Helsinki", "", 180, 2760, 33,
			                         true};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);
	LocationInfo retrievedLocationInfo;
	retrievedLocationInfo = mTimezoneClient->getCurrentZoneInfoL();

	// Check the location info set with retrieved info.
	QVERIFY(testLocationInfo.countryName == retrievedLocationInfo.countryName);
	QVERIFY(testLocationInfo.cityName == retrievedLocationInfo.cityName);
	QVERIFY(testLocationInfo.listImageName 
	        == retrievedLocationInfo.listImageName);
	QVERIFY(testLocationInfo.zoneOffset == retrievedLocationInfo.zoneOffset);
	QVERIFY(testLocationInfo.timezoneId == retrievedLocationInfo.timezoneId);
	QVERIFY(testLocationInfo.dstOn == retrievedLocationInfo.dstOn);
}

/*!
	Tests the api TestTimezoneClient::isDSTOnL
 */
void TestTimezoneClient::testIsDSTOnL()
{
	LocationInfo testLocationInfo = 
							{"Finland", "Helsinki", "", 180, 2760, 33, true};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);
	QDateTime dstOnDate(QDate(2010, 03, 31), QTime(8, 30));
	mTimezoneClient->setDateTime(dstOnDate);
	QVERIFY(true == mTimezoneClient->isDSTOnL(2760));
	
	QDateTime dstOffDate(QDate(2010, 03, 27), QTime(8, 30));
	mTimezoneClient->setDateTime(dstOffDate);
	QVERIFY(false == mTimezoneClient->isDSTOnL(2760));
	
	LocationInfo testLocationInfo1 = {"India", "Kolkata", "", 330, 1944, false};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo1);
	QVERIFY(false == mTimezoneClient->isDSTOnL(1944));
}

/*!
	Tests the api TimeZoneClient::getStandardOffset
 */
void TestTimezoneClient::testGetStandardOffset()
{
	// For India
	int expectedOffset = 330;
	int offset = mTimezoneClient->getStandardOffset(1944);
	QVERIFY(expectedOffset == offset);
	
	// For London
	expectedOffset = 345;
	offset = mTimezoneClient->getStandardOffset(1936);
	QVERIFY(expectedOffset == offset);
}

/*!
	Tests the api TimeZoneClient::timeUpdateOn
 */
void TestTimezoneClient::testTimeUpdateOn()
{
	mTimezoneClient->setTimeUpdateOn(true);
	QVERIFY(true == mTimezoneClient->timeUpdateOn());
	mTimezoneClient->setTimeUpdateOn(false);
	QVERIFY(false == mTimezoneClient->timeUpdateOn());
}

/*!
	Tests the api TimeZoneClient::timeUpdateOn
 */
void TestTimezoneClient::testSetTimeUpdateOn()
{
	bool timeUpdate = mTimezoneClient->timeUpdateOn();
	mTimezoneClient->setTimeUpdateOn(!timeUpdate);
	
	QVERIFY(timeUpdate != mTimezoneClient->timeUpdateOn());
}

/*!
	Tests the api TimeZoneClient::setDateTime
 */
void TestTimezoneClient::testSetDateTime()
{
	QDateTime currentDateTime = QDateTime::currentDateTime();

	QDateTime expectedDateTime1 = currentDateTime.addDays(10).addSecs(3600);
	mTimezoneClient->setDateTime(expectedDateTime1);
	QVERIFY(currentDateTime.date() != QDate::currentDate());
	QVERIFY(currentDateTime.time().toString("hh:mm ap") != QTime::currentTime().toString("hh:mm ap"));
	QVERIFY(expectedDateTime1.date() == QDate::currentDate());
	QVERIFY(expectedDateTime1.time().toString("hh:mm ap") == QTime::currentTime().toString("hh:mm ap"));

	QDateTime expectedDateTime2 = currentDateTime.addDays(100).addSecs(7200);

	mTimezoneClient->setDateTime(expectedDateTime2);
	QVERIFY(expectedDateTime2.date() == QDate::currentDate());
	QVERIFY(expectedDateTime2.time().toString("hh:mm ap") == QTime::currentTime().toString("hh:mm ap"));
}

/*!
	Tests the api TimeZoneClient::getAllTimeZoneOffsets
 */
void TestTimezoneClient::testGetAllTimeZoneOffsets()
{
	int indiaOffset = 330;
	QList<int> offsetList = mTimezoneClient->getAllTimeZoneOffsets();
	QVERIFY(offsetList.count());
	QVERIFY(offsetList.contains(indiaOffset));
}

/*!
	Tests the api TimeZoneClient::getCountriesForUTCOffset
 */
void TestTimezoneClient::testGetCountriesForUTCOffset()
{
	int offset = 330;
	QList<QString> expectedList;
	expectedList.append("India");
	expectedList.append("Sri Lanka");
	QList<LocationInfo> countryList = 
			mTimezoneClient->getCountriesForUTCOffset(offset);
	int count = countryList.count();
	QVERIFY(expectedList.count() == count);
	
	QList<QString> nameList;
	for(int i = 0; i < count; i++) {
		nameList.append(countryList[i].countryName);
	}
	for(int i = 0; i < count; i++) {
		QVERIFY(nameList.contains(expectedList[i]));
	}
	
	// TODO: // Add negative
	offset = -12;
	countryList.clear();
	countryList = mTimezoneClient->getCountriesForUTCOffset(offset);
	QVERIFY(!countryList.count());
}

/*!
	Tests the api TimeZoneClient::addCity
 */
void TestTimezoneClient::testAddCity()
{
	QString cityName("Cochin");
	LocationInfo newLocInfo;
	TRAPD(err, newLocInfo = mTimezoneClient->addCity(1944, cityName, 45));
	if(err == KErrAlreadyExists) {
		// City is already existing.
	}
	QList<LocationInfo> &list = mTimezoneClient->getLocations();
	QList<QString> nameList;
	for(int i = 0; i < list.count(); i++) {
		nameList.append(list[i].cityName);
	}
	QVERIFY(nameList.contains(cityName));
}

/*!
	Tests the api TimeZoneClient::checkForDstChange
 */
void TestTimezoneClient::testCheckForDstChange()
{
	LocationInfo testLocationInfo = 
								{"Finland", "Helsinki", "", 180, 2760, 33, true};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);
	// Finland, Helsinki
	// DST started on Sunday, 28 March 2010, 03:00 local standard time
	// DST ends on Sunday, 31 October 2010, 04:00 local daylight time
	QDateTime dstOnDate(QDate(2010, 10, 31), QTime(3, 45));
	mTimezoneClient->setDateTime(dstOnDate);
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo);

	AlarmInfo alarmDetails;
	alarmDetails.origAlarmTime = QTime::currentTime().addSecs(3600);
	alarmDetails.alarmDateTime = QDate::currentDate();
	alarmDetails.repeatType = AlarmRepeatType(0);
	alarmDetails.alarmDay = 1;
	bool dstChange = mTimezoneClient->checkForDstChange(alarmDetails);
	QVERIFY(dstChange == true);
	
	QDateTime dstOffDate(QDate(2010, 10, 31), QTime(04, 01));
	mTimezoneClient->setDateTime(dstOffDate);
	AlarmInfo alarmDetails1;
	alarmDetails1.origAlarmTime = QTime::currentTime().addSecs(3600);
	alarmDetails1.alarmDateTime = QDate::currentDate();
	alarmDetails1.repeatType = AlarmRepeatType(0);
	alarmDetails1.alarmDay = 1;
	dstChange = mTimezoneClient->checkForDstChange(alarmDetails1);
	QVERIFY(dstChange == false);
	
	LocationInfo testLocationInfo1 = 
									{"India", "Chennai", "", 330, 1944, 45, false};
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo1);
	mTimezoneClient->setDateTime(dstOnDate);
	mTimezoneClient->setAsCurrentLocationL(testLocationInfo1);
	dstChange = mTimezoneClient->checkForDstChange(alarmDetails1);
	QVERIFY(dstChange == false);
}

/*!
	Tests the api TimeZoneClient::getSavedLocations
 */
void TestTimezoneClient::testGetSavedLocations()
{
	doCleanup();
	mTimezoneClient->setDateTime(QDateTime(QDate(2010, 8, 15), QTime(9,30)));
	
	QList<LocationInfo> locationList = mTimezoneClient->getSavedLocations();
	int firstcount = locationList.count();
	LocationInfo testLocationInfo1 = {"Japan", "Tokyo", "", 540, 2192, 53, 
			false};
	QList<LocationInfo> testList;
	testList << testLocationInfo1;
	mTimezoneClient->saveLocations(testList);
	
	locationList.clear();
	locationList = mTimezoneClient->getSavedLocations();
	int cnt = locationList.count();
	QVERIFY((firstcount + 1) == locationList.count());
	
	QList<QString> nameList;
	int index = 0;
	for(int i = 0; i < locationList.count(); i++) {
		if(testLocationInfo1.countryName == locationList[i].countryName) {
			index = i;
		}
	}
	QVERIFY(testLocationInfo1.countryName == locationList[index].countryName);
	QVERIFY(testLocationInfo1.cityName == locationList[index].cityName);
	QVERIFY(testLocationInfo1.listImageName 
	        == locationList[index].listImageName);
	QVERIFY(testLocationInfo1.zoneOffset == locationList[index].zoneOffset);
	QVERIFY(testLocationInfo1.timezoneId == locationList[index].timezoneId);
	QVERIFY(testLocationInfo1.dstOn == locationList[index].dstOn);
	
	LocationInfo testLocationInfo2 = {"Singapore", "Singapore", "", 480, 2144, 87, false};
	LocationInfo testLocationInfo3 = {"Finland", "Helsinki", "", 180, 2760, 33, true};
	testList << testLocationInfo2
			<< testLocationInfo3;
	mTimezoneClient->saveLocations(testList);
	locationList.clear();
	locationList = mTimezoneClient->getSavedLocations();
	QVERIFY((firstcount + 3) == locationList.count());
	doCleanup();
	
}

/*!
	Tests the api TimeZoneClient::saveLocations.
 */
void TestTimezoneClient::testSaveLocations()
{
	doCleanup();
	LocationInfo testLocationInfo = {"India", "Kolkata", "", 330, 1944, 45, false};
	QList<LocationInfo> testList;
	testList << testLocationInfo;
	mTimezoneClient->saveLocations(testList);
	QList<LocationInfo> resultantList = mTimezoneClient->getSavedLocations();
	
	// Check the location info saved with retrieved info.
	QVERIFY(resultantList.at(0).countryName == testList.at(0).countryName);
	QVERIFY(resultantList.at(0).cityName == testList.at(0).cityName);
	QVERIFY(resultantList.at(0).listImageName == testList.at(0).listImageName);
	QVERIFY(resultantList.at(0).zoneOffset == testList.at(0).zoneOffset);
	QVERIFY(resultantList.at(0).timezoneId == testList.at(0).timezoneId);
	QVERIFY(resultantList.at(0).dstOn == testList.at(0).dstOn);
	doCleanup();
}
void TestTimezoneClient::doCleanup()
{
	// Cleanup
	QString fileName("c:\\data\\clock\\cityInfo.dat");
	QFile cityInfoFile(fileName);
	cityInfoFile.remove();
}
/*
!
	Tests the api TimeZoneClient::getLocationInfo.
 
void TestTimezoneClient::testGetLocationInfo()
{
	LocationInfo gotInfo;
	LocationInfo testInfo = {"India", "Mumbai", "", 330, 1624, false};
	mTimezoneClient->getLocationInfo(45, 2, gotInfo);

	// Check the location info got by specifying groupId and cityIndex 
	// with testInfo.
	QVERIFY(testInfo.countryName == gotInfo.countryName);
	QVERIFY(testInfo.cityName == gotInfo.cityName);
	QVERIFY(testInfo.listImageName == gotInfo.listImageName);
	QVERIFY(testInfo.zoneOffset == gotInfo.zoneOffset);
	QVERIFY(testInfo.timezoneId == gotInfo.timezoneId);
	QVERIFY(testInfo.dstOn == gotInfo.dstOn);
}

!
	Test the api TimeZoneClient::testGetCityGroupIdByName.
 
void TestTimezoneClient::testGetCityGroupIdByName()
{
	int retrievedGroupId = mTimezoneClient->getCityGroupIdByName("India");
	mTimezoneClient->get
	// Check the retrieved city group id with actual id.
	QVERIFY(45 == retrievedGroupId);	
}

!
	Test the api TestTimezoneClient::getCityOffsetByNameAndId.
 
void TestTimezoneClient::testGetCityOffsetByNameAndId()
{
	int retrievedCityOffset = 
		mTimezoneClient->getCityOffsetByNameAndId("Mumbai",1624);
	
	// Check the retrieved city offset with actual offset.
	QVERIFY(1 == retrievedCityOffset);
}
*/

QTEST_MAIN(TestTimezoneClient)
#include "unittest_timezoneclient.moc"

// End of file	--Don't remove this.