--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/uigraphicsutils/tef/t_textresourceutils.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,929 @@
+// Copyright (c) 2007-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "t_textresourceutils.h"
+#include <tultextresourceutils.h>
+#include <tulstringresourcereader.h>
+#include <t_textresourceutils.rsg>
+#include <coeutils.h>
+#include <eikenv.h>
+
+#include <apacmdln.h>
+
+const TText KLRMarker = 0x200E;
+const TText KRLMarker = 0x200F;
+
+_LIT(KTextResourceUtilsFilePath, "z:\\resource\\apps\\t_textresourceutils.rsc");
+
+CT_TextResourceUtilsAppUi::CT_TextResourceUtilsAppUi(CT_TextResourceUtilsStep& aStep):
+CTestAppUi(&aStep, KTextResourceUtilsFilePath)
+ {
+ }
+
+void CT_TextResourceUtilsAppUi::ConstructL()
+ {
+ CTestAppUi::ConstructL();
+ AutoTestManager().StartAutoTest();
+ }
+
+CT_TextResourceUtilsAppUi::~CT_TextResourceUtilsAppUi()
+ {
+ Reset();
+ }
+
+void CT_TextResourceUtilsAppUi::Reset()
+ {
+ delete iStringHolder;
+ iStringHolder = NULL;
+ }
+
+void CT_TextResourceUtilsAppUi::RunTestStepL(TInt aStep)
+ {
+ switch(aStep)
+ {
+ case 1:
+ SetTestStepID(_L("UIF-ETUL-0015"));
+ TextResourceUtilsCase1();
+ RecordTestResultL();
+ break;
+ case 2:
+ SetTestStepID(_L("UIF-ETUL-0016"));
+ TextResourceUtilsCase2();
+ RecordTestResultL();
+ break;
+ case 3:
+ SetTestStepID(_L("UIF-ETUL-0017"));
+ TextResourceUtilsCase3();
+ RecordTestResultL();
+ break;
+ case 4:
+ SetTestStepID(_L("UIF-ETUL-0018"));
+ TextResourceUtilsCase4();
+ RecordTestResultL();
+ break;
+ case 5:
+ SetTestStepID(_L("UIF-ETUL-0019"));
+ TRAPD(err, TextResourceUtilsCase5L());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ break;
+ case 6:
+ SetTestStepID(_L("UIF-ETUL-0020"));
+ TextResourceUtilsCase6();
+ RecordTestResultL();
+ break;
+ case 7:
+ SetTestStepID(_L("UIF-ETUL-0021"));
+ TRAP(err, TextResourceUtilsCase7L());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ break;
+ case 8:
+ SetTestStepID(_L("UIF-ETUL-0022"));
+ TRAP(err, TextResourceUtilsCase8L());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ break;
+ case 9:
+ SetTestStepID(_L("UIF-ETUL-0023"));
+ TRAP(err, TestStringResourceReaderCaseL());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ CloseTMSGraphicsStep(); // call after last RecordTestResultL()
+ break;
+ case 10:
+ AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0015
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadLC() and TulTextResourceUtils::LoadL() methods
+ for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() to read resource string without any
+ format specifiers from the rss file.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() loads the correct string from the resource file.
+ 2. TulTextResourceUtils::LoadL() loads the string with substring separator correctly.
+ 3. OOM test completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase1()
+ {
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+
+ INFO_PRINTF1(_L("Test to read resource string from the rss file"));
+
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_1); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("Humblemumble")) == 0);
+ delete buf;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_B));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_B, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_B));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_1));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Substrings\001no param\neters\001at all")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_2));
+ TEST(ret == KErrNone && iStringHolder->Compare( _L("\001")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_3));
+ TEST(ret == KErrNone && iStringHolder->Compare( _L("\001\001")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_4));
+ TEST(ret == KErrNone && iStringHolder->Compare( _L("\001Substring inside\001")) ==0);
+ Reset();
+
+ // Test LoadL(TInt aResourceId, CCoeEnv* aLoaderEnv); for out of memory conditions.
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_B, eikonEnv));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ TEST(iStringHolder->Compare(_L("Humble mumble")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0016
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and LoadLC() methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() to read a resource string from rss file,
+ and replace the first %U-string in it with replacement string.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() and LoadLC() loads the correct string from the resource file and replaces
+ the first %U with specified string.
+ 2. OOM completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase2()
+ {
+ INFO_PRINTF1(_L("Test to read a resource string from rss file, and replace the first %%U-string in it with replacement string"));
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ TRAPD(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_2, _L("and")));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble %and mumble")) == 0);
+ Reset();
+
+ HBufC* buf = NULL;
+ TRAP(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_A2, _L("and"), eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("and Humble mumble")) == 0);
+ delete buf;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_A2, _L("I will"), eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("I will Humble mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_A1, _L(" is nice."), eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble mumble is nice.")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_2, _L("hilipatipilipatipippampaajarallatirallatirallallaatervemoroheipäheimulonmunatsullaei")));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble %hilipatipilipatipippampaajarallatirallatirallallaatervemoroheipäheimulonmunatsullaei mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_2, _L("")));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble % mumble")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_10, _L("string"), eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Testing substring separator at end of the string ")) == 0);
+ Reset();
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_11, _L("string"), eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Testing substring separator at end of the string \001 ")) == 0);
+ Reset();
+
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_2, _L("a")));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ TEST(iStringHolder->Compare(_L("Humble %a mumble")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0017
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::Load() and TulTextResourceUtils::Format() methods under
+ normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() to read a resource string from rss file, and
+ calls TulTextResourceUtils::Format() method to format the same string.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() loads the correct string from the resource file.
+ 2. TulTextResourceUtils::Format() replaces all %U specifiers with specified string if position given is -1
+ 3. TulTextResourceUtils::Format() replaces all %N specifiers with specified number if position given is -1.
+ 4. TulTextResourceUtils::Format() replaces corresponding %U specifiers with specified string if position given is other than -1
+ 5. TulTextResourceUtils::Format() replaces corresponding %N specifiers with specified number if position given is other than -1
+ 6. OOM test completes without any memory leak.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase3()
+ {
+ INFO_PRINTF1(_L("Test to read a resource string from rss file, and to format the string"));
+
+ TBuf<50> buffer1;
+ TBuf<50> buffer2;
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_8, eikonEnv);
+ TulTextResourceUtils::Format(buffer2, buffer1, -1, _L("either"));
+ TEST(buffer2.Compare(_L("Here either")) == 0);
+
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_9);
+ TulTextResourceUtils::Format(buffer2, buffer1, -1, 10);
+ TEST(buffer2.Compare(_L("Humble 10 times...%")) == 0);
+
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_D);
+ TEST(buffer1.Compare(_L("No memory allocated")) == 0);
+
+ TulTextResourceUtils::Load(buffer2, R_TEXT_EXAMPLE_E);
+ TulTextResourceUtils::Format(buffer1, buffer2, 2, _L("Really? "));
+ buffer2.Zero();
+ TulTextResourceUtils::Format(buffer2, buffer1, 1, _L("allocated "));
+ buffer1.Zero();
+ TulTextResourceUtils::Format(buffer1, buffer2, 0, _L("nothing"));
+ TEST(buffer1.Compare(_L("Really? Here allocated nothing ")) == 0);
+
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_G);
+ TulTextResourceUtils::Format(buffer2, buffer1, 3, 6);
+ buffer1.Zero();
+ TulTextResourceUtils::Format(buffer1, buffer2, 2, 567);
+ buffer2.Zero();
+ TulTextResourceUtils::Format(buffer2, buffer1, 1, 9);
+ buffer1.Zero();
+ TulTextResourceUtils::Format(buffer1, buffer2, 0, 7);
+ TEST(buffer1.Compare(_L("6I 9allocated 7 bytes567")) == 0);
+
+ buffer1.Zero();
+ buffer2.Zero();
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_8, eikonEnv);
+ TInt fail = 0;
+ for (fail = 1; ; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+ TulTextResourceUtils::Format(buffer2, buffer1, -1, _L("either"));
+ if (buffer2.Length())
+ {
+ __UHEAP_RESET; // TEST result will not be displayed correctly if the memory allocation is not reset.
+ TEST(buffer2.Compare(_L("Here either")) == 0);
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+
+ __UHEAP_RESET;
+ buffer1.Zero();
+ buffer2.Zero();
+ TulTextResourceUtils::Load(buffer1, R_TEXT_EXAMPLE_F);
+ for (fail = 1; ; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+ TulTextResourceUtils::Format(buffer2, buffer1, -1, 7);
+ if (buffer2.Length())
+ {
+ __UHEAP_RESET; // TEST result will not be displayed correctly if the memory allocation is not reset.
+ TEST(buffer2.Compare(_L("I allocated 7 bytes")) == 0);
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0018
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and LoadLC() methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() to read resource string from the rss file
+ and to replace the first %%(index)N-string with replacement TInt.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() and LoadLC() loads the correct string from the resource file and replaces
+ the first %%(index)N-string in it with replacement TInt.
+ 2. OOM test completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase4()
+ {
+ TInt number(324);
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+
+ INFO_PRINTF1(_L("Test to read resource string from the rss file and to replace the first %%(index)N-string in it with replacement TInt"));
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_3, number, eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("You have %R324 undone tasks.")) == 0);
+ delete buf;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_9, 123456789, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble 123456789 times...%")) == 0);
+ Reset();
+
+ // Test LoadL(TInt aResourceId, TInt aNumber, CCoeEnv* aLoaderEnv = NULL); for out of memory conditions.
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_9, -12345, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Humble -12345 times...%")) == 0);
+ Reset();
+
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_3, number));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ TEST(iStringHolder->Compare(_L("You have %R324 undone tasks.")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0019
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and LoadLC() methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() methods to read resource string from the rss file and
+ to replace the %%(index)U-strings with replacement strings from an array
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() and LoadLC() loads the correct string from the resource file
+ and replaces the %%(index)U-strings in it with replacement strings from the array.
+ 2. TulTextResourceUtils::LoadL() loads the string which has strictly right-to-left directional characters in substring
+ 3. TulTextResourceUtils::LoadL() loads the string with KDirNotFound and substring separator
+ 4. OOM test completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase5L()
+ {
+ CDesCArrayFlat* strings = new (ELeave)CDesCArrayFlat(4);
+ CleanupStack::PushL(strings);
+
+ INFO_PRINTF1(_L("Test to read a resource string from the rss file and to replace the %%(index)U-strings in it with replacement strings from an array"));
+
+ strings->AppendL(_L("orking")); //First string
+ strings->AppendL(_L("ll")); //Second string
+ strings->AppendL(_L("sti")); //Third string
+ strings->AppendL(_L("w")); //Fourth string
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_4, *strings, eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("I'm %11 still working fine.")) == 0);
+ delete buf;
+
+ // Test LoadL(TInt aResourceId, const MDesCArray& aStrings, CCoeEnv* aLoaderEnv = NULL); for out of memory conditions.
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_4, *strings));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ __UHEAP_RESET; // TEST result will not be displayed correctly if the memory allocation is not reset.
+ TEST(iStringHolder->Compare(_L("I'm %11 still working fine.")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+
+ __UHEAP_RESET;
+ // strongly right-to-left directional characters in substring
+ TBuf<10> substring;
+ substring.Append(TChar(0x062C));
+ substring.Append(TChar(0x0639));
+ substring.Append(TChar(0x0644));
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_5, substring));
+ TEST(ret == KErrNone);
+
+ TBuf<100> compareBuffer;
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L("Strongly right-to-left("));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(") directional\001"));
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L(" characters ("));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(") in \001"));
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L("substring"));
+ TEST(iStringHolder->Compare(compareBuffer) == 0);
+ Reset();
+
+ compareBuffer.Insert(1, _L(" "));
+ compareBuffer.Append(_L("\x0001"));
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_8, substring, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(compareBuffer) == 0);
+ Reset();
+
+ compareBuffer.Delete(0, 2);
+ compareBuffer.Insert(0, _L("\x0002 "));
+ compareBuffer.Delete(compareBuffer.Length()-1, 6);
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_9, substring, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(compareBuffer) == 0);
+ Reset();
+
+ strings->Reset();
+ strings->AppendL(_L("1234567890"));
+ strings->AppendL(_L("ABCDEFGHIJ"));
+ strings->AppendL(_L("?/*"));
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_7, *strings));
+ TEST(ret == KErrNone);
+ // "Testing string length limiting Five:%0U[05] Three:%1U[03]\001Seven:%0U[07] Nine:%1U[09] Three:%2U[03]"
+ compareBuffer.Zero();
+ compareBuffer.Append(_L("Testing string length limiting Five:1234"));
+ compareBuffer.Append(KEllipsis);
+ compareBuffer.Append(_L(" Three:AB"));
+ compareBuffer.Append(KEllipsis);
+ compareBuffer.Append(_L("\001Seven:123456"));
+ compareBuffer.Append(KEllipsis);
+ compareBuffer.Append(_L(" Nine:ABCDEFGH"));
+ compareBuffer.Append(KEllipsis);
+ compareBuffer.Append(_L(" Three:?/*"));
+ TEST(iStringHolder->Compare(compareBuffer) == 0);
+ Reset();
+
+ CleanupStack::PopAndDestroy();
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0020
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and LoadLC() methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() to read resource string from the rss file and to
+ replace the first %%(index)N-string with replacement TInt and the first %%(index)U-string with replacement string
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() and LoadLC() loads the correct string from the resource file and replaces
+ a. The first %%(index)N-string with replacement TInt
+ b. The first %%(index)U-string with replacement string.
+ 2. OOM tests completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase6()
+ {
+ TInt number2(12);
+ _LIT(name, "John Doe");
+
+ INFO_PRINTF1(_L("Test to read resource string from the rss file and replace the first %%(index)N-string in it with replacement TInt and the first %%(index)U-string in it with replacement string"));
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_5, name, number2, eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("You have missed 12 messages from John Doe.\001Missed 12 msgs from John Doe.\001Missed 12 msgs.")) == 0);
+ delete buf;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_C, _L("and"), 68365));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("and mumble 68365 times.")) == 0);
+ Reset();
+
+ // Test LoadL(TInt aResourceId, const TDesC& aString, TInt aInt, CCoeEnv* aLoaderEnv = NULL); for out of memory conditions.
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_5, name, number2));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ TEST(iStringHolder->Compare(_L("You have missed 12 messages from John Doe.\001Missed 12 msgs from John Doe.\001Missed 12 msgs.")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0021
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and LoadLC() methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() and LoadLC() to read resource string from the rss file and to
+ replace the %%(index)N-strings with replacement TInts from the given array.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() and LoadLC() loads the correct string from the resource file and
+ replaces the %%(index)N-strings with replacement TInts from the given array.
+ 2. OOM tests completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase7L()
+ {
+ CArrayFix<TInt>* numberArray = new(ELeave)CArrayFixFlat<TInt>(3);
+ CleanupStack::PushL(numberArray);
+
+ numberArray->AppendL(1); // First Integer
+ numberArray->AppendL(2); // Second Integer
+
+ INFO_PRINTF1(_L("Test to read resource string from the rss file and replaces the %%(index)N-strings in it with replacement TInts from an array"));
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_6, *numberArray, eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone && buf->Compare(_L("Multiple numeric 1:%2N indexes 1:1\x0001\x0032:2 in separate\x0001substrings")) == 0);
+ delete buf;
+
+ numberArray->AppendL(3); // Third Integer
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_6, *numberArray, eikonEnv));
+ TEST(ret == KErrNone && iStringHolder->Compare(_L("Multiple numeric 1:3 indexes 1:1\x0001\x0032:2 in separate\x0001substrings")) == 0);
+ Reset();
+
+ // Test LoadL(TInt aResourceId, const CArrayFix<TInt>& aInts, CCoeEnv* aLoaderEnv = NULL); for out of memory conditions.
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_6, *numberArray));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ TEST(iStringHolder->Compare(_L("Multiple numeric 1:3 indexes 1:1\x0001\x0032:2 in separate\x0001substrings")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ CleanupStack::PopAndDestroy();
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0022
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of TulTextResourceUtils::LoadL() and TulTextResourceUtils::LoadLC()
+ methods for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls TulTextResourceUtils::LoadL() to read resource string without any format specifiers from the rss file
+ and to replace the %%(index)U-strings with replacement strings from the give array and
+ the %%(index)N-strings with replacement TInts from an array
+
+ @SYMTestExpectedResults The test checks whether
+ 1. TulTextResourceUtils::LoadL() loads the correct string from the resource file and replaces the
+ a. %%(index)U-strings with replacement strings from the given array of strings
+ b. %%(index)N-strings with replacement strings from the given TInt array
+ 2. TulTextResourceUtils::LoadL() loads the string which has multiple strictly right-to-left directional characters
+ in substring
+ 3. OOM tests completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TextResourceUtilsCase8L()
+ {
+ INFO_PRINTF1(_L("Test to read a resource string from the rss file and to replace the %%(index)U-strings in it with replacement strings from an array & the %%(index)N-strings in it with replacement TInts from an array"));
+
+ CEikonEnv* eikonEnv = CEikonEnv::Static();
+ CArrayFix<TInt>* numberArray = new(ELeave)CArrayFixFlat<TInt>(2);
+ CleanupStack::PushL(numberArray);
+
+ numberArray->AppendL(5); // First Integer
+ numberArray->AppendL(2); // Second Integer
+
+ CDesCArrayFlat* strings = new (ELeave)CDesCArrayFlat(5);
+ CleanupStack::PushL(strings);
+
+ strings->AppendL(_L("for")); //First string
+ strings->AppendL(_L("Test")); //Second string
+ strings->AppendL(_L("strings")); //Third string
+ strings->AppendL(_L("numerics")); //Fourth string
+ strings->AppendL(_L("and")); //Fifth string
+
+ HBufC* buf = NULL;
+ TRAPD(ret, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_7, *strings, *numberArray, eikonEnv); CleanupStack::Pop(buf));
+ TEST(ret == KErrNone);
+ TEST(buf->Compare(_L("Multiple numeric and strings mixed One: Test for reading 5 strings and 2 numerics %4")) == 0);
+ delete buf;
+
+ // Test LoadL(TInt aResourceId, const MDesCArray& aStrings, const CArrayFix<TInt>& aInts, CCoeEnv* aLoaderEnv = NULL); for out of memory conditions.
+ for (TInt fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_7, *strings, *numberArray));
+ TEST((ret==KErrNone || ret==KErrNoMemory));
+ if (ret == KErrNone)
+ {
+ __UHEAP_RESET; // TEST result will not be displayed correctly if the memory allocation is not reset.
+ TEST(iStringHolder->Compare(_L("Multiple numeric and strings mixed One: Test for reading 5 strings and 2 numerics %4")) == 0);
+ Reset();
+ __UHEAP_MARKEND;
+ break;
+ }
+ __UHEAP_MARKEND;
+ }
+
+ __UHEAP_RESET;
+ strings->Reset();
+ numberArray->Reset();
+ // strongly right-to-left directional characters in substring
+ TBuf<10> substring;
+ TBuf<10> substring2;
+
+ substring.Append(TChar(0x062C));
+ substring.Append(TChar(0x0639));
+ substring.Append(TChar(0x0644));
+
+ substring2.Append(TChar(0x0644));
+ substring2.Append(TChar(0x0639));
+ substring2.Append(TChar(0x062C));
+
+ strings->AppendL(substring);
+ strings->AppendL(substring2);
+ numberArray->AppendL(2);
+
+ TRAP(ret, iStringHolder = TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_NEW_6, *strings, *numberArray));
+ TEST(ret == KErrNone);
+
+ TBuf<150> compareBuffer;
+ //"Multiple (%2N) Strongly right-to-left(%0U,%1U) directional\001 characters (%1U)(%0U) in \001substring"
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L("Multiple (2) Strongly right-to-left("));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(","));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring2);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(") directional\001"));
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L(" characters ("));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring2);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(")("));
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(substring);
+ compareBuffer.Append(KRLMarker);
+ compareBuffer.Append(_L(") in \001"));
+ compareBuffer.Append(KLRMarker);
+ compareBuffer.Append(_L("substring"));
+ TEST(iStringHolder->Compare(compareBuffer) == 0);
+ Reset();
+
+ CleanupStack::PopAndDestroy(2);
+ }
+
+/**
+ @SYMTestCaseID UIF-ETUL-0023
+
+ @SYMREQ 7736
+
+ @SYMTestCaseDesc Tests variants of CTulStringResourceReader::NewLC() and NewL() methods and
+ CTulStringResourceReader::ReadResourceString() method for normal and OOM conditions.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Calls CTulStringResourceReader::ReadResourceString() to read resource string from the given resource file.
+
+ @SYMTestExpectedResults The test checks whether
+ 1. CTulStringResourceReader::ReadResourceString() loads the correct string from the resource file.
+ 2. CTulStringResourceReader::ReadResourceString() loads the string with very long text(~1000 characters) from the resource file.
+ 3. OOM tests completes without any memory leaks.
+ */
+void CT_TextResourceUtilsAppUi::TestStringResourceReaderCaseL()
+ {
+ INFO_PRINTF1(_L("Test to read a resource string from the resource file using CTulStringResourceReader"));
+ TFileName fileName(KTextResourceUtilsFilePath);
+
+ RFs rFs;
+ User::LeaveIfError(rFs.Connect());
+ CleanupClosePushL(rFs);
+ TPtrC buf;
+
+ CTulStringResourceReader* stringResourceLoader = CTulStringResourceReader::NewLC(fileName);
+ buf.Set(stringResourceLoader->ReadResourceString(R_TEXT_STRINGRESOURCEREADER_1));
+ TEST(buf.Compare(_L("Some string to be read")) == 0);
+ CleanupStack::PopAndDestroy(stringResourceLoader);
+
+ stringResourceLoader = CTulStringResourceReader::NewL(fileName);
+ CleanupStack::PushL(stringResourceLoader);
+ buf.Set(stringResourceLoader->ReadResourceString(R_TEXT_STRINGRESOURCEREADER_2));
+ TEST(buf.Compare(_L("Some other string to be read")) == 0);
+ CleanupStack::PopAndDestroy(stringResourceLoader);
+
+ stringResourceLoader = CTulStringResourceReader::NewLC(fileName, rFs);
+ buf.Set(stringResourceLoader->ReadResourceString(R_TEXT_STRINGRESOURCEREADER_3));
+ TEST(buf.Compare(_L("Very long text. ~1000 characters. 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012")));
+ CleanupStack::PopAndDestroy(stringResourceLoader);
+
+ stringResourceLoader = CTulStringResourceReader::NewL(fileName, rFs);
+ CleanupStack::PushL(stringResourceLoader);
+ buf.Set(stringResourceLoader->ReadResourceString(R_TEXT_STRINGRESOURCEREADER_4));
+ TEST(buf.Compare(_L("Short string to be read")) == 0);
+ CleanupStack::PopAndDestroy(stringResourceLoader);
+ CleanupStack::PopAndDestroy(&rFs);
+
+ // OOM test for CTulStringReaderReader.
+ INFO_PRINTF1(_L("OOM Test for CTulStringReaderReader"));
+ for (int fail = 1;; fail++)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic, fail);
+ __UHEAP_MARK;
+
+ CTulStringResourceReader* stringResourceLoader = NULL;
+ TRAPD(err, stringResourceLoader = CTulStringResourceReader::NewL(fileName));
+ TEST(err == KErrNone || err == KErrNoMemory);
+ if (err == KErrNone)
+ {
+ buf.Set(stringResourceLoader->ReadResourceString(R_TEXT_STRINGRESOURCEREADER_1));
+ if (buf != KNullDesC)
+ {
+ TEST(buf.Compare(_L("Some string to be read")) == 0);
+ delete stringResourceLoader;
+ __UHEAP_MARKEND;
+ break;
+ }
+ delete stringResourceLoader;
+ }
+ __UHEAP_MARKEND;
+ }
+ __UHEAP_RESET;
+ }
+
+/**
+ Destructor
+ */
+CT_TextResourceUtilsStep::~CT_TextResourceUtilsStep()
+ {
+ }
+
+/**
+ Constructor
+ */
+CT_TextResourceUtilsStep::CT_TextResourceUtilsStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KT_TextResourceUtilsStep);
+ }
+
+void CT_TextResourceUtilsStep::ConstructAppL(CEikonEnv* aCoeEnv)
+ {
+ aCoeEnv->ConstructL();
+ CT_TextResourceUtilsAppUi* appUi=new(ELeave) CT_TextResourceUtilsAppUi(*this);
+ appUi->ConstructL();
+ aCoeEnv->SetAppUi(appUi);
+ }
+
+void CT_TextResourceUtilsStep::TestTextResourceUtilsWithoutCoeEnv()
+ {
+ INFO_PRINTF1(_L("Test TulTextResourceUtils Load methods before CoeEnv is created"));
+ TRAPD(err, TulTextResourceUtils::LoadL(R_TEXT_EXAMPLE_B));
+ TEST(err == KErrNotSupported);
+
+ HBufC* buf = NULL;
+ TRAP(err, buf = TulTextResourceUtils::LoadLC(R_TEXT_EXAMPLE_B); CleanupStack::Pop(buf));
+ TEST(!buf);
+ delete buf;
+ TEST(err == KErrNotSupported);
+ }
+
+TVerdict CT_TextResourceUtilsStep::doTestStepL()
+ {
+ INFO_PRINTF1(_L("Test Started"));
+ __UHEAP_MARK;
+
+ TestTextResourceUtilsWithoutCoeEnv();
+ CEikonEnv* coe = new(ELeave) CEikonEnv;
+ TRAPD(err, ConstructAppL(coe));
+ if (!err)
+ coe->ExecuteD();
+ else
+ {
+ SetTestStepResult(EFail);
+ delete coe;
+ }
+ __UHEAP_MARKEND;
+ INFO_PRINTF1(_L("Test Finished"));
+ return TestStepResult();
+ }