--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_MIUT09.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,908 @@
+// Copyright (c) 1998-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:
+// Name of test harness: T_MIUT09
+// Component: IMCM
+// Owner: KP
+// Brief description of test harness:
+// Tests TImRfc822DateField - tests ParseDateField(), SetDate() functions for
+// all dates specified in the Y2K Compliance Testing document.
+// Tests ParseDateField() to set time in local timezone.
+// Test cases for representing TTime in local timezone.
+// Detailed description of test harness:
+// As above.
+// Input files required to run test harness:
+// None
+// Intermediate files produced while running test harness:
+// <DRIVE>:\msglogs\T_MIUT09\T_IMCM.log
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_MIUT09.<PLATFORM>.<VARIANT>.txt
+// Description of how to build test harness:
+// cd \msg\imcm\
+// bldmake bldfiles
+// abld test build
+// Description of how to run test harness:
+// The following instructions are the same for all platforms:
+// 1. Build T_DB test harness from COMMDB component:
+// cd \commdb\group
+// bldmake bldfiles
+// abld test build t_db
+// 2. Build the test utilities:
+// cd \msg\testutils\group\
+// bldmake bldfiles
+// abld build
+// WINS running instructions:
+// \epoc32\release\wins\<VARIANT>\T_MIUT09.exe can be used at the command prompt
+// or executable can be run from Windows Explorer.
+// All other platform running instructions:
+// 1. Copy \epoc32\release\<PLATFORM>\<VARIANT>\T_MIUT09.exe onto the other platform
+// 2. Copy \epoc32\release\<PLATFORM>\<VARIANT>\MSVTESTUTILS.DLL into
+// <DRIVE>:\system\libs on the other platform
+// 3. Copy \epoc32\release\<PLATFORM>\<VARIANT>\EMAILTESTUTILS.DLL into
+// <DRIVE>:\system\libs on the other platform
+// 4. Run T_MIUT09.exe on the other platform
+//
+//
+
+#include "emailtestutils.h"
+#include "MIUTHDR.H" // CImHeader
+#include <miutlog.h>
+#include <miutset.h>
+// local variables etc //
+
+_LIT(KMiut09Test, "MIUT09 - Test TImRfc822DateField class");
+RTest test(KMiut09Test);
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CImLog* log;
+LOCAL_D CEmailTestUtils* testUtils;
+
+_LIT(KMiutTestPassed, "PASSED test %d\n");
+_LIT(KMiutTestFailed, "FAILED test %d\n");
+
+//
+
+LOCAL_C void ResultOfTest(TBool aResult,TInt aTestNo)
+ {
+ if (aResult)
+ {
+ test.Printf(KMiutTestPassed, aTestNo);
+ }
+ else
+ {
+ test.Printf(KMiutTestFailed, aTestNo);
+ }
+ }
+
+LOCAL_C TBool MyEqualityTest(TDesC8& item1, TDesC8& item2)
+ {
+ _LIT8(KErrorReason, "\t\tDates not set correctly for %S");
+ TBuf8<80> buf;
+ TBool result = (item1==item2);
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &item1);
+ log->AppendError(buf ,-1);
+ }
+ return result;
+ }
+
+LOCAL_C TBool MyTimeEqualityTest(TTime& item1, TDateTime& item2, TDesC8& actualDate)
+ {
+ _LIT8(KErrorReason, "\t\tDates not parsed correctly for %S");
+ TBuf8<80> buf;
+ TLocale localeTime;
+ // DaylightSaving is on subtract 1 hour.
+ if (localeTime.QueryHomeHasDaylightSavingOn())
+ {
+ item1 -= (TTimeIntervalMinutes)60;
+ }
+
+ TBool result = (item1==item2);
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &actualDate);
+ log->AppendError(buf ,-1);
+ }
+ return result;
+ }
+
+LOCAL_C TBool MyTimeEqualityTest2(TTime& item1, TTime& item2, TDesC8& actualDate)
+ {
+ TDateTime time1 = item1.DateTime();
+ TDateTime time2 = item2.DateTime();
+ TBool result = ETrue;
+ result &= (time1.Year()==time2.Year());
+ result &= (time1.Month()==time2.Month());
+ result &= (time1.Day()==time2.Day());
+
+ _LIT8(KErrorReason, "\t\tDates not parsed correctly for invalid date %S");
+ TBuf8<90> buf;
+ if (!result)
+ {
+ buf.AppendFormat(KErrorReason, &actualDate);
+ log->AppendError(buf ,-1);
+ }
+ return result;
+ }
+
+
+//
+
+LOCAL_C TBool TestParseDateField(TInt aTest)
+ {
+ TBool result = ETrue;
+ TBuf8<KMiutDateStringLength> actualDate;
+ TImRfc822DateField dateField;
+ TTime time;
+ TDateTime actualTime;
+
+ log->AppendComment(_L8("\tTesting ParseDateField function"));
+
+ actualTime.Set(1970, EJanuary, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Fri, 2 Jan 1970 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //
+ // Test valid dates - required for Y2K testing
+ // 4.2.1 - Valid dates
+ //
+
+ actualTime.Set(1998, EDecember, 30, 0, 0, 0, 0);
+ actualDate = _L8(" Thu, 31 Dec 1998 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EJanuary, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Fri, 1 Jan 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EFebruary, 26, 0, 0, 0, 0);
+ actualDate = _L8(" Sat, 27 Feb 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, ESeptember, 8, 0, 0, 0, 0);
+ actualDate = _L8(" Thu, 9 Sep 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EFebruary, 26, 0, 0, 0, 0);
+ actualDate = _L8(" Sun, 27 Feb 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EDecember, 30, 0, 0, 0, 0);
+ actualDate = _L8(" Sun, 31 Dec 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EFebruary, 27, 0, 0, 0, 0);
+ actualDate = _L8(" Wed, 28 Feb 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EMarch, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Thu, 1 Mar 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EFebruary, 27, 0, 0, 0, 0);
+ actualDate = _L8(" Sat, 28 Feb 2004 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //
+ // Test days of the week - required for Y2K testing
+ // 4.2.7 - Calculation of days of the week from dates
+ //
+
+ actualTime.Set(1999, EFebruary, 27, 0, 0, 0, 0);
+ actualDate = _L8(" Sun, 28 Feb 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EMarch, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 1 Mar 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EDecember, 30, 0, 0, 0, 0);
+ actualDate = _L8(" Fri, 31 Dec 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EJanuary, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Sat, 1 Jan 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EFebruary, 27, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 28 Feb 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EFebruary, 28, 0, 0, 0, 0);
+ actualDate = _L8(" Tue, 29 Feb 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2000, EMarch, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Wed, 1 Mar 2000 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EJanuary, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 1 Jan 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EFebruary, 28, 0, 0, 0, 0);
+ actualDate = _L8(" Sun, 29 Feb 2004 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EMarch, 0, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 1 Mar 2004 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //
+ // Test invalid dates. Required for Y2K testing
+ // 4.2.2 - Invalid dates
+ // Date/time should be set to the current time.
+ //
+
+ TTime utcTime;
+ actualDate = _L8(" Mon, 31 Apr 1998 00:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Mon, 30 Feb 2000 00:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Mon, 29 Feb 2001 00:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Mon, 29 Feb 1999 00:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Mon, 30 Feb 2004 00:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ //
+ // Test invalid times.
+ // Date/time should be set to the current time.
+ //
+
+ actualDate = _L8(" Sat, 27 Feb 1999 28:00:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Sat, 27 Feb 1999 12:61:00 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8(" Sat, 27 Feb 1999 21:45:62 +0000");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ //
+ // Test invalid data.
+ // Date/time should be set to the current time.
+ //
+
+ actualDate = _L8("1");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8("");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ actualDate = _L8("Complete tripe...");
+ utcTime.UniversalTime();
+ result &= (dateField.ParseDateField(actualDate, time) != KErrNone);
+ result &= MyTimeEqualityTest2(time, utcTime, actualDate);
+
+ //
+ // Test valid uppercase date strings.
+ // INC042354
+ //
+
+ actualTime.Set(1999, EJanuary, 0, 0, 0, 0, 0);
+ actualDate = _L8(" FRI, 1 JAN 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EJune, 0, 0, 0, 0, 0);
+ actualDate = _L8(" TUE, 1 JUN 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EJuly, 0, 0, 0, 0, 0);
+ actualDate = _L8(" THU, 1 JUL 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EMarch, 0, 0, 0, 0, 0);
+ actualDate = _L8(" THU, 1 MAR 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EMay, 0, 0, 0, 0, 0);
+ actualDate = _L8(" TUE, 1 MAY 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EApril, 0, 0, 0, 0, 0);
+ actualDate = _L8(" SUN, 1 APR 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2001, EAugust, 0, 0, 0, 0, 0);
+ actualDate = _L8(" WED, 1 AUG 2001 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //
+ // Test valid lowercase date strings.
+ //
+
+ actualTime.Set(1999, EJanuary, 0, 0, 0, 0, 0);
+ actualDate = _L8(" fri, 1 jan 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(1999, EJune, 0, 0, 0, 0, 0);
+ actualDate = _L8(" tue, 1 jun 1999 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //
+ ResultOfTest(result,aTest);
+ log->AppendComment(_L8("\tTested ParseDateField function"));
+ return result;
+ }
+
+LOCAL_C TBool TestSetDate(TInt aTest)
+ {
+ TBool result = ETrue;
+ TBuf8<KMiutDateStringLength> parsedDate;
+ TBuf8<KMiutDateStringLength> actualDate;
+ TImRfc822DateField dateField;
+ TDateTime date;
+
+ log->AppendComment(_L8("\tTesting SetDate function"));
+
+ TLocale locale;
+ locale.Refresh(); // pick up the system settings so we can determine the timezone
+
+ date.Set(1970, EJanuary, 1, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Fri, 2 Jan 1970 00:00:00 +0100");
+ else
+ actualDate = _L8(" Fri, 2 Jan 1970 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ //
+ // Test valid dates - required for Y2K testing
+ // 4.2.1 - Valid dates
+ //
+
+ date.Set(1998, EDecember, 30, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Thu, 31 Dec 1998 00:00:00 +0100");
+ else
+ actualDate = _L8(" Thu, 31 Dec 1998 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(1999, EJanuary, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Fri, 1 Jan 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Fri, 1 Jan 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(1999, EFebruary, 26, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sat, 27 Feb 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sat, 27 Feb 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(1999, ESeptember, 8, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Thu, 9 Sep 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Thu, 9 Sep 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EFebruary, 26, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sun, 27 Feb 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sun, 27 Feb 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EDecember, 30, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sun, 31 Dec 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sun, 31 Dec 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2001, EFebruary, 27, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Wed, 28 Feb 2001 00:00:00 +0100");
+ else
+ actualDate = _L8(" Wed, 28 Feb 2001 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2001, EMarch, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Thu, 1 Mar 2001 00:00:00 +0100");
+ else
+ actualDate = _L8(" Thu, 1 Mar 2001 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2004, EFebruary, 27, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sat, 28 Feb 2004 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sat, 28 Feb 2004 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ //
+ // Test days of the week - required for Y2K testing
+ // 4.2.7 - Calculation of days of the week from dates
+ //
+
+ date.Set(1999, EFebruary, 27, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sun, 28 Feb 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sun, 28 Feb 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(1999, EMarch, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Mon, 1 Mar 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Mon, 1 Mar 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(1999, EDecember, 30, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Fri, 31 Dec 1999 00:00:00 +0100");
+ else
+ actualDate = _L8(" Fri, 31 Dec 1999 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EJanuary, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sat, 1 Jan 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sat, 1 Jan 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EFebruary, 27, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Mon, 28 Feb 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Mon, 28 Feb 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EFebruary, 28, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Tue, 29 Feb 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Tue, 29 Feb 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2000, EMarch, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Wed, 1 Mar 2000 00:00:00 +0100");
+ else
+ actualDate = _L8(" Wed, 1 Mar 2000 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2001, EJanuary, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Mon, 1 Jan 2001 00:00:00 +0100");
+ else
+ actualDate = _L8(" Mon, 1 Jan 2001 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2004, EFebruary, 28, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Sun, 29 Feb 2004 00:00:00 +0100");
+ else
+ actualDate = _L8(" Sun, 29 Feb 2004 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ date.Set(2004, EMarch, 0, 0, 0, 0, 0);
+ if (locale.QueryHomeHasDaylightSavingOn())
+ actualDate = _L8(" Mon, 1 Mar 2004 00:00:00 +0100");
+ else
+ actualDate = _L8(" Mon, 1 Mar 2004 00:00:00 +0000");
+ dateField.SetDate(date, parsedDate);
+ result &= MyEqualityTest(parsedDate, actualDate);
+ parsedDate.SetLength(0);
+
+ ResultOfTest(result,aTest);
+ log->AppendComment(_L8("\tTested SetDate function"));
+ return result;
+ }
+
+LOCAL_C void AddOffsetMinutes(TInt aOffsetMinutes, TTime& aTime)
+{
+ aTime = aTime + (TTimeIntervalMinutes)aOffsetMinutes;
+}
+
+/**
+@SYMTestCaseID DEF049501
+@SYMTestType UT
+@SYMTestPriority Medium
+@SYMPREQ DEF049501
+@SYMDEF DEF049501
+@SYMTestCaseDependencies None
+@SYMTestCaseDesc Test for finding the timezone differences by parsing the given date.
+Date will be in Obsolete, numeric and Military timezones.
+@SYMTestActions Parses the given datetime field.
+Finds the timezone difference in minutes.
+Returns the parsed datetime.
+@SYMTestExpectedResults KErrorNone if parsing is done properly.
+*/
+// TESTCASE: 3
+LOCAL_C TBool TestTimezoneParseDateField(TInt aTest)
+ {
+ TBool result = ETrue;
+ TBuf8<KMiutDateStringLength> actualDate;
+ TImRfc822DateField dateField;
+ TTime time;
+ TDateTime actualTime;
+
+ log->AppendComment(_L8("\tTesting TimeZone effect in ParseDateField function"));
+
+ //3-character strings for indicating time zones.
+
+ //EDT is semantically equivalent to -0400
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 EDT");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ //Add the offset minutes. If parsing is done correctly 'time' will be equal to actualTime
+ AddOffsetMinutes(-240,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //EST is semantically equivalent to -0500
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 EST");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-300,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+
+ //CST is semantically equivalent to -0600
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 CST");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-360,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+
+ //MST is semantically equivalent to -0700
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 MST");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-420,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //PST is semantically equivalent to -0800
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 PST");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-480,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //BST is semantically equivalent to +0100
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 BST");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(60,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ // TZ in Military standard.
+
+ //A indicates one hour earlier A:-1
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 A");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-60,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+
+ //M indicates 12 hours earlier M:-12
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 M");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-720,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //Z indicates Universal Time or GMT
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 Z");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(0,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //N is one hour later N:+1
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 N");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(60,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ //Y is 12 hours later Y:+12
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 Y");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(720,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ // TZ in numeric format(indication of the amount of offset from UT)
+
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 -1200");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(-720,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 +0000");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(0,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 +0530");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(330,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ actualTime.Set(2004, EMarch, 1, 0, 0, 0, 0);
+ actualDate = _L8(" Mon, 2 Mar 2004 00:00:00 +1200");
+ result &= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ AddOffsetMinutes(720,time);
+ result &= MyTimeEqualityTest(time, actualTime, actualDate);
+
+ ResultOfTest(result,aTest);
+ log->AppendComment(_L8("\tTested ParseDateField function"));
+ return result;
+ }
+
+
+//
+
+/**
+@SYMTestCaseID DEF049501
+@SYMTestType CT
+@SYMTestPriority Medium
+@SYMDEF DEF049501
+@SYMTestCaseDependencies None
+@SYMTestCaseDesc Test for checking malformed Month names in the datefiled while parsing the month name in TImRfc822DateField::GetMonth() method
+@SYMTestActions Parses the given date. For malformed month name parsing should fail.
+@SYMTestExpectedResults Parsing should fail and return value of ParseDateField() should be KErrorGeneral.
+*/
+//TESTCASE: 4
+LOCAL_C TBool TestMalformedMonthInDateField(TInt aTest)
+{
+ TBool result;
+ result = EFalse;
+ TBuf8<KMiutDateStringLength> actualDate;
+ TImRfc822DateField dateField;
+ TTime time;
+
+ log->AppendComment(_L8("\t\nTesting Malformed Month in the date field"));
+
+ //January, June, July
+ actualDate = _L8("Mon, 2 J 2004 00:00:00 +0100");
+ result |= (dateField.ParseDateField(actualDate, time) == KErrNone);
+
+ //March or May
+ actualDate = _L8(" Mon, 2 M 2004 00:00:00 +0100");
+ result |= (dateField.ParseDateField(actualDate, time) == KErrNone);
+
+ //April or Augues
+ actualDate = _L8(" Mon, 2 A 2004 00:00:00 +0100");
+ result |= (dateField.ParseDateField(actualDate, time) == KErrNone);
+ //Get month did not paniced and failed to parse the date. So test passed
+ log->AppendComment(_L8("\t\nTested GetDate function"));
+
+ //For the log sake make the return value as TRUE. Otherwise logfile will show as Test failed.
+ ResultOfTest(!result,aTest);
+ return !result;
+}
+
+LOCAL_C void InitL()
+ {
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ CleanupStack::PushL(scheduler);
+
+ testUtils = CEmailTestUtils::NewLC(test);
+ testUtils->CreateAllTestDirectories();
+ testUtils->FileSession().SetSessionPath(_L("C:\\"));
+ testUtils->CleanMessageFolderL();
+
+ log = CImLog::NewL(_L("c:\\logs\\email\\T_IMCM.log"), EAppend);
+ CleanupStack::PushL(log);
+ log->AppendComment(_L8("******** T_MIUT09 Test TImRfc822DateField class ********"));
+ TBuf8<80> buf;
+
+#if defined(__WINS__) && defined(__WINSCW__)
+ buf.Append(_L8("WINSCW "));
+#elif(__WINS__)
+ buf.Append(_L8("WINS "));
+#else
+ buf.Append(_L8("MARM "));
+#endif
+#if defined(_UNICODE)
+ buf.Append(_L8("U"));
+#endif
+#if defined(_DEBUG)
+ buf.Append(_L8("DEB"));
+#else
+ buf.Append(_L8("REL"));
+#endif
+ log->AppendComment(buf);
+ }
+
+LOCAL_C void Closedown()
+ {
+ log->AppendComment(_L8("********** T_MIUT09 Tests Complete **********"));
+ log->AppendComment(_L8(""));
+
+ CleanupStack::PopAndDestroy(3); //testUtils, log, scheduler
+ }
+
+//
+
+LOCAL_C void doMainL()
+ {
+ InitL();
+ test.Printf(_L("Performing Tests\n"));
+
+ TBool result = ETrue;
+
+ testUtils->TestStart(1);
+ TBool result1 = TestParseDateField(1);
+ if (result1)
+ log->AppendComment(_L8("PASSED Test 1"));
+ else
+ log->AppendComment(_L8("FAILED Test 1"));
+ result &= result1;
+ testUtils->TestFinish(1);
+
+ testUtils->TestStart(2);
+ TBool result2 = TestSetDate(2);
+ if (result2)
+ log->AppendComment(_L8("PASSED Test 2"));
+ else
+ log->AppendComment(_L8("FAILED Test 2"));
+ result &= result2;
+ testUtils->TestFinish(2);
+
+ testUtils->TestStart(3); // Test case for Timezone effect
+ TBool result3 = TestTimezoneParseDateField(3);
+ if (result3)
+ log->AppendComment(_L8("PASSED Test 3"));
+ else
+ log->AppendComment(_L8("FAILED Test 3"));
+ result &= result3;
+ testUtils->TestFinish(3);
+
+
+ testUtils->TestStart(4); // Test case for malformed month name in timefield
+ TBool result4;
+ result4 = TestMalformedMonthInDateField(4);
+ if (result4)
+ log->AppendComment(_L8("PASSED Test 4"));
+ else
+ log->AppendComment(_L8("FAILED Test 4"));
+ result &= result4;
+ testUtils->TestFinish(4);
+
+ if (result)
+ {
+ log->AppendComment(_L8("PASSED All tests"));
+ test.Printf(_L("PASSED all Tests"));
+ testUtils->TestHarnessCompleted();
+ }
+ else
+ {
+ test.Printf(_L("FAILED Tests"));
+ log->AppendError(_L8("FAILED At Least one test"),-1);
+ testUtils->TestHarnessFailed(KErrGeneral);
+ }
+
+ Closedown();
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("T_MIUT09 Test TImRfc822DateField class"));
+ theCleanup=CTrapCleanup::New();
+ TRAPD(ret,doMainL());
+ test(ret==KErrNone);
+ delete theCleanup;
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ User::Heap().Check();
+ return(KErrNone);
+ }