sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Tests resource reader sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "T_RSC.H" sl@0: sl@0: RTest TheTest(_L("T_RSREAD2")); sl@0: RFs TheFs; sl@0: CResourceFile* TheResourceFile = NULL; sl@0: sl@0: // sl@0: // sl@0: //Test macroses and functions sl@0: LOCAL_C void Check(TInt aValue, TInt aLine) sl@0: { sl@0: if(!aValue) sl@0: { sl@0: TheTest(EFalse, aLine); sl@0: } sl@0: } sl@0: LOCAL_C void Check(TInt aValue, TInt aExpected, TInt aLine) sl@0: { sl@0: if(aValue != aExpected) sl@0: { sl@0: RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); sl@0: TheTest(EFalse, aLine); sl@0: } sl@0: } sl@0: #define TEST(arg) ::Check((arg), __LINE__) sl@0: #define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__) sl@0: sl@0: // sl@0: // sl@0: sl@0: //Opens aReader using RResourceReader::OpenLC(CResourceFile*, TInt) sl@0: static void OpenResourceReaderLC(RResourceReader& aReader, TInt aResourceId) sl@0: { sl@0: TEST(TheResourceFile != NULL); sl@0: aReader.OpenLC(TheResourceFile, aResourceId); sl@0: } sl@0: sl@0: //Opens aReader using RResourceReader::OpenL(const TDesC8&) sl@0: static void OpenResourceReader2LC(RResourceReader& aReader, TInt aResourceId) sl@0: { sl@0: TEST(TheResourceFile != NULL); sl@0: HBufC8* rscData = TheResourceFile->AllocReadLC(aResourceId); sl@0: aReader.OpenL(rscData->Des()); sl@0: CleanupStack::PopAndDestroy(rscData); sl@0: CleanupClosePushL(aReader); sl@0: } sl@0: sl@0: //This enum describes how to obtain the resource buffer for sl@0: //RResourceReader objects: from the resource file or from a buffer sl@0: enum TRscBufAllocation sl@0: { sl@0: EFromRscFile, sl@0: EFromRscBuf, sl@0: ERscBufLast sl@0: }; sl@0: sl@0: typedef void (*FTOpenResourceReaderLC)(RResourceReader& aReader, TInt aResourceId); sl@0: sl@0: static FTOpenResourceReaderLC OpenResourceReaderFuncLC[ERscBufLast] = sl@0: { sl@0: &OpenResourceReaderLC, sl@0: &OpenResourceReader2LC sl@0: }; sl@0: sl@0: //Opens aReader either from a resource file ot from a resource buffer sl@0: static void OpenResourceReaderLC(RResourceReader& aReader, TInt aResourceId, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: OpenResourceReaderFuncLC[aRscBufAllocation](aReader, aResourceId); sl@0: } sl@0: sl@0: class TRsReadTester sl@0: { sl@0: public: sl@0: void TestButtonL(RResourceReader& aReader); sl@0: void TestArrayL(RResourceReader& aReader); sl@0: void TestFlPtEdL(RResourceReader& aReader); sl@0: void TestMenuBarL(RResourceReader& aReader); sl@0: void TestAlignment1L(RResourceReader& aReader, TInt aIndex); sl@0: void TestAlignment2L(RResourceReader& aReader); sl@0: void TimingTestsL(TRscBufAllocation aRscBufAllocation); sl@0: private: sl@0: void DumpBytes(const TAny* aPtr,TInt aLen); sl@0: TUint8 DumpByte(TUint aVal); sl@0: }; sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1289 sl@0: @SYMTestCaseDesc Tests for reading data from a BUTTON resource file sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for RResourceReader::ReadInt16L(),RResourceReader::ReadUInt16L(), sl@0: RResourceReader::ReadTPtrCL() functions sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestButtonL(RResourceReader& aReader) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1289 Test reading BUTTON resource ")); sl@0: TEST(aReader.ReadInt16L()==3); sl@0: TEST(aReader.ReadUint16L()==5); sl@0: TPtrC ptr=aReader.ReadTPtrCL(); sl@0: TEST(ptr==_L("Text")); sl@0: ptr.Set(aReader.ReadTPtrCL()); sl@0: TEST(ptr.Length()==0); sl@0: HBufC* hBuf=aReader.ReadHBufCL(); sl@0: TEST(*hBuf==_L("Bitmap placeholder")); sl@0: delete(hBuf); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1290 sl@0: @SYMTestCaseDesc Tests for RResourceReader::ReadDesCArrayL() function sl@0: @SYMTestPriority High sl@0: @SYMTestActions Attempt to interpret data from an ARRAY resource file sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestArrayL(RResourceReader& aReader) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1290 Test reading ARRAY resource ")); sl@0: CDesCArray* desArray=aReader.ReadDesCArrayL(); sl@0: TEST(desArray->Count()==5); sl@0: sl@0: TEST((*desArray)[0]==_L("Esc")); sl@0: TEST((*desArray)[1]==_L("Enter")); sl@0: TEST((*desArray)[2]==_L("Tab")); sl@0: TEST((*desArray)[3]==_L("Del")); sl@0: TEST((*desArray)[4]==_L("Space")); sl@0: sl@0: delete(desArray); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1291 sl@0: @SYMTestCaseDesc Tests for reading FLPTED resource sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for RResourceReader::ReadReal64L() function sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestFlPtEdL(RResourceReader& aReader) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1291 Test reading FLPTED resource ")); sl@0: TEST(aReader.ReadInt16L()==18); sl@0: TReal little=aReader.ReadReal64L(); sl@0: TEST(little==0.0); sl@0: TReal big=aReader.ReadReal64L(); sl@0: TEST(big>9.89e99); sl@0: TEST(big<9.91e99); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1292 sl@0: @SYMTestCaseDesc Tests for reading MENU_BAR resource sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for RResourceReader::ReadInt16L() function sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestMenuBarL(RResourceReader& aReader) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1292 Test reading MENU_BAR resource ")); sl@0: TEST(aReader.ReadInt16L()==8); // how many items following sl@0: TPtrC ref=_L("abcdefgh"); sl@0: for (TInt ii=1; ii<=8; ii++) sl@0: { sl@0: TEST(aReader.ReadInt32L()==ii); sl@0: TEST(aReader.ReadTPtrCL()==ref.Left(ii)); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1293 sl@0: @SYMTestCaseDesc Tests for reading ALIGNMENT_HORROR resources sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for RResourceReader::ReadTPtrC8L(),RResourceReader::ReadTPtrC16L() functions sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestAlignment1L(RResourceReader& aReader, TInt aIndex) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1293 Test reading ALIGNMENT_HORROR resources ")); sl@0: TPtrC8 ref8 =_L8("xyz"); sl@0: TPtrC16 ref16=_L16("xyz"); sl@0: TEST(aReader.ReadTPtrC8L() == ref8.Left(aIndex)); sl@0: TEST(aReader.ReadTPtrC16L()== ref16.Left(aIndex)); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1294 sl@0: @SYMTestCaseDesc Tests for reading ALIGNMENT_HORROR_ARRAY resource sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for RResourceReader::ReadTPtrC8L(),RResourceReader::ReadTPtrC16L() functions sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TestAlignment2L(RResourceReader& aReader) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1294 Test reading ALIGNMENT_HORROR_ARRAY resource ")); sl@0: TEST(aReader.ReadInt16L()==7); // how many items following sl@0: TPtrC8 ref8 =_L8("abcdef"); sl@0: TPtrC16 ref16=_L16("abcdef"); sl@0: for (TInt ii=0; ii<=6; ii++) sl@0: { sl@0: TEST(aReader.ReadTPtrC8L() ==ref8.Left(ii)); sl@0: TEST(aReader.ReadTPtrC16L()==ref16.Mid(ii)); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-1295 sl@0: @SYMTestCaseDesc Tests for time required to load a resource file around 100 times sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for time taken to load resource files repeatedly sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: void TRsReadTester::TimingTestsL(TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1295 Timing tests ")); sl@0: TheTest.Next(_L("BUTTON and FLPTED")); sl@0: TUint time = User::TickCount(); sl@0: for (TInt ii=0; ii<100; ii++) sl@0: { sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: ::OpenResourceReaderLC(reader, SYS_FLPTED_ONE, aRscBufAllocation); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: } sl@0: time = User::TickCount() - time; sl@0: TheTest.Printf(_L("Time to load 100 times: %d\n"),time); sl@0: sl@0: TheTest.Next(_L("BUTTON and ARRAY")); sl@0: time = User::TickCount(); sl@0: for (TInt jj=0; jj<100; jj++) sl@0: { sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: ::OpenResourceReaderLC(reader, SYS_ARRAY_ONE, aRscBufAllocation); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: } sl@0: time = User::TickCount() - time; sl@0: TheTest.Printf(_L("Time to load 100 times: %d\n"),time); sl@0: } sl@0: sl@0: sl@0: TUint8 TRsReadTester::DumpByte(TUint aVal) sl@0: { sl@0: return(aVal>9? TUint8(aVal-10+'a'): TUint8(aVal+'0')); sl@0: } sl@0: sl@0: void TRsReadTester::DumpBytes(const TAny* aPtr,TInt aLen) sl@0: { sl@0: TUint8* src=(TUint8*)aPtr; sl@0: TBuf<100> whole; sl@0: TUint8* tar=(TUint8*)whole.Ptr(); sl@0: TInt len=0; sl@0: while (aLen--) sl@0: { sl@0: TUint val=(*src++); sl@0: TUint top=val/16; sl@0: TUint bottom=val%16; sl@0: *tar++=DumpByte(top); sl@0: *tar++=DumpByte(bottom); sl@0: *tar++=' '; sl@0: len+=3; sl@0: } sl@0: whole.SetLength(len); sl@0: TheTest.Printf(whole); sl@0: TheTest.Printf(_L("\r\n")); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0474 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Open a resource file and test for the reading the data sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestButtonL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0474 ")); sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestButtonL(reader)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0475 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for reading descriptor array. sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestArrayL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0475 ")); sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_ARRAY_ONE, aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestArrayL(reader)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0476 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for reading real values sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestFlPtEdL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0476 ")); sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_FLPTED_ONE, aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestFlPtEdL(reader)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0477 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for reading menu_bar resource sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestMenuBarL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0477 ")); sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_MENUBAR_ONE, aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestMenuBarL(reader)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0478 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for reading descriptors and checks for alignment sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestAlignment1L(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0478 ")); sl@0: const TInt TheHorrors[] = sl@0: { sl@0: SYS_ALIGNMENT_HORROR0, SYS_ALIGNMENT_HORROR1, sl@0: SYS_ALIGNMENT_HORROR2, SYS_ALIGNMENT_HORROR3, sl@0: 0 sl@0: }; sl@0: sl@0: for(TInt i=0;TheHorrors[i]!=0;++i) sl@0: { sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, TheHorrors[i], aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestAlignment1L(reader, i)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0479 sl@0: @SYMTestCaseDesc Tests for the functionality of RResourceReader class sl@0: @SYMTestPriority High sl@0: @SYMTestActions Tests for reading descriptors and checks for alignment sl@0: @SYMTestExpectedResults Tests must not fail sl@0: @SYMREQ REQ0000 sl@0: */ sl@0: static void TestAlignment2L(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation) sl@0: { sl@0: TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0479 ")); sl@0: RResourceReader reader; sl@0: ::OpenResourceReaderLC(reader, SYS_ALIGNMENT_HORROR_ARRAY, aRscBufAllocation); sl@0: TRAPD(errCode, aTest.TestAlignment2L(reader)); sl@0: CleanupStack::PopAndDestroy(&reader); sl@0: TEST2(errCode, KErrNone); sl@0: } sl@0: sl@0: static void RunTestsL() sl@0: { sl@0: TheTest.Start(_L("Resource reader")); sl@0: CleanupClosePushL(TheFs); sl@0: User::LeaveIfError(TheFs.Connect()); sl@0: TheResourceFile = CResourceFile::NewLC(TheFs,KRomResourceFile, 0, 0); sl@0: sl@0: TRsReadTester lt; sl@0: sl@0: ::TestButtonL(lt, EFromRscFile); sl@0: ::TestButtonL(lt, EFromRscBuf); sl@0: sl@0: ::TestArrayL(lt, EFromRscFile); sl@0: ::TestArrayL(lt, EFromRscBuf); sl@0: sl@0: ::TestFlPtEdL(lt, EFromRscFile); sl@0: ::TestFlPtEdL(lt, EFromRscBuf); sl@0: sl@0: ::TestMenuBarL(lt, EFromRscFile); sl@0: ::TestMenuBarL(lt, EFromRscBuf); sl@0: sl@0: ::TestAlignment1L(lt, EFromRscFile); sl@0: ::TestAlignment1L(lt, EFromRscBuf); sl@0: sl@0: ::TestAlignment2L(lt, EFromRscFile); sl@0: ::TestAlignment2L(lt, EFromRscBuf); sl@0: sl@0: TRAPD(errCode, lt.TimingTestsL(EFromRscFile)); sl@0: TEST2(errCode, KErrNone); sl@0: sl@0: TRAP(errCode, lt.TimingTestsL(EFromRscBuf)); sl@0: TEST2(errCode, KErrNone); sl@0: sl@0: CleanupStack::PopAndDestroy(TheResourceFile); sl@0: CleanupStack::PopAndDestroy(1, &TheFs); sl@0: } sl@0: sl@0: TInt E32Main() sl@0: { sl@0: __UHEAP_MARK; sl@0: CTrapCleanup *cleanup=CTrapCleanup::New(); sl@0: TheTest.Title(); sl@0: TRAPD(err,::RunTestsL()); sl@0: TEST2(err, KErrNone); sl@0: TheTest.Next(_L("/n")); sl@0: TheTest.End(); sl@0: TheTest.Close(); sl@0: delete(cleanup); sl@0: __UHEAP_MARKEND; sl@0: return(0); sl@0: }