Rework addition of Symbian splash screen to reduce the source impact (uses SVG from Bug 2414)
Notes: by using the OPTION SOURCEDIR parameter in the mifconv extension instructions, I can
arrange to use the same source file name in sfimage, without having to export over the original
Nokia file. This means that the name inside splashscreen.mbg is the same, which removes the need
for the conditional compilation in SplashScreen.cpp, and gets rid of sf_splashscreen.mmp.
// Copyright (c) 1999-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:
//
// System includes
#include <e32base.h>
#include <e32test.h>
#include <f32file.h>
#include <s32mem.h>
// User includes
#include <asshdalarm.h>
#include <asclisession.h>
#include <consolealarmalertservermain.h>
#include "testserver.h"
#include "ASTstAlarmTest.h"
// Type definitions
typedef void (*ThreadTestL)(void);
// Constants
const TUid KServerUid2={0x1000008D};
const TUid KServerUid3={0x101F502A};
const TUidType serverUid(KNullUid,KServerUid2,KServerUid3);
// Literal constants
_LIT(KTestTitle, "TAlarmRobustness");
_LIT(KRobustTestCreateServer, "Creating alarm server");
#ifdef _DEBUG
#ifdef __WINS__
_LIT(KRobustTestCloseServer, "Close alarm server");
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
#ifdef _DEBUG
#ifdef __WINS__
_LIT(KTestIniFile, "c:\\private\\101f5027\\AlarmServer.ini");
_LIT(KAlarmIniFileDir, "c:\\private\\101f5027\\");
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
// Globals
//static RTest TheAlarmTest(KTestTitle);
static RASCliSession TheAlarmServerSession;
const TInt KAlarmObjectBuffer = 512;
#ifdef _DEBUG
#ifdef __WINS__
const TInt KAlarmTestWaitForFileWrite = 2000000;
static void TestClearStoreL()
{
// Delete all alarms
RArray<TAlarmCategory> categories;
TheAlarmServerSession.GetAvailableCategoryListL(categories);
const TInt KAlarmCategoriesCount = categories.Count();
for(TInt i=0; i<KAlarmCategoriesCount; i++)
{
const TAlarmCategory category = categories[i];
TheAlarmTest(TheAlarmServerSession.AlarmDeleteAllByCategory(category, EFalse) == KErrNone, __LINE__);
}
categories.Close();
}
static void DeleteIniFileL()
{
RPIMTestServer serv;
User::LeaveIfError(serv.Connect());
CleanupClosePushL(serv);
serv.DeleteFileL(KTestIniFile);
CleanupStack::PopAndDestroy(&serv);
}
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
//*************************************************************************************
void InitializeAlarm(TASShdAlarm& theAlarm)
{
theAlarm.Category() = KASCliCategoryClock;
theAlarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatDaily;
_LIT(KAlarmTestInit, "This is an alarm message - alarm 1");
theAlarm.Message() = KAlarmTestInit;
theAlarm.NextDueTime().HomeTime();
theAlarm.NextDueTime() += TTimeIntervalMinutes(1);
_LIT(KAlarmTestSoundName, "Arf Arf Woop");
theAlarm.SoundName() = KAlarmTestSoundName;
}
#ifdef _DEBUG
#ifdef __WINS__
static void CreateSingleTestAlarmL(TAlarmId& testID)
{
_LIT(KAlarmTestAddDisabled, "Adding disabled alarm");
TheAlarmTest.Next(KAlarmTestAddDisabled);
//
TASShdAlarm alarm;
InitializeAlarm(alarm);
//
TheAlarmTest(TheAlarmServerSession.AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
testID = id;
TheAlarmTest(id != KNullAlarmId, __LINE__);
//
_LIT(KAlarmTestGetDetails, "Get alarm details");
TheAlarmTest.Next(KAlarmTestGetDetails);
TheAlarmTest(TheAlarmServerSession.GetAlarmDetails(id, alarm) == KErrNone, __LINE__);
//
_LIT(KAlarmTestEnableAlarm, "Enabling a disabled alarm");
TheAlarmTest.Next(KAlarmTestEnableAlarm);
TheAlarmTest(TheAlarmServerSession.SetAlarmStatus(id, EAlarmStatusEnabled) == KErrNone, __LINE__);
}
static void RunNoConfigFileTestL()
{
_LIT(KRobustTestNoConfig, "Run No Config File Test");
TheAlarmTest.Next(KRobustTestNoConfig);
// 1) Delete AlarmServer.ini file
DeleteIniFileL();
// 2) Connect to the alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 3) Add alarm.
TAlarmId testID = KNullAlarmId;
CleanupClosePushL(TheAlarmServerSession);
CreateSingleTestAlarmL(testID);
// 4) Shutdown alarm server.
TheAlarmTest.Next(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 5) Restart alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 6) Check alarm has persisted.
TASShdAlarm testAlarm;
TInt error = TheAlarmServerSession.GetAlarmDetails(testID, testAlarm);
TheAlarmTest(error == KErrNone, __LINE__);
}
static void RunZeroLengthConfigFileTestL()
{
_LIT(KRobustTestZeroLengthConfigFile, "Run Zero Length Config File Test");
TheAlarmTest.Next(KRobustTestZeroLengthConfigFile);
// 1) Create an alarm to make sure there is a config file.
TAlarmId testID = KNullAlarmId;
CreateSingleTestAlarmL(testID);
User::After(KAlarmTestWaitForFileWrite);
// 2) Zero length the AlarmServer.ini file
TestClearStoreL();
// 3) Connect to the alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 4) Add alarm.
CleanupClosePushL(TheAlarmServerSession);
CreateSingleTestAlarmL(testID);
// 5) Shutdown alarm server.
TheAlarmTest.Next(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 6) Restart alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 7) Check alarm has persisted.
TASShdAlarm testAlarm;
TInt error = TheAlarmServerSession.GetAlarmDetails(testID, testAlarm);
TheAlarmTest(error == KErrNone, __LINE__);
}
static void CorruptErrorConditionTestL()
{
_LIT(KRobustTestCorruptErrorCondition, "Corrupt Error Condition Test");
TheAlarmTest.Next(KRobustTestCorruptErrorCondition);
// 1) Create file session to call SetErrorCondition.
TAlarmId testID = KNullAlarmId;
TInt error = KErrCorrupt;
RFs testFile;
User::LeaveIfError(testFile.Connect());
CleanupClosePushL(testFile);
// 2) Create a few alarms to make sure we have populated config file.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
CleanupClosePushL(TheAlarmServerSession);
const TInt KNumberOfTestAlarms = 3;
for( TInt i=0;i<KNumberOfTestAlarms;i++)
{
CreateSingleTestAlarmL(testID);
}
User::After(KAlarmTestWaitForFileWrite);
// 3) Shut down server so we can re-connect and do internalization.
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 4) Test loop - This will cycle through file session internalization
// process, checking to see that it leaves each time, instead of panicking.
for (TInt failureCounter = 1 ; error == KErrCorrupt ; ++failureCounter)
{
testFile.SetErrorCondition(KErrCorrupt , failureCounter );
error = TheAlarmServerSession.Connect();
testFile.SetErrorCondition(KErrNone );
}
// 5) Close file session.
CleanupStack::PopAndDestroy(&testFile);
TheAlarmTest(error == KErrNone, __LINE__);
}
static void ServerStartUpWithNoIniFileL()
{
_LIT(KRobustTestNoConfigDir, "Server Startup With No Config File Test");
_LIT(KRobustTestDeleteIniFileDir, "Delete INI file and Dir");
_LIT(KRobustTestDeleteIniFile, "Delete INI file");
TheAlarmTest.Next(KRobustTestNoConfigDir);
RPIMTestServer serv;
User::LeaveIfError(serv.Connect());
CleanupClosePushL(serv);
// 1) Close Alarm Server
TheAlarmTest.Start(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
// 2) Delete AlarmServer.ini file and it's dir
TheAlarmTest.Next(KRobustTestDeleteIniFileDir);
serv.DeleteFileL(KTestIniFile);
serv.DeleteDirL(KAlarmIniFileDir);
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrPathNotFound); //Check directory deleted
// 3) Connect to the alarm server and check it created INI file directory
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrNotFound); //Check directory created but file still absent
// 4) Add alarm and check INI file created
TAlarmId testID = KNullAlarmId;
TRequestStatus serverIniStatus;
const TTimeIntervalMicroSeconds32 KTimeOutPeriod(1000000);
RTimer timeoutTimer;
CleanupClosePushL(timeoutTimer);
TRequestStatus timerStatus;
User::LeaveIfError(timeoutTimer.CreateLocal());
timeoutTimer.After(timerStatus, KTimeOutPeriod);
serv.FileServerNotifyChange(ENotifyFile, serverIniStatus, KTestIniFile);
CreateSingleTestAlarmL(testID);
User::WaitForRequest(timerStatus, serverIniStatus);
if (timerStatus.Int() != KRequestPending)
{
// The file creation did not time out
// so cancel the time out timer
timeoutTimer.Cancel();
User::WaitForRequest(timerStatus);
}
else
{
// The file creation timed out
// so cancel the FileServerNotifyChange
serv.FileServerNotifyChangeCancel();
User::WaitForRequest(serverIniStatus);
}
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrNone); //Check file present
// 6) Close Alarm Server Again
TheAlarmTest.Next(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
// 7) Delete AlarmServer.ini file only
TheAlarmTest.Next(KRobustTestDeleteIniFile);
serv.DeleteFileL(KTestIniFile);
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrNotFound); //Check file deleted but directory still there
// 8) Connect to the alarm server
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrNotFound); //Check directory there but file still absent
// 9) Add alarm and check INI file created
testID = KNullAlarmId;
serv.FileServerNotifyChange(ENotifyFile, serverIniStatus, KTestIniFile);
timeoutTimer.After(timerStatus, KTimeOutPeriod);
CreateSingleTestAlarmL(testID);
User::WaitForRequest(timerStatus, serverIniStatus);
if (timerStatus.Int() != KRequestPending)
{
// The file creation did not time out
// so cancel the time out timer
timeoutTimer.Cancel();
User::WaitForRequest(timerStatus);
}
else
{
// The file creation timed out
// so cancel the FileServerNotifyChange
serv.FileServerNotifyChangeCancel();
User::WaitForRequest(serverIniStatus);
}
AlarmTest(serv.CheckForFile(KTestIniFile)==KErrNone); //Check file present
TheAlarmTest.UpLevel();
CleanupStack::PopAndDestroy(&timeoutTimer);
CleanupStack::PopAndDestroy(&serv);
serv.Close();
}
#endif // #ifdef _DEBUG
#endif // #ifdef __WINS__
static void AlarmInternalizationTestL()
{
_LIT(KRobustTestAlarmInternalization, "Alarm Internalization Test");
TheAlarmTest.Next(KRobustTestAlarmInternalization);
// 1) Create an alarm object.
TASShdAlarm alarm;
TASShdAlarm alarm2;
InitializeAlarm(alarm);
// 2) Create a memory buffer to store alarm object created above.
CBufFlat* buffer = CBufFlat::NewL(KAlarmObjectBuffer); // approximation
CleanupStack::PushL(buffer);
RBufWriteStream stream(*buffer);
// 3) Externalize alarm object into memory buffer.
alarm.ExternalizeL(stream);
stream.CommitL();
// 4) Create second memor`y buffer to manipulate the one above.
CBufFlat* buffer2 = CBufFlat::NewL(KAlarmObjectBuffer);
CleanupStack::PushL(buffer2);
// 5) Test loop - Copy the contents of buffer to buffer2, starting at
// the end of buffer.
// We just want to test that our methods leave normally under
// the error condition and not induce a panic. So we don't need
// to handle the Trap in this test loop.
TInt err = KErrCorrupt;
for(TInt i = buffer->Size()-1; i>-1; i--)
{
TPtr8 ptr=buffer->Ptr(i);
buffer2->Reset();
buffer2->InsertL(0, ptr);
RBufReadStream rStream(*buffer2);
TRAP(err, alarm2.InternalizeL(rStream))
}
TheAlarmTest.Test().Printf(_L("AlarmInternalizationTestL error = %d\n"), err);
TheAlarmTest(err == KErrNone, __LINE__);
CleanupStack::PopAndDestroy(buffer2);
CleanupStack::PopAndDestroy(buffer);
}
static void AlarmFormatInternalizationTestL()
{
_LIT(KRobustTestAlarmFormatInternalization, "Alarm Format Internalization Test");
TheAlarmTest.Next(KRobustTestAlarmFormatInternalization);
// 1) Create an alarm object.
TASShdAlarm alarm;
TASShdAlarm alarm2;
InitializeAlarm(alarm);
// 2) Create a memory buffer to store alarm object created above.
CBufFlat* buffer = CBufFlat::NewL(KAlarmObjectBuffer); // approximation
CleanupStack::PushL(buffer);
RBufWriteStream stream(*buffer);
// 3) Externalize alarm object into memory buffer.
alarm.ExternalizeL(stream);
stream.CommitL();
// 4) Create second memory buffer to manipulate the one above.
TPtr8 initPtr = buffer->Ptr(0); // Ptr to beginning of buffer.
CBufFlat* buffer2 = CBufFlat::NewL(KAlarmObjectBuffer);
CleanupStack::PushL(buffer2);
// 5) Test loop - Write a character to every position of the
// alarm object.
// We just want to test that our methods leave normally under
// the error condition and not induce a panic. So we don't need
// to handle the Trap in this test loop.
TInt err = KErrCorrupt;
_LIT(KRobustTestCharactter, "a");
const TInt KBufferSize = buffer->Size()-1;
for(TInt i = 0; i<KBufferSize; i++)
{
alarm2.Reset();
alarm2 = alarm;
buffer2->Reset();
buffer2->InsertL(0, initPtr);
TPtr8 ptr = buffer2->Ptr(i);
ptr.Copy(KRobustTestCharactter);
RBufReadStream rStream(*buffer2);
TRAP(err, alarm2.InternalizeL(rStream))
}
TheAlarmTest(err == KErrNone, __LINE__);
CleanupStack::PopAndDestroy(buffer2);
CleanupStack::PopAndDestroy(buffer);
}
//*************************************************************************************
void InitializeUtcAlarm(TASShdAlarm& theAlarm)
{
theAlarm.Category()=KASCliCategoryClock;
theAlarm.RepeatDefinition()=EAlarmRepeatDefintionRepeatDaily;
_LIT(KAlarmTestInit, "This is a UTC alarm message - alarm 1");
TBuf<KMaxAlarmMessageLength> buf(KAlarmTestInit);
theAlarm.Message()=buf;
TTime time;
time.UniversalTime();
time += TTimeIntervalMinutes(1);
theAlarm.SetUtcNextDueTime(time);
_LIT(KAlarmTestSoundName, "Arf Arf Woop");
buf = KAlarmTestSoundName;
theAlarm.SoundName()=buf;
}
#ifdef _DEBUG
#ifdef __WINS__
static void CreateSingleTestUtcAlarmL(TAlarmId& testID)
{
_LIT(KAlarmTestAddDisabled, "Adding disabled UTC alarm");
TheAlarmTest.Next(KAlarmTestAddDisabled);
//
TASShdAlarm alarm;
InitializeUtcAlarm(alarm);
//
TheAlarmTest(TheAlarmServerSession.AlarmAdd(alarm) == KErrNone, __LINE__);
const TAlarmId id = alarm.Id();
testID = id;
TheAlarmTest(id != KNullAlarmId, __LINE__);
//
_LIT(KAlarmTestGetDetails, "Get UTC alarm details");
TheAlarmTest.Next(KAlarmTestGetDetails);
TheAlarmTest(TheAlarmServerSession.GetAlarmDetails(id, alarm) == KErrNone, __LINE__);
//
_LIT(KAlarmTestEnableAlarm, "Enabling a disabled UTC alarm");
TheAlarmTest.Next(KAlarmTestEnableAlarm);
TheAlarmTest(TheAlarmServerSession.SetAlarmStatus(id, EAlarmStatusEnabled) == KErrNone, __LINE__);
}
static void RunNoConfigFileTestUtcL()
{
_LIT(KRobustTestNoConfig, "Run No Config File Test");
TheAlarmTest.Next(KRobustTestNoConfig);
// 1) Delete AlarmServer.ini file
DeleteIniFileL();
// 2) Connect to the alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 3) Add alarm.
TAlarmId testID = KNullAlarmId;
CleanupClosePushL(TheAlarmServerSession);
CreateSingleTestUtcAlarmL(testID);
// 4) Shutdown alarm server.
TheAlarmTest.Next(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 5) Restart alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 6) Check alarm has persisted.
TASShdAlarm testAlarm;
TInt error = TheAlarmServerSession.GetAlarmDetails(testID, testAlarm);
TheAlarmTest(error == KErrNone, __LINE__);
}
static void RunZeroLengthConfigFileTestUtcL()
{
_LIT(KRobustTestZeroLengthConfigFile, "Run Zero Length Config File Test");
TheAlarmTest.Next(KRobustTestZeroLengthConfigFile);
// 1) Create an alarm to make sure there is a config file.
TAlarmId testID = KNullAlarmId;
CreateSingleTestUtcAlarmL(testID);
User::After(KAlarmTestWaitForFileWrite);
// 2) Zero length the AlarmServer.ini file
TestClearStoreL();
// 3) Connect to the alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 4) Add alarm.
CleanupClosePushL(TheAlarmServerSession);
CreateSingleTestUtcAlarmL(testID);
// 5) Shutdown alarm server.
TheAlarmTest.Next(KRobustTestCloseServer);
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 6) Restart alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
// 7) Check alarm has persisted.
TASShdAlarm testAlarm;
TInt error = TheAlarmServerSession.GetAlarmDetails(testID, testAlarm);
TheAlarmTest(error == KErrNone, __LINE__);
}
static void CorruptErrorConditionTestUtcL()
{
_LIT(KRobustTestCorruptErrorCondition, "Corrupt Error Condition Test");
TheAlarmTest.Next(KRobustTestCorruptErrorCondition);
// 1) Create file session to call SetErrorCondition.
TAlarmId testID = KNullAlarmId;
TInt error = KErrCorrupt;
RFs testFile;
CleanupClosePushL(testFile);
testFile.Connect();
// 2) Create a few alarms to make sure we have populated config file.
CleanupClosePushL(TheAlarmServerSession);
const TInt KNumberOfTestAlarms = 3;
for( TInt i=0;i<KNumberOfTestAlarms;i++)
{
CreateSingleTestUtcAlarmL(testID);
}
User::After(KAlarmTestWaitForFileWrite);
// 3) Shut down server so we can re-connect and do internalization.
TheAlarmServerSession.__DbgShutDownServer();
CleanupStack::PopAndDestroy(&TheAlarmServerSession);
// 4) Test loop - This will cycle through file session internalization
// process, checking to see that it leaves each time, instead of panicking.
for (TInt failureCounter = 1 ; error == KErrCorrupt ; ++failureCounter)
{
testFile.SetErrorCondition(KErrCorrupt , failureCounter );
error = TheAlarmServerSession.Connect();
testFile.SetErrorCondition(KErrNone );
TheAlarmServerSession.Close();
}
// 5) Close file session.
CleanupStack::PopAndDestroy(&testFile);
testFile.Close();
TheAlarmTest(error == KErrNone, __LINE__);
}
#endif // #ifdef _DEBUG
#endif // #ifdef __WINS__
static void UtcAlarmInternalizationTestL()
{
_LIT(KRobustTestAlarmInternalization, "UTC Alarm Internalization Test");
TheAlarmTest.Next(KRobustTestAlarmInternalization);
// 1) Create an alarm object.
TASShdAlarm alarm;
TASShdAlarm alarm2;
InitializeUtcAlarm(alarm);
// 2) Create a memory buffer to store alarm object created above.
CBufFlat* buffer = CBufFlat::NewL(KAlarmObjectBuffer); // approximation
CleanupStack::PushL(buffer);
RBufWriteStream stream(*buffer);
// 3) Externalize alarm object into memory buffer.
alarm.ExternalizeL(stream);
stream.CommitL();
// 4) Create second memor`y buffer to manipulate the one above.
CBufFlat* buffer2 = CBufFlat::NewL(KAlarmObjectBuffer);
CleanupStack::PushL(buffer2);
// 5) Test loop - Copy the contents of buffer to buffer2, starting at
// the end of buffer.
// We just want to test that our methods leave normally under
// the error condition and not induce a panic. So we don't need
// to handle the Trap in this test loop.
TInt err = KErrCorrupt;
for(TInt i = buffer->Size()-1; i>-1; i--)
{
TPtr8 ptr=buffer->Ptr(i);
buffer2->Reset();
buffer2->InsertL(0, ptr);
RBufReadStream rStream(*buffer2);
TRAP(err, alarm2.InternalizeL(rStream))
}
TheAlarmTest.Test().Printf(_L("UtcAlarmInternalizationTestL error = %d\n"), err);
TheAlarmTest(err == KErrNone, __LINE__);
CleanupStack::PopAndDestroy(buffer2);
CleanupStack::PopAndDestroy(buffer);
}
static void UtcAlarmFormatInternalizationTestL()
{
_LIT(KRobustTestAlarmFormatInternalization, "UTC Alarm Format Internalization Test");
TheAlarmTest.Next(KRobustTestAlarmFormatInternalization);
// 1) Create an alarm object.
TASShdAlarm alarm;
TASShdAlarm alarm2;
InitializeUtcAlarm(alarm);
// 2) Create a memory buffer to store alarm object created above.
CBufFlat* buffer = CBufFlat::NewL(KAlarmObjectBuffer); // approximation
CleanupStack::PushL(buffer);
RBufWriteStream stream(*buffer);
// 3) Externalize alarm object into memory buffer.
alarm.ExternalizeL(stream);
stream.CommitL();
// 4) Create second memory buffer to manipulate the one above.
TPtr8 initPtr = buffer->Ptr(0); // Ptr to beginning of buffer.
CBufFlat* buffer2 = CBufFlat::NewL(KAlarmObjectBuffer);
CleanupStack::PushL(buffer2);
// 5) Test loop - Write a character to every position of the
// alarm object.
// We just want to test that our methods leave normally under
// the error condition and not induce a panic. So we don't need
// to handle the Trap in this test loop.
TInt err = KErrCorrupt;
_LIT(KRobustTestCharactter, "a");
const TInt KBufferSize = buffer->Size()-1;
for(TInt i = 0; i<KBufferSize; i++)
{
alarm2.Reset();
alarm2 = alarm;
buffer2->Reset();
buffer2->InsertL(0, initPtr);
TPtr8 ptr = buffer2->Ptr(i);
ptr.Copy(KRobustTestCharactter);
RBufReadStream rStream(*buffer2);
TRAP(err, alarm2.InternalizeL(rStream))
}
TheAlarmTest(err == KErrNone, __LINE__);
CleanupStack::PopAndDestroy(buffer2);
CleanupStack::PopAndDestroy(buffer);
}
//*************************************************************************************
static void RunTestsL()
{
// Have to start the alarm alert server otherwise the alarm
// server cannot start.
_LIT(KRobustTestCreateAlarmAlert, "Creating alarm alert server");
TheAlarmTest.Next(KRobustTestCreateAlarmAlert);
const TInt KGmtOffset = 3600;
_LIT(KTime, "20040730:050000.000000"); //Summertime
TInt err = User::SetUTCTimeAndOffset(TTime(KTime), KGmtOffset);
TheAlarmTest(err == KErrNone, __LINE__);
#ifdef __WINS__
_LIT(KConsoleAlarmAlertServerImg,"ConsoleAlarmAlertServer");
TBuf<256> cmdline;
cmdline.Append('p');
cmdline.Append('p');
cmdline.Append(EKeyEscape);
RProcess server;
server.Create(KConsoleAlarmAlertServerImg, cmdline, serverUid);
TRequestStatus stat;
server.Rendezvous(stat);
if (stat != KRequestPending)
{
server.Kill(0); // abort startup
}
else
{
server.Resume(); // logon OK - start the server
}
User::WaitForRequest(stat);
TInt result = stat.Int();
if(result != KErrNone && result != KErrAlreadyExists)
{
User::LeaveIfError(result);
}
#endif // __WINS__
// Connect() checks if the server is already running before connecting.
// Here, we call connect to make sure it is running so the tests below can be
// executed in any order.
// Connect to the alarm server.
TheAlarmTest.Next(KRobustTestCreateServer);
User::LeaveIfError(TheAlarmServerSession.Connect());
#ifdef _DEBUG
#ifdef __WINS__
TestClearStoreL();
DeleteIniFileL();
User::After(KAlarmTestWaitForFileWrite);
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
// Call Test functions.
_LIT(KRobustTestCallTests, "Calling Test functions");
TheAlarmTest.Next(KRobustTestCallTests);
TheAlarmTest.Test().Printf(_L("Start local alarm tests.\n"));
#ifdef _DEBUG
#ifdef __WINS__
RunNoConfigFileTestL();
RunZeroLengthConfigFileTestL();
CorruptErrorConditionTestL();
ServerStartUpWithNoIniFileL();
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
AlarmInternalizationTestL();
AlarmFormatInternalizationTestL();
TheAlarmTest.Test().Printf(_L("Start UTC alarm tests.\n"));
#ifdef _DEBUG
#ifdef __WINS__
RunNoConfigFileTestUtcL();
RunZeroLengthConfigFileTestUtcL();
CorruptErrorConditionTestUtcL();
#endif // #ifdef __WINS__
#endif // #ifdef _DEBUG
UtcAlarmInternalizationTestL();
UtcAlarmFormatInternalizationTestL();
}
//
// -----> Global Exports
//
//*************************************************************************************
TInt E32Main()
{
__UHEAP_MARK;
TInt ret = KErrNone;
//
CTrapCleanup* cleanup = CTrapCleanup::New();
if (!cleanup)
return KErrNoMemory;
//
TheAlarmTest.Title();
TheAlarmTest.Start(KTestTitle);
// @SYMTestCaseID PIM-TALARMROBUSTNESS-0001
TheAlarmTest.Next(_L(" @SYMTestCaseID PIM-TALARMROBUSTNESS-0001 "));
//
TRAPD(err, RunTestsL());
TheAlarmTest(err == KErrNone, __LINE__);
delete cleanup;
TRAP(ret,TheAlarmTest.EndL());
TheAlarmTest.Test().Close();
ASTstAlarmTest::Close();
__UHEAP_MARKEND;
return ret;
}