lowlevellibsandfws/apputils/tsrc/T_RSREAD2.CPP
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Tests resource reader
       
    15 // 
       
    16 //
       
    17 
       
    18 #include <e32std.h>
       
    19 #include <e32base.h>
       
    20 #include <e32test.h>
       
    21 #include <f32file.h>
       
    22 #include <barsc2.h>
       
    23 #include <barsread2.h>
       
    24 #include <badesca.h>
       
    25 #include <trsc.rsg>
       
    26 #include "T_RSC.H"
       
    27 
       
    28 RTest TheTest(_L("T_RSREAD2"));
       
    29 RFs TheFs;
       
    30 CResourceFile* TheResourceFile = NULL;
       
    31 
       
    32 //
       
    33 //
       
    34 //Test macroses and functions
       
    35 LOCAL_C void Check(TInt aValue, TInt aLine)
       
    36 	{
       
    37 	if(!aValue)
       
    38 		{
       
    39 		TheTest(EFalse, aLine);
       
    40 		}
       
    41 	}
       
    42 LOCAL_C void Check(TInt aValue, TInt aExpected, TInt aLine)
       
    43 	{
       
    44 	if(aValue != aExpected)
       
    45 		{
       
    46 		RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue);
       
    47 		TheTest(EFalse, aLine);
       
    48 		}
       
    49 	}
       
    50 #define TEST(arg) ::Check((arg), __LINE__)
       
    51 #define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__)
       
    52 
       
    53 //
       
    54 //
       
    55 
       
    56 //Opens aReader using RResourceReader::OpenLC(CResourceFile*, TInt)
       
    57 static void OpenResourceReaderLC(RResourceReader& aReader, TInt aResourceId)
       
    58     {
       
    59     TEST(TheResourceFile != NULL);
       
    60     aReader.OpenLC(TheResourceFile, aResourceId);
       
    61     }
       
    62 
       
    63 //Opens aReader using RResourceReader::OpenL(const TDesC8&)
       
    64 static void OpenResourceReader2LC(RResourceReader& aReader, TInt aResourceId)
       
    65     {
       
    66     TEST(TheResourceFile != NULL);
       
    67     HBufC8* rscData = TheResourceFile->AllocReadLC(aResourceId);
       
    68     aReader.OpenL(rscData->Des());
       
    69     CleanupStack::PopAndDestroy(rscData);
       
    70     CleanupClosePushL(aReader);
       
    71     }
       
    72 
       
    73 //This enum describes how to obtain the resource buffer for
       
    74 //RResourceReader objects: from the resource file or from a buffer
       
    75 enum TRscBufAllocation
       
    76     {
       
    77     EFromRscFile,
       
    78     EFromRscBuf,
       
    79     ERscBufLast
       
    80     };
       
    81 
       
    82 typedef void (*FTOpenResourceReaderLC)(RResourceReader& aReader, TInt aResourceId);
       
    83 
       
    84 static FTOpenResourceReaderLC OpenResourceReaderFuncLC[ERscBufLast] =
       
    85     {
       
    86     &OpenResourceReaderLC,
       
    87     &OpenResourceReader2LC
       
    88     };
       
    89 
       
    90 //Opens aReader either from a resource file ot from a resource buffer
       
    91 static void OpenResourceReaderLC(RResourceReader& aReader, TInt aResourceId, TRscBufAllocation aRscBufAllocation)
       
    92     {
       
    93     OpenResourceReaderFuncLC[aRscBufAllocation](aReader, aResourceId);
       
    94     }
       
    95 
       
    96 class TRsReadTester
       
    97 	{
       
    98 public:
       
    99 	void TestButtonL(RResourceReader& aReader);
       
   100 	void TestArrayL(RResourceReader& aReader);
       
   101 	void TestFlPtEdL(RResourceReader& aReader);
       
   102 	void TestMenuBarL(RResourceReader& aReader);
       
   103     void TestAlignment1L(RResourceReader& aReader, TInt aIndex);
       
   104     void TestAlignment2L(RResourceReader& aReader);
       
   105     void TimingTestsL(TRscBufAllocation aRscBufAllocation);
       
   106 private:
       
   107     void DumpBytes(const TAny* aPtr,TInt aLen);
       
   108     TUint8 DumpByte(TUint aVal);
       
   109 	};
       
   110 
       
   111 /**
       
   112 @SYMTestCaseID          SYSLIB-BAFL-CT-1289
       
   113 @SYMTestCaseDesc        Tests for reading data from a BUTTON resource file
       
   114 @SYMTestPriority        High
       
   115 @SYMTestActions         Tests for RResourceReader::ReadInt16L(),RResourceReader::ReadUInt16L(),
       
   116                         RResourceReader::ReadTPtrCL() functions
       
   117 @SYMTestExpectedResults Tests must not fail
       
   118 @SYMREQ                 REQ0000
       
   119 */
       
   120 void TRsReadTester::TestButtonL(RResourceReader& aReader)
       
   121 	{
       
   122 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1289 Test reading BUTTON resource "));
       
   123     TEST(aReader.ReadInt16L()==3);
       
   124     TEST(aReader.ReadUint16L()==5);
       
   125     TPtrC ptr=aReader.ReadTPtrCL();
       
   126     TEST(ptr==_L("Text"));
       
   127     ptr.Set(aReader.ReadTPtrCL());
       
   128     TEST(ptr.Length()==0);
       
   129     HBufC* hBuf=aReader.ReadHBufCL();
       
   130     TEST(*hBuf==_L("Bitmap placeholder"));
       
   131     delete(hBuf);
       
   132 	}
       
   133 
       
   134 /**
       
   135 @SYMTestCaseID          SYSLIB-BAFL-CT-1290
       
   136 @SYMTestCaseDesc        Tests for RResourceReader::ReadDesCArrayL() function
       
   137 @SYMTestPriority        High
       
   138 @SYMTestActions         Attempt to interpret data from an ARRAY resource file
       
   139 @SYMTestExpectedResults Tests must not fail
       
   140 @SYMREQ                 REQ0000
       
   141 */
       
   142 void TRsReadTester::TestArrayL(RResourceReader& aReader)
       
   143 	{
       
   144 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1290 Test reading ARRAY resource "));
       
   145     CDesCArray* desArray=aReader.ReadDesCArrayL();
       
   146     TEST(desArray->Count()==5);
       
   147 
       
   148     TEST((*desArray)[0]==_L("Esc"));
       
   149     TEST((*desArray)[1]==_L("Enter"));
       
   150     TEST((*desArray)[2]==_L("Tab"));
       
   151     TEST((*desArray)[3]==_L("Del"));
       
   152     TEST((*desArray)[4]==_L("Space"));
       
   153 
       
   154     delete(desArray);
       
   155 	}
       
   156 
       
   157 /**
       
   158 @SYMTestCaseID          SYSLIB-BAFL-CT-1291
       
   159 @SYMTestCaseDesc        Tests for reading FLPTED resource
       
   160 @SYMTestPriority        High
       
   161 @SYMTestActions         Tests for RResourceReader::ReadReal64L() function
       
   162 @SYMTestExpectedResults Tests must not fail
       
   163 @SYMREQ                 REQ0000
       
   164 */
       
   165 void TRsReadTester::TestFlPtEdL(RResourceReader& aReader)
       
   166 	{
       
   167 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1291 Test reading FLPTED resource "));
       
   168     TEST(aReader.ReadInt16L()==18);
       
   169     TReal little=aReader.ReadReal64L();
       
   170     TEST(little==0.0);
       
   171     TReal big=aReader.ReadReal64L();
       
   172     TEST(big>9.89e99);
       
   173     TEST(big<9.91e99);
       
   174 	}
       
   175 
       
   176 /**
       
   177 @SYMTestCaseID          SYSLIB-BAFL-CT-1292
       
   178 @SYMTestCaseDesc        Tests for reading MENU_BAR resource
       
   179 @SYMTestPriority        High
       
   180 @SYMTestActions         Tests for RResourceReader::ReadInt16L() function
       
   181 @SYMTestExpectedResults Tests must not fail
       
   182 @SYMREQ                 REQ0000
       
   183 */
       
   184 void TRsReadTester::TestMenuBarL(RResourceReader& aReader)
       
   185 	{
       
   186 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1292 Test reading MENU_BAR resource "));
       
   187     TEST(aReader.ReadInt16L()==8); // how many items following
       
   188     TPtrC ref=_L("abcdefgh");
       
   189     for (TInt ii=1; ii<=8; ii++)
       
   190         {
       
   191         TEST(aReader.ReadInt32L()==ii);
       
   192         TEST(aReader.ReadTPtrCL()==ref.Left(ii));
       
   193         }
       
   194 	}
       
   195 
       
   196 /**
       
   197 @SYMTestCaseID          SYSLIB-BAFL-CT-1293
       
   198 @SYMTestCaseDesc        Tests for reading ALIGNMENT_HORROR resources
       
   199 @SYMTestPriority        High
       
   200 @SYMTestActions         Tests for RResourceReader::ReadTPtrC8L(),RResourceReader::ReadTPtrC16L() functions
       
   201 @SYMTestExpectedResults Tests must not fail
       
   202 @SYMREQ                 REQ0000
       
   203 */
       
   204 void TRsReadTester::TestAlignment1L(RResourceReader& aReader, TInt aIndex)
       
   205 	{
       
   206 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1293 Test reading ALIGNMENT_HORROR resources "));
       
   207 	TPtrC8  ref8 =_L8("xyz");
       
   208 	TPtrC16 ref16=_L16("xyz");
       
   209 	TEST(aReader.ReadTPtrC8L() == ref8.Left(aIndex));
       
   210 	TEST(aReader.ReadTPtrC16L()== ref16.Left(aIndex));
       
   211 	}
       
   212 
       
   213 /**
       
   214 @SYMTestCaseID          SYSLIB-BAFL-CT-1294
       
   215 @SYMTestCaseDesc        Tests for reading ALIGNMENT_HORROR_ARRAY resource
       
   216 @SYMTestPriority        High
       
   217 @SYMTestActions         Tests for RResourceReader::ReadTPtrC8L(),RResourceReader::ReadTPtrC16L() functions
       
   218 @SYMTestExpectedResults Tests must not fail
       
   219 @SYMREQ                 REQ0000
       
   220 */
       
   221 void TRsReadTester::TestAlignment2L(RResourceReader& aReader)
       
   222 	{
       
   223 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1294 Test reading ALIGNMENT_HORROR_ARRAY resource "));
       
   224     TEST(aReader.ReadInt16L()==7); // how many items following
       
   225     TPtrC8  ref8 =_L8("abcdef");
       
   226     TPtrC16 ref16=_L16("abcdef");
       
   227     for (TInt ii=0; ii<=6; ii++)
       
   228         {
       
   229         TEST(aReader.ReadTPtrC8L() ==ref8.Left(ii));
       
   230         TEST(aReader.ReadTPtrC16L()==ref16.Mid(ii));
       
   231         }
       
   232     }
       
   233 
       
   234 /**
       
   235 @SYMTestCaseID          SYSLIB-BAFL-CT-1295
       
   236 @SYMTestCaseDesc        Tests for time required to load a resource file around 100 times
       
   237 @SYMTestPriority        High
       
   238 @SYMTestActions         Tests for time taken to load resource files repeatedly
       
   239 @SYMTestExpectedResults Tests must not fail
       
   240 @SYMREQ                 REQ0000
       
   241 */
       
   242 void TRsReadTester::TimingTestsL(TRscBufAllocation aRscBufAllocation)
       
   243 	{
       
   244 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1295 Timing tests "));
       
   245 	TheTest.Next(_L("BUTTON and FLPTED"));
       
   246 	TUint time = User::TickCount();
       
   247 	for (TInt ii=0; ii<100; ii++)
       
   248 		{
       
   249     	RResourceReader reader;
       
   250         ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation);
       
   251 	    CleanupStack::PopAndDestroy(&reader);
       
   252         ::OpenResourceReaderLC(reader, SYS_FLPTED_ONE, aRscBufAllocation);
       
   253     	CleanupStack::PopAndDestroy(&reader);
       
   254 		}
       
   255 	time = User::TickCount() - time;
       
   256 	TheTest.Printf(_L("Time to load 100 times: %d\n"),time);
       
   257 
       
   258 	TheTest.Next(_L("BUTTON and ARRAY"));
       
   259 	time = User::TickCount();
       
   260 	for (TInt jj=0; jj<100; jj++)
       
   261 		{
       
   262     	RResourceReader reader;
       
   263         ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation);
       
   264 	    CleanupStack::PopAndDestroy(&reader);
       
   265         ::OpenResourceReaderLC(reader, SYS_ARRAY_ONE, aRscBufAllocation);
       
   266     	CleanupStack::PopAndDestroy(&reader);
       
   267 		}
       
   268 	time = User::TickCount() - time;
       
   269 	TheTest.Printf(_L("Time to load 100 times: %d\n"),time);
       
   270 	}
       
   271 
       
   272 
       
   273 TUint8 TRsReadTester::DumpByte(TUint aVal)
       
   274     {
       
   275     return(aVal>9? TUint8(aVal-10+'a'): TUint8(aVal+'0'));
       
   276     }
       
   277 
       
   278 void TRsReadTester::DumpBytes(const TAny* aPtr,TInt aLen)
       
   279     {
       
   280     TUint8* src=(TUint8*)aPtr;
       
   281     TBuf<100> whole;
       
   282     TUint8* tar=(TUint8*)whole.Ptr();
       
   283     TInt len=0;
       
   284     while (aLen--)
       
   285         {
       
   286         TUint val=(*src++);
       
   287         TUint top=val/16;
       
   288         TUint bottom=val%16;
       
   289         *tar++=DumpByte(top);
       
   290         *tar++=DumpByte(bottom);
       
   291         *tar++=' ';
       
   292         len+=3;
       
   293         }
       
   294     whole.SetLength(len);
       
   295     TheTest.Printf(whole);
       
   296     TheTest.Printf(_L("\r\n"));
       
   297     }
       
   298 
       
   299 /**
       
   300 @SYMTestCaseID          SYSLIB-BAFL-CT-0474
       
   301 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   302 @SYMTestPriority        High
       
   303 @SYMTestActions         Open a resource file and test for the reading the data
       
   304 @SYMTestExpectedResults Tests must not fail
       
   305 @SYMREQ                 REQ0000
       
   306 */
       
   307 static void TestButtonL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   308     {
       
   309 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0474 "));
       
   310     RResourceReader reader;
       
   311     ::OpenResourceReaderLC(reader, SYS_BUTTON_ONE, aRscBufAllocation);
       
   312 	TRAPD(errCode, aTest.TestButtonL(reader));
       
   313     CleanupStack::PopAndDestroy(&reader);
       
   314 	TEST2(errCode, KErrNone);
       
   315     }
       
   316 
       
   317 /**
       
   318 @SYMTestCaseID          SYSLIB-BAFL-CT-0475
       
   319 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   320 @SYMTestPriority        High
       
   321 @SYMTestActions         Tests for reading descriptor array.
       
   322 @SYMTestExpectedResults Tests must not fail
       
   323 @SYMREQ                 REQ0000
       
   324 */
       
   325 static void TestArrayL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   326     {
       
   327 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0475 "));
       
   328     RResourceReader reader;
       
   329     ::OpenResourceReaderLC(reader, SYS_ARRAY_ONE, aRscBufAllocation);
       
   330 	TRAPD(errCode, aTest.TestArrayL(reader));
       
   331     CleanupStack::PopAndDestroy(&reader);
       
   332 	TEST2(errCode, KErrNone);
       
   333     }
       
   334 
       
   335 /**
       
   336 @SYMTestCaseID          SYSLIB-BAFL-CT-0476
       
   337 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   338 @SYMTestPriority        High
       
   339 @SYMTestActions         Tests for reading real values
       
   340 @SYMTestExpectedResults Tests must not fail
       
   341 @SYMREQ                 REQ0000
       
   342 */
       
   343 static void TestFlPtEdL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   344     {
       
   345 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0476 "));
       
   346     RResourceReader reader;
       
   347     ::OpenResourceReaderLC(reader, SYS_FLPTED_ONE, aRscBufAllocation);
       
   348 	TRAPD(errCode, aTest.TestFlPtEdL(reader));
       
   349     CleanupStack::PopAndDestroy(&reader);
       
   350 	TEST2(errCode, KErrNone);
       
   351     }
       
   352 
       
   353 /**
       
   354 @SYMTestCaseID          SYSLIB-BAFL-CT-0477
       
   355 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   356 @SYMTestPriority        High
       
   357 @SYMTestActions         Tests for reading menu_bar resource
       
   358 @SYMTestExpectedResults Tests must not fail
       
   359 @SYMREQ                 REQ0000
       
   360 */
       
   361 static void TestMenuBarL(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   362     {
       
   363 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0477 "));
       
   364     RResourceReader reader;
       
   365     ::OpenResourceReaderLC(reader, SYS_MENUBAR_ONE, aRscBufAllocation);
       
   366 	TRAPD(errCode, aTest.TestMenuBarL(reader));
       
   367     CleanupStack::PopAndDestroy(&reader);
       
   368 	TEST2(errCode, KErrNone);
       
   369     }
       
   370 
       
   371 /**
       
   372 @SYMTestCaseID          SYSLIB-BAFL-CT-0478
       
   373 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   374 @SYMTestPriority        High
       
   375 @SYMTestActions         Tests for reading descriptors and checks for alignment
       
   376 @SYMTestExpectedResults Tests must not fail
       
   377 @SYMREQ                 REQ0000
       
   378 */
       
   379 static void TestAlignment1L(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   380     {
       
   381 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0478 "));
       
   382     const TInt TheHorrors[] =
       
   383         {
       
   384 	    SYS_ALIGNMENT_HORROR0, SYS_ALIGNMENT_HORROR1,
       
   385 	    SYS_ALIGNMENT_HORROR2, SYS_ALIGNMENT_HORROR3,
       
   386 	    0
       
   387 	    };
       
   388 
       
   389 	for(TInt i=0;TheHorrors[i]!=0;++i)
       
   390         {
       
   391         RResourceReader reader;
       
   392         ::OpenResourceReaderLC(reader, TheHorrors[i], aRscBufAllocation);
       
   393 	    TRAPD(errCode, aTest.TestAlignment1L(reader, i));
       
   394         CleanupStack::PopAndDestroy(&reader);
       
   395 	    TEST2(errCode, KErrNone);
       
   396         }
       
   397     }
       
   398 
       
   399 /**
       
   400 @SYMTestCaseID          SYSLIB-BAFL-CT-0479
       
   401 @SYMTestCaseDesc        Tests for the functionality of RResourceReader class
       
   402 @SYMTestPriority        High
       
   403 @SYMTestActions         Tests for reading descriptors and checks for alignment
       
   404 @SYMTestExpectedResults Tests must not fail
       
   405 @SYMREQ                 REQ0000
       
   406 */
       
   407 static void TestAlignment2L(TRsReadTester& aTest, TRscBufAllocation aRscBufAllocation)
       
   408     {
       
   409 	TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0479 "));
       
   410     RResourceReader reader;
       
   411     ::OpenResourceReaderLC(reader, SYS_ALIGNMENT_HORROR_ARRAY, aRscBufAllocation);
       
   412 	TRAPD(errCode, aTest.TestAlignment2L(reader));
       
   413     CleanupStack::PopAndDestroy(&reader);
       
   414 	TEST2(errCode, KErrNone);
       
   415     }
       
   416 
       
   417 static void RunTestsL()
       
   418     {
       
   419 	TheTest.Start(_L("Resource reader"));
       
   420 	CleanupClosePushL(TheFs);
       
   421 	User::LeaveIfError(TheFs.Connect());
       
   422     TheResourceFile = CResourceFile::NewLC(TheFs,KRomResourceFile, 0, 0);
       
   423 
       
   424 	TRsReadTester lt;
       
   425 
       
   426     ::TestButtonL(lt, EFromRscFile);
       
   427     ::TestButtonL(lt, EFromRscBuf);
       
   428 
       
   429     ::TestArrayL(lt, EFromRscFile);
       
   430     ::TestArrayL(lt, EFromRscBuf);
       
   431 
       
   432     ::TestFlPtEdL(lt, EFromRscFile);
       
   433     ::TestFlPtEdL(lt, EFromRscBuf);
       
   434 
       
   435     ::TestMenuBarL(lt, EFromRscFile);
       
   436     ::TestMenuBarL(lt, EFromRscBuf);
       
   437 
       
   438     ::TestAlignment1L(lt, EFromRscFile);
       
   439     ::TestAlignment1L(lt, EFromRscBuf);
       
   440 
       
   441     ::TestAlignment2L(lt, EFromRscFile);
       
   442     ::TestAlignment2L(lt, EFromRscBuf);
       
   443 
       
   444     TRAPD(errCode, lt.TimingTestsL(EFromRscFile));
       
   445 	TEST2(errCode, KErrNone);
       
   446 
       
   447     TRAP(errCode, lt.TimingTestsL(EFromRscBuf));
       
   448 	TEST2(errCode, KErrNone);
       
   449 
       
   450 	CleanupStack::PopAndDestroy(TheResourceFile);
       
   451 	CleanupStack::PopAndDestroy(1, &TheFs);
       
   452     }
       
   453 
       
   454 TInt E32Main()
       
   455 	{
       
   456 	__UHEAP_MARK;
       
   457     CTrapCleanup *cleanup=CTrapCleanup::New();
       
   458 	TheTest.Title();
       
   459     TRAPD(err,::RunTestsL());
       
   460 	TEST2(err, KErrNone);
       
   461 	TheTest.Next(_L("/n"));
       
   462 	TheTest.End();
       
   463 	TheTest.Close();
       
   464     delete(cleanup);
       
   465 	__UHEAP_MARKEND;
       
   466     return(0);
       
   467 	}