clock/tsrc/unittest_timezoneclient/unittest_timezoneclient.cpp
changeset 83 5aadd1120515
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/tsrc/unittest_timezoneclient/unittest_timezoneclient.cpp	Fri Oct 15 12:10:36 2010 +0530
@@ -0,0 +1,465 @@
+/*
+ * 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.