fontservices/textshaperplugin/test/t_shapeteststep.cpp
author hgs
Tue, 07 Sep 2010 16:39:34 +0800
changeset 59 7d891bb52a7d
parent 53 11e2bb0d14ba
permissions -rw-r--r--
201033_04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     1
/*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     3
* All rights reserved.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     8
*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
     9
* Initial Contributors:
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    11
*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    12
* Contributors:
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    13
*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    14
* Description: 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    15
*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    16
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    17
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    18
#include <e32math.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    19
#include <fbs.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    20
#include <badesca.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    21
#include <ecom/ecom.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    22
#include <ecom/implementationproxy.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    23
#include <graphics/shapeimpl.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    24
#include <graphics/openfontrasterizer.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    25
#include <graphics/openfontconstants.h>
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    26
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    27
#include "testData.h"
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    28
#include "t_shapeteststep.h"
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    29
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    30
#define test(cond)                                          \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    31
    {                                                       \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    32
    TBool __bb = (cond);                                    \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    33
    TEST(__bb);                                             \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    34
    if (!__bb)                                              \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    35
        {                                                   \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    36
        ERR_PRINTF1(_L("ERROR: Test Failed"));              \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    37
        User::Leave(1);                                     \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    38
        }                                                   \
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    39
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    40
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    41
//add filenames for any test data here
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    42
const TText16* KTestFilenames[] =
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    43
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    44
    //created from original iculayoutengine test data
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    45
    (const TText16*) L"z:\\test\\data\\tnr_dev_otshaperdata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    46
    //created from input data provided by licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    47
    (const TText16*) L"z:\\test\\data\\tnr_dev_otshaperdata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    48
    //created from input data provided by licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    49
    (const TText16*) L"z:\\test\\data\\tnr_dev_otshaperdata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    50
    //created from input data provided by licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    51
    (const TText16*) L"z:\\test\\data\\tnr_dev_otshaperdata4.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    52
    // Data to test defect fix DEF078032
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    53
    (const TText16*) L"z:\\test\\data\\tnr_dev_otshaperdata5.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    54
    //created from input data provided by licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    55
    (const TText16*) L"z:\\test\\data\\shaperkannadadata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    56
    // created from Kannada sample text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    57
    (const TText16*) L"z:\\test\\data\\shaperkannadadata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    58
    // created from Kannada sample text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    59
    (const TText16*) L"z:\\test\\data\\shaperkannadadata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    60
    // created from Gujarati sample text taken from the web
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    61
    (const TText16*) L"z:\\test\\data\\shapergujaratidata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    62
    // created from Gujarati sample text taken from the web
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    63
    (const TText16*) L"z:\\test\\data\\shapergujaratidata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    64
    // created from Gujarati sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    65
    (const TText16*) L"z:\\test\\data\\shapergujaratidata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    66
    // created from Bengali sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    67
    (const TText16*) L"z:\\test\\data\\shaperbengalidata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    68
    // created from Bengali sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    69
    (const TText16*) L"z:\\test\\data\\shaperbengalidata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    70
    // created from Bengali sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    71
    (const TText16*) L"z:\\test\\data\\shaperbengalidata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    72
    // created from Tamil sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    73
    (const TText16*) L"z:\\test\\data\\shapertamildata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    74
    // created from Tamil sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    75
    (const TText16*) L"z:\\test\\data\\shapertamildata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    76
    // created from Tamil sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    77
    (const TText16*) L"z:\\test\\data\\shapertamildata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    78
    // created from Telugu sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    79
    (const TText16*) L"z:\\test\\data\\shapertelugudata1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    80
    // created from Telugu sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    81
    (const TText16*) L"z:\\test\\data\\shapertelugudata2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    82
    // created from Telugu sample text given by the licensee
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    83
    (const TText16*) L"z:\\test\\data\\shapertelugudata3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    84
    //  Test for Gurmukhi digit
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    85
    (const TText16*) L"z:\\test\\data\\shapergurmukhi1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    86
    (const TText16*) L"z:\\test\\data\\shapergurmukhi2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    87
    (const TText16*) L"z:\\test\\data\\shapergurmukhi3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    88
    (const TText16*) L"z:\\test\\data\\shapergurmukhi4.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    89
    (const TText16*) L"z:\\test\\data\\shapergurmukhi5.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    90
    //  Test for Malayalam digit
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    91
    (const TText16*) L"z:\\test\\data\\shapermalayalam1.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    92
    (const TText16*) L"z:\\test\\data\\shapermalayalam2.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    93
    (const TText16*) L"z:\\test\\data\\shapermalayalam3.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    94
    (const TText16*) L"z:\\test\\data\\shapermalayalam4.dat",
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    95
    (const TText16*) L"z:\\test\\data\\shapermalayalam5.dat"
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    96
    };
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    97
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    98
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
    99
Number of test data files of each of the scripts/languages bein tests.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   100
Must change these if KTestFilnames[] above is changed
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   101
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   102
const TInt KHindiTestDataIndex = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   103
const TInt KNumberOfHindiTestDataFiles = 5;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   104
const TInt KKannadaTestDataIndex = 5;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   105
const TInt KNumberOfKannadaTestDataFiles = 3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   106
const TInt KGujaratiTestDataIndex = 8;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   107
const TInt KNumberOfGujaratiTestDataFiles = 3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   108
const TInt KBengaliTestDataIndex = 11;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   109
const TInt KNumberOfBengaliTestDataFiles = 3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   110
const TInt KTamilTestDataIndex = 14;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   111
const TInt KNumberOfTamilTestDataFiles = 3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   112
const TInt KTeluguTestDataIndex = 17;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   113
const TInt KNumberOfTeluguTestDataFiles = 3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   114
const TInt KGurmukhiTestDataIndex = 20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   115
const TInt KNumberOfGurmukhiTestDataFiles = 5;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   116
const TInt KMalayalamTestDataIndex = 25;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   117
const TInt KNumberOfMalayalamTestDataFiles = 5;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   118
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   119
const TUint32 KDevanagariScriptCode = 0x64657661;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   120
const TUint32 KKannadaScriptCode = 0x6B6E6461;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   121
const TUint32 KHindiLanguageCode = 0x48494E20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   122
const TUint32 KKannadaLanguageCode = 0x4B414E20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   123
const TUint32 KGujaratiScriptCode = 0x67756A72;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   124
const TUint32 KGujaratiLanguageCode = 0x47554A20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   125
const TUint32 KBengaliScriptCode = 0x62656E67;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   126
const TUint32 KBengaliLanguageCode = 0x42454E20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   127
const TUint32 KTamilScriptCode = 0x74616D6C;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   128
const TUint32 KTamilLanguageCode = 0x54414D20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   129
const TUint32 KTeluguScriptCode = 0x74656C75;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   130
const TUint32 KTeluguLanguageCode = 0x54454C20;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   131
const TUint32 KGurmukhiScriptCode = 0x67757275;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   132
const TUint32 KGurmukhiLanguageCode = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   133
const TUint32 KMalayalamScriptCode = 0x6d6c796d;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   134
const TUint32 KMalayalamLanguageCode = 0x4d4c5220;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   135
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   136
_LIT(KTestStep_Hindi, "Hindi");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   137
_LIT(KTestStep_Kannada, "Kannada");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   138
_LIT(KTestStep_Gujarati, "Gujarati");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   139
_LIT(KTestStep_Bengali, "Bengali");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   140
_LIT(KTestStep_Tamil, "Tamil");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   141
_LIT(KTestStep_Telugu, "Telugu");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   142
_LIT(KTestStep_Gurmukhi, "Gurmukhi");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   143
_LIT(KTestStep_Malayalam, "Malayalam");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   144
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   145
_LIT16(KHindi1,"\x0915\x094D\x0937\x0924\x094D\x0930\x093F\x092F\x0020\x0909\x0926\x094D\x0926\x0947\x0936\x094D\x0020\x0915\x094D\x0937\x093F\x092A\x094D\x0930");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   146
_LIT16(KHindi2,"\x092d\x0942\x0930\x094d\x092d\x0941\x0935\x0903\x0020\x0938\x094d\x0935\x0903\x0020\x0924\x0924\x094d\x0938\x0935\x093f\x0924\x0941\x0930\x094d\x0935\x0930\x0947\x0923\x094d\x092f\x0902");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   147
_LIT16(KHindi3,"\x092d\x0930\x094d\x0917\x094b\x0020\x0926\x0947\x0935\x0938\x094d\x092f\x0020\x0927\x0940\x092e\x0939\x093f\x0020\x0927\x093f\x092f\x094b\x0020\x092f\x094b\x0928\x0903\x0020\x092a\x094d\x0930\x091a\x094b\x0926\x092f\x093e\x0924\x094d\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   148
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   149
_LIT16(KKannada1,"\x0CB6\x0CCD\x0CB0\x0CC0\x0020\x0CAD\x0C97\x0CB5\x0CBE\x0CA8\x0CC1\x0CB5\x0CBE\x0C9A\x0C95\x0CC1\x0CA4\x0CB8\x0CCD\x0CA4\x0CCD\x0CB5\x0CBE\x0020\x0C95\x0CB6\x0CCD\x0CAE\x0CB2\x0CAE\x0CBF\x0CA6\x0C82\x0020\x0CB5\x0CBF\x0CB7\x0CAE\x0020\x0CB8\x0CAE\x0CC1\x0CAA\x0CB8\x0CCD\x0CA5\x0CBF\x0CA4\x0CAE\x0CCD");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   150
_LIT16(KKannada2,"\x0C85\x0CA8\x0CBE\x0CB0\x0CCD\x0CAF\x0C9C\x0CC1\x0CB7\x0CCD\x0CA0\x0CAE\x0CB8\x0CCD\x0CB5\x0CB0\x0CCD\x0C97\x0CCD\x0CAF\x0CAE\x0C95\x0CC0\x0CB0\x0CCD\x0CA4\x0CBF\x0C95\x0CB0\x0CAE\x0CB0\x0CCD\x0C9C\x0CC1\x0CA8");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   151
_LIT16(KKannada3,"\x0C95\x0CCD\x0CB2\x0CC8\x0CAC\x0CCD\x0CAF\x0C82\x0020\x0CAE\x0CBE\x0020\x0CB8\x0CCD\x0CAE\x0020\x0C97\x0CAE\x0C83\x0020\x0CAA\x0CBE\x0CB0\x0CCD\x0CA5\x0020\x0CA8\x0CC8\x0CA4\x0CA4\x0CCD\x0CA4\x0CCD\x0CB5\x0CAF\x0CCD\x0CAF\x0CC1\x0CAA\x0CAA\x0CA7\x0CCD\x0CAF\x0CA4\x0CC7");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   152
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   153
_LIT16(KGujarati1,"\x0AAD\x0ABE\x0AB5\x0ABE\x0AA4\x0ACD\x0AAE\x0A95\x0020\x0AAA\x0AA6\x0ACD\x0AAF\x0ABE\x0AA8\x0AC1\x0AB5\x0ABE\x0AA6\x0020\x0020\x002D\x0020\x0AB6\x0ACD\x0AB0\x0AC0\x0020\x0AAF\x0ACB\x0A97\x0AC7\x0AB6\x0ACD\x0AB5\x0AB0\x0A9C\x0AC0");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   154
_LIT16(KGujarati2,"\x0AB5\x0ABF\x0AA8\x0ACD\x0AA1\x0ACB\x0A9D\x0020\x0AB5\x0ABF\x0AB8\x0ACD\x0A9F\x0ABE\x0020\x002D\x0020\x0A86\x0A82\x0AA4\x0AB0\x0AB0\x0ABE\x0AB7\x0ACD\x0A9F\x0ACD\x0AB0\x0ABF\x0AAF\x0A95\x0AB0\x0AA3\x0020\x0AB5\x0ABF\x0AB6\x0AC7\x0AA8\x0AC0\x0020\x0A9C\x0ABE\x0AA3\x0A95\x0ABE\x0AB0\x0AC0");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   155
_LIT16(KGujarati3,"\x0AAE\x0ABE\x0A88\x0A95\x0ACD\x0AB0\x0ACB\x0AB8\x0ACB\x0AAB\x0ACD\x0A9F\x0AA8\x0ABE\x0020\x0A86\x0020\x0A86\x0A82\x0AA4\x0AB0\x0AB0\x0ABE\x0AB7\x0ACD\x0A9F\x0ACD\x0AB0\x0ABF\x0AAF\x0020\x0AAA\x0ACB\x0AB0\x0ACD\x0A9F\x0AB2\x0020\x0AB5\x0ABF\x0AB6\x0AC7\x0020\x0AB5\x0AA7\x0AC1\x0020\x0A9C\x0ABE\x0AA3\x0ACB\x002E\x0020\x0AB5\x0ABF\x0AB8\x0ACD\x0A9F\x0ABE\x0A8F\x0020\x0AA6\x0AC1\x0AA8\x0ABF\x0AAF\x0ABE\x0AAD\x0AB0\x0AA8\x0AC0\x0020\x0AAD\x0ABE\x0AB7\x0ABE\x0A93\x0020\x0AAE\x0ABE\x0A9F\x0AC7\x0020\x0AA6\x0ACD\x0AB5\x0ABE\x0AB0\x0020\x0A96\x0ACB\x0AB2\x0AC0\x0020\x0AA8\x0ABE\x0A96\x0ACD\x0AAF\x0ABE\x0020\x0A9B\x0AC7");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   156
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   157
_LIT16(KBengali1,"\x099C\x09A8\x0997\x09A3\x09AE\x09A8\x0020\x0985\x09A7\x09BF\x09A8\x09BE\x09AF\x09BC\x0995\x0020\x099C\x09AF\x09BC\x0020\x09B9\x09C7\x0020\x09AD\x09BE\x09B0\x09A4\x0020\x09AD\x09BE\x0997\x09CD\x09AF\x0020\x09AC\x09BF\x09A7\x09BE\x09A4\x09BE\x0020\x09AA\x099E\x09CD\x099C\x09BE\x09AC\x0020\x09B8\x09BF\x09A8\x09CD\x09A7\x09C1\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   158
_LIT16(KBengali2,"\x0997\x09C1\x099C\x09B0\x09BE\x099F\x0020\x09AE\x09B0\x09BE\x09A0\x09BE\x0020\x09A6\x09CD\x09B0\x09BE\x09AC\x09BF\x09A1\x09BC\x0020\x0989\x09A4\x09CD\x0995\x09B2\x0020\x09AC\x0999\x09CD\x0997\x0020\x09AC\x09BF\x09A8\x09CD\x09A7\x09CD\x09AF\x0020\x09B9\x09BF\x09AE\x09BE\x099A\x09B2\x0020\x09AF\x09AE\x09C1\x09A8\x09BE\x0020\x0997\x0999\x09CD\x0997\x09BE\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   159
_LIT16(KBengali3,"\x0989\x099A\x09CD\x099B\x09B2\x0020\x099C\x09B2\x09A7\x09BF\x0020\x09A4\x09B0\x0999\x09CD\x0997\x0020\x09A4\x09AC\x0020\x09B6\x09C1\x09AD\x0020\x09A8\x09BE\x09AE\x09C7\x0020\x099C\x09BE\x0997\x09C7\x0020\x09A4\x09AC\x0020\x09B6\x09C1\x09AD\x0020\x0986\x09B6\x09BF\x09B8\x0020\x09AE\x09BE\x0997\x09C7\x0020\x0997\x09BE\x09B9\x09C7\x0020\x09A4\x09AC\x0020\x099C\x09AF\x09BC\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   160
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   161
_LIT16(KTamil1,"\x0B89\x0BA3\x0BCD\x0BA3\x0020\x0BAE\x0BC1\x0B9F\x0BBF\x0BAF\x0BBE\x0BA4\x0020\x0BB5\x0BCB\x0BA4\x0BA8\x0BC0\x0BB0\x0BCD\x0020\x0BB5\x0BBE\x0BA9\x0BCD\x0BB5\x0BBE\x0BAF\x0BCD\x0BAA\x0BCD\x0BAA\x0B9F\x0BCD\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   162
_LIT16(KTamil2,"\x0B86\x0BA9\x0BCD\x0BB1\x0BB5\x0BC1\x0BAF\x0BBF\x0BB0\x0BCD\x0020\x0B88\x0BB0\x0BBE\x0BB1\x0BC1\x0BAE\x0BCD\x0020\x0B90\x0B99\x0BCD\x0B95\x0BC1\x0BB1\x0BBF\x0BB2\x0BCD\x0020\x0B8F\x0BB4\x0BCD\x0BA8\x0BC6\x0B9F\x0BBF\x0BB2\x0BBE\x0BAE\x0BCD\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   163
_LIT16(KTamil3,"\x0BAE\x0BC1\x0BAE\x0BCD\x0BAE\x0BC8\x0BAF\x0BBF\x0B9F\x0BA4\x0BCD\x0020\x0BA4\x0BC8\x0BAF\x0BCC\x0BB5\x0BC1\x0B99\x0BCD\x0020\x0B95\x0BC1\x0BA9\x0BCD\x0BB1\x0BC1\x0BAE\x0BC1\x0BA9\x0BCD\x0020\x0BA9\x0BCA\x0BB1\x0BCD\x0BB1\x0BC1\x0BA3\x0BCD\x0B9F\x0BC7\x0BB1\x0BCD");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   164
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   165
_LIT16(KTelugu1,"\x0C05\x0C2A\x0C4D\x0C30\x0C15\x0C3E\x0C36\x0C4B\x093D\x0C2A\x0C4D\x0C30\x0C35\x0C43\x0C24\x0C4D\x0C24\x0C3F\x0C36\x0C4D\x0C1A\x0020\x0C2A\x0C4D\x0C30\x0C2E\x0C3E\x0C26\x0C4B\x0020\x0C0A\x0C30\x0C4D\x0C27\x0C4D\x0C35\x0C02");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   166
_LIT16(KTelugu2,"\x0C15\x0C48\x0C30\x0C4D\x0C32\x0C3F\x0C19\x0C4D\x0C17\x0C48\x0C38\x0C4D\x0C24\x0C4D\x0C30\x0C40\x0C28\x0C4D\x0C17\x0C41\x0C23\x0C3E\x0C28\x0C47\x0C24\x0C3E\x0C28\x0C24\x0C40\x0C24\x0C4B\x0020\x0C17\x0C41\x0C23\x0C48\x0C30\x0C4D\x0C2F");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   167
_LIT16(KTelugu3,"\x0020\x0C2C\x0C4D\x0C30\x0C39\x0C4D\x0C2E\x0C23\x0C4B\x0020\x0C39\x0C3F\x0020\x0C2A\x0C4D\x0C30\x0C24\x0C3F\x0C37\x0C4D\x0C20\x0C3E\x0C39\x0C2E\x0C2E\x0C43\x0C24\x0C38\x0C4D\x0C2F\x0C3E\x0C35\x0C4D\x0C2F\x0C2F\x0C38\x0C4D\x0C2F");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   168
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   169
_LIT16(KGurmukhi1,"\x0a28\x0a2e\x0a38\x0a15\x0a3e\x0a30\x0a26\x0a\x3e\x0a28\x0a3f\x0a1a\x0a3f\x0a70\x0a26\x0a41\x0020\x0a28\x0a3f\x0a17\x0a4d\x0a30\x0a39\x0a3f\x0a2a\x0a70\x0a16\x0a40\x0a05\x0a32\x0a4b\x0a2a\x0a70\x0a16\x0a40\x0a05\x0a32\x0a4b\x0a2a\x0a30\x0a09\x0a2a\x0a15\x0a3e\x0a30\x0a3f\x0a06\x0a2a\x0a4d\x0a30\x0a24\x0a3e\x0a2a\x0a3f");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   170
_LIT16(KGurmukhi2,"\x0a2a\x0a4d\x0a30\x0a24\x0a3f\x0a2a\x0a3e\x0a32\x0a47\x0020\x0a2a\x0a4d\x0a30\x0a2c\x0a32\x0a1a\x0a70\x0a21\x0a2b\x0a3f\x0a30\x0a70\x0a28\x0a4d\x0a39\x0a4d\x0a39\x0a3f\x0020\x0a2b\x0a41\x0a32\x0a35\x0a24\x0a2c\x0a4d\x0a30\x0a3f\x0a25\x0a3e\x0a2c\x0a4d\x0a30\x0a39\x0a2e\x0a3e\x0a26\x0a3f\x0020\x0a2c\x0a3e\x0a1b\x0a30\x0a2c\x0a3f\x0a38\x0a4d\x0a35\x0a70\x0a2d\x0a30\x0a2d\x0a4d\x0a30\x0a2e\x0a39\x0a41\x0a2d\x0a2f\x0a4b\x0a2d\x0a17\x0a35\x0a70\x0a24");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   171
_LIT16(KGurmukhi3,"\x0a2e\x0a3e\x0a23\x0a40\x0a06\x0a2e\x0a4b\x0a24\x0a38\x0a30\x0a40\x0a06\x0a2f\x0a3e\x0a28\x0a5c\x0a40\x0a0f\x0a2f\x0a15\x0a40\x0a28\x0a3e\x0a30\x0a35\x0a3f\x0a70\x0a26\x0a41\x0020\x0a30\x0a2a\x0a38\x0a40\x0a32\x0a17\x0a3e\x0a35\x0a23\x0a3f\x0a06\x0a32\x0a4b\x0a5c\x0a40\x0a05\x0a39\x0a3f\x0a35\x0a30\x0a28\x0a41\x0a35\x0a40\x0a06\x0a39\x0a3f\x0a06\x0a5c\x0a5c\x0a15\x0a3f\x0a28\x0a2e\x0a38\x0a15\x0a3e\x0a30\x0a26\x0a3e\x0a28\x0a3f\x0a1a\x0a3f\x0a70\x0a26\x0a41\x0020");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   172
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   173
_LIT16(KMalayalam1,"\xd09\xd28\xd4d\xd28\xd2f\xd3f\xd1a\xd4d\xd1a\xd4d\x200c\xd26\xd47\xd36\xd40\xd2f\xd07\xd1f\xd24\xd41\xd2a\xd15\xd4d\xd37\xd1f\xd4d\xd30\xd47\xd21\xd4d\x200c\xd2f\xd42\xd23\xd3f\xd2f\xd28\xd4d\x200d\xd05\xd2d\xd3f\xd28\xd28\xd4d");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   174
_LIT16(KMalayalam2,"\xd2a\xd23\xd3f\xd2e\xd41\xd1f\xd15\xd4d\xd15\xd4d\x200c\xd2a\xd42\xd30\xd4d\x200d");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   175
_LIT16(KMalayalam3,"\xd23\xd02\xd24\xd40\xd35\xd23\xd4d\xd1f\xd3f\xd15\xd33\xd4d\x200d\xd31\xd26\xd4d\xd26\xd3e\xd15\xd4d\xd15\xd3f\xd15\xd4b\xd34\xd3f\xd15\xd4d\xd15\xd4b\xd1f\xd4d\x200c\xd35\xd3f\xd35\xd3f\xd27\xd06\xd35\xd36\xd4d\xd2f\xd19\xd4d\xd19\xd33\xd4d\x200d");
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   176
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   177
CShapeTestStep::CShapeTestStep(TInt aTestDataIndex, TInt aNumberOfTestDataFiles, 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   178
        TUint32 aScript, TUint32 aLang, const TDesC& aScriptName, const TDesC& aTestID)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   179
    : iTestDataIndex(aTestDataIndex), iNumberOfTestDataFiles(aNumberOfTestDataFiles), 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   180
      iScript(aScript), iLang(aLang), iScriptName(aScriptName), iTestID(aTestID)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   181
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   182
    SetTestStepName(aScriptName);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   183
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   184
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   185
// Convenience methods
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   186
//**************************************************************************************
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   187
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   188
/* 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   189
Used for cleanup of RImplInfoArray implementationArray below 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   190
This method is stolen from FbsTop.cpp
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   191
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   192
LOCAL_C void ResetAndDestroyRImplInfoPtrArray(TAny* aPtr)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   193
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   194
    RImplInfoPtrArray* array = reinterpret_cast <RImplInfoPtrArray*> (aPtr);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   195
    array->ResetAndDestroy();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   196
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   197
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   198
/*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   199
Load all ECOM implemented rasterizer DLLs. 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   200
This method is stolen from CFbTop::LoadOpenFontLibraries()
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   201
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   202
LOCAL_C void LoadOpenFontLibraries(CFontStore* aFontStore)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   203
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   204
    RImplInfoPtrArray implementationArray;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   205
    TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   206
    CleanupStack::PushL(cleanup);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   207
    TInt error;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   208
    TInt ecomerror;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   209
    TInt ecomnotready;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   210
    TUid uid = {KUidOpenFontRasterizerPlunginInterface};
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   211
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   212
    // Making sure that no race situation arises
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   213
    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   214
    // after the third try, then it just carries on quietly and fails... 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   215
    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   216
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   217
        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   218
        if (!ecomerror)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   219
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   220
            break;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   221
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   222
        else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   223
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   224
            ecomerror = 0;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   225
            User::After(0);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   226
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   227
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   228
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   229
    const TInt availCount = implementationArray.Count();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   230
    for (TInt count=0;count<availCount;++count)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   231
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   232
        const CImplementationInformation* info = implementationArray[count];
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   233
        TUid rasterizerUid = info->ImplementationUid();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   234
        // Create a rasterizer
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   235
        COpenFontRasterizer* rasterizer=0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   236
        TRAP(error,rasterizer = COpenFontRasterizer::NewL(rasterizerUid));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   237
        if (!error)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   238
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   239
            // Install it in the font store.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   240
            TRAP(error,aFontStore->InstallRasterizerL(rasterizer));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   241
            if (error)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   242
                delete rasterizer;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   243
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   244
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   245
    CleanupStack::PopAndDestroy(&implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   246
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   247
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   248
void CShapeTestStep::SetupTestDataL()    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   249
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   250
    //set up the testData variables
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   251
    CDesC16ArrayFlat* testDataFilenames = new CDesC16ArrayFlat(2);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   252
    CleanupStack::PushL(testDataFilenames);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   253
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   254
    for (TInt i = 0; i != sizeof(KTestFilenames)/sizeof(KTestFilenames[0]); ++i)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   255
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   256
        TPtrC16 d(KTestFilenames[i]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   257
        testDataFilenames->AppendL(d);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   258
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   259
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   260
    for (TInt i = 0; i<testDataFilenames->Count(); i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   261
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   262
        CTestData* temp = new(ELeave) CTestData;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   263
        temp->Internalize((*testDataFilenames)[i]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   264
        iTestDataArr.AppendL(temp);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   265
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   266
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   267
    CleanupStack::PopAndDestroy(1);     //testDataFilenames
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   268
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   269
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   270
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   271
// test methods
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   272
//**************************************************************************************
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   273
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   274
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   275
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   276
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1479
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   277
@SYMTestCaseDesc            Simple test of the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   278
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   279
@SYMTestActions             Simple test to shape some text using the shaper, and test that the output is as expected. Does not perform any OOM testing.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   280
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   281
@SYMPREQ                    PREQ18
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   282
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   283
void CShapeTestStep::doShapeText(CBitmapFont* font, CTestData& aTestData, TBool aCheckOutput)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   284
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   285
    INFO_PRINTF1(_L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1479 "));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   286
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   287
    //set up the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   288
    CShaper* theShaper = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   289
    CShaperFactory* shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   290
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   291
    RImplInfoPtrArray implementationArray;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   292
    TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   293
    CleanupStack::PushL(cleanup);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   294
    TInt ecomerror;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   295
    TInt ecomnotready;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   296
    TUid uid = {KUidShaperFactoryPlunginInterface};
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   297
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   298
    // Making sure that no race situation arises between FBserv and Ecom
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   299
    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   300
    // after the third try, then it just carries on quietly and fails... 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   301
    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   302
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   303
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   304
        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   305
        if (!ecomerror)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   306
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   307
            break;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   308
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   309
        else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   310
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   311
            ecomerror = 0;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   312
            User::After(0);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   313
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   314
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   315
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   316
    const TInt availCount = implementationArray.Count();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   317
    for (TInt count=0;count<availCount;++count)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   318
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   319
        const CImplementationInformation* info = implementationArray[count];
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   320
        TUid shaperFactoryUid = info->ImplementationUid();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   321
        // Create a shaper factory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   322
        TInt error;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   323
        TRAP(error,shaperFactory = CShaperFactory::NewL(shaperFactoryUid));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   324
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   325
        // Create a shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   326
        TRAP(error, theShaper = shaperFactory->NewShaperL(font, iScript, iLang, &User::Heap()));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   327
        if (error != KErrNone)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   328
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   329
            delete shaperFactory;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   330
            shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   331
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   332
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   333
        break; // have got valid shaper here
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   334
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   335
    CleanupStack::PopAndDestroy(&implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   336
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   337
    CleanupStack::PushL(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   338
    CleanupStack::PushL(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   339
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   340
    // create the data to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   341
    // this uses hindiTestData, defined in testData.h
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   342
    CShaper::TInput input;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   343
    input.iText = aTestData.iTextInput;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   344
    input.iStart = aTestData.iStart;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   345
    input.iEnd = aTestData.iEnd;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   346
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   347
    TInt textLength = input.iText->Length();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   348
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   349
    //create shape header, and shape the text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   350
    TShapeHeader* output = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   351
    TInt err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   352
    test(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   353
    CleanupStack::PopAndDestroy(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   354
    CleanupStack::PopAndDestroy(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   355
    REComSession::FinalClose();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   356
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   357
    CleanupStack::PushL(output);    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   358
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   359
    if (aCheckOutput)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   360
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   361
        // check the contents of output
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   362
        TEST(output->iGlyphCount == aTestData.iGlyphCount);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   363
        TEST(output->iCharacterCount == aTestData.iCharacterCount);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   364
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   365
        // First iGlyphCount * 4 bytes of the output buffer contain the glyph codes as 2byte values
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   366
        // Compare against expected.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   367
        TInt i=0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   368
        TUint32* shapePtr32 = (reinterpret_cast<TUint32*>(&output->iBuffer[0]));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   369
        for (i=0; i < output->iGlyphCount; i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   370
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   371
            TEST(*shapePtr32 == (*aTestData.iGlyphs)[i]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   372
            shapePtr32++;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   373
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   374
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   375
        // next iGlyphCount * 4 bytes contain the postions in which the glyphs should be drawn, x and y axes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   376
        // Compare against expected
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   377
        TUint16* shapePtr16 = (reinterpret_cast<TUint16*>(shapePtr32));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   378
        for (i=0; i < output->iGlyphCount*2; i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   379
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   380
            //check X or Y position
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   381
            TEST(*shapePtr16 == (*aTestData.iPositions)[i]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   382
            shapePtr16++;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   383
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   384
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   385
        // check advance
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   386
        TEST(*shapePtr16 == aTestData.iAdvance.iX);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   387
        shapePtr16++;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   388
        TEST(*shapePtr16 == aTestData.iAdvance.iY);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   389
        shapePtr16++;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   390
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   391
        // next iGlyphCount * 2 bytes contain the coresponding indices of this character in the original string.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   392
        // Compare against expected
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   393
        for (i=0; i < output->iGlyphCount; i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   394
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   395
            TEST(*shapePtr16 == (*aTestData.iIndices)[i]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   396
            shapePtr16++;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   397
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   398
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   399
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   400
    CleanupStack::PopAndDestroy(output);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   401
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   402
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   403
void CShapeTestStep::shapeText(CBitmapFont* font, CTestData& aTestData, TBool aCheckOutput)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   404
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   405
    __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   406
    TInt heapSizeAtStart = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   407
    User::Heap().AllocSize(heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   408
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   409
    INFO_PRINTF2(_L("Heap memory utilized is now %d\n"), heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   410
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   411
    doShapeText(font, aTestData, aCheckOutput);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   412
    // check the heap used by the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   413
    RHeap* heap = &User::Heap();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   414
    heap->Check();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   415
    TInt heapSizeAtEnd = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   416
    TInt heapCellsUsed = heap->AllocSize(heapSizeAtEnd);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   417
    if (heapCellsUsed)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   418
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   419
        INFO_PRINTF2(_L("This test leaked %d\n"), heapSizeAtEnd - heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   420
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   421
    __UHEAP_MARKEND;    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   422
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   423
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   424
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   425
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   426
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1480
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   427
@SYMTestCaseDesc            Simple OOM test of shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   428
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   429
@SYMTestActions             OOM testing for the shaper. Also ensures no leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   430
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   431
@SYMPREQ                    PREQ18
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   432
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   433
void CShapeTestStep::oomShapeText(CBitmapFont* font, CTestData& aTestData)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   434
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   435
    __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   436
    INFO_PRINTF1(_L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1480 "));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   437
    doOomShapeText(font,aTestData);     
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   438
    __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   439
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   440
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   441
void CShapeTestStep::doOomShapeText(CBitmapFont* font, CTestData& aTestData)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   442
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   443
    TInt count = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   444
    TInt err = KErrNone;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   445
    TInt heapCellsUsed, heapSizeAtEnd, heapSizeAtStart;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   446
    CShaper* theShaper = NULL;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   447
    CShaperFactory* shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   448
    TShapeHeader* output = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   449
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   450
    User::Heap().AllocSize(heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   451
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   452
    // create the data to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   453
    CShaper::TInput input;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   454
    input.iText = aTestData.iTextInput;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   455
    input.iStart = aTestData.iStart;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   456
    input.iEnd = aTestData.iEnd;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   457
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   458
    //set up shaper, shape, delete shaper in oom loop
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   459
    RImplInfoPtrArray implementationArray;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   460
    TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   461
    CleanupStack::PushL(cleanup);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   462
    TInt error;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   463
    TInt ecomerror;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   464
    TInt ecomnotready;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   465
    TUid uid = {KUidShaperFactoryPlunginInterface};
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   466
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   467
    // Making sure that no race situation arises between FBserv and Ecom
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   468
    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   469
    // after the third try, then it just carries on quietly and fails... 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   470
    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   471
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   472
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   473
        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   474
        if (!ecomerror)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   475
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   476
            break;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   477
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   478
        else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   479
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   480
            ecomerror = 0;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   481
            User::After(0);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   482
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   483
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   484
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   485
    const TInt availCount = implementationArray.Count();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   486
    for (TInt count=0;count<availCount;++count)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   487
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   488
        const CImplementationInformation* info = implementationArray[count];
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   489
        TUid shaperFactoryUid = info->ImplementationUid();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   490
        // Create a shaper factory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   491
        //CShaperFactory* shaperFactory = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   492
        TRAP(error,shaperFactory = CShaperFactory::NewL(shaperFactoryUid));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   493
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   494
        //CleanupStack::PushL(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   495
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   496
    CleanupStack::PopAndDestroy(&implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   497
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   498
    do
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   499
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   500
        count += 1;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   501
        __UHEAP_FAILNEXT(count);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   502
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   503
        // Create a shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   504
        TRAPD(err, theShaper = shaperFactory->NewShaperL(font, iScript, iLang, &User::Heap()));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   505
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   506
        //shape text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   507
        if (theShaper)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   508
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   509
            err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   510
            TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   511
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   512
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   513
        //free output; to be done by the caller of ShapeText
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   514
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   515
        output = NULL;      
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   516
            
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   517
        //does not check the output for now
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   518
        delete theShaper;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   519
        delete shaperFactory;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   520
        REComSession::FinalClose();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   521
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   522
        }while ((err==KErrNoMemory)||(err==KErrGeneral));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   523
    __UHEAP_RESET;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   524
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   525
    // check the heap used by the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   526
    RHeap* heap = &User::Heap();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   527
    heap->Check();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   528
    heapCellsUsed = heap->AllocSize(heapSizeAtEnd);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   529
    if (heapCellsUsed)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   530
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   531
        INFO_PRINTF2(_L("This test leaked %d.\n"), heapSizeAtEnd - heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   532
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   533
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   534
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   535
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   536
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   537
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1481
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   538
@SYMTestCaseDesc            Tests that the shaper can handle multiple calls to ShapeText
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   539
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   540
@SYMTestActions             Makes multiple calls to CShaper::ShapeText with small amounts of text to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   541
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   542
@SYMPREQ                    PREQ18
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   543
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   544
void CShapeTestStep::repeatShapeText(CBitmapFont* aFont, CTestData& aTestData)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   545
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   546
    __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   547
    INFO_PRINTF1(_L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-1481 "));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   548
    doRepeatShapeText(aFont, aTestData);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   549
    __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   550
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   551
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   552
void CShapeTestStep::doRepeatShapeText(CBitmapFont* font, CTestData& aTestData)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   553
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   554
    //set up the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   555
    CShaper* theShaper = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   556
    CShaperFactory* shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   557
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   558
    RImplInfoPtrArray implementationArray;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   559
    TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   560
    CleanupStack::PushL(cleanup);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   561
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   562
    TInt ecomerror;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   563
    TInt ecomnotready;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   564
    TUid uid = {KUidShaperFactoryPlunginInterface};
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   565
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   566
    // Making sure that no race situation arises between FBserv and Ecom
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   567
    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   568
    // after the third try, then it just carries on quietly and fails... 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   569
    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   570
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   571
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   572
        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   573
        if (!ecomerror)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   574
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   575
            break;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   576
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   577
        else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   578
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   579
            ecomerror = 0;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   580
            User::After(0);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   581
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   582
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   583
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   584
    const TInt availCount = implementationArray.Count();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   585
    for (TInt count=0;count<availCount;++count)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   586
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   587
        const CImplementationInformation* info = implementationArray[count];
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   588
        TUid shaperFactoryUid = info->ImplementationUid();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   589
        // Create a shaper factory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   590
        TInt error;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   591
        TRAP(error,shaperFactory = CShaperFactory::NewL(shaperFactoryUid));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   592
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   593
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   594
        // Create a shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   595
        TRAP(error, theShaper = shaperFactory->NewShaperL(font, iScript, iLang, &User::Heap()));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   596
        if (error != KErrNone)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   597
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   598
            delete shaperFactory; 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   599
            shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   600
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   601
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   602
        break; // have got valid shaper here
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   603
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   604
    CleanupStack::PopAndDestroy(&implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   605
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   606
    CleanupStack::PushL(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   607
    CleanupStack::PushL(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   608
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   609
    // create the data to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   610
    // this uses CTestData, defined in testData.h
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   611
    CShaper::TInput input;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   612
    input.iText = aTestData.iTextInput;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   613
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   614
    //create shape header, and shape the text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   615
    TShapeHeader* output = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   616
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   617
    for(TInt i=aTestData.iStart; i<aTestData.iEnd -10; i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   618
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   619
        //indicate which 10 chars to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   620
        input.iStart = i;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   621
        input.iEnd = i + 10;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   622
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   623
        //shape text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   624
        TInt err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   625
        test(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   626
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   627
        //free output; to be done by the caller of ShapeText
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   628
        delete(output);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   629
        output = NULL;      
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   630
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   631
        //does not check the output for now
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   632
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   633
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   634
    //cleanup the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   635
    CleanupStack::PopAndDestroy(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   636
    CleanupStack::PopAndDestroy(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   637
    REComSession::FinalClose();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   638
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   639
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   640
/*
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   641
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   642
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3401
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   643
@SYMTestCaseDesc            Tests that the shaper can handle calls to shapeText with multiple font sizes
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   644
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   645
@SYMTestActions             Makes multiple calls to CShaper::ShapeText with small amounts of text to be shaped and incremental font sizes
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   646
@SYMTestExpectedResults     The test must not show a memory leak at any font size
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   647
@SYMPREQ                    DEF103042: TC_SHAP_shapeText test failing with alloc failure
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   648
**/ 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   649
void CShapeTestStep::doRepeatShapeUsingVariousFontSizesTest(CFontStore* aFontStore, const TDesC aTypefaceName, const TDesC &aText1, 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   650
                                                const TDesC &aText2, const TDesC &aText3)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   651
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   652
    INFO_PRINTF1(_L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3401 "));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   653
    TInt heapCellsUsed, heapSizeAtEnd, heapSizeAtStart;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   654
    User::Heap().AllocSize(heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   655
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   656
    // Set up shaper factory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   657
    // Set up the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   658
    CShaper* theShaper = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   659
    CShaperFactory* shaperFactory = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   660
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   661
    RImplInfoPtrArray implementationArray;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   662
    TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   663
    CleanupStack::PushL(cleanup);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   664
    TInt err;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   665
    TInt ecomerror;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   666
    TInt ecomnotready;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   667
    TUid uid = {KUidShaperFactoryPlunginInterface};
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   668
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   669
    // Making sure that no race situation arises between FBserv and Ecom
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   670
    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   671
    // after the third try, then it just carries on quietly and fails... 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   672
    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   673
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   674
        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   675
        if (!ecomerror)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   676
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   677
            break;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   678
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   679
        else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   680
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   681
            ecomerror = 0;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   682
            User::After(0);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   683
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   684
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   685
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   686
    const TInt availCount = implementationArray.Count();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   687
    for (TInt count=0;count<availCount;++count)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   688
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   689
        const CImplementationInformation* info = implementationArray[count];
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   690
        TUid shaperFactoryUid = info->ImplementationUid();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   691
        // Create a shaper factory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   692
        TRAPD(error,shaperFactory = CShaperFactory::NewL(shaperFactoryUid));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   693
        test(error == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   694
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   695
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   696
    CleanupStack::PopAndDestroy(&implementationArray);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   697
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   698
    CleanupStack::PushL(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   699
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   700
    // create the data to be shaped
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   701
    // this explicitely uses hindiTestData, defined in testData.h
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   702
    CShaper::TInput input;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   703
    input.iStart = 0;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   704
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   705
    //create shape header, and shape the text
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   706
    TShapeHeader* output = NULL;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   707
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   708
    CBitmapFont* font;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   709
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   710
    // Test shaping for the Hindi texts for various font sizes
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   711
    INFO_PRINTF1(_L("Generating a random initial font size between 0 and 1 for this test\n"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   712
    TInt random = (Math::Random()>>11)%2;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   713
    INFO_PRINTF2(_L("Random initial font size is %d. Testing upto size 300 with increments of 2\n"), random);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   714
    for (TInt i = random; i <= 300; i+=2)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   715
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   716
        INFO_PRINTF2(_L("Font Size: %d\n"), i);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   717
        if (i == 294 || i == 295)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   718
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   719
        INFO_PRINTF2(_L("Font Size: %d\n"), i);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   720
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   721
        TFontSpec fontSpec(aTypefaceName,i*20); 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   722
        aFontStore->GetNearestFontInTwips((CFont*&)font, fontSpec); 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   723
        CleanupStack::PushL(font);  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   724
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   725
        TRAP(err, theShaper = shaperFactory->NewShaperL(font, iScript, iLang, &User::Heap()));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   726
        test(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   727
        CleanupStack::PushL(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   728
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   729
        // Call the shaper twice because the first time the rasterizer uses memory to cache the tables
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   730
        // We can then check the heap in the second call
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   731
        input.iText = &aText1;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   732
        input.iEnd = aText1.Length();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   733
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   734
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   735
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   736
        __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   737
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   738
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   739
        __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   740
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   741
                
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   742
        input.iText = &aText2;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   743
        input.iEnd = aText2.Length();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   744
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   745
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   746
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   747
        __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   748
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   749
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   750
        __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   751
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   752
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   753
        input.iText = &aText3;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   754
        input.iEnd = aText3.Length();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   755
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   756
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   757
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   758
//        __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   759
        err = theShaper->ShapeText(output, input, &User::Heap());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   760
        delete output;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   761
//        __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   762
        TEST(err == KErrNone);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   763
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   764
        CleanupStack::PopAndDestroy(theShaper);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   765
        CleanupStack::Pop(font);   
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   766
        aFontStore->ReleaseFont(font);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   767
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   768
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   769
    CleanupStack::PopAndDestroy(shaperFactory);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   770
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   771
    //close the ecom session opened by LoadOpenFontLibraries()
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   772
    REComSession::FinalClose();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   773
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   774
    // check the heap used by the shaper
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   775
    RHeap* heap = &User::Heap();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   776
    heap->Check();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   777
    heapCellsUsed = heap->AllocSize(heapSizeAtEnd);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   778
    if (heapCellsUsed)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   779
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   780
        INFO_PRINTF2(_L("This test utilised %d bytes\n"), heapSizeAtEnd - heapSizeAtStart);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   781
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   782
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   783
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   784
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   785
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   786
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3403
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   787
@SYMTestCaseDesc            Tests the shaper using Devanagari Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   788
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   789
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   790
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   791
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   792
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   793
@SYMPREQ                    PREQ19
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   794
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   795
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   796
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   797
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3383-0001
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   798
@SYMTestCaseDesc            Tests the shaper using Kannada Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   799
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   800
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   801
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   802
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   803
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   804
@SYMPREQ                    PREQ19
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   805
*/  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   806
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   807
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   808
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3383-0002
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   809
@SYMTestCaseDesc            Tests the shaper using Gujarati Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   810
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   811
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   812
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   813
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   814
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   815
@SYMPREQ                    PREQ19
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   816
*/  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   817
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   818
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   819
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4001
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   820
@SYMTestCaseDesc            Tests the shaper using Bengali Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   821
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   822
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   823
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   824
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   825
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   826
@SYMPREQ                    PREQ1766
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   827
@SYMREQ                     REQ8741
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   828
*/  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   829
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   830
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   831
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4002
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   832
@SYMTestCaseDesc            Tests the shaper using Tamil Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   833
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   834
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   835
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   836
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   837
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   838
@SYMPREQ                    PREQ1766
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   839
@SYMREQ                     REQ8742
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   840
*/  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   841
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   842
@file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   843
@SYMTestCaseID              GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4003
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   844
@SYMTestCaseDesc            Tests the shaper using Telugu Unicode. Test include OOM tests (oomShapeText), repeated 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   845
                            calls to the shaper (repeatShapeText), simple shaping tests (shapeText), and repeatedly 
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   846
                            calling the shaper with incremental font sizes.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   847
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   848
@SYMTestActions             Performs various tests of the the shaper, calling CShaper::ShapeText in various use cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   849
@SYMTestExpectedResults     The test must exit cleanly and there should not be any User:84 errors, KERN-EXEC's or any memory leaks.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   850
@SYMPREQ                    PREQ1766
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   851
@SYMREQ                     REQ8743
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   852
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   853
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   854
@SYMTestCaseID              GRAPHICS-TI18N-ICULAYOUTENGINE-CT-4007
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   855
@SYMTestCaseDesc            Case to do Gurmukhi component test
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   856
                            It covers all Iculayout components cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   857
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   858
@SYMTestActions             Iterate Gurmukhi test data, each test data corresponds with a case
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   859
@SYMTestExpectedResults     No error returned
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   860
@SYMPREQ                    1922: Gurmukhi support
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   861
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   862
/**
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   863
@SYMTestCaseID              GRAPHICS-TI18N-ICULAYOUTENGINE-CT-4008
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   864
@SYMTestCaseDesc            Case to do Malayalam component test
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   865
                            It covers all Iculayout components cases
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   866
@SYMTestPriority            High
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   867
@SYMTestActions             Iterate Malayalam test data, each test data corresponds with a case
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   868
@SYMTestExpectedResults     No error returned
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   869
@SYMPREQ                    1922: Malayalam support
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   870
*/
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   871
void CShapeTestStep::ShapeTestL()
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   872
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   873
    INFO_PRINTF1(iTestID);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   874
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   875
    CBitmapFont* font;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   876
    TInt err=KErrNone;  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   877
    //the font store can use the normal user heap
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   878
    CFontStore* fontStore = CFontStore::NewL(&User::Heap());    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   879
    fontStore->iKPixelWidthInTwips = 11860;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   880
    fontStore->iKPixelHeightInTwips = 11860;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   881
    CleanupStack::PushL(fontStore);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   882
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   883
    //load all ecom implemented rasterizer dlls. installs the rasterizer.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   884
    LoadOpenFontLibraries(fontStore);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   885
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   886
    //add the required font file
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   887
    TRAP(err,fontStore->AddFileL(iTestDataArr[iTestDataIndex]->iFilename));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   888
    test(err == KErrNone);        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   889
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   890
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   891
    //run all tests for TNR_Dev_OT test, which is at position 0 in the aTestDataArr
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   892
    TFontSpec fontSpec(iTestDataArr[iTestDataIndex]->iTypeFaceName,12);    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   893
    fontStore->GetNearestFontToDesignHeightInPixels((CFont*&)font, fontSpec);   
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   894
    CleanupStack::PushL(font);  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   895
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   896
    INFO_PRINTF2(_L("Repeat %S text shaping test\n"), &iScriptName);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   897
    doRepeatShapeText(font, *iTestDataArr[iTestDataIndex]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   898
    repeatShapeText(font, *iTestDataArr[iTestDataIndex]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   899
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   900
    INFO_PRINTF2(_L("OOM %S text shaping test\n"), &iScriptName);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   901
#if defined(_DEBUG)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   902
    doOomShapeText(font, *iTestDataArr[iTestDataIndex]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   903
    oomShapeText(font, *iTestDataArr[iTestDataIndex]);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   904
#else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   905
    INFO_PRINTF1(_L("This test is ignored for release version\n"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   906
#endif
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   907
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   908
    INFO_PRINTF2(_L("Run simple %S shape test\n"), &iScriptName);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   909
    doShapeText(font, *iTestDataArr[iTestDataIndex], ETrue);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   910
    shapeText(font, *iTestDataArr[iTestDataIndex], ETrue);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   911
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   912
    CleanupStack::Pop(font);   
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   913
    fontStore->ReleaseFont(font);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   914
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   915
    //for any other test data we have, run the simple shape text test only
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   916
    for(TInt i=iTestDataIndex+1; i<iTestDataIndex+iNumberOfTestDataFiles; i++)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   917
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   918
        TFontSpec fontSpec(iTestDataArr[i]->iTypeFaceName,12);  
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   919
        fontStore->GetNearestFontToDesignHeightInPixels((CFont*&)font, fontSpec);   
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   920
        CleanupStack::PushL(font);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   921
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   922
        // First run does not check heap... this ensures that any memory
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   923
        // stashed by the rasterizer does not show up as a leak.
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   924
        doShapeText(font, *iTestDataArr[i], ETrue);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   925
        shapeText(font, *iTestDataArr[i], ETrue);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   926
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   927
        CleanupStack::Pop(font);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   928
        fontStore->ReleaseFont(font);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   929
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   930
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   931
    // Now do the last test, the shaping test using various font sizes
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   932
    INFO_PRINTF2(_L("Repeat %S shaping test using font sizes 20 to 6000\n"), &iScriptName);    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   933
    if(iScriptName == KTestStep_Hindi)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   934
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   935
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KHindi1, KHindi2, KHindi3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   936
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   937
    else if(iScriptName == KTestStep_Kannada)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   938
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   939
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KKannada1, KKannada2, KKannada3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   940
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   941
    else if(iScriptName == KTestStep_Gujarati)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   942
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   943
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KGujarati1, KGujarati2, KGujarati3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   944
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   945
    else if(iScriptName == KTestStep_Bengali)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   946
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   947
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KBengali1, KBengali2, KBengali3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   948
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   949
    else if(iScriptName == KTestStep_Tamil)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   950
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   951
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KTamil1, KTamil2, KTamil3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   952
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   953
    else if(iScriptName == KTestStep_Telugu)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   954
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   955
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KTelugu1, KTelugu2, KTelugu3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   956
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   957
    else if(iScriptName == KTestStep_Gurmukhi)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   958
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   959
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KGurmukhi1, KGurmukhi2, KGurmukhi3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   960
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   961
    else if(iScriptName == KTestStep_Malayalam)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   962
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   963
        doRepeatShapeUsingVariousFontSizesTest(fontStore, iTestDataArr[0]->iTypeFaceName, KMalayalam1, KMalayalam2, KMalayalam3);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   964
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   965
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   966
    CleanupStack::PopAndDestroy(fontStore);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   967
    REComSession::FinalClose(); //close the ecom session opened by LoadOpenFontLibraries()
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   968
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   969
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   970
TVerdict CShapeTestStep::doTestStepL()
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   971
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   972
    SetTestStepResult(EFail);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   973
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   974
    __UHEAP_MARK;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   975
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   976
    TRAPD(error0, SetupTestDataL());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   977
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   978
    if(error0 == KErrNone)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   979
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   980
        TRAPD(error1, ShapeTestL());
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   981
        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   982
        if(error1 == KErrNone)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   983
            {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   984
            SetTestStepResult(EPass);
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   985
            }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   986
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   987
    else
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   988
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   989
        ERR_PRINTF1(_L("Failed to setup test data."));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   990
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   991
    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   992
    iTestDataArr.ResetAndDestroy(); // close the iTestDataArr opened by SetupTestData()        
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   993
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   994
    __UHEAP_MARKEND;
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   995
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   996
    return TestStepResult();
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   997
    }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   998
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
   999
CTestStep * CShapeTestStep::CreateShapeTestStep(const TDesC& aStepName)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1000
    {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1001
    if(aStepName == KTestStep_Hindi)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1002
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1003
        return new CShapeTestStep(KHindiTestDataIndex, KNumberOfHindiTestDataFiles, KDevanagariScriptCode, KHindiLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1004
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3403 "));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1005
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1006
    else if(aStepName == KTestStep_Kannada)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1007
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1008
        return new CShapeTestStep(KKannadaTestDataIndex, KNumberOfKannadaTestDataFiles, KKannadaScriptCode, KKannadaLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1009
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3383-0001"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1010
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1011
    else if(aStepName == KTestStep_Gujarati)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1012
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1013
        return new CShapeTestStep(KGujaratiTestDataIndex, KNumberOfGujaratiTestDataFiles, KGujaratiScriptCode, KGujaratiLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1014
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-3383-0002"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1015
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1016
    else if(aStepName == KTestStep_Bengali)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1017
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1018
        return new CShapeTestStep(KBengaliTestDataIndex, KNumberOfBengaliTestDataFiles, KBengaliScriptCode, KBengaliLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1019
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4001"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1020
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1021
    else if(aStepName == KTestStep_Tamil)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1022
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1023
        return new CShapeTestStep(KTamilTestDataIndex, KNumberOfTamilTestDataFiles, KTamilScriptCode, KTamilLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1024
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4002"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1025
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1026
    else if(aStepName == KTestStep_Telugu)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1027
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1028
        return new CShapeTestStep(KTeluguTestDataIndex, KNumberOfTeluguTestDataFiles, KTeluguScriptCode, KTeluguLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1029
                aStepName, _L("GRAPHICS-SYSLIB-ICULAYOUTENGINE-CT-4003"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1030
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1031
    else if(aStepName == KTestStep_Gurmukhi)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1032
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1033
        return new CShapeTestStep(KGurmukhiTestDataIndex, KNumberOfGurmukhiTestDataFiles, KGurmukhiScriptCode, KGurmukhiLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1034
                aStepName, _L("GRAPHICS-TI18N-ICULAYOUTENGINE-CT-4007"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1035
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1036
    else if(aStepName == KTestStep_Malayalam)
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1037
        {
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1038
        return new CShapeTestStep(KMalayalamTestDataIndex, KNumberOfMalayalamTestDataFiles, KMalayalamScriptCode, KMalayalamLanguageCode,
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1039
                aStepName, _L("GRAPHICS-TI18N-ICULAYOUTENGINE-CT-4007"));
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1040
        }
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1041
    return NULL;    
11e2bb0d14ba 201028_05
hgs
parents:
diff changeset
  1042
    }