|
1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // This is a unit test module which defines the test code that |
|
15 // exercise CFont::GetCharacterPosition() functionality. |
|
16 // |
|
17 // |
|
18 |
|
19 /** |
|
20 @file |
|
21 @test |
|
22 @internalComponent |
|
23 */ |
|
24 |
|
25 |
|
26 // |
|
27 // -- INCLUDE FILES --------------------------------------------------------- |
|
28 // |
|
29 |
|
30 |
|
31 #include <e32std.h> |
|
32 #include <biditext.h> |
|
33 #include <bidi.h> |
|
34 #include <linebreak.h> |
|
35 #include <bidivisual.h> |
|
36 #include "GlyphSel.h" |
|
37 #include "TGlyphSel.h" |
|
38 #include <graphics/openfontconstants.h> |
|
39 #include <graphics/openfontrasterizer.h> |
|
40 |
|
41 |
|
42 // |
|
43 // -- CONSTANTS ------------------------------------------------------------- |
|
44 // |
|
45 |
|
46 /** |
|
47 This define when set introduces a delay to start up to allow Glowcode to |
|
48 be set up to collect statistics. |
|
49 */ |
|
50 //#define _GLOWCODE_LAUNCH_DELAY 1 |
|
51 |
|
52 |
|
53 /** RTest object for unit test output */ |
|
54 //RTest TEST(_L("TGlyphSel - CFont Glyph Selection")); |
|
55 |
|
56 /** Thread name for test cases involving a new thread. */ |
|
57 _LIT(KThread2NameFirst, "GlyphSelPanicTest_First"); |
|
58 _LIT(KThread2NameSecond, "GlyphSelPanicTest_Second"); |
|
59 |
|
60 /*Beginning of Indic language font file constants declaration*/ |
|
61 |
|
62 _LIT16(KTestHindiFontFile, "C:\\TNR_Dev_OT.ttf"); |
|
63 _LIT16(KTestHindiFontFaceName, "Devanagari OT Eval"); |
|
64 |
|
65 //_LIT16(KTestIndicFontFile, "C:\\s60ssb_v435.ttf"); |
|
66 _LIT16(KTestIndicFontFile, "C:\\s60ssb_v500.ttf"); |
|
67 _LIT16(KTestIndicFontFaceName, "Series 60 Sans"); |
|
68 |
|
69 //_LIT16(KTestTeluguFontFile, "C:\\s60ssb_v500.ttf"); |
|
70 //_LIT16(KTestTeluguFontFaceName, "Series 60 Sans"); |
|
71 |
|
72 _LIT16(KTestGB18030FontFile, "C:\\TestExtB.ttf"); |
|
73 _LIT16(KTestGB18030FontFaceName, "Test Font for CJK ExtB"); |
|
74 |
|
75 /*End of Indic language font file constants declaration*/ |
|
76 // |
|
77 // -- THAI TEST DATA -------------------------------------------------------- |
|
78 // |
|
79 |
|
80 |
|
81 /** |
|
82 An array of Thai characters each of which is individually passed into |
|
83 GetCharacterPosition() for testing. |
|
84 */ |
|
85 LOCAL_D const TText16 Thai_SimpleChars[] = { |
|
86 // Digits test 0..9 |
|
87 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, |
|
88 0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59, |
|
89 |
|
90 // Consonants |
|
91 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, |
|
92 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, |
|
93 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, |
|
94 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F, |
|
95 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, |
|
96 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, |
|
97 |
|
98 // Independent vowels |
|
99 0x0E30, 0x0E32, // 0x0E33, Sara Am decomposed, not simple |
|
100 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, |
|
101 |
|
102 // Independent signs |
|
103 0x0E2F, 0x0E3F, 0x0E45, 0x0E46, 0x0E4F, 0x0E5A, 0x0E5B, |
|
104 |
|
105 // Array end |
|
106 0xFFFF, |
|
107 }; |
|
108 |
|
109 /** |
|
110 Data structure used to hold the in and out data of one invoke |
|
111 of the CFont::GetCharacterPosition() API. |
|
112 */ |
|
113 struct TTestInput_PositionParam |
|
114 { |
|
115 TInt iTextLen; |
|
116 TText16 iText[4]; |
|
117 TInt iPosInText; |
|
118 TInt oPosInText; |
|
119 TInt oOutputLen; |
|
120 TText16 oOutput[CFont::TPositionParam::EMaxOutputGlyphs]; |
|
121 }; |
|
122 |
|
123 /** |
|
124 This array of structs is used in the test routine |
|
125 CTGlyphSelection::TestThai_ValidGlyphClusters() for verifying |
|
126 GetCharacterPosition() constructs Thai PUA glyph clusters correctly. |
|
127 */ |
|
128 LOCAL_D const TTestInput_PositionParam Thai_ValidGlyphClusters[] = { |
|
129 // --INPUT---------------- --OUTPUT---------------------- |
|
130 |
|
131 // TEST A1..A8 handled in Thai_SimpleChars table. |
|
132 |
|
133 //0.TEST A9 - Decomposed SARA AM |
|
134 { 2, {0x0E01, 0x0E33}, 1, 2, 1, {0x0E33}}, |
|
135 { 2, {0x0E1B, 0x0E33}, 1, 2, 2, {0xF711, 0x0E32}}, |
|
136 { 2, {0x0E41, 0x0E33}, 1, 2, 2, {KUnicodeDottedCircle, 0x0E33}}, |
|
137 { 1, {0x0E33}, 0, 1, 2, {KUnicodeDottedCircle, 0x0E33}}, |
|
138 { 3, {0x0E19, 0x0E49, 0x0E33}, 0, 3, 4, {0x0E19, 0x0E4D, 0x0E49, 0x0E32}}, |
|
139 |
|
140 //5.TEST A9.1 - SARA AM exlcuded from cluster when vowel present |
|
141 { 3, {0x0E19, 0x0E35, 0x0E33}, 0, 2, 2, {0x0E19, 0x0E35}}, |
|
142 { 3, {0x0E19, 0x0E39, 0x0E33}, 0, 2, 2, {0x0E19, 0x0E39}}, |
|
143 { 4, {0x0E19, 0x0E35, 0x0E48, 0x0E33}, 0, 3, 3, {0x0E19, 0x0E35, 0x0E48}}, |
|
144 |
|
145 //8.TEST B1 - Normal right aligned vowel/sign above short consonant |
|
146 { 2, {0x0E04, 0x0E35}, 0, 2, 2, {0x0E04, 0x0E35}}, |
|
147 { 2, {0x0E01, 0x0E4D}, 0, 2, 2, {0x0E01, 0x0E4D}}, |
|
148 |
|
149 //10.TEST B2 - Left aligned vowel/sign above tall consonant |
|
150 { 2, {0x0E1B, 0x0E34}, 0, 2, 2, {0x0E1B, 0xF701}}, |
|
151 { 2, {0x0E1D, 0x0E35}, 0, 2, 2, {0x0E1D, 0xF702}}, |
|
152 { 2, {0x0E1F, 0x0E36}, 0, 2, 2, {0x0E1F, 0xF703}}, |
|
153 { 2, {0x0E2C, 0x0E37}, 0, 2, 2, {0x0E2C, 0xF704}}, |
|
154 { 2, {0x0E1B, 0x0E31}, 0, 2, 2, {0x0E1B, 0xF710}}, |
|
155 { 2, {0x0E1D, 0x0E4D}, 0, 2, 2, {0x0E1D, 0xF711}}, |
|
156 { 2, {0x0E1F, 0x0E47}, 0, 2, 2, {0x0E1F, 0xF712}}, |
|
157 |
|
158 //17.TEST B3 - Normal right aligned vowel below short consonant |
|
159 { 2, {0x0E2C, 0x0E3A}, 0, 2, 2, {0x0E2C, 0x0E3A}}, |
|
160 { 2, {0x0E0C, 0x0E38}, 0, 2, 2, {0x0E0C, 0x0E38}}, |
|
161 |
|
162 //19.TEST B4 - Vowel below consonant with joint decender |
|
163 { 2, {0x0E0E, 0x0E38}, 0, 2, 2, {0x0E0E, 0xF718}}, |
|
164 { 2, {0x0E0F, 0x0E39}, 0, 2, 2, {0x0E0F, 0xF719}}, |
|
165 { 2, {0x0E0F, 0x0E3A}, 0, 2, 2, {0x0E0F, 0xF71A}}, |
|
166 { 2, {0x0E24, 0x0E38}, 0, 2, 2, {0x0E24, 0xF718}}, |
|
167 { 2, {0x0E26, 0x0E39}, 0, 2, 2, {0x0E26, 0xF719}}, |
|
168 |
|
169 //24.TEST B5 - Vowel below consonant with disjoint decender |
|
170 { 2, {0x0E10, 0x0E38}, 0, 2, 2, {0xF700, 0x0E38}}, |
|
171 { 2, {0x0E0D, 0x0E39}, 0, 2, 2, {0xF70F, 0x0E39}}, |
|
172 { 2, {0x0E10, 0x0E3A}, 0, 2, 2, {0xF700, 0x0E3A}}, |
|
173 |
|
174 //27.TEST C1 - Tone mark/sign above short consonant |
|
175 { 2, {0x0E14, 0x0E48}, 0, 2, 2, {0x0E14, 0xF70A}}, |
|
176 { 2, {0x0E16, 0x0E49}, 0, 2, 2, {0x0E16, 0xF70B}}, |
|
177 { 2, {0x0E17, 0x0E4A}, 0, 2, 2, {0x0E17, 0xF70C}}, |
|
178 { 2, {0x0E19, 0x0E4B}, 0, 2, 2, {0x0E19, 0xF70D}}, |
|
179 { 2, {0x0E20, 0x0E4C}, 0, 2, 2, {0x0E20, 0xF70E}}, |
|
180 // with lower vowel char in between the two? |
|
181 { 3, {0x0E16, 0x0E39, 0x0E49}, 0, 3, 3, {0x0E16, 0x0E39, 0xF70B}}, |
|
182 |
|
183 //33.TEST C2 - Upper Vowel & tone makr/sign above short consonant |
|
184 { 3, {0x0E01, 0x0E34, 0x0E48}, 0, 3, 3, {0x0E01, 0x0E34, 0x0E48}}, |
|
185 { 3, {0x0E02, 0x0E35, 0x0E49}, 0, 3, 3, {0x0E02, 0x0E35, 0x0E49}}, |
|
186 { 3, {0x0E04, 0x0E36, 0x0E4A}, 0, 3, 3, {0x0E04, 0x0E36, 0x0E4A}}, |
|
187 { 3, {0x0E08, 0x0E37, 0x0E4B}, 0, 3, 3, {0x0E08, 0x0E37, 0x0E4B}}, |
|
188 { 3, {0x0E09, 0x0E34, 0x0E4C}, 0, 3, 3, {0x0E09, 0x0E34, 0x0E4C}}, |
|
189 { 3, {0x0E11, 0x0E47, 0x0E4C}, 0, 2, 2, {0x0E11, 0x0E47}}, |
|
190 |
|
191 //39.TEST C2.1 - Lower Vowel & tone makr/sign above short consonant |
|
192 { 3, {0x0E01, 0x0E38, 0x0E48}, 0, 3, 3, {0x0E01, 0x0E38, 0xF70A}}, |
|
193 { 3, {0x0E02, 0x0E39, 0x0E49}, 0, 3, 3, {0x0E02, 0x0E39, 0xF70B}}, |
|
194 { 3, {0x0E04, 0x0E38, 0x0E4A}, 0, 3, 3, {0x0E04, 0x0E38, 0xF70C}}, |
|
195 { 3, {0x0E08, 0x0E39, 0x0E4B}, 0, 3, 3, {0x0E08, 0x0E39, 0xF70D}}, |
|
196 { 3, {0x0E09, 0x0E38, 0x0E4C}, 0, 3, 3, {0x0E09, 0x0E38, 0xF70E}}, |
|
197 { 3, {0x0E09, 0x0E39, 0x0E4C}, 0, 2, 2, {0x0E09, 0x0E39}}, |
|
198 |
|
199 //45.TEST C3 - Left aligned tone mark/sign above tall consonant |
|
200 { 2, {0x0E1B, 0x0E48}, 0, 2, 2, {0x0E1B, 0xF705}}, |
|
201 { 2, {0x0E1D, 0x0E49}, 0, 2, 2, {0x0E1D, 0xF706}}, |
|
202 { 2, {0x0E1F, 0x0E4A}, 0, 2, 2, {0x0E1F, 0xF707}}, |
|
203 { 2, {0x0E2C, 0x0E4B}, 0, 2, 2, {0x0E2C, 0xF708}}, |
|
204 { 2, {0x0E1B, 0x0E4C}, 0, 2, 2, {0x0E1B, 0xF709}}, |
|
205 |
|
206 //50.TEST C4 - Left aligned vowel & tone mark/sign above tall consonant |
|
207 { 3, {0x0E1B, 0x0E34, 0x0E48}, 0, 3, 3, {0x0E1B, 0xF701, 0xF713}}, |
|
208 { 3, {0x0E1D, 0x0E35, 0x0E49}, 0, 3, 3, {0x0E1D, 0xF702, 0xF714}}, |
|
209 { 3, {0x0E1F, 0x0E36, 0x0E4A}, 0, 3, 3, {0x0E1F, 0xF703, 0xF715}}, |
|
210 { 3, {0x0E2C, 0x0E37, 0x0E4B}, 0, 3, 3, {0x0E2C, 0xF704, 0xF716}}, |
|
211 { 3, {0x0E1B, 0x0E34, 0x0E4C}, 0, 3, 3, {0x0E1B, 0xF701, 0xF717}}, |
|
212 |
|
213 //55. INC043221 - Tone marks are not readable with tall consonants and Sara Am |
|
214 // Test that the nikhahit part of a sara am causes the same effects as top |
|
215 // vowels. |
|
216 // Test 4 already does one suitable test. |
|
217 { 3, {0x0E1B, 0x0E49, 0x0E33}, 0, 3, 4, {0x0E1B, 0xF711, 0xF714, 0x0E32}}, |
|
218 |
|
219 //56. INC127996 - Tone mark/diacritic displayed incorrectly when combinded |
|
220 // with long tail consonanat and below vowel. Test that in context |
|
221 // 'short consonanat + below vowel + Tone Mark/diacritic', mark/diacritic |
|
222 // can be replaced by corresonding PUA code. |
|
223 { 3, {0x0E0D, 0x0E39, 0x0E49}, 0, 3, 3, {0xF70F, 0x0E39, 0xF70B}}, |
|
224 { 3, {0x0E0E, 0x0E38, 0x0E48}, 0, 3, 3, {0x0E0E, 0xF718, 0xF70A}}, |
|
225 { 3, {0x0E0F, 0x0E39, 0x0E4A}, 0, 3, 3, {0x0E0F, 0xF719, 0xF70C}}, |
|
226 { 3, {0x0E26, 0x0E39, 0x0E4B}, 0, 3, 3, {0x0E26, 0xF719, 0xF70D}}, |
|
227 { 3, {0x0E24, 0x0E38, 0x0E49}, 0, 3, 3, {0x0E24, 0xF718, 0xF70B}}, |
|
228 { 3, {0x0E10, 0x0E38, 0x0E4C}, 0, 3, 3, {0xF700, 0x0E38, 0xF70E}}, |
|
229 |
|
230 //62.TABLE END |
|
231 { -1, {0}, -1, -1, 0, {0}} |
|
232 }; |
|
233 |
|
234 /** |
|
235 Data structure used to hold the in and out data of two invokes |
|
236 of the CFont::GetCharacterPosition() API. |
|
237 */ |
|
238 struct TTestInput_Invoke |
|
239 { |
|
240 TInt iPosInText; |
|
241 TInt oPosInText; |
|
242 TInt oOutputLen; |
|
243 TText16 oOutput[CFont::TPositionParam::EMaxOutputGlyphs]; |
|
244 }; |
|
245 |
|
246 /** |
|
247 Data structure used to hold the in and out data of two invokes |
|
248 of the CFont::GetCharacterPosition() API. |
|
249 */ |
|
250 struct TTestInput_PositionParam2 |
|
251 { |
|
252 TInt iTextLen; |
|
253 TText16 iText[4]; |
|
254 TTestInput_Invoke oOut[2]; |
|
255 }; |
|
256 |
|
257 /** |
|
258 Data structure used to hold the in and out data of two invokes |
|
259 of the CFont::GetCharacterPosition() API. |
|
260 */ |
|
261 struct TTestInput_PositionParam6 |
|
262 { |
|
263 TInt iTextLen; |
|
264 TText16 iText[6]; |
|
265 TTestInput_Invoke oOut[6]; |
|
266 }; |
|
267 |
|
268 // {-1, 1, 1, {0} } } indicate end of sequence |
|
269 // The most significant bit of glyph index is trimmed off when stored |
|
270 LOCAL_D const TTestInput_PositionParam6 Indic_GurmukhiDigit[] = { |
|
271 { 1, {0x0a66}, { {0, 1, 1, {0x12fe} }, {-1, 1, 1, {0} } } }, |
|
272 { 1, {0x0a67}, { {0, 1, 1, {0x12ff} }, {-1, 1, 1, {0} } } }, |
|
273 { 1, {0x0a68}, { {0, 1, 1, {0x1300} }, {-1, 1, 1, {0} } } }, |
|
274 { 1, {0x0a69}, { {0, 1, 1, {0x1301} }, {-1, 1, 1, {0} } } }, |
|
275 { 1, {0x0a6a}, { {0, 1, 1, {0x1302} }, {-1, 1, 1, {0} } } }, |
|
276 { 1, {0x0a6b}, { {0, 1, 1, {0x1303} }, {-1, 1, 1, {0} } } }, |
|
277 { 1, {0x0a6c}, { {0, 1, 1, {0x1304} }, {-1, 1, 1, {0} } } }, |
|
278 { 1, {0x0a6d}, { {0, 1, 1, {0x1305} }, {-1, 1, 1, {0} } } }, |
|
279 { 1, {0x0a6e}, { {0, 1, 1, {0x1306} }, {-1, 1, 1, {0} } } }, |
|
280 { 1, {0x0a6f}, { {0, 1, 1, {0x1307} }, {-1, 1, 1, {0} } } }, |
|
281 // Consonant + digit |
|
282 { 2, {0x0a15, 0x0a66}, { {0, 1, 1, {0x12cd}}, {1, 2, 1, {0x12fe}}, {-1, 1, 1, {0} } } }, |
|
283 { 2, {0x0a17, 0x0a67}, { {0, 1, 1, {0x12cf}}, {1, 2, 1, {0x12ff}}, {-1, 1, 1, {0} } } }, |
|
284 { 2, {0x0a19, 0x0a68}, { {0, 1, 1, {0x12d1}}, {1, 2, 1, {0x1300}}, {-1, 1, 1, {0} } } }, |
|
285 { 2, {0x0a25, 0x0a69}, { {0, 1, 1, {0x12dd}}, {1, 2, 1, {0x1301}}, {-1, 1, 1, {0} } } }, |
|
286 { 2, {0x0a27, 0x0a6a}, { {0, 1, 1, {0x12df}}, {1, 2, 1, {0x1302}}, {-1, 1, 1, {0} } } }, |
|
287 { 2, {0x0a28, 0x0a6b}, { {0, 1, 1, {0x12e0}}, {1, 2, 1, {0x1303}}, {-1, 1, 1, {0} } } }, |
|
288 { 2, {0x0a29, 0x0a6c}, { {0, 1, 1, {0x0000}}, {1, 2, 1, {0x1304}}, {-1, 1, 1, {0} } } }, |
|
289 { 2, {0x0a3a, 0x0a6d}, { {0, 1, 1, {0x0000}}, {1, 2, 1, {0x1305}}, {-1, 1, 1, {0} } } }, |
|
290 { 2, {0x0a3b, 0x0a6e}, { {0, 1, 1, {0x0000}}, {1, 2, 1, {0x1306}}, {-1, 1, 1, {0} } } }, |
|
291 { 2, {0x0a3c, 0x0a6f}, { {0, 1, 2, {0x058f, 0x12ee}}, {1, 2, 1, {0x1307}}, {-1, 1, 1, {0} } } }, |
|
292 // Modifier + digit |
|
293 { 2, {0x0a3e, 0x0a66}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x12fe}}, {-1, 1, 1, {0} } } }, |
|
294 { 2, {0x0a3e, 0x0a67}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x12ff}}, {-1, 1, 1, {0} } } }, |
|
295 { 2, {0x0a3e, 0x0a68}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1300}}, {-1, 1, 1, {0} } } }, |
|
296 { 2, {0x0a3e, 0x0a69}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1301}}, {-1, 1, 1, {0} } } }, |
|
297 { 2, {0x0a3e, 0x0a6a}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1302}}, {-1, 1, 1, {0} } } }, |
|
298 { 2, {0x0a3e, 0x0a6b}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1303}}, {-1, 1, 1, {0} } } }, |
|
299 { 2, {0x0a3e, 0x0a6c}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1304}}, {-1, 1, 1, {0} } } }, |
|
300 { 2, {0x0a3e, 0x0a6d}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1305}}, {-1, 1, 1, {0} } } }, |
|
301 { 2, {0x0a3e, 0x0a6e}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1306}}, {-1, 1, 1, {0} } } }, |
|
302 { 2, {0x0a3e, 0x0a6f}, { {0, 1, 2, {0x058f, 0x12ef}}, {1, 2, 1, {0x1307}}, {-1, 1, 1, {0} } } }, |
|
303 // Vowel + digit |
|
304 { 2, {0x0a73, 0x0a66}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x12fe}}, {-1, 1, 1, {0} } } }, |
|
305 { 2, {0x0a73, 0x0a67}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x12ff}}, {-1, 1, 1, {0} } } }, |
|
306 { 2, {0x0a73, 0x0a68}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1300}}, {-1, 1, 1, {0} } } }, |
|
307 { 2, {0x0a73, 0x0a69}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1301}}, {-1, 1, 1, {0} } } }, |
|
308 { 2, {0x0a73, 0x0a6a}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1302}}, {-1, 1, 1, {0} } } }, |
|
309 { 2, {0x0a73, 0x0a6b}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1303}}, {-1, 1, 1, {0} } } }, |
|
310 { 2, {0x0a73, 0x0a6c}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1304}}, {-1, 1, 1, {0} } } }, |
|
311 { 2, {0x0a73, 0x0a6d}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1305}}, {-1, 1, 1, {0} } } }, |
|
312 { 2, {0x0a73, 0x0a6e}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1306}}, {-1, 1, 1, {0} } } }, |
|
313 { 2, {0x0a73, 0x0a6f}, { {0, 1, 1, {0x130b}}, {1, 2, 1, {0x1307}}, {-1, 1, 1, {0} } } }, |
|
314 // Virama + digit |
|
315 { 2, {0x0a4d, 0x0a66}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x12fe}}, {-1, 1, 1, {0} } } }, |
|
316 { 2, {0x0a4d, 0x0a67}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x12ff}}, {-1, 1, 1, {0} } } }, |
|
317 { 2, {0x0a4d, 0x0a68}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1300}}, {-1, 1, 1, {0} } } }, |
|
318 { 2, {0x0a4d, 0x0a69}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1301}}, {-1, 1, 1, {0} } } }, |
|
319 { 2, {0x0a4d, 0x0a6a}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1302}}, {-1, 1, 1, {0} } } }, |
|
320 { 2, {0x0a4d, 0x0a6b}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1303}}, {-1, 1, 1, {0} } } }, |
|
321 { 2, {0x0a4d, 0x0a6c}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1304}}, {-1, 1, 1, {0} } } }, |
|
322 { 2, {0x0a4d, 0x0a6d}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1305}}, {-1, 1, 1, {0} } } }, |
|
323 { 2, {0x0a4d, 0x0a6e}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1306}}, {-1, 1, 1, {0} } } }, |
|
324 { 2, {0x0a4d, 0x0a6f}, { {0, 1, 2, {0x058f, 0x12f8}}, {1, 2, 1, {0x1307}}, {-1, 1, 1, {0} } } }, |
|
325 // Consonant + digit + Matra |
|
326 { 3, {0x0a15, 0x0a66, 0x0a3e}, { {0, 1, 1, {0x12cd}}, {1, 2, 1, {0x12fe}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
327 { 3, {0x0a16, 0x0a67, 0x0a3e}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x12ff}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
328 { 3, {0x0a17, 0x0a68, 0x0a3e}, { {0, 1, 1, {0x12cf}}, {1, 2, 1, {0x1300}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
329 { 3, {0x0a18, 0x0a69, 0x0a3e}, { {0, 1, 1, {0x12d0}}, {1, 2, 1, {0x1301}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
330 { 3, {0x0a19, 0x0a6a, 0x0a3e}, { {0, 1, 1, {0x12d1}}, {1, 2, 1, {0x1302}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
331 { 3, {0x0a25, 0x0a6b, 0x0a3e}, { {0, 1, 1, {0x12dd}}, {1, 2, 1, {0x1303}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
332 { 3, {0x0a2a, 0x0a6c, 0x0a3e}, { {0, 1, 1, {0x12e1}}, {1, 2, 1, {0x1304}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
333 { 3, {0x0a2d, 0x0a6d, 0x0a3e}, { {0, 1, 1, {0x12e4}}, {1, 2, 1, {0x1305}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
334 { 3, {0x0a30, 0x0a6e, 0x0a3e}, { {0, 1, 1, {0x12e7}}, {1, 2, 1, {0x1306}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
335 { 3, {0x0a33, 0x0a6f, 0x0a3e}, { {0, 1, 1, {0x12e9}}, {1, 2, 1, {0x1307}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
336 { -1, {0}, -1, -1, 0, {0}} |
|
337 }; |
|
338 |
|
339 |
|
340 LOCAL_D const TTestInput_PositionParam6 Indic_MalayalamDigit[] = { |
|
341 { 1, {0x0d66}, { {0, 1, 1, {0x123e} }, {-1, 1, 1, {0} } } }, |
|
342 { 1, {0x0d67}, { {0, 1, 1, {0x123f} }, {-1, 1, 1, {0} } } }, |
|
343 { 1, {0x0d68}, { {0, 1, 1, {0x1240} }, {-1, 1, 1, {0} } } }, |
|
344 { 1, {0x0d69}, { {0, 1, 1, {0x1241} }, {-1, 1, 1, {0} } } }, |
|
345 { 1, {0x0d6a}, { {0, 1, 1, {0x1242} }, {-1, 1, 1, {0} } } }, |
|
346 { 1, {0x0d6b}, { {0, 1, 1, {0x1243} }, {-1, 1, 1, {0} } } }, |
|
347 { 1, {0x0d6c}, { {0, 1, 1, {0x1244} }, {-1, 1, 1, {0} } } }, |
|
348 { 1, {0x0d6d}, { {0, 1, 1, {0x1245} }, {-1, 1, 1, {0} } } }, |
|
349 { 1, {0x0d6e}, { {0, 1, 1, {0x1246} }, {-1, 1, 1, {0} } } }, |
|
350 { 1, {0x0d6f}, { {0, 1, 1, {0x1247} }, {-1, 1, 1, {0} } } }, |
|
351 // Consonant + digit |
|
352 { 2, {0x0d15, 0x0d66}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x123e}}, {-1, 1, 1, {0} } } }, |
|
353 { 2, {0x0d15, 0x0d67}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x123f}}, {-1, 1, 1, {0} } } }, |
|
354 { 2, {0x0d17, 0x0d68}, { {0, 1, 1, {0x120c}}, {1, 2, 1, {0x1240}}, {-1, 1, 1, {0} } } }, |
|
355 { 2, {0x0d19, 0x0d69}, { {0, 1, 1, {0x120e}}, {1, 2, 1, {0x1241}}, {-1, 1, 1, {0} } } }, |
|
356 { 2, {0x0d25, 0x0d6a}, { {0, 1, 1, {0x121a}}, {1, 2, 1, {0x1242}}, {-1, 1, 1, {0} } } }, |
|
357 { 2, {0x0d26, 0x0d6b}, { {0, 1, 1, {0x121b}}, {1, 2, 1, {0x1243}}, {-1, 1, 1, {0} } } }, |
|
358 { 2, {0x0d15, 0x0d6c}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x1244}}, {-1, 1, 1, {0} } } }, |
|
359 { 2, {0x0d30, 0x0d6d}, { {0, 1, 1, {0x1224}}, {1, 2, 1, {0x1245}}, {-1, 1, 1, {0} } } }, |
|
360 { 2, {0x0d31, 0x0d6e}, { {0, 1, 1, {0x1225}}, {1, 2, 1, {0x1246}}, {-1, 1, 1, {0} } } }, |
|
361 { 2, {0x0d32, 0x0d6f}, { {0, 1, 1, {0x1226}}, {1, 2, 1, {0x1247}}, {-1, 1, 1, {0} } } }, |
|
362 // Modifier + digit |
|
363 { 2, {0x0d03, 0x0d66}, { {0, 1, 2, {0x058f, 0x11fb}}, {1, 2, 1, {0x123e}}, {-1, 1, 1, {0} } } }, |
|
364 { 2, {0x0d03, 0x0d67}, { {0, 1, 2, {0x058f, 0x11fb}}, {1, 2, 1, {0x123f}}, {-1, 1, 1, {0} } } }, |
|
365 { 2, {0x0d03, 0x0d68}, { {0, 1, 2, {0x058f, 0x11fb}}, {1, 2, 1, {0x1240}}, {-1, 1, 1, {0} } } }, |
|
366 { 2, {0x0d03, 0x0d69}, { {0, 1, 2, {0x058f, 0x11fb}}, {1, 2, 1, {0x1241}}, {-1, 1, 1, {0} } } }, |
|
367 { 2, {0x0d03, 0x0d6a}, { {0, 1, 2, {0x058f, 0x11fb}}, {1, 2, 1, {0x1242}}, {-1, 1, 1, {0} } } }, |
|
368 { 2, {0x0d02, 0x0d6b}, { {0, 1, 2, {0x058f, 0x11fa}}, {1, 2, 1, {0x1243}}, {-1, 1, 1, {0} } } }, |
|
369 { 2, {0x0d02, 0x0d6c}, { {0, 1, 2, {0x058f, 0x11fa}}, {1, 2, 1, {0x1244}}, {-1, 1, 1, {0} } } }, |
|
370 { 2, {0x0d02, 0x0d6d}, { {0, 1, 2, {0x058f, 0x11fa}}, {1, 2, 1, {0x1245}}, {-1, 1, 1, {0} } } }, |
|
371 { 2, {0x0d02, 0x0d6e}, { {0, 1, 2, {0x058f, 0x11fa}}, {1, 2, 1, {0x1246}}, {-1, 1, 1, {0} } } }, |
|
372 { 2, {0x0d02, 0x0d6f}, { {0, 1, 2, {0x058f, 0x11fa}}, {1, 2, 1, {0x1247}}, {-1, 1, 1, {0} } } }, |
|
373 // Vowel + digit |
|
374 { 2, {0x0d3e, 0x0d66}, { {0, 1, 2, {0x058f, 0x122e}}, {1, 2, 1, {0x123e}}, {-1, 1, 1, {0} } } }, |
|
375 { 2, {0x0d3f, 0x0d67}, { {0, 1, 2, {0x058f, 0x122f}}, {1, 2, 1, {0x123f}}, {-1, 1, 1, {0} } } }, |
|
376 { 2, {0x0d40, 0x0d68}, { {0, 1, 2, {0x058f, 0x1230}}, {1, 2, 1, {0x1240}}, {-1, 1, 1, {0} } } }, |
|
377 { 2, {0x0d41, 0x0d69}, { {0, 1, 2, {0x058f, 0x1231}}, {1, 2, 1, {0x1241}}, {-1, 1, 1, {0} } } }, |
|
378 { 2, {0x0d42, 0x0d6a}, { {0, 1, 2, {0x058f, 0x1232}}, {1, 2, 1, {0x1242}}, {-1, 1, 1, {0} } } }, |
|
379 { 2, {0x0d43, 0x0d6b}, { {0, 1, 2, {0x058f, 0x1233}}, {1, 2, 1, {0x1243}}, {-1, 1, 1, {0} } } }, |
|
380 { 2, {0x0d46, 0x0d6c}, { {0, 1, 2, {0x1234, 0x058f}}, {1, 2, 1, {0x1244}}, {-1, 1, 1, {0} } } }, |
|
381 { 2, {0x0d47, 0x0d6d}, { {0, 1, 2, {0x1235, 0x058f}}, {1, 2, 1, {0x1245}}, {-1, 1, 1, {0} } } }, |
|
382 { 2, {0x0d48, 0x0d6e}, { {0, 1, 2, {0x1236, 0x058f}}, {1, 2, 1, {0x1246}}, {-1, 1, 1, {0} } } }, |
|
383 { 2, {0x0d4c, 0x0d6f}, { {0, 1, 2, {0x058f, 0x123b}}, {1, 2, 1, {0x1247}}, {-1, 1, 1, {0} } } }, |
|
384 // Virama + digit |
|
385 { 2, {0x0d4d, 0x0d66}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x123e}}, {-1, 1, 1, {0} } } }, |
|
386 { 2, {0x0d4d, 0x0d67}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x123f}}, {-1, 1, 1, {0} } } }, |
|
387 { 2, {0x0d4d, 0x0d68}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1240}}, {-1, 1, 1, {0} } } }, |
|
388 { 2, {0x0d4d, 0x0d69}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1241}}, {-1, 1, 1, {0} } } }, |
|
389 { 2, {0x0d4d, 0x0d6a}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1242}}, {-1, 1, 1, {0} } } }, |
|
390 { 2, {0x0d4d, 0x0d6b}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1243}}, {-1, 1, 1, {0} } } }, |
|
391 { 2, {0x0d4d, 0x0d6c}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1244}}, {-1, 1, 1, {0} } } }, |
|
392 { 2, {0x0d4d, 0x0d6d}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1245}}, {-1, 1, 1, {0} } } }, |
|
393 { 2, {0x0d4d, 0x0d6e}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1246}}, {-1, 1, 1, {0} } } }, |
|
394 { 2, {0x0d4d, 0x0d6f}, { {0, 1, 2, {0x058f, 0x123a}}, {1, 2, 1, {0x1247}}, {-1, 1, 1, {0} } } }, |
|
395 // Consonant + digit + Matra |
|
396 { 3, {0x0d15, 0x0d66, 0x0d3e}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x123e}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
397 { 3, {0x0d20, 0x0d67, 0x0d3f}, { {0, 1, 1, {0x1215}}, {1, 2, 1, {0x123f}}, {2, 3, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
398 { 3, {0x0d22, 0x0d68, 0x0d40}, { {0, 1, 1, {0x1217}}, {1, 2, 1, {0x1240}}, {2, 3, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
399 { 3, {0x0d27, 0x0d69, 0x0d41}, { {0, 1, 1, {0x121c}}, {1, 2, 1, {0x1241}}, {2, 3, 2, {0x058f, 0x1231}}, {-1, 1, 1, {0} } } }, |
|
400 { 3, {0x0d28, 0x0d6a, 0x0d42}, { {0, 1, 1, {0x121d}}, {1, 2, 1, {0x1242}}, {2, 3, 2, {0x058f, 0x1232}}, {-1, 1, 1, {0} } } }, |
|
401 { 3, {0x0d2A, 0x0d6b, 0x0d43}, { {0, 1, 1, {0x121e}}, {1, 2, 1, {0x1243}}, {2, 3, 2, {0x058f, 0x1233}}, {-1, 1, 1, {0} } } }, |
|
402 { 3, {0x0d2D, 0x0d6c, 0x0d46}, { {0, 1, 1, {0x1221}}, {1, 2, 1, {0x1244}}, {2, 3, 2, {0x1234, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
403 { 3, {0x0d32, 0x0d6d, 0x0d47}, { {0, 1, 1, {0x1226}}, {1, 2, 1, {0x1245}}, {2, 3, 2, {0x1235, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
404 { 3, {0x0d34, 0x0d6e, 0x0d48}, { {0, 1, 1, {0x1228}}, {1, 2, 1, {0x1246}}, {2, 3, 2, {0x1236, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
405 { 3, {0x0d39, 0x0d6f, 0x0d4a}, { {0, 1, 1, {0x122d}}, {1, 2, 1, {0x1247}}, {2, 3, 3, {0x1234, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
406 { -1, {0}, -1, -1, 0, {0}} |
|
407 }; |
|
408 |
|
409 LOCAL_D const TTestInput_PositionParam6 Indic_GurmukhiAndLatin[] = { |
|
410 // Gurmukhi sequence + Latin |
|
411 { 3, {0x0a05, 0x0a70, 0x0077}, { {0, 2, 2, {0x12c3, 0x1308}}, {1, 2, 1, {0x1308}}, {2, 3, 1, {0x0077}}, {-1, 1, 1, {0} } } }, |
|
412 // Latin + Gurmukhi sequence |
|
413 { 3, {0x0063, 0x0a19, 0x0a48}, { {0, 1, 1, {0x0063}}, {1, 3, 2, {0x12d1, 0x12f5}}, {2, 3, 1, {0x12f5}}, {-1, 1, 1, {0} } } }, |
|
414 { 3, {0x0064, 0x0a3f, 0x0a71}, { {0, 1, 1, {0x0064}}, {1, 2, 2, {0x12f0, 0x058f}}, {2, 3, 2, {0x058f, 0x1309}}, {-1, 1, 1, {0} } } }, |
|
415 { 3, {0x0066, 0x0a69, 0x0a3e}, { {0, 1, 1, {0x0066}}, {1, 2, 1, {0x1301}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
416 { 3, {0x0068, 0x0a6a, 0x0a3e}, { {0, 1, 1, {0x0068}}, {1, 2, 1, {0x1302}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
417 { 3, {0x002e, 0x0a6b, 0x0a3e}, { {0, 1, 1, {0x0772}}, {1, 2, 1, {0x1303}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
418 { 3, {0x0074, 0x0a6c, 0x0a3e}, { {0, 1, 1, {0x0074}}, {1, 2, 1, {0x1304}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
419 { 3, {0x002c, 0x0a6d, 0x0a3e}, { {0, 1, 1, {0x0770}}, {1, 2, 1, {0x1305}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
420 { 3, {0x0078, 0x0a6e, 0x0a3e}, { {0, 1, 1, {0x0078}}, {1, 2, 1, {0x1306}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
421 { 3, {0x007a, 0x0a6f, 0x0a3e}, { {0, 1, 1, {0x007a}}, {1, 2, 1, {0x1307}}, {2, 3, 2, {0x058f, 0x12ef}}, {-1, 1, 1, {0} } } }, |
|
422 { 3, {0x0a6f, 0x0a3e, 0x0078}, { {0, 1, 1, {0x1307}}, {1, 2, 2, {0x058f, 0x12ef}}, {2, 3, 1, {0x0078}}, {-1, 1, 1, {0} } } }, |
|
423 { 3, {0x0a6f, 0x0a3e, 0x002e}, { {0, 1, 1, {0x1307}}, {1, 2, 2, {0x058f, 0x12ef}}, {2, 3, 1, {0x0772}}, {-1, 1, 1, {0} } } }, |
|
424 { 3, {0x0a6f, 0x0a3e, 0x0066}, { {0, 1, 1, {0x1307}}, {1, 2, 2, {0x058f, 0x12ef}}, {2, 3, 1, {0x0066}}, {-1, 1, 1, {0} } } }, |
|
425 { -1, {0}, -1, -1, 0, {0}} |
|
426 }; |
|
427 |
|
428 |
|
429 LOCAL_D const TTestInput_PositionParam6 Indic_MalayalamAndLatin[] = { |
|
430 // Malayalam sequence + Latin |
|
431 //{ 3, {0x0d05, 0x0d70, 0x0077}, { {0, 1, 1, {0x11fc}}, {1, 2, 1, {0x0000}}, {2, 3, 1, {0x0077}}, {-1, 1, 1, {0} } } }, |
|
432 // Latin + Malayalam sequence |
|
433 { 3, {0x0063, 0x0d19, 0x0d48}, { {0, 1, 1, {0x0063}}, {1, 3, 2, {0x1236, 0x120e}}, {2, 3, 1, {0x1236}}, {-1, 1, 1, {0} } } }, |
|
434 { 3, {0x0066, 0x0d69, 0x0d3e}, { {0, 1, 1, {0x0066}}, {1, 2, 1, {0x1241}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
435 { 3, {0x0068, 0x0d6a, 0x0d3e}, { {0, 1, 1, {0x0068}}, {1, 2, 1, {0x1242}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
436 { 3, {0x002e, 0x0d6b, 0x0d3e}, { {0, 1, 1, {0x0c87}}, {1, 2, 1, {0x1243}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
437 { 3, {0x0074, 0x0d6c, 0x0d3e}, { {0, 1, 1, {0x0074}}, {1, 2, 1, {0x1244}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
438 { 3, {0x002c, 0x0d6d, 0x0d3e}, { {0, 1, 1, {0x0c85}}, {1, 2, 1, {0x1245}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
439 { 3, {0x0078, 0x0d6e, 0x0d3e}, { {0, 1, 1, {0x0078}}, {1, 2, 1, {0x1246}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
440 { 3, {0x007a, 0x0d6f, 0x0d3e}, { {0, 1, 1, {0x007a}}, {1, 2, 1, {0x1247}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
441 { -1, {0}, -1, -1, 0, {0}} |
|
442 }; |
|
443 |
|
444 |
|
445 LOCAL_D const TTestInput_PositionParam6 Indic_GurmukhiModifierAfterConsonantViramaZWJ[] = { |
|
446 // Consonant + Virama + ZWJ + Modifier |
|
447 { 4, {0x0a15, 0x0a4d, 0x200d, 0x0A01}, { {0, 4, 2, {0x1335, 0x12c0}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x12c0}}, {3, 4, 1, {0x12c0}}, {-1, 1, 1, {0} } } }, |
|
448 { 4, {0x0a16, 0x0a4d, 0x200d, 0x0A02}, { {0, 4, 2, {0x1336, 0x12c1}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x12c1}}, {3, 4, 1, {0x12c1}}, {-1, 1, 1, {0} } } }, |
|
449 { 4, {0x0a17, 0x0a4d, 0x200d, 0x0A03}, { {0, 4, 2, {0x1337, 0x12c2}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x12c2}}, {3, 4, 1, {0x12c2}}, {-1, 1, 1, {0} } } }, |
|
450 { 4, {0x0a18, 0x0a4d, 0x200d, 0x0A70}, { {0, 4, 2, {0x1338, 0x1308}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x1308}}, {3, 4, 1, {0x1308}}, {-1, 1, 1, {0} } } }, |
|
451 { -1, {0}, -1, -1, 0, {0}} |
|
452 }; |
|
453 |
|
454 |
|
455 LOCAL_D const TTestInput_PositionParam6 Indic_MalayalamModifierAfterConsonantViramaZWJ[] = { |
|
456 // Consonant + Virama + ZWJ + Modifier |
|
457 { 4, {0x0d15, 0x0d4d, 0x200d, 0x0d02}, { {0, 4, 2, {0x1248, 0x11fa}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fa}}, {3, 4, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
458 { 4, {0x0d25, 0x0d4d, 0x200d, 0x0d02}, { {0, 4, 2, {0x1258, 0x11fa}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fa}}, {3, 4, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
459 { 4, {0x0d33, 0x0d4d, 0x200d, 0x0d03}, { {0, 3, 1, {0x1275}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fb}}, {3, 4, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
460 { 4, {0x0d34, 0x0d4d, 0x200d, 0x0d03}, { {0, 4, 2, {0x1266, 0x11fb}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fb}}, {3, 4, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
461 { -1, {0}, -1, -1, 0, {0}} |
|
462 }; |
|
463 |
|
464 LOCAL_D const TTestInput_PositionParam6 Indic_GurmukhiConsonantLeading[] = { |
|
465 // Consonant + Nukta |
|
466 { 2, {0x0a17, 0x0A3C}, { {0, 2, 1, {0x12fa}}, {-1, 1, 1, {0} } } }, |
|
467 // Consonant + dependent vowel, two sequences to check context shaping |
|
468 { 2, {0x0a15, 0x0A4C}, { {0, 2, 2, {0x12cd, 0x12f7}}, {1, 2, 1, {0x12f7}}, {-1, 1, 1, {0} } } }, |
|
469 { 2, {0x0a16, 0x0A4C}, { {0, 2, 2, {0x12ce, 0x12f7}}, {1, 2, 1, {0x12f7}}, {-1, 1, 1, {0} } } }, |
|
470 // Consonant + Matra /i/, and other Matras |
|
471 { 2, {0x0a16, 0x0A3f}, { {0, 2, 2, {0x12f0, 0x12ce}}, {1, 2, 1, {0x12f0}}, {-1, 1, 1, {0} } } }, |
|
472 { 2, {0x0a16, 0x0A3e}, { {0, 2, 2, {0x12ce, 0x12ef}}, {1, 2, 1, {0x12ef}}, {-1, 1, 1, {0} } } }, |
|
473 { 2, {0x0a16, 0x0A40}, { {0, 2, 2, {0x12ce, 0x12f1}}, {1, 2, 1, {0x12f1}}, {-1, 1, 1, {0} } } }, |
|
474 { 2, {0x0a16, 0x0A41}, { {0, 2, 2, {0x12ce, 0x12f2}}, {1, 2, 1, {0x12f2}}, {-1, 1, 1, {0} } } }, |
|
475 { 2, {0x0a16, 0x0A42}, { {0, 2, 2, {0x12ce, 0x12f3}}, {1, 2, 1, {0x12f3}}, {-1, 1, 1, {0} } } }, |
|
476 { 2, {0x0a16, 0x0A43}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
477 { 2, {0x0a16, 0x0A44}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
478 { 2, {0x0a16, 0x0A45}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
479 { 2, {0x0a16, 0x0A46}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
480 { 2, {0x0a16, 0x0A47}, { {0, 2, 2, {0x12ce, 0x12f4}}, {1, 2, 1, {0x12f4}}, {-1, 1, 1, {0} } } }, |
|
481 { 2, {0x0a16, 0x0A48}, { {0, 2, 2, {0x12ce, 0x12f5}}, {1, 2, 1, {0x12f5}}, {-1, 1, 1, {0} } } }, |
|
482 { 2, {0x0a16, 0x0A49}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
483 { 2, {0x0a16, 0x0A4a}, { {0, 1, 1, {0x12ce}}, {1, 2, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
484 { 2, {0x0a16, 0x0A4b}, { {0, 2, 2, {0x12ce, 0x12f6}}, {1, 2, 1, {0x12f6}}, {-1, 1, 1, {0} } } }, |
|
485 { 2, {0x0a16, 0x0A4c}, { {0, 2, 2, {0x12ce, 0x12f7}}, {1, 2, 1, {0x12f7}}, {-1, 1, 1, {0} } } }, |
|
486 //0d24 + 0d4d + 0d30 |
|
487 //0d28 + 0d4d + //0d24 + 0d4d + 0d30 |
|
488 //0d38 + 0d4d + //0d15 + 0d4d + 0d30 |
|
489 // Consonant + Virama + HA(RA/VA/YA) |
|
490 { 3, {0x0a15, 0x0a4d, 0x0a39}, { {0, 3, 2, {0x12cd, 0x1331}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1331}}, {-1, 1, 1, {0} } } }, |
|
491 { 3, {0x0a15, 0x0a4d, 0x0a30}, { {0, 3, 1, {0x13e7}}, {-1, 1, 1, {0} } } }, |
|
492 { 3, {0x0a15, 0x0a4d, 0x0a35}, { {0, 3, 2, {0x1399, 0x1333}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1333}}, {-1, 1, 1, {0} } } }, |
|
493 { 3, {0x0a15, 0x0a4d, 0x0a2f}, { {0, 3, 2, {0x12cd, 0x1373}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1373}}, {-1, 1, 1, {0} } } }, |
|
494 // Consonant + Addak |
|
495 { 2, {0x0a16, 0x0A71}, { {0, 2, 2, {0x12ce, 0x1309}}, {1, 2, 1, {0x1309}}, {-1, 1, 1, {0} } } }, |
|
496 // Consonant + bindi |
|
497 { 2, {0x0a16, 0x0A02}, { {0, 2, 2, {0x12ce, 0x12c1}}, {1, 2, 1, {0x12c1}}, {-1, 1, 1, {0} } } }, |
|
498 { 3, {0x0a16, 0x0a40, 0x0A02}, { {0, 3, 2, {0x12ce, 0x13f0}}, {1, 2, 1, {0x13f0}}, {-1, 1, 1, {0} } } }, |
|
499 { 3, {0x0a16, 0x0a4b, 0x0A02}, { {0, 3, 2, {0x12ce, 0x13f3}}, {1, 2, 1, {0x13f3}}, {-1, 1, 1, {0} } } }, |
|
500 // Consonant + Tippi |
|
501 { 2, {0x0a25, 0x0A70}, { {0, 2, 2, {0x12dd, 0x1308}}, {1, 2, 1, {0x1308}}, {-1, 1, 1, {0} } } }, |
|
502 { 3, {0x0a25, 0x0a3f, 0x0A70}, { {0, 3, 3, {0x12f0, 0x12dd, 0x1308}}, {1, 2, 1, {0x12f0}}, {2, 3, 1, {0x1308}}, {-1, 1, 1, {0} } } }, |
|
503 { 3, {0x0a25, 0x0a41, 0x0A70}, { {0, 3, 3, {0x12dd, 0x12f2, 0x1308}}, {1, 2, 1, {0x12f2}}, {2, 3, 1, {0x1308}}, {-1, 1, 1, {0} } } }, |
|
504 // Nukta, corresponding consonant, Nukta pair |
|
505 { 1, {0x0a33}, { {0, 1, 1, {0x12e9}}, {-1, 1, 1, {0} } } }, |
|
506 { 2, {0x0a32, 0x0A3c}, { {0, 2, 1, {0x12e9}}, {-1, 1, 1, {0} } } }, |
|
507 { 1, {0x0a36}, { {0, 1, 1, {0x12eb}},{-1, 1, 1, {0} } } }, |
|
508 { 2, {0x0a38, 0x0A3c}, { {0, 2, 1, {0x12eb}}, {-1, 1, 1, {0} } } }, |
|
509 { 1, {0x0a59}, { {0, 1, 1, {0x12f9}}, {-1, 1, 1, {0} } } }, |
|
510 { 2, {0x0aa1, 0x0A3c}, { {0, 1, 1, {0x096e}}, {1, 2, 2, {0x058f, 0x12ee}}, {-1, 1, 1, {0} } } }, |
|
511 { 1, {0x0a5a}, { {0, 1, 1, {0x12fa}}, {-1, 1, 1, {0} } } }, |
|
512 { 2, {0x0a17, 0x0A3c}, { {0, 2, 1, {0x12fa}}, {-1, 1, 1, {0} } } }, |
|
513 { 1, {0x0a5b}, { {0, 1, 1, {0x12fb}}, {-1, 1, 1, {0} } } }, |
|
514 { 2, {0x0a1c, 0x0A3c}, { {0, 2, 1, {0x12fb}}, {-1, 1, 1, {0} } } }, |
|
515 { 1, {0x0a5e}, { {0, 1, 1, {0x12fd}}, {-1, 1, 1, {0} } } }, |
|
516 { 2, {0x0a2b, 0x0A3c}, { {0, 2, 1, {0x12fd}}, {-1, 1, 1, {0} } } }, |
|
517 { -1, {0}, -1, -1, 0, {0}} |
|
518 }; |
|
519 |
|
520 |
|
521 |
|
522 LOCAL_D const TTestInput_PositionParam6 Indic_MalayalamConsonantLeading[] = { |
|
523 // Consonant, and its split representation |
|
524 { 2, {0x0d15, 0x0d14}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x1209}}, {-1, 1, 1, {0} } } }, |
|
525 { 3, {0x0d15, 0x0d12, 0x0d57}, { {0, 1, 1, {0x120a}}, {1, 3, 3, {0x1207, 0x058f, 0x123b}}, {2, 3, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
526 |
|
527 { 2, {0x0d15, 0x0d4a}, { {0, 2, 3, {0x1234, 0x120a, 0x122e}}, {1, 2, 2, {0x1234, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
528 { 3, {0x0d15, 0x0d46, 0x0d3e}, { {0, 3, 3, {0x1234, 0x120a, 0x122e}}, {1, 2, 1, {0x1234}}, {2, 3, 1, {0x122e}}, {-1, 1, 1, {0} } } }, |
|
529 |
|
530 { 2, {0x0d17, 0x0d4b}, { {0, 2, 3, {0x1235, 0x120c, 0x122e}}, {1, 2, 2, {0x1235, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
531 { 3, {0x0d17, 0x0d47, 0x0d3e}, { {0, 3, 3, {0x1235, 0x120c, 0x122e}}, {1, 2, 1, {0x1235}}, {2, 3, 1, {0x122e}}, {-1, 1, 1, {0} } } }, |
|
532 |
|
533 { 2, {0x0d19, 0x0d4c}, { {0, 2, 2, {0x120e, 0x123b}}, {1, 2, 1, {0x123b}}, {-1, 1, 1, {0} } } }, |
|
534 { 3, {0x0d19, 0x0d46, 0x0d57}, { {0, 3, 2, {0x120e, 0x123b}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x123b}}, {-1, 1, 1, {0} } } }, |
|
535 |
|
536 // Consonant + dependent vowel, two sequences to check context shaping |
|
537 { 2, {0x0d15, 0x0d0a}, { {0, 1, 1, {0x120a}}, {1, 2, 1, {0x1201}}, {-1, 1, 1, {0} } } }, |
|
538 { 2, {0x0d16, 0x0d0a}, { {0, 1, 1, {0x120b}}, {1, 2, 1, {0x1201}}, {-1, 1, 1, {0} } } }, |
|
539 |
|
540 // Consonant + Matra /-e/, /-ee/, /-ai/ |
|
541 { 2, {0x0d16, 0x0d46}, { {0, 2, 2, {0x1234, 0x120b}}, {1, 2, 1, {0x1234}}, {-1, 1, 1, {0} } } }, |
|
542 { 2, {0x0d17, 0x0d47}, { {0, 2, 2, {0x1235, 0x120c}}, {1, 2, 1, {0x1235}}, {-1, 1, 1, {0} } } }, |
|
543 { 2, {0x0d18, 0x0d48}, { {0, 2, 2, {0x1236, 0x120d}}, {1, 2, 1, {0x1236}}, {-1, 1, 1, {0} } } }, |
|
544 |
|
545 // Consonant and Matras /-o/, /-oo/, /-au/ to shaper |
|
546 // Consonant and 0x0d4c (first form of Matra /-au/ ) to shaper, |
|
547 // Consonant, 0x0d46 and 0x0d57 (second form of Matra /-au/) to shaper002E |
|
548 { 2, {0x0d16, 0x0d4A}, { {0, 2, 3, {0x1234, 0x120b, 0x122e}}, {1, 2, 2, {0x1234, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
549 { 2, {0x0d17, 0x0d4B}, { {0, 2, 3, {0x1235, 0x120c, 0x122e}}, {1, 2, 2, {0x1235, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
550 { 2, {0x0d18, 0x0d4C}, { {0, 2, 2, {0x120d, 0x123b}}, {1, 2, 1, {0x123b}}, {-1, 1, 1, {0} } } }, |
|
551 { 3, {0x0d15, 0x0d46, 0x0d57}, { {0, 3, 2, {0x120a, 0x123b}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x123b}}, {-1, 1, 1, {0} } } }, |
|
552 |
|
553 // Consonant + 0x0d4d + Consonant |
|
554 { 3, {0x0d15, 0x0d4d, 0x0d15}, { {0, 3, 1, {0x1277}}, {-1, 1, 1, {0} } } }, |
|
555 { 4, {0x0d31, 0x0d4d, 0x0d31, 0x0d4d}, { {0, 4, 2, {0x12a7, 0x123a}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x123a}}, {3, 4, 1, {0x123a}}, {-1, 1, 1, {0} } } }, |
|
556 |
|
557 // Consonant (NNA, NA, RA, LA, LLA) + Virama + ZWJ to shaper |
|
558 // KA + Virama + ZWJ to shaper. |
|
559 // other Consonant + Virama + ZWJ to shaper. |
|
560 { 3, {0x0d23, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1272}}, {-1, 1, 1, {0} } } }, |
|
561 { 3, {0x0d28, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1273}}, {-1, 1, 1, {0} } } }, |
|
562 { 3, {0x0d32, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1276}}, {-1, 1, 1, {0} } } }, |
|
563 { 3, {0x0d33, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1275}}, {-1, 1, 1, {0} } } }, |
|
564 { 3, {0x0d15, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1248}}, {-1, 1, 1, {0} } } }, |
|
565 { 3, {0x0d16, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1249}}, {-1, 1, 1, {0} } } }, |
|
566 |
|
567 // RA + Virama + ZWJ to shaper, |
|
568 // RRA + Viram + ZWJ to shaper. |
|
569 { 3, {0x0d30, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1274}}, {-1, 1, 1, {0} } } }, |
|
570 { 3, {0x0d31, 0x0d4d, 0x200d}, { {0, 3, 1, {0x1263}}, {-1, 1, 1, {0} } } }, |
|
571 |
|
572 // Chillu and Modifier to shaper |
|
573 // Chillu and Virama to shaper |
|
574 { 4, {0x0d31, 0x0d4d, 0x200d, 0x0d05}, { {0, 3, 1, {0x1263}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x11fc}}, {-1, 1, 1, {0} } } }, |
|
575 { 4, {0x0d15, 0x0d4d, 0x200d, 0x0d14}, { {0, 3, 1, {0x1248}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1209}}, {-1, 1, 1, {0} } } }, |
|
576 { 4, {0x0d31, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1263}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
577 { 4, {0x0d15, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1248}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
578 |
|
579 // AAR |
|
580 { 3, {0x0d06, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
581 { 2, {0x0d06, 0x0d4d}, { {0, 1, 1, {0x11fd}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
582 |
|
583 // K.KA, K.TA, K.SSA, G.NA, G.MA, |
|
584 // NG.KA, NG.NGA, J.JA, J.NYA, NY.NYA, TT.TTA, NN.MA, T.BHA, T.MA, |
|
585 // T.SA, D.DA, D.DHA, |
|
586 // N.TA, N.DA, N.DHA, N.NA, |
|
587 // M.PA, M.MA, |
|
588 // SH.CA, S.THA, |
|
589 // H.NA, H.MA and LL.LLA |
|
590 { 3, {0x0d15, 0x0d4d, 0x0d15}, { {0, 3, 1, {0x1277}}, {-1, 1, 1, {0} } } }, |
|
591 { 3, {0x0d15, 0x0d4d, 0x0d24}, { {0, 3, 1, {0x1278}}, {-1, 1, 1, {0} } } }, |
|
592 { 3, {0x0d15, 0x0d4d, 0x0d37}, { {0, 3, 1, {0x127b}}, {-1, 1, 1, {0} } } }, |
|
593 { 3, {0x0d17, 0x0d4d, 0x0d28}, { {0, 3, 1, {0x127e}}, {-1, 1, 1, {0} } } }, |
|
594 { 3, {0x0d17, 0x0d4d, 0x0d2e}, { {0, 3, 1, {0x127d}}, {-1, 1, 1, {0} } } }, |
|
595 { 3, {0x0d19, 0x0d4d, 0x0d15}, { {0, 3, 1, {0x1280}}, {-1, 1, 1, {0} } } }, |
|
596 { 3, {0x0d19, 0x0d4d, 0x0d19}, { {0, 3, 1, {0x1281}}, {-1, 1, 1, {0} } } }, |
|
597 { 3, {0x0d1c, 0x0d4d, 0x0d1c}, { {0, 3, 1, {0x1284}}, {-1, 1, 1, {0} } } }, |
|
598 { 3, {0x0d1c, 0x0d4d, 0x0d1e}, { {0, 3, 1, {0x1285}}, {-1, 1, 1, {0} } } }, |
|
599 { 3, {0x0d1f, 0x0d4d, 0x0d1f}, { {0, 3, 1, {0x1288}}, {-1, 1, 1, {0} } } }, |
|
600 { 3, {0x0d23, 0x0d4d, 0x0d2e}, { {0, 3, 1, {0x128b}}, {-1, 1, 1, {0} } } }, |
|
601 { 3, {0x0d24, 0x0d4d, 0x0d2d}, { {0, 3, 1, {0x128e}}, {-1, 1, 1, {0} } } }, |
|
602 { 3, {0x0d24, 0x0d4d, 0x0d2e}, { {0, 3, 1, {0x128f}}, {-1, 1, 1, {0} } } }, |
|
603 { 3, {0x0d24, 0x0d4d, 0x0d38}, { {0, 3, 1, {0x1290}}, {-1, 1, 1, {0} } } }, |
|
604 { 3, {0x0d26, 0x0d4d, 0x0d26}, { {0, 3, 1, {0x1293}}, {-1, 1, 1, {0} } } }, |
|
605 { 3, {0x0d26, 0x0d4d, 0x0d27}, { {0, 3, 1, {0x1294}}, {-1, 1, 1, {0} } } }, |
|
606 { 3, {0x0d28, 0x0d4d, 0x0d24}, { {0, 3, 1, {0x129a}}, {-1, 1, 1, {0} } } }, |
|
607 { 3, {0x0d28, 0x0d4d, 0x0d26}, { {0, 3, 1, {0x1295}}, {-1, 1, 1, {0} } } }, |
|
608 { 3, {0x0d28, 0x0d4d, 0x0d27}, { {0, 3, 1, {0x1296}}, {-1, 1, 1, {0} } } }, |
|
609 { 3, {0x0d28, 0x0d4d, 0x0d28}, { {0, 3, 1, {0x1297}}, {-1, 1, 1, {0} } } }, |
|
610 { 3, {0x0d2e, 0x0d4d, 0x0d2a}, { {0, 3, 1, {0x12a4}}, {-1, 1, 1, {0} } } }, |
|
611 { 3, {0x0d2e, 0x0d4d, 0x0d2e}, { {0, 3, 1, {0x12a3}}, {-1, 1, 1, {0} } } }, |
|
612 { 3, {0x0d36, 0x0d4d, 0x0d1a}, { {0, 3, 1, {0x12ab}}, {-1, 1, 1, {0} } } }, |
|
613 { 3, {0x0d38, 0x0d4d, 0x0d25}, { {0, 3, 1, {0x12b1}}, {-1, 1, 1, {0} } } }, |
|
614 { 3, {0x0d39, 0x0d4d, 0x0d28}, { {0, 3, 1, {0x12b4}}, {-1, 1, 1, {0} } } }, |
|
615 { 3, {0x0d39, 0x0d4d, 0x0d2e}, { {0, 3, 1, {0x12b3}}, {-1, 1, 1, {0} } } }, |
|
616 { 3, {0x0d33, 0x0d4d, 0x0d23}, { {0, 3, 2, {0x1265, 0x1218}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1218}}, {-1, 1, 1, {0} } } }, |
|
617 |
|
618 // One of (KA, GA, PA, BA, MA, LA, SHA, SA, HA), Virama and LA to shaper |
|
619 { 3, {0x0d15, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x127a}}, {-1, 1, 1, {0} } } }, |
|
620 { 3, {0x0d17, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x127f}}, {-1, 1, 1, {0} } } }, |
|
621 { 3, {0x0d2a, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x129d}}, {-1, 1, 1, {0} } } }, |
|
622 { 3, {0x0d2c, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12a2}}, {-1, 1, 1, {0} } } }, |
|
623 { 3, {0x0d2e, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12a5}}, {-1, 1, 1, {0} } } }, |
|
624 { 3, {0x0d32, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12a8}}, {-1, 1, 1, {0} } } }, |
|
625 { 3, {0x0d36, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12ad}}, {-1, 1, 1, {0} } } }, |
|
626 { 3, {0x0d38, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12b2}}, {-1, 1, 1, {0} } } }, |
|
627 { 3, {0x0d39, 0x0d4d, 0x0d32}, { {0, 3, 1, {0x12b5}}, {-1, 1, 1, {0} } } }, |
|
628 |
|
629 // CA, Virama and CA to shaper |
|
630 // BA, Virama and BA to shaper |
|
631 // YA, Virama and YA to shaper |
|
632 // VA, Virama and VA to shaper |
|
633 // other Consonant, Virama and the same Consonant to shaper. |
|
634 { 3, {0x0d1a, 0x0d4d, 0x0d1a}, { {0, 3, 1, {0x1282}}, {-1, 1, 1, {0} } } }, |
|
635 { 3, {0x0d2c, 0x0d4d, 0x0d2c}, { {0, 3, 1, {0x129f}}, {-1, 1, 1, {0} } } }, |
|
636 { 3, {0x0d2f, 0x0d4d, 0x0d2f}, { {0, 3, 1, {0x12a6}}, {-1, 1, 1, {0} } } }, |
|
637 { 3, {0x0d35, 0x0d4d, 0x0d35}, { {0, 3, 1, {0x12aa}}, {-1, 1, 1, {0} } } }, |
|
638 { 3, {0x0d15, 0x0d4d, 0x0d15}, { {0, 3, 1, {0x1277}}, {-1, 1, 1, {0} } } }, |
|
639 |
|
640 // G.GA, C.CHA, K.TTA, SS.TTA, DD.DDA, NN.NNA, B.DA, B.DHA, P.PA, RR.RRA, SH.SHA, S.SA clusters to shaper |
|
641 { 3, {0x0d17, 0x0d4d, 0x0d17}, { {0, 3, 1, {0x127c}}, {-1, 1, 1, {0} } } }, |
|
642 { 3, {0x0d2c, 0x0d4d, 0x0d26}, { {0, 3, 1, {0x12a0}}, {-1, 1, 1, {0} } } }, |
|
643 { 3, {0x0d1a, 0x0d4d, 0x0d1b}, { {0, 3, 1, {0x1283}}, {-1, 1, 1, {0} } } }, |
|
644 { 3, {0x0d2c, 0x0d4d, 0x0d27}, { {0, 3, 1, {0x12a1}}, {-1, 1, 1, {0} } } }, |
|
645 { 3, {0x0d15, 0x0d4d, 0x0d1f}, { {0, 3, 1, {0x1279}}, {-1, 1, 1, {0} } } }, |
|
646 { 3, {0x0d2a, 0x0d4d, 0x0d2a}, { {0, 3, 1, {0x129c}}, {-1, 1, 1, {0} } } }, |
|
647 { 3, {0x0d37, 0x0d4d, 0x0d1f}, { {0, 3, 1, {0x12ae}}, {-1, 1, 1, {0} } } }, |
|
648 { 3, {0x0d31, 0x0d4d, 0x0d31}, { {0, 3, 1, {0x12a7}}, {-1, 1, 1, {0} } } }, |
|
649 { 3, {0x0d21, 0x0d4d, 0x0d21}, { {0, 3, 1, {0x1289}}, {-1, 1, 1, {0} } } }, |
|
650 { 3, {0x0d36, 0x0d4d, 0x0d36}, { {0, 3, 1, {0x12ac}}, {-1, 1, 1, {0} } } }, |
|
651 { 3, {0x0d23, 0x0d4d, 0x0d23}, { {0, 3, 1, {0x128c}}, {-1, 1, 1, {0} } } }, |
|
652 { 3, {0x0d38, 0x0d4d, 0x0d38}, { {0, 3, 1, {0x12b0}}, {-1, 1, 1, {0} } } }, |
|
653 |
|
654 |
|
655 // Consonant clusters from REQ1.3.11 to shaper. |
|
656 // Already covered in other sequence |
|
657 // S.RR.RRA to shaper, |
|
658 // N.RR.RRA to shaper |
|
659 { 5, {0x0d38, 0x0d4d, 0x0d31, 0x0d4d, 0x0d31}, { {0, 5, 1, {0x12af}}, {-1, 1, 1, {0} } } }, |
|
660 { 4, {0x0d28, 0x0d4d, 0x0d31, 0x0d31}, { {0, 3, 2, {0x125b, 0x1225}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1225}}, {3, 4, 1, {0x1225}}, {-1, 1, 1, {0} } } }, |
|
661 |
|
662 // N.RRA |
|
663 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d31}, { {0, 4, 1, {0x1299}}, {-1, 1, 1, {0} } } }, |
|
664 |
|
665 // NA, Virama, ZWJ, RRA to shaper |
|
666 // NA, Virama, ZWJ, ZWNJ, RRA to shaper |
|
667 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d31}, { {0, 4, 1, {0x1299}}, {-1, 1, 1, {0} } } }, |
|
668 { 5, {0x0d28, 0x0d4d, 0x200d, 0x200c, 0x0d31}, { {0, 3, 1, {0x1273}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 0, {0x0000}}, {4, 5, 1, {0x1225}}, {-1, 1, 1, {0} } } }, |
|
669 |
|
670 // Consonant cluster and YA to shaper |
|
671 // Consonant cluster and VA to shaper |
|
672 { 4, {0x0d15, 0x0d4d, 0x0d30, 0x0d3f}, { {0, 4, 3, {0x1271, 0x120a, 0x122f}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x1271, 0x122f}}, {3, 4, 1, {0x122f}}, {-1, 1, 1, {0} } } }, |
|
673 { 4, {0x0d15, 0x0d4d, 0x0d30, 0x0d35}, { {0, 3, 2, {0x1271, 0x120a}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1271}}, {3, 4, 1, {0x1229}}, {-1, 1, 1, {0} } } }, |
|
674 |
|
675 // YA, YAKAR to shaper |
|
676 // VA, VAKAR to shaper |
|
677 { 3, {0x0d15, 0x0d4d, 0x0d2f}, { {0, 3, 2, {0x120a, 0x126f}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x126f}}, {-1, 1, 1, {0} } } }, |
|
678 { 3, {0x0d15, 0x0d4d, 0x0d35}, { {0, 3, 2, {0x120a, 0x1270}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1270}}, {-1, 1, 1, {0} } } }, |
|
679 { 5, {0x0d15, 0x0d4d, 0x0d30, 0x0d4d, 0x0d2f}, { {0, 5, 3, {0x1271, 0x120a, 0x126f}}, {1, 2, 0, {0x0000}}, {2, 5, 2, {0x1271, 0x126f}}, {3, 4, 0, {0x0000}}, {4, 5, 1, {0x126f}}, {-1, 1, 1, {0} } } }, |
|
680 { 5, {0x0d15, 0x0d4d, 0x0d30, 0x0d4d, 0x0d35}, { {0, 5, 3, {0x1271, 0x120a, 0x1270}}, {1, 2, 0, {0x0000}}, {2, 5, 2, {0x1271, 0x1270}}, {3, 4, 0, {0x0000}}, {4, 5, 1, {0x1270}}, {-1, 1, 1, {0} } } }, |
|
681 { 5, {0x0d15, 0x0d4d, 0x0d2f, 0x0d4d, 0x0d30}, { {0, 5, 3, {0x1248, 0x1271, 0x1223}}, {1, 2, 0, {0x0000}}, {2, 5, 2, {0x1271, 0x1223}}, {3, 4, 0, {0x0000}}, {4, 5, 1, {0x1271}}, {-1, 1, 1, {0} } } }, |
|
682 { 5, {0x0d15, 0x0d4d, 0x0d35, 0x0d4d, 0x0d30}, { {0, 5, 3, {0x1248, 0x1271, 0x1229}}, {1, 2, 0, {0x0000}}, {2, 5, 2, {0x1271, 0x1229}}, {3, 4, 0, {0x0000}}, {4, 5, 1, {0x1271}}, {-1, 1, 1, {0} } } }, |
|
683 |
|
684 // one of (LLA, LLLA, RRA) and YA to shaper |
|
685 // one of (LLA, LLLA, RRA) and VA to shaper |
|
686 { 2, {0x0d33, 0x0d2f}, { {0, 1, 1, {0x1227}}, {1, 2, 1, {0x1223}}, {-1, 1, 1, {0} } } }, |
|
687 { 2, {0x0d34, 0x0d2f}, { {0, 1, 1, {0x1228}}, {1, 2, 1, {0x1223}}, {-1, 1, 1, {0} } } }, |
|
688 { 2, {0x0d31, 0x0d2f}, { {0, 1, 1, {0x1225}}, {1, 2, 1, {0x1223}}, {-1, 1, 1, {0} } } }, |
|
689 { 2, {0x0d33, 0x0d35}, { {0, 1, 1, {0x1227}}, {1, 2, 1, {0x1229}}, {-1, 1, 1, {0} } } }, |
|
690 { 2, {0x0d34, 0x0d35}, { {0, 1, 1, {0x1228}}, {1, 2, 1, {0x1229}}, {-1, 1, 1, {0} } } }, |
|
691 { 2, {0x0d31, 0x0d35}, { {0, 1, 1, {0x1225}}, {1, 2, 1, {0x1229}}, {-1, 1, 1, {0} } } }, |
|
692 // KSSA |
|
693 //0d15, 0d4d, 0d37 |
|
694 // Consonant cluster and RA to shaper |
|
695 { 4, {0x0d15, 0x0d4d, 0x0d30, 0x0d30}, { {0, 3, 2, {0x1271, 0x120a}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1271}}, {3, 4, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
696 |
|
697 // one of (LLA, LLLA, RRA) and RA to shaper |
|
698 { 2, {0x0d33, 0x0d30}, { {0, 1, 1, {0x1227}}, {1, 2, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
699 { 2, {0x0d34, 0x0d30}, { {0, 1, 1, {0x1228}}, {1, 2, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
700 { 2, {0x0d31, 0x0d30}, { {0, 1, 1, {0x1225}}, {1, 2, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
701 |
|
702 // YAKAR/VAKAR and RA to shaper. |
|
703 { 4, {0x0d15, 0x0d4d, 0x0d2f, 0x0d30}, { {0, 3, 2, {0x120a, 0x126f}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x126f}}, {3, 4, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
704 { 4, {0x0d15, 0x0d4d, 0x0d35, 0x0d30}, { {0, 3, 2, {0x120a, 0x1270}}, {1, 2, 0, {0x0000}}, {2, 3, 1, {0x1270}}, {3, 4, 1, {0x1224}}, {-1, 1, 1, {0} } } }, |
|
705 |
|
706 // Chillu |
|
707 // Chillu and Vowel to shaper |
|
708 // Chillu and Consonant to shaper |
|
709 // Chillu and Modifier to shaper |
|
710 // Chillu and Virama to shaper |
|
711 { 4, {0x0d06, 0x0d23, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 4, 1, {0x1272}}, {2, 3, 0, {0x058f, 0x123a}}, {3, 4, 0, {0x0d30}}, {-1, 1, 1, {0} } } }, |
|
712 { 4, {0x0d06, 0x0d28, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 4, 1, {0x1273}}, {2, 3, 0, {0x058f, 0x123a}}, {3, 4, 0, {0x0d30}}, {-1, 1, 1, {0} } } }, |
|
713 { 4, {0x0d06, 0x0d30, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 4, 1, {0x1274}}, {2, 3, 0, {0x058f, 0x123a}}, {3, 4, 0, {0x0d30}}, {-1, 1, 1, {0} } } }, |
|
714 { 4, {0x0d06, 0x0d32, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 4, 1, {0x1276}}, {2, 3, 0, {0x058f, 0x123a}}, {3, 4, 0, {0x0d30}}, {-1, 1, 1, {0} } } }, |
|
715 { 4, {0x0d06, 0x0d33, 0x0d4d, 0x200d}, { {0, 1, 1, {0x11fd}}, {1, 4, 1, {0x1275}}, {2, 3, 0, {0x058f, 0x123a}}, {3, 4, 0, {0x0d30}}, {-1, 1, 1, {0} } } }, |
|
716 |
|
717 { 4, {0x0d23, 0x0d4d, 0x200d, 0x0d06}, { {0, 3, 1, {0x1272}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x11fd}}, {-1, 1, 1, {0} } } }, |
|
718 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d09}, { {0, 3, 1, {0x1273}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1200}}, {-1, 1, 1, {0} } } }, |
|
719 { 4, {0x0d30, 0x0d4d, 0x200d, 0x0d0a}, { {0, 3, 1, {0x1274}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1201}}, {-1, 1, 1, {0} } } }, |
|
720 { 4, {0x0d32, 0x0d4d, 0x200d, 0x0d0f}, { {0, 3, 1, {0x1276}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1205}}, {-1, 1, 1, {0} } } }, |
|
721 { 4, {0x0d33, 0x0d4d, 0x200d, 0x0d13}, { {0, 3, 1, {0x1275}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1208}}, {-1, 1, 1, {0} } } }, |
|
722 |
|
723 { 4, {0x0d23, 0x0d4d, 0x200d, 0x0d16}, { {0, 3, 1, {0x1272}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x120b}}, {-1, 1, 1, {0} } } }, |
|
724 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d19}, { {0, 3, 1, {0x1273}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x120e}}, {-1, 1, 1, {0} } } }, |
|
725 { 4, {0x0d30, 0x0d4d, 0x200d, 0x0d1a}, { {0, 3, 1, {0x1274}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x120f}}, {-1, 1, 1, {0} } } }, |
|
726 { 4, {0x0d32, 0x0d4d, 0x200d, 0x0d1f}, { {0, 3, 1, {0x1276}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1214}}, {-1, 1, 1, {0} } } }, |
|
727 { 4, {0x0d33, 0x0d4d, 0x200d, 0x0d31}, { {0, 3, 1, {0x1275}}, {1, 2, 0, {0x0000}}, {2, 3, 0, {0x0000}}, {3, 4, 1, {0x1225}}, {-1, 1, 1, {0} } } }, |
|
728 |
|
729 { 4, {0x0d23, 0x0d4d, 0x200d, 0x0d02}, { {0, 3, 1, {0x1272}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fa}}, {3, 4, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
730 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d02}, { {0, 3, 1, {0x1273}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fa}}, {3, 4, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
731 { 4, {0x0d30, 0x0d4d, 0x200d, 0x0d03}, { {0, 3, 1, {0x1274}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fb}}, {3, 4, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
732 { 4, {0x0d32, 0x0d4d, 0x200d, 0x0d03}, { {0, 3, 1, {0x1276}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fb}}, {3, 4, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
733 { 4, {0x0d33, 0x0d4d, 0x200d, 0x0d03}, { {0, 3, 1, {0x1275}}, {1, 2, 0, {0x0000}}, {2, 4, 1, {0x11fb}}, {3, 4, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
734 |
|
735 { 4, {0x0d23, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1272}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
736 { 4, {0x0d28, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1273}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
737 { 4, {0x0d30, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1274}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
738 { 4, {0x0d32, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1276}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
739 { 4, {0x0d33, 0x0d4d, 0x200d, 0x0d4d}, { {0, 3, 1, {0x1275}}, {1, 2, 0, {0x0000}}, {2, 4, 2, {0x058f, 0x123a}}, {3, 4, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
740 { -1, {0}, -1, -1, 0, {0}} |
|
741 }; |
|
742 |
|
743 LOCAL_D const TTestInput_PositionParam6 Indic_GurmukhiVowelLeading[] = { |
|
744 // ARA, IRI, URA, independent vowel to shaper |
|
745 { 1, {0x0a05}, { {0, 1, 1, {0x12c3}}, {-1, 1, 1, {0} } } }, |
|
746 { 1, {0x0a06}, { {0, 1, 1, {0x12c4}}, {-1, 1, 1, {0} } } }, |
|
747 { 1, {0x0a07}, { {0, 1, 1, {0x12c5}}, {-1, 1, 1, {0} } } }, |
|
748 { 1, {0x0a08}, { {0, 1, 1, {0x12c6}}, {-1, 1, 1, {0} } } }, |
|
749 { 1, {0x0a09}, { {0, 1, 1, {0x12c7}}, {-1, 1, 1, {0} } } }, |
|
750 { 1, {0x0a0a}, { {0, 1, 1, {0x12c8}}, {-1, 1, 1, {0} } } }, |
|
751 { 1, {0x0a0b}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
752 { 1, {0x0a0c}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
753 { 1, {0x0a0d}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
754 { 1, {0x0a0e}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
755 { 1, {0x0a0f}, { {0, 1, 1, {0x12c9}}, {-1, 1, 1, {0} } } }, |
|
756 { 1, {0x0a10}, { {0, 1, 1, {0x12ca}}, {-1, 1, 1, {0} } } }, |
|
757 { 1, {0x0a11}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
758 { 1, {0x0a12}, { {0, 1, 1, {0x0000}}, {-1, 1, 1, {0} } } }, |
|
759 { 1, {0x0a13}, { {0, 1, 1, {0x12cb}}, {-1, 1, 1, {0} } } }, |
|
760 { 1, {0x0a14}, { {0, 1, 1, {0x12cc}}, {-1, 1, 1, {0} } } }, |
|
761 { 1, {0x0a72}, { {0, 1, 1, {0x130a}}, {-1, 1, 1, {0} } } }, |
|
762 { 1, {0x0a73}, { {0, 1, 1, {0x130b}}, {-1, 1, 1, {0} } } }, |
|
763 // Valid bear + vowel |
|
764 { 2, {0x0a05, 0x0a3e}, { {0, 2, 2, {0x12c3, 0x12ef}}, {1, 2, 1, {0x12ef}}, {-1, 1, 1, {0} } } }, |
|
765 { 2, {0x0a05, 0x0a48}, { {0, 2, 2, {0x12c3, 0x12f5}}, {1, 2, 1, {0x12f5}}, {-1, 1, 1, {0} } } }, |
|
766 { 2, {0x0a05, 0x0a4c}, { {0, 2, 2, {0x12c3, 0x12f7}}, {1, 2, 1, {0x12f7}}, {-1, 1, 1, {0} } } }, |
|
767 { 2, {0x0a72, 0x0a3f}, { {0, 2, 2, {0x12f0, 0x130a}}, {1, 2, 1, {0x12f0}}, {-1, 1, 1, {0} } } }, |
|
768 { 2, {0x0a72, 0x0a40}, { {0, 2, 2, {0x130a, 0x12f1}}, {1, 2, 1, {0x12f1}}, {-1, 1, 1, {0} } } }, |
|
769 { 2, {0x0a72, 0x0a47}, { {0, 2, 2, {0x130a, 0x12f4}}, {1, 2, 1, {0x12f4}}, {-1, 1, 1, {0} } } }, |
|
770 { 2, {0x0a73, 0x0a41}, { {0, 2, 1, {0x12c7}}, {-1, 1, 1, {0} } } }, |
|
771 { 2, {0x0a73, 0x0a42}, { {0, 2, 1, {0x12c8}}, {-1, 1, 1, {0} } } }, |
|
772 { 2, {0x0a73, 0x0a4b}, { {0, 2, 1, {0x12cb}}, {-1, 1, 1, {0} } } }, |
|
773 // Invalid bear + vowel sequence |
|
774 { 2, {0x0a72, 0x0a4b}, { {0, 1, 1, {0x130a}}, {1, 2, 2, {0x058f, 0x12f6}}, {-1, 1, 1, {0} } } }, |
|
775 { 2, {0x0a05, 0x0a4b}, { {0, 1, 1, {0x12c3}}, {1, 2, 2, {0x058f, 0x12f6}}, {-1, 1, 1, {0} } } }, |
|
776 { 2, {0x0a73, 0x0a3f}, { {0, 1, 1, {0x130b}}, {1, 2, 2, {0x12f0, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
777 { -1, {0}, -1, -1, 0, {0}} |
|
778 }; |
|
779 |
|
780 |
|
781 LOCAL_D const TTestInput_PositionParam6 Indic_MalayalamVowelLeading[] = { |
|
782 // Vowel |
|
783 { 1, {0x0d05}, { {0, 1, 1, {0x11fc}}, {-1, 1, 1, {0} } } }, |
|
784 { 1, {0x0d06}, { {0, 1, 1, {0x11fd}}, {-1, 1, 1, {0} } } }, |
|
785 { 1, {0x0d07}, { {0, 1, 1, {0x11fe}}, {-1, 1, 1, {0} } } }, |
|
786 { 1, {0x0d08}, { {0, 1, 1, {0x11ff}}, {-1, 1, 1, {0} } } }, |
|
787 { 1, {0x0d09}, { {0, 1, 1, {0x1200}}, {-1, 1, 1, {0} } } }, |
|
788 { 1, {0x0d0a}, { {0, 1, 1, {0x1201}}, {-1, 1, 1, {0} } } }, |
|
789 { 1, {0x0d0b}, { {0, 1, 1, {0x1202}}, {-1, 1, 1, {0} } } }, |
|
790 { 1, {0x0d60}, { {0, 1, 1, {0x123c}}, {-1, 1, 1, {0} } } }, |
|
791 { 1, {0x0d0c}, { {0, 1, 1, {0x1203}}, {-1, 1, 1, {0} } } }, |
|
792 { 1, {0x0d61}, { {0, 1, 1, {0x123d}}, {-1, 1, 1, {0} } } }, |
|
793 { 1, {0x0d0e}, { {0, 1, 1, {0x1204}}, {-1, 1, 1, {0} } } }, |
|
794 { 1, {0x0d0f}, { {0, 1, 1, {0x1205}}, {-1, 1, 1, {0} } } }, |
|
795 { 1, {0x0d10}, { {0, 1, 1, {0x1206}}, {-1, 1, 1, {0} } } }, |
|
796 { 1, {0x0d12}, { {0, 1, 1, {0x1207}}, {-1, 1, 1, {0} } } }, |
|
797 { 1, {0x0d13}, { {0, 1, 1, {0x1208}}, {-1, 1, 1, {0} } } }, |
|
798 { 1, {0x0d14}, { {0, 1, 1, {0x1209}}, {-1, 1, 1, {0} } } }, |
|
799 // Vowel + modifer |
|
800 { 2, {0x0d05, 0x0d02}, { {0, 2, 2, {0x11fc, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
801 { 2, {0x0d06, 0x0d02}, { {0, 2, 2, {0x11fd, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
802 { 2, {0x0d07, 0x0d02}, { {0, 2, 2, {0x11fe, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
803 { 2, {0x0d08, 0x0d02}, { {0, 2, 2, {0x11ff, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
804 { 2, {0x0d09, 0x0d02}, { {0, 2, 2, {0x1200, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
805 { 2, {0x0d0a, 0x0d02}, { {0, 2, 2, {0x1201, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
806 { 2, {0x0d0b, 0x0d02}, { {0, 2, 2, {0x1202, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
807 { 2, {0x0d60, 0x0d02}, { {0, 2, 2, {0x123c, 0x11fa}}, {1, 2, 1, {0x11fa}}, {-1, 1, 1, {0} } } }, |
|
808 { 2, {0x0d0c, 0x0d03}, { {0, 2, 2, {0x1203, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
809 { 2, {0x0d61, 0x0d03}, { {0, 2, 2, {0x123d, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
810 { 2, {0x0d0e, 0x0d03}, { {0, 2, 2, {0x1204, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
811 { 2, {0x0d0f, 0x0d03}, { {0, 2, 2, {0x1205, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
812 { 2, {0x0d10, 0x0d03}, { {0, 2, 2, {0x1206, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
813 { 2, {0x0d12, 0x0d03}, { {0, 2, 2, {0x1207, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
814 { 2, {0x0d13, 0x0d03}, { {0, 2, 2, {0x1208, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
815 { 2, {0x0d14, 0x0d03}, { {0, 2, 2, {0x1209, 0x11fb}}, {1, 2, 1, {0x11fb}}, {-1, 1, 1, {0} } } }, |
|
816 // Vowel, Modifier, Matra |
|
817 { 3, {0x0d05, 0x0d02, 0x0d3e}, { {0, 2, 2, {0x11fc, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
818 { 3, {0x0d06, 0x0d02, 0x0d3f}, { {0, 2, 2, {0x11fd, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
819 { 3, {0x0d07, 0x0d02, 0x0d40}, { {0, 2, 2, {0x11fe, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
820 { 3, {0x0d08, 0x0d02, 0x0d41}, { {0, 2, 2, {0x11ff, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x1231}}, {-1, 1, 1, {0} } } }, |
|
821 { 3, {0x0d09, 0x0d02, 0x0d42}, { {0, 2, 2, {0x1200, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x1232}}, {-1, 1, 1, {0} } } }, |
|
822 { 3, {0x0d0a, 0x0d02, 0x0d43}, { {0, 2, 2, {0x1201, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x058f, 0x1233}}, {-1, 1, 1, {0} } } }, |
|
823 { 3, {0x0d0b, 0x0d02, 0x0d46}, { {0, 2, 2, {0x1202, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x1234, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
824 { 3, {0x0d60, 0x0d02, 0x0d47}, { {0, 2, 2, {0x123c, 0x11fa}}, {1, 2, 1, {0x11fa}}, {2, 3, 2, {0x1235, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
825 { 3, {0x0d0c, 0x0d03, 0x0d48}, { {0, 2, 2, {0x1203, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x1236, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
826 { 3, {0x0d61, 0x0d03, 0x0d4a}, { {0, 2, 2, {0x123d, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 3, {0x1234, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
827 { 3, {0x0d0e, 0x0d03, 0x0d4b}, { {0, 2, 2, {0x1204, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 3, {0x1235, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
828 { 3, {0x0d0f, 0x0d03, 0x0d4c}, { {0, 2, 2, {0x1205, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
829 { 3, {0x0d10, 0x0d03, 0x0d3e}, { {0, 2, 2, {0x1206, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
830 { 3, {0x0d12, 0x0d03, 0x0d3f}, { {0, 2, 2, {0x1207, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
831 { 3, {0x0d13, 0x0d03, 0x0d40}, { {0, 2, 2, {0x1208, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
832 { 3, {0x0d14, 0x0d03, 0x0d4c}, { {0, 2, 2, {0x1209, 0x11fb}}, {1, 2, 1, {0x11fb}}, {2, 3, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
833 |
|
834 // Vowel, Virama, |
|
835 { 2, {0x0d05, 0x0d4d}, { {0, 1, 1, {0x11fc}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
836 { 2, {0x0d06, 0x0d4d}, { {0, 1, 1, {0x11fd}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
837 { 2, {0x0d07, 0x0d4d}, { {0, 1, 1, {0x11fe}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
838 { 2, {0x0d08, 0x0d4d}, { {0, 1, 1, {0x11ff}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
839 { 2, {0x0d09, 0x0d4d}, { {0, 1, 1, {0x1200}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
840 { 2, {0x0d0a, 0x0d4d}, { {0, 1, 1, {0x1201}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
841 { 2, {0x0d0b, 0x0d4d}, { {0, 1, 1, {0x1202}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
842 { 2, {0x0d60, 0x0d4d}, { {0, 1, 1, {0x123c}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
843 { 2, {0x0d0c, 0x0d4d}, { {0, 1, 1, {0x1203}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
844 { 2, {0x0d61, 0x0d4d}, { {0, 1, 1, {0x123d}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
845 { 2, {0x0d0e, 0x0d4d}, { {0, 1, 1, {0x1204}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
846 { 2, {0x0d0f, 0x0d4d}, { {0, 1, 1, {0x1205}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
847 { 2, {0x0d10, 0x0d4d}, { {0, 1, 1, {0x1206}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
848 { 2, {0x0d12, 0x0d4d}, { {0, 1, 1, {0x1207}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
849 { 2, {0x0d13, 0x0d4d}, { {0, 1, 1, {0x1208}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
850 { 2, {0x0d14, 0x0d4d}, { {0, 1, 1, {0x1209}}, {1, 2, 2, {0x058f, 0x123a}}, {-1, 1, 1, {0} } } }, |
|
851 |
|
852 // Vowel, Matra, |
|
853 { 2, {0x0d05, 0x0d3e}, { {0, 1, 1, {0x11fc}}, {1, 2, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
854 { 2, {0x0d06, 0x0d3f}, { {0, 1, 1, {0x11fd}}, {1, 2, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
855 { 2, {0x0d07, 0x0d40}, { {0, 1, 1, {0x11fe}}, {1, 2, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
856 { 2, {0x0d08, 0x0d41}, { {0, 1, 1, {0x11ff}}, {1, 2, 2, {0x058f, 0x1231}}, {-1, 1, 1, {0} } } }, |
|
857 { 2, {0x0d09, 0x0d42}, { {0, 1, 1, {0x1200}}, {1, 2, 2, {0x058f, 0x1232}}, {-1, 1, 1, {0} } } }, |
|
858 { 2, {0x0d0a, 0x0d43}, { {0, 1, 1, {0x1201}}, {1, 2, 2, {0x058f, 0x1233}}, {-1, 1, 1, {0} } } }, |
|
859 { 2, {0x0d0b, 0x0d46}, { {0, 1, 1, {0x1202}}, {1, 2, 2, {0x1234, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
860 { 2, {0x0d60, 0x0d47}, { {0, 1, 1, {0x123c}}, {1, 2, 2, {0x1235, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
861 { 2, {0x0d0c, 0x0d48}, { {0, 1, 1, {0x1203}}, {1, 2, 2, {0x1236, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
862 { 2, {0x0d61, 0x0d4a}, { {0, 1, 1, {0x123d}}, {1, 2, 3, {0x1234, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
863 { 2, {0x0d0e, 0x0d4b}, { {0, 1, 1, {0x1204}}, {1, 2, 3, {0x1235, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
864 { 2, {0x0d0f, 0x0d4c}, { {0, 1, 1, {0x1205}}, {1, 2, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
865 { 2, {0x0d10, 0x0d3e}, { {0, 1, 1, {0x1206}}, {1, 2, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
866 { 2, {0x0d12, 0x0d3f}, { {0, 1, 1, {0x1207}}, {1, 2, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
867 { 2, {0x0d13, 0x0d40}, { {0, 1, 1, {0x1208}}, {1, 2, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
868 { 2, {0x0d14, 0x0d4c}, { {0, 1, 1, {0x1209}}, {1, 2, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
869 // Vowel Virma, Matra |
|
870 { 3, {0x0d05, 0x0d4d, 0x0d3e}, { {0, 1, 1, {0x11fc}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
871 { 3, {0x0d06, 0x0d4d, 0x0d3f}, { {0, 1, 1, {0x11fd}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
872 { 3, {0x0d07, 0x0d4d, 0x0d40}, { {0, 1, 1, {0x11fe}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
873 { 3, {0x0d08, 0x0d4d, 0x0d41}, { {0, 1, 1, {0x11ff}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x1231}}, {-1, 1, 1, {0} } } }, |
|
874 { 3, {0x0d09, 0x0d4d, 0x0d42}, { {0, 1, 1, {0x1200}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x1232}}, {-1, 1, 1, {0} } } }, |
|
875 { 3, {0x0d0a, 0x0d4d, 0x0d43}, { {0, 1, 1, {0x1201}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x1233}}, {-1, 1, 1, {0} } } }, |
|
876 { 3, {0x0d0b, 0x0d4d, 0x0d46}, { {0, 1, 1, {0x1202}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x1234, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
877 { 3, {0x0d60, 0x0d4d, 0x0d47}, { {0, 1, 1, {0x123c}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x1235, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
878 { 3, {0x0d0c, 0x0d4d, 0x0d48}, { {0, 1, 1, {0x1203}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x1236, 0x058f}}, {-1, 1, 1, {0} } } }, |
|
879 { 3, {0x0d61, 0x0d4d, 0x0d4a}, { {0, 1, 1, {0x123d}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 3, {0x1234, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
880 { 3, {0x0d0e, 0x0d4d, 0x0d4b}, { {0, 1, 1, {0x1204}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 3, {0x1235, 0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
881 { 3, {0x0d0f, 0x0d4d, 0x0d4c}, { {0, 1, 1, {0x1205}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
882 { 3, {0x0d10, 0x0d4d, 0x0d3e}, { {0, 1, 1, {0x1206}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x122e}}, {-1, 1, 1, {0} } } }, |
|
883 { 3, {0x0d12, 0x0d4d, 0x0d3f}, { {0, 1, 1, {0x1207}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x122f}}, {-1, 1, 1, {0} } } }, |
|
884 { 3, {0x0d13, 0x0d4d, 0x0d40}, { {0, 1, 1, {0x1208}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x1230}}, {-1, 1, 1, {0} } } }, |
|
885 { 3, {0x0d14, 0x0d4d, 0x0d4c}, { {0, 1, 1, {0x1209}}, {1, 2, 2, {0x058f, 0x123a}}, {2, 3, 2, {0x058f, 0x123b}}, {-1, 1, 1, {0} } } }, |
|
886 { -1, {0}, -1, -1, 0, {0}} |
|
887 }; |
|
888 |
|
889 /** |
|
890 This array of structs is used in the test routine |
|
891 CTGlyphSelection::TestThai_InvalidGlyphClusters() to verify that |
|
892 GetCharacterPosition() correctly uses the dotted circle character |
|
893 when it crosses a glyph cluster boundary and finds invalid combining |
|
894 characters. |
|
895 */ |
|
896 LOCAL_D const TTestInput_PositionParam2 Thai_GlyphClusterBoundaries[] = { |
|
897 // --TEXT---------------- --INVOKE 1--------------- --INVOKE 2---------------- |
|
898 |
|
899 //0.TEST D1 - Control character - skipped |
|
900 |
|
901 //0.TEST D2 - Non Thai letter |
|
902 { 2, {0x0E3F, 0x0E5B}, {{0, 1, 1, {0x0E3F}}, {1, 2, 1, {0x0E5B}}}}, |
|
903 { 2, {0x0041, 0x0E03}, {{0, 1, 1, {0x0041}}, {1, 2, 1, {0x0E03}}}}, |
|
904 { 2, {0x0E2F, 0x0E40}, {{0, 1, 1, {0x0E2F}}, {1, 2, 1, {0x0E40}}}}, |
|
905 { 2, {0x0E3F, 0x0E30}, {{0, 1, 1, {0x0E3F}}, {1, 2, 1, {0x0E30}}}}, |
|
906 { 2, {0x0E46, 0x0E45}, {{0, 1, 1, {0x0E46}}, {1, 2, 1, {0x0E45}}}}, |
|
907 { 2, {0x0E4F, 0x0E24}, {{0, 1, 1, {0x0E4F}}, {1, 2, 1, {0x0E24}}}}, |
|
908 |
|
909 { 2, {0x0E50, 0x0E38}, {{0, 1, 1, {0x0E50}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
910 { 2, {0x0E51, 0x0E39}, {{0, 1, 1, {0x0E51}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
911 { 2, {0x0E52, 0x0E3A}, {{0, 1, 1, {0x0E52}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
912 { 2, {0x0E55, 0x0E49}, {{0, 1, 1, {0x0E55}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
913 { 2, {0x0E56, 0x0E4C}, {{0, 1, 1, {0x0E56}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
914 { 2, {0x0E58, 0x0E47}, {{0, 1, 1, {0x0E58}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
915 { 2, {0x0E59, 0x0E4E}, {{0, 1, 1, {0x0E59}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
916 { 2, {0x0E5A, 0x0E34}, {{0, 1, 1, {0x0E5A}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
917 { 2, {0x0E5B, 0x0E31}, {{0, 1, 1, {0x0E5B}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
918 { 2, {0x005A, 0x0E37}, {{0, 1, 1, {0x005A}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
919 |
|
920 //16.TEST D3 - Thai consonant |
|
921 { 2, {0x0E01, 0x0E3F}, {{0, 1, 1, {0x0E01}}, {1, 2, 1, {0x0E3F}}}}, |
|
922 { 2, {0x0E01, 0x0E03}, {{0, 1, 1, {0x0E01}}, {1, 2, 1, {0x0E03}}}}, |
|
923 { 2, {0x0E02, 0x0E40}, {{0, 1, 1, {0x0E02}}, {1, 2, 1, {0x0E40}}}}, |
|
924 { 2, {0x0E03, 0x0E30}, {{0, 1, 1, {0x0E03}}, {1, 2, 1, {0x0E30}}}}, |
|
925 { 2, {0x0E04, 0x0E45}, {{0, 1, 1, {0x0E04}}, {1, 2, 1, {0x0E45}}}}, |
|
926 { 2, {0x0E05, 0x0E24}, {{0, 1, 1, {0x0E05}}, {1, 2, 1, {0x0E24}}}}, |
|
927 |
|
928 { 2, {0x0E06, 0x0E38}, {{0, 2, 2, {0x0E06, 0x0E38}}, {-1, -1, 0, {0}}}}, |
|
929 { 2, {0x0E07, 0x0E39}, {{0, 2, 2, {0x0E07, 0x0E39}}, {-1, -1, 0, {0}}}}, |
|
930 { 2, {0x0E23, 0x0E3A}, {{0, 2, 2, {0x0E23, 0x0E3A}}, {-1, -1, 0, {0}}}}, |
|
931 { 2, {0x0E25, 0x0E49}, {{0, 2, 2, {0x0E25, 0xF70B}}, {-1, -1, 0, {0}}}}, |
|
932 { 2, {0x0E27, 0x0E4C}, {{0, 2, 2, {0x0E27, 0xF70E}}, {-1, -1, 0, {0}}}}, |
|
933 { 2, {0x0E28, 0x0E47}, {{0, 2, 2, {0x0E28, 0x0E47}}, {-1, -1, 0, {0}}}}, |
|
934 { 2, {0x0E29, 0x0E4E}, {{0, 2, 2, {0x0E29, 0x0E4E}}, {-1, -1, 0, {0}}}}, |
|
935 { 2, {0x0E2A, 0x0E34}, {{0, 2, 2, {0x0E2A, 0x0E34}}, {-1, -1, 0, {0}}}}, |
|
936 { 2, {0x0E2D, 0x0E31}, {{0, 2, 2, {0x0E2D, 0x0E31}}, {-1, -1, 0, {0}}}}, |
|
937 { 2, {0x0E2E, 0x0E37}, {{0, 2, 2, {0x0E2E, 0x0E37}}, {-1, -1, 0, {0}}}}, |
|
938 |
|
939 //32.TEST D4 - Thai leading vowel |
|
940 { 2, {0x0E40, 0x0E3F}, {{0, 1, 1, {0x0E40}}, {1, 2, 1, {0x0E3F}}}}, |
|
941 { 2, {0x0E41, 0x0E03}, {{0, 1, 1, {0x0E41}}, {1, 2, 1, {0x0E03}}}}, |
|
942 { 2, {0x0E42, 0x0E40}, {{0, 1, 1, {0x0E42}}, {1, 2, 1, {0x0E40}}}}, |
|
943 { 2, {0x0E43, 0x0E30}, {{0, 1, 1, {0x0E43}}, {1, 2, 1, {0x0E30}}}}, |
|
944 { 2, {0x0E44, 0x0E45}, {{0, 1, 1, {0x0E44}}, {1, 2, 1, {0x0E45}}}}, |
|
945 { 2, {0x0E44, 0x0E24}, {{0, 1, 1, {0x0E44}}, {1, 2, 1, {0x0E24}}}}, |
|
946 |
|
947 { 2, {0x0E40, 0x0E38}, {{0, 1, 1, {0x0E40}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
948 { 2, {0x0E41, 0x0E39}, {{0, 1, 1, {0x0E41}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
949 { 2, {0x0E42, 0x0E3A}, {{0, 1, 1, {0x0E42}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
950 { 2, {0x0E43, 0x0E49}, {{0, 1, 1, {0x0E43}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
951 { 2, {0x0E44, 0x0E4C}, {{0, 1, 1, {0x0E44}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
952 { 2, {0x0E40, 0x0E47}, {{0, 1, 1, {0x0E40}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
953 { 2, {0x0E41, 0x0E4E}, {{0, 1, 1, {0x0E41}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
954 { 2, {0x0E42, 0x0E34}, {{0, 1, 1, {0x0E42}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
955 { 2, {0x0E43, 0x0E31}, {{0, 1, 1, {0x0E43}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
956 { 2, {0x0E44, 0x0E37}, {{0, 1, 1, {0x0E44}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
957 |
|
958 //48.TEST D5 - Thai following vowel 1 |
|
959 { 2, {0x0E30, 0x0E3F}, {{0, 1, 1, {0x0E30}}, {1, 2, 1, {0x0E3F}}}}, |
|
960 { 2, {0x0E32, 0x0E03}, {{0, 1, 1, {0x0E32}}, {1, 2, 1, {0x0E03}}}}, |
|
961 { 2, {0x0E33, 0x0E40}, {{0, 1, 2, {KUnicodeDottedCircle, 0x0E33}},{1, 2, 1, {0x0E40}}}}, |
|
962 { 2, {0x0E30, 0x0E30}, {{0, 1, 1, {0x0E30}}, {1, 2, 1, {0x0E30}}}}, |
|
963 { 2, {0x0E32, 0x0E45}, {{0, 1, 1, {0x0E32}}, {1, 2, 1, {0x0E45}}}}, |
|
964 { 2, {0x0E33, 0x0E24}, {{0, 1, 2, {KUnicodeDottedCircle, 0x0E33}},{1, 2, 1, {0x0E24}}}}, |
|
965 |
|
966 { 2, {0x0E30, 0x0E38}, {{0, 1, 1, {0x0E30}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
967 { 2, {0x0E32, 0x0E39}, {{0, 1, 1, {0x0E32}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
968 { 2, {0x0E33, 0x0E3A}, {{0, 1, 2, {KUnicodeDottedCircle, 0x0E33}},{1, 2, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
969 { 2, {0x0E30, 0x0E49}, {{0, 1, 1, {0x0E30}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
970 { 2, {0x0E32, 0x0E4C}, {{0, 1, 1, {0x0E32}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
971 { 2, {0x0E33, 0x0E47}, {{0, 1, 2, {KUnicodeDottedCircle, 0x0E33}},{1, 2, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
972 { 2, {0x0E30, 0x0E4E}, {{0, 1, 1, {0x0E30}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
973 { 2, {0x0E32, 0x0E34}, {{0, 1, 1, {0x0E32}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
974 { 2, {0x0E33, 0x0E31}, {{0, 1, 2, {KUnicodeDottedCircle, 0x0E33}},{1, 2, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
975 { 2, {0x0E30, 0x0E37}, {{0, 1, 1, {0x0E30}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
976 |
|
977 //64.TEST D6 - Thai following vowel 2 |
|
978 { 2, {0x0E45, 0x0E3F}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E3F}}}}, |
|
979 { 2, {0x0E45, 0x0E03}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E03}}}}, |
|
980 { 2, {0x0E45, 0x0E40}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E40}}}}, |
|
981 { 2, {0x0E45, 0x0E30}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E30}}}}, |
|
982 { 2, {0x0E45, 0x0E45}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E45}}}}, |
|
983 { 2, {0x0E45, 0x0E24}, {{0, 1, 1, {0x0E45}}, {1, 2, 1, {0x0E24}}}}, |
|
984 |
|
985 { 2, {0x0E45, 0x0E38}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
986 { 2, {0x0E45, 0x0E39}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
987 { 2, {0x0E45, 0x0E3A}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
988 { 2, {0x0E45, 0x0E49}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
989 { 2, {0x0E45, 0x0E4C}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
990 { 2, {0x0E45, 0x0E47}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
991 { 2, {0x0E45, 0x0E4E}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
992 { 2, {0x0E45, 0x0E34}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
993 { 2, {0x0E45, 0x0E31}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
994 { 2, {0x0E45, 0x0E37}, {{0, 1, 1, {0x0E45}}, {1, 2, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
995 |
|
996 //80.TEST D7 - Thai following vowel 3 |
|
997 { 2, {0x0E24, 0x0E3F}, {{0, 1, 1, {0x0E24}}, {1, 2, 1, {0x0E3F}}}}, |
|
998 { 2, {0x0E26, 0x0E03}, {{0, 1, 1, {0x0E26}}, {1, 2, 1, {0x0E03}}}}, |
|
999 { 2, {0x0E24, 0x0E40}, {{0, 1, 1, {0x0E24}}, {1, 2, 1, {0x0E40}}}}, |
|
1000 { 2, {0x0E26, 0x0E30}, {{0, 1, 1, {0x0E26}}, {1, 2, 1, {0x0E30}}}}, |
|
1001 { 2, {0x0E24, 0x0E45}, {{0, 1, 1, {0x0E24}}, {1, 2, 1, {0x0E45}}}}, |
|
1002 { 2, {0x0E26, 0x0E24}, {{0, 1, 1, {0x0E26}}, {1, 2, 1, {0x0E24}}}}, |
|
1003 |
|
1004 { 2, {0x0E24, 0x0E38}, {{0, 2, 2, {0x0E24, 0xF718}}, {-1, -1, 0, {0}}}}, |
|
1005 { 2, {0x0E26, 0x0E39}, {{0, 2, 2, {0x0E26, 0xF719}}, {-1, -1, 0, {0}}}}, |
|
1006 { 2, {0x0E24, 0x0E3A}, {{0, 2, 2, {0x0E24, 0xF71A}}, {-1, -1, 0, {0}}}}, |
|
1007 { 2, {0x0E26, 0x0E49}, {{0, 2, 2, {0x0E26, 0xF70B}}, {-1, -1, 0, {0}}}}, |
|
1008 { 2, {0x0E24, 0x0E4C}, {{0, 2, 2, {0x0E24, 0xF70E}}, {-1, -1, 0, {0}}}}, |
|
1009 { 2, {0x0E26, 0x0E47}, {{0, 2, 2, {0x0E26, 0x0E47}}, {-1, -1, 0, {0}}}}, |
|
1010 { 2, {0x0E24, 0x0E4E}, {{0, 2, 2, {0x0E24, 0x0E4E}}, {-1, -1, 0, {0}}}}, |
|
1011 { 2, {0x0E26, 0x0E34}, {{0, 2, 2, {0x0E26, 0x0E34}}, {-1, -1, 0, {0}}}}, |
|
1012 { 2, {0x0E24, 0x0E31}, {{0, 2, 2, {0x0E24, 0x0E31}}, {-1, -1, 0, {0}}}}, |
|
1013 { 2, {0x0E26, 0x0E37}, {{0, 2, 2, {0x0E26, 0x0E37}}, {-1, -1, 0, {0}}}}, |
|
1014 |
|
1015 //96.TEST D8 - Thai NO NU & Below Vowel 1 |
|
1016 { 3, {0x0E19, 0x0E38, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E3F}}}}, |
|
1017 { 3, {0x0E19, 0x0E38, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E03}}}}, |
|
1018 { 3, {0x0E19, 0x0E38, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E40}}}}, |
|
1019 { 3, {0x0E19, 0x0E38, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E30}}}}, |
|
1020 { 3, {0x0E19, 0x0E38, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E45}}}}, |
|
1021 { 3, {0x0E19, 0x0E38, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 1, {0x0E24}}}}, |
|
1022 |
|
1023 { 3, {0x0E19, 0x0E38, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1024 { 3, {0x0E19, 0x0E38, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1025 { 3, {0x0E19, 0x0E38, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1026 { 3, {0x0E19, 0x0E38, 0x0E49}, {{0, 3, 3, {0x0E19, 0x0E38, 0xF70B}}, {-1, -1, 0, {0}}}}, |
|
1027 { 3, {0x0E19, 0x0E38, 0x0E4C}, {{0, 3, 3, {0x0E19, 0x0E38, 0xF70E}}, {-1, -1, 0, {0}}}}, |
|
1028 { 3, {0x0E19, 0x0E38, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1029 { 3, {0x0E19, 0x0E38, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1030 { 3, {0x0E19, 0x0E38, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1031 { 3, {0x0E19, 0x0E38, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1032 { 3, {0x0E19, 0x0E38, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E38}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1033 |
|
1034 //112.TEST D9 - Thai NO NU & Below Vowel 2 |
|
1035 { 3, {0x0E19, 0x0E39, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E3F}}}}, |
|
1036 { 3, {0x0E19, 0x0E39, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E03}}}}, |
|
1037 { 3, {0x0E19, 0x0E39, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E40}}}}, |
|
1038 { 3, {0x0E19, 0x0E39, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E30}}}}, |
|
1039 { 3, {0x0E19, 0x0E39, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E45}}}}, |
|
1040 { 3, {0x0E19, 0x0E39, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 1, {0x0E24}}}}, |
|
1041 |
|
1042 { 3, {0x0E19, 0x0E39, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1043 { 3, {0x0E19, 0x0E39, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1044 { 3, {0x0E19, 0x0E39, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1045 { 3, {0x0E19, 0x0E39, 0x0E49}, {{0, 3, 3, {0x0E19, 0x0E39, 0xF70B}}, {-1, -1, 0, {0}}}}, |
|
1046 { 3, {0x0E19, 0x0E39, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1047 { 3, {0x0E19, 0x0E39, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1048 { 3, {0x0E19, 0x0E39, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1049 { 3, {0x0E19, 0x0E39, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1050 { 3, {0x0E19, 0x0E39, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1051 { 3, {0x0E19, 0x0E39, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E39}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1052 |
|
1053 //128.TEST D10 - Thai NO NU & Below Diacritic |
|
1054 { 3, {0x0E19, 0x0E3A, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E3F}}}}, |
|
1055 { 3, {0x0E19, 0x0E3A, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E03}}}}, |
|
1056 { 3, {0x0E19, 0x0E3A, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E40}}}}, |
|
1057 { 3, {0x0E19, 0x0E3A, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E30}}}}, |
|
1058 { 3, {0x0E19, 0x0E3A, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E45}}}}, |
|
1059 { 3, {0x0E19, 0x0E3A, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 1, {0x0E24}}}}, |
|
1060 |
|
1061 { 3, {0x0E19, 0x0E3A, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1062 { 3, {0x0E19, 0x0E3A, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1063 { 3, {0x0E19, 0x0E3A, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1064 { 3, {0x0E19, 0x0E3A, 0x0E49}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1065 { 3, {0x0E19, 0x0E3A, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1066 { 3, {0x0E19, 0x0E3A, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1067 { 3, {0x0E19, 0x0E3A, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1068 { 3, {0x0E19, 0x0E3A, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1069 { 3, {0x0E19, 0x0E3A, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1070 { 3, {0x0E19, 0x0E3A, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E3A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1071 |
|
1072 //144.TEST D11 - Thai NO NU & Tone mark |
|
1073 { 3, {0x0E19, 0x0E48, 0x0E3F}, {{0, 2, 2, {0x0E19, 0xF70A}}, {2, 3, 1, {0x0E3F}}}}, |
|
1074 { 3, {0x0E19, 0x0E49, 0x0E03}, {{0, 2, 2, {0x0E19, 0xF70B}}, {2, 3, 1, {0x0E03}}}}, |
|
1075 { 3, {0x0E19, 0x0E4A, 0x0E40}, {{0, 2, 2, {0x0E19, 0xF70C}}, {2, 3, 1, {0x0E40}}}}, |
|
1076 { 3, {0x0E19, 0x0E4B, 0x0E30}, {{0, 2, 2, {0x0E19, 0xF70D}}, {2, 3, 1, {0x0E30}}}}, |
|
1077 { 3, {0x0E19, 0x0E48, 0x0E45}, {{0, 2, 2, {0x0E19, 0xF70A}}, {2, 3, 1, {0x0E45}}}}, |
|
1078 { 3, {0x0E19, 0x0E49, 0x0E24}, {{0, 2, 2, {0x0E19, 0xF70B}}, {2, 3, 1, {0x0E24}}}}, |
|
1079 |
|
1080 { 3, {0x0E19, 0x0E4A, 0x0E38}, {{0, 2, 2, {0x0E19, 0xF70C}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1081 { 3, {0x0E19, 0x0E4B, 0x0E39}, {{0, 2, 2, {0x0E19, 0xF70D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1082 { 3, {0x0E19, 0x0E48, 0x0E3A}, {{0, 2, 2, {0x0E19, 0xF70A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1083 { 3, {0x0E19, 0x0E49, 0x0E49}, {{0, 2, 2, {0x0E19, 0xF70B}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1084 { 3, {0x0E19, 0x0E4A, 0x0E4C}, {{0, 2, 2, {0x0E19, 0xF70C}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1085 { 3, {0x0E19, 0x0E4B, 0x0E47}, {{0, 2, 2, {0x0E19, 0xF70D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1086 { 3, {0x0E19, 0x0E48, 0x0E4E}, {{0, 2, 2, {0x0E19, 0xF70A}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1087 { 3, {0x0E19, 0x0E49, 0x0E34}, {{0, 2, 2, {0x0E19, 0xF70B}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1088 { 3, {0x0E19, 0x0E4A, 0x0E31}, {{0, 2, 2, {0x0E19, 0xF70C}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1089 { 3, {0x0E19, 0x0E4B, 0x0E37}, {{0, 2, 2, {0x0E19, 0xF70D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1090 |
|
1091 //160.TEST D12 - Thai NO NU & Above Diacritic 1 |
|
1092 { 3, {0x0E19, 0x0E4C, 0x0E3F}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 1, {0x0E3F}}}}, |
|
1093 { 3, {0x0E19, 0x0E4D, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 1, {0x0E03}}}}, |
|
1094 { 3, {0x0E19, 0x0E4C, 0x0E40}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 1, {0x0E40}}}}, |
|
1095 { 3, {0x0E19, 0x0E4D, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 1, {0x0E30}}}}, |
|
1096 { 3, {0x0E19, 0x0E4C, 0x0E45}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 1, {0x0E45}}}}, |
|
1097 { 3, {0x0E19, 0x0E4D, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 1, {0x0E24}}}}, |
|
1098 |
|
1099 { 3, {0x0E19, 0x0E4C, 0x0E38}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1100 { 3, {0x0E19, 0x0E4D, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1101 { 3, {0x0E19, 0x0E4C, 0x0E3A}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1102 { 3, {0x0E19, 0x0E4D, 0x0E49}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1103 { 3, {0x0E19, 0x0E4C, 0x0E4C}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1104 { 3, {0x0E19, 0x0E4D, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1105 { 3, {0x0E19, 0x0E4C, 0x0E4E}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1106 { 3, {0x0E19, 0x0E4D, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1107 { 3, {0x0E19, 0x0E4C, 0x0E31}, {{0, 2, 2, {0x0E19, 0xF70E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1108 { 3, {0x0E19, 0x0E4D, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E4D}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1109 |
|
1110 //176.TEST D13 - Thai NO NU & Above Diacritic 2 |
|
1111 { 3, {0x0E19, 0x0E47, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E3F}}}}, |
|
1112 { 3, {0x0E19, 0x0E47, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E03}}}}, |
|
1113 { 3, {0x0E19, 0x0E47, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E40}}}}, |
|
1114 { 3, {0x0E19, 0x0E47, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E30}}}}, |
|
1115 { 3, {0x0E19, 0x0E47, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E45}}}}, |
|
1116 { 3, {0x0E19, 0x0E47, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 1, {0x0E24}}}}, |
|
1117 |
|
1118 { 3, {0x0E19, 0x0E47, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1119 { 3, {0x0E19, 0x0E47, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1120 { 3, {0x0E19, 0x0E47, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1121 { 3, {0x0E19, 0x0E47, 0x0E49}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1122 { 3, {0x0E19, 0x0E47, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1123 { 3, {0x0E19, 0x0E47, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1124 { 3, {0x0E19, 0x0E47, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1125 { 3, {0x0E19, 0x0E47, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1126 { 3, {0x0E19, 0x0E47, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1127 { 3, {0x0E19, 0x0E47, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E47}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1128 |
|
1129 //176.TEST D14 - Thai NO NU & Above Diacritic 3 |
|
1130 { 3, {0x0E19, 0x0E4E, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E3F}}}}, |
|
1131 { 3, {0x0E19, 0x0E4E, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E03}}}}, |
|
1132 { 3, {0x0E19, 0x0E4E, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E40}}}}, |
|
1133 { 3, {0x0E19, 0x0E4E, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E30}}}}, |
|
1134 { 3, {0x0E19, 0x0E4E, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E45}}}}, |
|
1135 { 3, {0x0E19, 0x0E4E, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 1, {0x0E24}}}}, |
|
1136 |
|
1137 { 3, {0x0E19, 0x0E4E, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1138 { 3, {0x0E19, 0x0E4E, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1139 { 3, {0x0E19, 0x0E4E, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1140 { 3, {0x0E19, 0x0E4E, 0x0E49}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1141 { 3, {0x0E19, 0x0E4E, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1142 { 3, {0x0E19, 0x0E4E, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1143 { 3, {0x0E19, 0x0E4E, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1144 { 3, {0x0E19, 0x0E4E, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1145 { 3, {0x0E19, 0x0E4E, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1146 { 3, {0x0E19, 0x0E4E, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E4E}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1147 |
|
1148 //192.TEST D15 - Thai NO NU & Above Vowel 1 |
|
1149 { 3, {0x0E19, 0x0E34, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E3F}}}}, |
|
1150 { 3, {0x0E19, 0x0E34, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E03}}}}, |
|
1151 { 3, {0x0E19, 0x0E34, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E40}}}}, |
|
1152 { 3, {0x0E19, 0x0E34, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E30}}}}, |
|
1153 { 3, {0x0E19, 0x0E34, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E45}}}}, |
|
1154 { 3, {0x0E19, 0x0E34, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 1, {0x0E24}}}}, |
|
1155 |
|
1156 { 3, {0x0E19, 0x0E34, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1157 { 3, {0x0E19, 0x0E34, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1158 { 3, {0x0E19, 0x0E34, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1159 { 3, {0x0E19, 0x0E34, 0x0E49}, {{0, 3, 3, {0x0E19, 0x0E34, 0x0E49}}, {-1, -1, 0, {0}}}}, |
|
1160 { 3, {0x0E19, 0x0E34, 0x0E4C}, {{0, 3, 3, {0x0E19, 0x0E34, 0x0E4C}}, {-1, -1, 0, {0}}}}, |
|
1161 { 3, {0x0E19, 0x0E34, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1162 { 3, {0x0E19, 0x0E34, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1163 { 3, {0x0E19, 0x0E34, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1164 { 3, {0x0E19, 0x0E34, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1165 { 3, {0x0E19, 0x0E34, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1166 |
|
1167 //208.TEST D16 - Thai NO NU & Above Vowel 2 |
|
1168 { 3, {0x0E19, 0x0E31, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 1, {0x0E3F}}}}, |
|
1169 { 3, {0x0E19, 0x0E36, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 1, {0x0E03}}}}, |
|
1170 { 3, {0x0E19, 0x0E31, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 1, {0x0E40}}}}, |
|
1171 { 3, {0x0E19, 0x0E36, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 1, {0x0E30}}}}, |
|
1172 { 3, {0x0E19, 0x0E31, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 1, {0x0E45}}}}, |
|
1173 { 3, {0x0E19, 0x0E36, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 1, {0x0E24}}}}, |
|
1174 |
|
1175 { 3, {0x0E19, 0x0E31, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1176 { 3, {0x0E19, 0x0E36, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1177 { 3, {0x0E19, 0x0E31, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1178 { 3, {0x0E19, 0x0E36, 0x0E49}, {{0, 3, 3, {0x0E19, 0x0E36, 0x0E49}}, {-1, -1, 0, {0}}}}, |
|
1179 { 3, {0x0E19, 0x0E31, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1180 { 3, {0x0E19, 0x0E36, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1181 { 3, {0x0E19, 0x0E31, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1182 { 3, {0x0E19, 0x0E36, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1183 { 3, {0x0E19, 0x0E31, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E31}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1184 { 3, {0x0E19, 0x0E36, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E36}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1185 |
|
1186 //240.TEST D17 - Thai NO NU & Above Vowel 3 |
|
1187 { 3, {0x0E19, 0x0E35, 0x0E3F}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 1, {0x0E3F}}}}, |
|
1188 { 3, {0x0E19, 0x0E37, 0x0E03}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 1, {0x0E03}}}}, |
|
1189 { 3, {0x0E19, 0x0E35, 0x0E40}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 1, {0x0E40}}}}, |
|
1190 { 3, {0x0E19, 0x0E37, 0x0E30}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 1, {0x0E30}}}}, |
|
1191 { 3, {0x0E19, 0x0E35, 0x0E45}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 1, {0x0E45}}}}, |
|
1192 { 3, {0x0E19, 0x0E37, 0x0E24}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 1, {0x0E24}}}}, |
|
1193 |
|
1194 { 3, {0x0E19, 0x0E35, 0x0E38}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E38}}}}, |
|
1195 { 3, {0x0E19, 0x0E37, 0x0E39}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E39}}}}, |
|
1196 { 3, {0x0E19, 0x0E35, 0x0E3A}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E3A}}}}, |
|
1197 { 3, {0x0E19, 0x0E37, 0x0E49}, {{0, 3, 3, {0x0E19, 0x0E37, 0x0E49}}, {-1, -1, 0, {0}}}}, |
|
1198 { 3, {0x0E19, 0x0E35, 0x0E4C}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70E}}}}, |
|
1199 { 3, {0x0E19, 0x0E37, 0x0E47}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1200 { 3, {0x0E19, 0x0E35, 0x0E4E}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4E}}}}, |
|
1201 { 3, {0x0E19, 0x0E37, 0x0E34}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E34}}}}, |
|
1202 { 3, {0x0E19, 0x0E35, 0x0E31}, {{0, 2, 2, {0x0E19, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E31}}}}, |
|
1203 { 3, {0x0E19, 0x0E37, 0x0E37}, {{0, 2, 2, {0x0E19, 0x0E37}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E37}}}}, |
|
1204 |
|
1205 //256.TEST D18a - Test Thai combining marks stack over a dotted circle. |
|
1206 { 2, {0x0E36, 0x0E48}, {{0, 2, 3, {KUnicodeDottedCircle, 0x0E36, 0x0E48}}, {-1, -1, 0, {0}}}}, |
|
1207 |
|
1208 //257.TEST D18b - Test non-thai consonant preceding two tone/signs in a row |
|
1209 { 2, {0x0041, 0x0E48, 0x0E49}, {{1, 2, 2, {KUnicodeDottedCircle, 0xF70A}}, {2, 3, 2, {KUnicodeDottedCircle, 0xF70B}}}}, |
|
1210 |
|
1211 //258. TEST DEF038524 - Test WTT2.0 Rare 4 optional combinations 0xBE, 0xDE, 0xE7, 0xF7 |
|
1212 //3 Not supported, but render should degrade display to not overstrike at a minimum. 1 is supported. |
|
1213 { 3, {0x0E01, 0x0E35, 0x0E47}, {{0, 2, 2, {0x0E01, 0x0E35}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1214 { 3, {0x0E01, 0x0E37, 0x0E47}, {{0, 2, 2, {0x0E01, 0x0E37}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E47}}}}, |
|
1215 { 3, {0x0E01, 0x0E38, 0x0E4D}, {{0, 3, 3, {0x0E01, 0x0E38, 0x0E4D}}, {-1, -1, 0, {0}}}}, |
|
1216 { 3, {0x0E01, 0x0E34, 0x0E4D}, {{0, 2, 2, {0x0E01, 0x0E34}}, {2, 3, 2, {KUnicodeDottedCircle, 0x0E4D}}}}, |
|
1217 |
|
1218 //246.TABLE END |
|
1219 { -1, {0}, {{-1, -1, 0, {0}}, {-1, -1, 0, {0}}}} |
|
1220 }; |
|
1221 |
|
1222 |
|
1223 // |
|
1224 // --- CLASS CTGlyphSelection -------------------------------------------- |
|
1225 // |
|
1226 |
|
1227 |
|
1228 CTGlyphSelection::CTGlyphSelection(CTestStep* aStep) : |
|
1229 CTGraphicsBase(aStep), |
|
1230 iTestFont(NULL), |
|
1231 iTestGraphicsDevice(NULL), |
|
1232 iTestGraphicsContext(NULL) |
|
1233 { |
|
1234 } |
|
1235 |
|
1236 |
|
1237 CTGlyphSelection::~CTGlyphSelection() |
|
1238 /** |
|
1239 This method cleans up after testing is finished. It releases memory |
|
1240 allocated by the test obejct at a point before object destruction. |
|
1241 */ |
|
1242 { |
|
1243 delete iTestGraphicsContext; |
|
1244 delete iTestGraphicsDevice; |
|
1245 delete iTestFont; |
|
1246 iFs.Close(); |
|
1247 } |
|
1248 |
|
1249 void CTGlyphSelection::ConstructL() |
|
1250 { |
|
1251 CreateTestGraphicsContextL(); |
|
1252 User::LeaveIfError(iFs.Connect()); |
|
1253 } |
|
1254 |
|
1255 void CTGlyphSelection::CreateTestGraphicsContextL() |
|
1256 /** |
|
1257 This method sets-up the context data for the proceeding test cases. |
|
1258 */ |
|
1259 { |
|
1260 // Setup 400 pixel dummy graphics test device. |
|
1261 TSize windowSize(400, 400); |
|
1262 iTestGraphicsDevice = CTestGraphicsDevice::NewL(windowSize); |
|
1263 |
|
1264 // Create a dummy graphics test context. |
|
1265 CGraphicsContext* tContext = NULL; |
|
1266 TEST(iTestGraphicsDevice->CreateContext(tContext) == KErrNone); |
|
1267 iTestGraphicsContext = static_cast<CTestGraphicsContext*>(tContext); |
|
1268 |
|
1269 // Allocate the dummy test font to be used. |
|
1270 iTestFont = new (ELeave) CTestFont; |
|
1271 } |
|
1272 |
|
1273 |
|
1274 LOCAL_C TInt TestApiBoundaries_TC2(TAny* aData) |
|
1275 /** |
|
1276 This is a root thread function which runs as part of the test case |
|
1277 CTGlyphSelection::TestApiBoundaries(). It tests a panic |
|
1278 is produced when an invalid text descriptor is supplied in the |
|
1279 TPositionParam argument. |
|
1280 */ |
|
1281 { |
|
1282 CTGlyphSelection* testPtr = (CTGlyphSelection*)aData; |
|
1283 |
|
1284 CFont::TPositionParam param; |
|
1285 param.iDirection = CFont::EHorizontal; |
|
1286 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1287 param.iPosInText = 0; |
|
1288 param.iPen.iX = param.iPen.iY = 0; |
|
1289 |
|
1290 testPtr->iTestFont->GetCharacterPosition(param); |
|
1291 |
|
1292 // Line above panics if component in UDEB is working OK; |
|
1293 // should never get here if component is in UDEB. |
|
1294 |
|
1295 // If component is in UREL, then could reach here. |
|
1296 |
|
1297 return (0); |
|
1298 } |
|
1299 |
|
1300 |
|
1301 LOCAL_C TInt TestApiBoundaries_TC5(TAny* aData) |
|
1302 /** |
|
1303 This is a root thread function which runs as part of the test case |
|
1304 CTGlyphSelection::TestApiBoundaries(). It tests a panic |
|
1305 is produced when a negative text position is supplied in the |
|
1306 TPositionParam argument. |
|
1307 */ |
|
1308 { |
|
1309 CTGlyphSelection* testPtr = (CTGlyphSelection*)aData; |
|
1310 |
|
1311 CFont::TPositionParam param; |
|
1312 param.iDirection = CFont::EHorizontal; |
|
1313 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1314 _LIT16(KText_aaaa, "aaaa"); |
|
1315 param.iText.Set(KText_aaaa); |
|
1316 param.iPosInText = -10; |
|
1317 param.iPen.iX = param.iPen.iY = 0; |
|
1318 |
|
1319 testPtr->iTestFont->GetCharacterPosition(param); |
|
1320 |
|
1321 // Line above panics if component in UDEB is working OK; |
|
1322 // should never get here if component is in UDEB. |
|
1323 |
|
1324 // If component is in UREL, then could reach here. |
|
1325 |
|
1326 return (0); |
|
1327 } |
|
1328 |
|
1329 |
|
1330 void CTGlyphSelection::TestApiBoundaries() |
|
1331 /** |
|
1332 This method is a test case to exercise GetCharacterPosition() with |
|
1333 parameter values at range boundaries and in some cases out-or-raange. |
|
1334 */ |
|
1335 { |
|
1336 TBool r; |
|
1337 TBuf<20> testText(0); |
|
1338 |
|
1339 CFont::TPositionParam param; |
|
1340 param.iDirection = CFont::EHorizontal; |
|
1341 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1342 |
|
1343 // 1: Check input arguments in paramter not modified |
|
1344 testText = _L16("a"); |
|
1345 param.iText.Set(testText); |
|
1346 param.iPosInText = 0; |
|
1347 param.iPen.iX = param.iPen.iY = 0; |
|
1348 r = iTestFont->GetCharacterPosition(param); |
|
1349 TEST(r && param.iDirection == CFont::EHorizontal |
|
1350 && param.iFlags == CFont::TPositionParam::EFLogicalOrder |
|
1351 && param.iText.Ptr() == testText.Ptr()); |
|
1352 |
|
1353 // 2: Check invalid iText descriptor panics (when component in UDEB) |
|
1354 // When component built in UREL, behaviour is undefined, so do not test. |
|
1355 TRequestStatus threadStatus; |
|
1356 RThread thread; |
|
1357 TInt rc; |
|
1358 TBool jit; |
|
1359 jit = User::JustInTime(); |
|
1360 User::SetJustInTime(EFalse); |
|
1361 rc = thread.Create(KThread2NameFirst, TestApiBoundaries_TC2, |
|
1362 KDefaultStackSize, KMinHeapSize, KMinHeapSize*4, this); |
|
1363 TEST(KErrNone == rc); |
|
1364 thread.Logon(threadStatus); |
|
1365 thread.Resume(); |
|
1366 User::WaitForRequest(threadStatus); |
|
1367 |
|
1368 if (thread.ExitType() == EExitPanic) |
|
1369 { |
|
1370 TEST (thread.ExitReason() == EGdiPanic_InvalidInputParam); |
|
1371 INFO_PRINTF2(_L("Exit reason %d"), thread.ExitReason()); |
|
1372 TExitCategoryName exitCategory = thread.ExitCategory(); |
|
1373 INFO_PRINTF2(_L("Exit category %S"), &exitCategory); |
|
1374 } |
|
1375 else |
|
1376 { |
|
1377 // Function does not panic on invalid input; |
|
1378 // Warn that this is only valid behaviour if the GDI component being tested is built in UREL mode |
|
1379 // and there is a problem if the function has not panicked if the GDI component is build in UDEB mode |
|
1380 INFO_PRINTF1(_L("Warning: GetCharacterPosition() when given invalid iText descriptor has not panicked - this is only ok if the GDI component is built in UREL mode. If the GDI component is built in UDEB mode, then there is a problem.")); |
|
1381 } |
|
1382 thread.Close(); |
|
1383 User::SetJustInTime(jit); |
|
1384 |
|
1385 // 3: Zero length text descriptor |
|
1386 testText = _L(""); |
|
1387 param.iText.Set(testText); |
|
1388 param.iPosInText = 0; |
|
1389 param.iPen.iX = param.iPen.iY = 0; |
|
1390 r = iTestFont->GetCharacterPosition(param); |
|
1391 TEST(!r && param.iPen.iX == 0 |
|
1392 && param.iOutputGlyphs == 0); |
|
1393 |
|
1394 // 4: Position in text beyond descriptor length |
|
1395 testText = _L16("a"); |
|
1396 param.iText.Set(testText); |
|
1397 param.iPosInText = 5; |
|
1398 param.iPen.iX = param.iPen.iY = 0; |
|
1399 r = iTestFont->GetCharacterPosition(param); |
|
1400 TEST(!r && param.iPen.iX == 0 |
|
1401 && param.iOutputGlyphs == 0); |
|
1402 |
|
1403 // 5: Position in text is negative, should panic (when component in UDEB) |
|
1404 // When component built in UREL, behaviour is undefined, so do not test. |
|
1405 jit = User::JustInTime(); |
|
1406 User::SetJustInTime(EFalse); |
|
1407 rc = thread.Create(KThread2NameSecond, TestApiBoundaries_TC5, |
|
1408 KDefaultStackSize, KMinHeapSize, KMinHeapSize*4, this); |
|
1409 TEST(KErrNone == rc); |
|
1410 thread.Logon(threadStatus); |
|
1411 thread.Resume(); |
|
1412 User::WaitForRequest(threadStatus); |
|
1413 |
|
1414 if (thread.ExitType() == EExitPanic) |
|
1415 { |
|
1416 TEST (thread.ExitReason() == EGdiPanic_InvalidInputParam); |
|
1417 INFO_PRINTF2(_L("Exit reason %d"), thread.ExitReason()); |
|
1418 TExitCategoryName exitCategory = thread.ExitCategory(); |
|
1419 INFO_PRINTF2(_L("Exit category %S"), &exitCategory); |
|
1420 } |
|
1421 else |
|
1422 { |
|
1423 // Function does not panic on invalid input; |
|
1424 // Warn that this is only valid behaviour if the GDI component being tested is built in UREL mode |
|
1425 // and there is a problem if the function has not panicked if the GDI component is build in UDEB mode |
|
1426 INFO_PRINTF1(_L("Warning: GetCharacterPosition() when given negative iPosInText has not panicked - this is only ok if the GDI component is built in UREL mode. If the GDI component is built in UDEB mode, then there is a problem.")); |
|
1427 } |
|
1428 |
|
1429 thread.Close(); |
|
1430 User::SetJustInTime(jit); |
|
1431 |
|
1432 // 6: Check 'No-char-data' condition handled |
|
1433 testText = _L16("A\033C"); |
|
1434 param.iText.Set(testText); |
|
1435 param.iPosInText = 1; |
|
1436 param.iPen.iX = param.iPen.iY = 0; |
|
1437 r = iTestFont->GetCharacterPosition(param); |
|
1438 TEST( !r |
|
1439 && param.iPosInText == 2 |
|
1440 && param.iPen.iX == 0 |
|
1441 && param.iOutputGlyphs == 0); |
|
1442 |
|
1443 // 7: Check "Not-a-Char" condition handled |
|
1444 testText = _L16("\xFFFF\xFFFE\xFFFF\xFFFF\xFFFF\xFFFE\xFFFF\xFFFF\xFFFF\xFFFE\xFFFF\xFFFF"); |
|
1445 param.iText.Set(testText); |
|
1446 param.iPosInText = 0; |
|
1447 param.iPen.iX = param.iPen.iY = 0; |
|
1448 r = iTestFont->GetCharacterPosition(param); |
|
1449 TEST( r |
|
1450 && param.iPosInText == 1 |
|
1451 && param.iPen.iX == 0 |
|
1452 && param.iOutputGlyphs == 0); |
|
1453 |
|
1454 param.iPosInText = 5; |
|
1455 param.iPen.iX = param.iPen.iY = 0; |
|
1456 r = iTestFont->GetCharacterPosition(param); |
|
1457 TEST( r |
|
1458 && param.iPosInText == 6 |
|
1459 && param.iPen.iX == 0 |
|
1460 && param.iOutputGlyphs == 0); |
|
1461 |
|
1462 // 8. Check that a cluster cannot be made from heterogeneous elements |
|
1463 // (in this case a 6 with a Hindi virama) |
|
1464 testText = _L16("6\x94D"); |
|
1465 param.iText.Set(testText); |
|
1466 param.iPosInText = 0; |
|
1467 param.iPen.iX = param.iPen.iY = 0; |
|
1468 r = iTestFont->GetCharacterPosition(param); |
|
1469 TEST(r && param.iOutputGlyphs == 1); |
|
1470 } |
|
1471 |
|
1472 inline TBool IsSupplementary(TUint aChar) |
|
1473 /** |
|
1474 @param aChar The 32-bit code point value of a Unicode character. |
|
1475 |
|
1476 @return True, if aChar is supplementary character; false, otherwise. |
|
1477 */ |
|
1478 { |
|
1479 return (aChar > 0xFFFF); |
|
1480 } |
|
1481 |
|
1482 inline TBool IsSurrogate(TText16 aInt16) |
|
1483 /** |
|
1484 @return True, if aText16 is high surrogate or low surrogate; false, otherwise. |
|
1485 */ |
|
1486 { |
|
1487 return (aInt16 & 0xF800) == 0xD800; |
|
1488 } |
|
1489 |
|
1490 inline TText16 GetHighSurrogate(TUint aChar) |
|
1491 /** |
|
1492 Retrieve the high surrogate of a supplementary character. |
|
1493 |
|
1494 @param aChar The 32-bit code point value of a Unicode character. |
|
1495 |
|
1496 @return High surrogate of aChar, if aChar is a supplementary character; |
|
1497 aChar itself, if aChar is not a supplementary character. |
|
1498 */ |
|
1499 { |
|
1500 return STATIC_CAST(TText16, 0xD7C0 + (aChar >> 10)); |
|
1501 } |
|
1502 |
|
1503 inline TText16 GetLowSurrogate(TUint aChar) |
|
1504 /** |
|
1505 Retrieve the low surrogate of a supplementary character. |
|
1506 |
|
1507 @param aChar The 32-bit code point value of a Unicode character. |
|
1508 |
|
1509 @return Low surrogate of aChar, if aChar is a supplementary character; |
|
1510 zero, if aChar is not a supplementary character. |
|
1511 */ |
|
1512 { |
|
1513 return STATIC_CAST(TText16, 0xDC00 | (aChar & 0x3FF)); |
|
1514 } |
|
1515 |
|
1516 void CTGlyphSelection::TestCodepoint(TUint aCodepoint, CFont* aFont) |
|
1517 /** |
|
1518 This helper routine is used by the test case |
|
1519 CTGlyphSelection::TestCtrlCharsIgnored(). |
|
1520 @param aCodepoint |
|
1521 The Unicode character to test. |
|
1522 @param aFont |
|
1523 The font to use in the test. |
|
1524 */ |
|
1525 { |
|
1526 TInt expectResultPosInText; |
|
1527 |
|
1528 const TInt KTestTextLen = 5; |
|
1529 TBuf<16> testText(KTestTextLen); |
|
1530 testText[0] = 'a'; |
|
1531 testText[1] = 'b'; |
|
1532 if (IsSupplementary(aCodepoint)) |
|
1533 { |
|
1534 testText[2] = GetHighSurrogate(aCodepoint); |
|
1535 testText[3] = GetLowSurrogate(aCodepoint); |
|
1536 expectResultPosInText = 4; |
|
1537 } |
|
1538 else |
|
1539 { |
|
1540 testText[2] = aCodepoint; |
|
1541 testText[3] = 'c'; |
|
1542 expectResultPosInText = 3; |
|
1543 } |
|
1544 testText[4] = 'd'; |
|
1545 |
|
1546 CFont::TPositionParam param; |
|
1547 param.iDirection = CFont::EHorizontal; |
|
1548 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1549 param.iText.Set(testText); |
|
1550 param.iPen.iX = param.iPen.iY = 0; |
|
1551 param.iPosInText = 2; |
|
1552 TBool r = aFont->GetCharacterPosition(param); |
|
1553 |
|
1554 TEST(r && param.iPosInText == expectResultPosInText |
|
1555 && param.iPen.iX == 0 |
|
1556 && param.iOutputGlyphs == 0); |
|
1557 } |
|
1558 |
|
1559 |
|
1560 void CTGlyphSelection::TestCtrlCharsIgnored() |
|
1561 /** |
|
1562 This method is a test case to test GetCharacterPosition() copes |
|
1563 with formatting and control characters in the text supplied by |
|
1564 ignoring them. |
|
1565 */ |
|
1566 { |
|
1567 static const TUint testData[] = { |
|
1568 // 1: Formatting control codes Unicode3-p499&p500 |
|
1569 0x200C, 0x200D, 0x200E, 0x200F, |
|
1570 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, |
|
1571 // 3: Non-character codes Unicode3-p846 U+FFFE? |
|
1572 // Original: |
|
1573 // 0xFFFF |
|
1574 // 4: Latin Ctrl codes U+0000..U+001F, U+007F Unicode3-p??? |
|
1575 // 5: Latin Supplement Ctrl code U+0080..U+009F Unicode3-p??? |
|
1576 // 6: Supplementary characters (scripts outside BMP still not supported) |
|
1577 }; |
|
1578 static const TUint testDataLength = sizeof(testData)/sizeof(testData[0]); |
|
1579 |
|
1580 for (TUint i = 0; i < testDataLength; i++) |
|
1581 TestCodepoint(testData[i], iTestFont); |
|
1582 } |
|
1583 |
|
1584 |
|
1585 void CTGlyphSelection::TestLatinChars() |
|
1586 /** |
|
1587 This method is a test case to test GetCharacterPosition() correctly |
|
1588 processes characters from the Latin code page returning appropriate glyphs |
|
1589 codes. |
|
1590 */ |
|
1591 { |
|
1592 TBool r; |
|
1593 CFont::TPositionParam param; |
|
1594 param.iDirection = CFont::EHorizontal; |
|
1595 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1596 _LIT16(KText_aBc_1, "aBc 1"); |
|
1597 param.iText.Set(KText_aBc_1); |
|
1598 |
|
1599 // 1: Latin glyph at start of text |
|
1600 param.iPosInText = 0; |
|
1601 param.iPen.iX = param.iPen.iY = 0; |
|
1602 r = iTestFont->GetCharacterPosition(param); |
|
1603 TEST(r && param.iPosInText == 1 |
|
1604 && param.iPen.iX == 10 |
|
1605 && param.iOutputGlyphs == 1 |
|
1606 && param.iOutput[0].iCode == 'a'); |
|
1607 |
|
1608 // 2: Latin glyph in middle of text |
|
1609 param.iPosInText = 1; |
|
1610 param.iPen.iX = param.iPen.iY = 0; |
|
1611 r = iTestFont->GetCharacterPosition(param); |
|
1612 TEST(r && param.iPosInText == 2 |
|
1613 && param.iPen.iX == 10 |
|
1614 && param.iOutputGlyphs == 1 |
|
1615 && param.iOutput[0].iCode == 'B'); |
|
1616 |
|
1617 // 3: Latin glyph at end of text |
|
1618 param.iPosInText = 4; |
|
1619 param.iPen.iX = param.iPen.iY = 0; |
|
1620 r = iTestFont->GetCharacterPosition(param); |
|
1621 TEST(r && param.iPosInText == 5 |
|
1622 && param.iPen.iX == 10 |
|
1623 && param.iOutputGlyphs == 1 |
|
1624 && param.iOutput[0].iCode == '1'); |
|
1625 |
|
1626 // 4: Latin space glyph |
|
1627 param.iPosInText = 3; |
|
1628 param.iPen.iX = param.iPen.iY = 0; |
|
1629 r = iTestFont->GetCharacterPosition(param); |
|
1630 TEST(r && param.iPosInText == 4 |
|
1631 && param.iPen.iX == 10 |
|
1632 && param.iOutputGlyphs == 1 |
|
1633 && param.iOutput[0].iCode == ' '); |
|
1634 } |
|
1635 |
|
1636 |
|
1637 void CTGlyphSelection::TestSoftHyphen() |
|
1638 /** |
|
1639 This method is a test case to test GetCharacterPosition() correctly |
|
1640 processes soft hyphen chars by ignoring them if they are NOT at the |
|
1641 end of the text (aka end of the line). |
|
1642 */ |
|
1643 { |
|
1644 TBool r; |
|
1645 CFont::TPositionParam param; |
|
1646 param.iDirection = CFont::EHorizontal; |
|
1647 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1648 _LIT16(KText_DKNY, "DK\xadNY\xad"); |
|
1649 param.iText.Set(KText_DKNY); |
|
1650 |
|
1651 // 1: Invoke on char before hyphen position |
|
1652 // This test returns only the glyph of the char before the hyphen |
|
1653 // treating the hyphen as another base char which end scanning. |
|
1654 param.iPosInText = 1; |
|
1655 param.iPen.iX = param.iPen.iY = 0; |
|
1656 r = iTestFont->GetCharacterPosition(param); |
|
1657 TEST(r && param.iPosInText == 2 |
|
1658 && param.iPen.iX == 10 |
|
1659 && param.iOutputGlyphs == 1 |
|
1660 && param.iOutput[0].iCode == 'K'); |
|
1661 |
|
1662 // 2: Invoke on hyphen position |
|
1663 // This test should show it ignores and skips soft hyphens returning |
|
1664 // no hyphen glyph. This is because soft hyphen are not visible when |
|
1665 // in middle of lines. |
|
1666 param.iPosInText = 2; |
|
1667 param.iPen.iX = param.iPen.iY = 0; |
|
1668 r = iTestFont->GetCharacterPosition(param); |
|
1669 TEST(r && param.iPosInText == 3 |
|
1670 && param.iPen.iX == 0 |
|
1671 && param.iOutputGlyphs == 0); |
|
1672 |
|
1673 // 3: Invoke on hyphen position when hyphen at end of text |
|
1674 // This test should result in the hyphen glyph being returned as it |
|
1675 // is expect to be visible when it is at the end of the text supplied. |
|
1676 param.iPosInText = 5; |
|
1677 param.iPen.iX = param.iPen.iY = 0; |
|
1678 r = iTestFont->GetCharacterPosition(param); |
|
1679 TEST(r && param.iPosInText == 6 |
|
1680 && param.iPen.iX == 10 |
|
1681 && param.iOutputGlyphs == 1 |
|
1682 && param.iOutput[0].iCode == 0x00AD); |
|
1683 |
|
1684 } |
|
1685 |
|
1686 |
|
1687 void CTGlyphSelection::TestSurrogates() |
|
1688 /** |
|
1689 This method is a test case to test GetCharacterPosition() correctly |
|
1690 processes surrogate pairs. |
|
1691 */ |
|
1692 { |
|
1693 static const TUint validPairs[] = { |
|
1694 // Hi Lo Code Hi Lo Code Hi Lo Code |
|
1695 0xD800, 0xDC00, 0x00010000, 0xD800, 0xDE9A, 0x0001029A, 0xD800, 0xDFFF, 0x000103FF, |
|
1696 0xD89A, 0xDC00, 0x00036800, 0xD89A, 0xDE9A, 0x00036A9A, 0xD89A, 0xDFFF, 0x00036BFF, |
|
1697 0xDBFF, 0xDC00, 0x0010FC00, 0xDBFF, 0xDE9A, 0x0010FE9A, 0xDBFF, 0xDFFF, 0x0010FFFF |
|
1698 }; |
|
1699 static const TUint validPairsLength = sizeof(validPairs)/sizeof(TText16); |
|
1700 |
|
1701 TBool r; |
|
1702 TBuf<20> testText(0); |
|
1703 CFont::TPositionParam param; |
|
1704 param.iDirection = CFont::EHorizontal; |
|
1705 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1706 |
|
1707 // 1: Test valid surrogate pair chars |
|
1708 testText.SetLength(5); |
|
1709 testText[0] = 'a'; |
|
1710 testText[3] = 'D'; |
|
1711 testText[4] = '1'; |
|
1712 param.iText.Set(testText); |
|
1713 for (TUint i = 0; i < validPairsLength/3; i+=3) |
|
1714 { |
|
1715 testText[1] = (TText16) validPairs[i]; |
|
1716 testText[2] = (TText16) validPairs[i+1]; |
|
1717 param.iPosInText = 1; |
|
1718 param.iPen.iX = param.iPen.iY = 0; |
|
1719 r = iTestFont->GetCharacterPosition(param); |
|
1720 TEST(r && param.iPosInText == 3 |
|
1721 && param.iPen.iX == 10 |
|
1722 && param.iOutputGlyphs == 1 |
|
1723 && param.iOutput[0].iCode == validPairs[i+2]); |
|
1724 } |
|
1725 |
|
1726 // 2: Test unpaired high surrogate chars |
|
1727 testText[1] = 0xD809; |
|
1728 testText[2] = 'a'; |
|
1729 param.iPosInText = 1; |
|
1730 param.iPen.iX = param.iPen.iY = 0; |
|
1731 r = iTestFont->GetCharacterPosition(param); |
|
1732 TEST(r && param.iPosInText == 2 |
|
1733 && param.iPen.iX == 0 |
|
1734 && param.iOutputGlyphs == 0); |
|
1735 |
|
1736 // 3: Test unpaired low surrogate chars |
|
1737 testText[1] = 'a'; |
|
1738 testText[2] = 0xDC09; |
|
1739 param.iPosInText = 2; |
|
1740 param.iPen.iX = param.iPen.iY = 0; |
|
1741 r = iTestFont->GetCharacterPosition(param); |
|
1742 TEST(r && param.iPosInText == 3 |
|
1743 && param.iPen.iX == 0 |
|
1744 && param.iOutputGlyphs == 0); |
|
1745 |
|
1746 // 4: Test latin/surrogate boundry ensuring surrogate not skipped! |
|
1747 testText[1] = (TText16) validPairs[0]; |
|
1748 testText[2] = (TText16) validPairs[1]; |
|
1749 param.iPosInText = 0; |
|
1750 param.iPen.iX = param.iPen.iY = 0; |
|
1751 r = iTestFont->GetCharacterPosition(param); |
|
1752 TEST(r && param.iPosInText == 1 |
|
1753 && param.iPen.iX == 10 |
|
1754 && param.iOutputGlyphs == 1 |
|
1755 && param.iOutput[0].iCode =='a'); |
|
1756 } |
|
1757 |
|
1758 |
|
1759 /** |
|
1760 @SYMTestCaseID TI18N-GDI-CIT-4077 |
|
1761 @SYMTestCaseDesc Automated GDI testing for GB18030 ExtB |
|
1762 @SYMTestPriority High |
|
1763 @SYMTestActions Attempt to get glyph information for GB18030 ExtB characters. |
|
1764 @SYMTestExpectedResults The expected glyph clusters for given Unicode charactors must be returned |
|
1765 @SYMPREQ 2471: UTF-16 compliant text handling |
|
1766 */ |
|
1767 void CTGlyphSelection::TestNonBmpCharsInGB18030(CFbsFont* aFont) |
|
1768 { |
|
1769 INFO_PRINTF1(_L("Test GB18030 non-BMP Glyphs")); |
|
1770 // Do the testing |
|
1771 |
|
1772 TBool r; |
|
1773 TBuf<30> testText(0); |
|
1774 CFont::TPositionParam param; |
|
1775 param.iDirection = CFont::EHorizontal; |
|
1776 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1777 |
|
1778 testText.SetLength(4); |
|
1779 |
|
1780 // 201AD = D840, DDAD |
|
1781 testText[0] = 0xD840; |
|
1782 testText[1] = 0xDDAD; |
|
1783 |
|
1784 // 253BB = D854, DFBB |
|
1785 testText[2] = 0xD854; |
|
1786 testText[3] = 0xDFBB; |
|
1787 |
|
1788 param.iText.Set(testText); |
|
1789 |
|
1790 RShapeInfo aShapeInfo; |
|
1791 |
|
1792 // Do the testing |
|
1793 |
|
1794 param.iPosInText = 0; |
|
1795 param.iPen.iX = param.iPen.iY = 0; |
|
1796 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
1797 |
|
1798 TEST(r && param.iPosInText == 2 |
|
1799 && param.iOutputGlyphs == 1 |
|
1800 && param.iOutput[0].iCode == 0x000201AD); |
|
1801 |
|
1802 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
1803 |
|
1804 param.iPosInText = 2; |
|
1805 param.iPen.iX = param.iPen.iY = 0; |
|
1806 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
1807 |
|
1808 TEST(r && param.iPosInText == 4 |
|
1809 && param.iOutputGlyphs == 1 |
|
1810 && param.iOutput[0].iCode == 0x000253BB); |
|
1811 |
|
1812 |
|
1813 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
1814 |
|
1815 // Close aShapeInfo which releases any memory it is occupying |
|
1816 if (aShapeInfo.IsOpen()) |
|
1817 aShapeInfo.Close(); |
|
1818 |
|
1819 } |
|
1820 |
|
1821 |
|
1822 void CTGlyphSelection::TestCombiningLatinChars() |
|
1823 /** |
|
1824 This method is a test case to test GetCharacterPosition() correctly |
|
1825 processes regular latin characters with diacritics. |
|
1826 */ |
|
1827 { |
|
1828 TBool r; |
|
1829 TBuf<20> testText(0); |
|
1830 CFont::TPositionParam param; |
|
1831 param.iDirection = CFont::EHorizontal; |
|
1832 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
1833 |
|
1834 testText.SetLength(10); |
|
1835 testText[0] = 'A'; |
|
1836 testText[1] = ' '; |
|
1837 testText[2] = 'A'; |
|
1838 testText[3] = 0x0300; // Above Grave Acent |
|
1839 testText[4] = 'I'; |
|
1840 testText[5] = 0x0330; // Below Tidle |
|
1841 testText[6] = 'o'; |
|
1842 testText[7] = 0x0308; // Above Diaeresis |
|
1843 testText[8] = 0x032F; // Below Inverted Breve |
|
1844 testText[9] = 'M'; |
|
1845 param.iText.Set(testText); |
|
1846 |
|
1847 // 1: Latin base with following space |
|
1848 param.iPosInText = 0; |
|
1849 param.iPen.iX = param.iPen.iY = 0; |
|
1850 r = iTestFont->GetCharacterPosition(param); |
|
1851 TEST(r && param.iPosInText == 1 |
|
1852 && param.iPen.iX == 10 |
|
1853 && param.iOutputGlyphs == 1 |
|
1854 && param.iOutput[0].iCode == 'A'); |
|
1855 |
|
1856 // 2: Latin base with 1 combining above diacritic |
|
1857 param.iPosInText = 2; |
|
1858 param.iPen.iX = param.iPen.iY = 0; |
|
1859 r = iTestFont->GetCharacterPosition(param); |
|
1860 // Will Compose A (0x41) followed by grave accent (0x300) into A grave (0xC0) |
|
1861 TEST(r && param.iPosInText == 4 |
|
1862 && param.iPen.iX == 10 |
|
1863 && param.iOutputGlyphs == 1 |
|
1864 && param.iOutput[0].iCode == 0xC0 |
|
1865 && param.iOutput[0].iBounds.iTl == TPoint(0,-10) |
|
1866 && param.iOutput[0].iBounds.iBr == TPoint(10,2)); |
|
1867 |
|
1868 // 3: Latin base with 1 combining below diacritic |
|
1869 param.iPosInText = 4; |
|
1870 param.iPen.iX = param.iPen.iY = 0; |
|
1871 r = iTestFont->GetCharacterPosition(param); |
|
1872 // Will compose I (0x49) with tilde below (0x330) into I with tilde below (0x1E2C) |
|
1873 TEST(r && param.iPosInText == 6 |
|
1874 && param.iPen.iX == 10 |
|
1875 && param.iOutputGlyphs == 1 |
|
1876 && param.iOutput[0].iCode == 0x1E2C |
|
1877 && param.iOutput[0].iBounds.iTl == TPoint(0,-10) |
|
1878 && param.iOutput[0].iBounds.iBr == TPoint(10,2)); |
|
1879 |
|
1880 // 4: Latin base with 2 combining diacritic |
|
1881 param.iPosInText = 6; |
|
1882 param.iPen.iX = param.iPen.iY = 0; |
|
1883 r = iTestFont->GetCharacterPosition(param); |
|
1884 TEST(r && param.iPosInText == 9 |
|
1885 && param.iPen.iX == 10 |
|
1886 && param.iOutputGlyphs == 3 |
|
1887 && param.iOutput[0].iCode == 'o' |
|
1888 && param.iOutput[0].iBounds.iTl == TPoint(0,-10) |
|
1889 && param.iOutput[0].iBounds.iBr == TPoint(10,2) |
|
1890 && param.iOutput[1].iCode == 0x0308 |
|
1891 && param.iOutput[1].iBounds.iTl == TPoint(0,-23) |
|
1892 && param.iOutput[1].iBounds.iBr == TPoint(10,-11) |
|
1893 && param.iOutput[2].iCode == 0x032F |
|
1894 && param.iOutput[2].iBounds.iTl == TPoint(0,3) |
|
1895 && param.iOutput[2].iBounds.iBr == TPoint(10,15)); |
|
1896 |
|
1897 // 5: Latin base with 9 combining chars, should exceed max output! |
|
1898 testText[0] = 'a'; |
|
1899 testText[1] = 0x0300; // Above Grave Acent |
|
1900 testText[2] = 0x0330; // Below Tidle |
|
1901 testText[3] = 0x0308; // Above Diaeresis |
|
1902 testText[4] = 0x032F; // Below Inverted Breve |
|
1903 testText[5] = 0x0300; // Above Grave Acent |
|
1904 testText[6] = 0x0330; // Below Tidle |
|
1905 testText[7] = 0x0308; // Above Diaeresis |
|
1906 testText[8] = 0x032F; // Below Inverted Breve |
|
1907 testText[9] = 0x0300; // Above Grave Acent |
|
1908 param.iPosInText = 0; |
|
1909 param.iPen.iX = param.iPen.iY = 0; |
|
1910 r = iTestFont->GetCharacterPosition(param); |
|
1911 TEST(r && param.iPosInText == 8 |
|
1912 && param.iPen.iX == 10 |
|
1913 && param.iOutputGlyphs == 8 |
|
1914 && param.iOutput[0].iCode == 'a' |
|
1915 && param.iOutput[7].iCode == 0x0308); |
|
1916 } |
|
1917 |
|
1918 /* |
|
1919 Used for cleanup of RImplInfoArray implementationArray below |
|
1920 This method is stolen from FbsTop.cpp |
|
1921 */ |
|
1922 |
|
1923 LOCAL_C void ResetAndDestroyRImplInfoPtrArray(TAny* aPtr) |
|
1924 { |
|
1925 RImplInfoPtrArray* array = reinterpret_cast <RImplInfoPtrArray*> (aPtr); |
|
1926 array->ResetAndDestroy(); |
|
1927 } |
|
1928 |
|
1929 LOCAL_C void LoadOpenFontLibraries(CFontStore* aFontStore) |
|
1930 { |
|
1931 |
|
1932 RImplInfoPtrArray implementationArray; |
|
1933 TCleanupItem cleanup(ResetAndDestroyRImplInfoPtrArray, &implementationArray); |
|
1934 CleanupStack::PushL(cleanup); |
|
1935 TInt error; |
|
1936 TInt ecomerror; |
|
1937 TInt ecomnotready; |
|
1938 TUid uid = {KUidOpenFontRasterizerPlunginInterface}; |
|
1939 |
|
1940 // Making sure that no race situation arises |
|
1941 // If ECom is not ready, give it another chance and try again. if it still doesn't work |
|
1942 // after the third try, then it just carries on quietly and fails... |
|
1943 for (ecomnotready =0; ecomnotready <3; ecomnotready++) |
|
1944 { |
|
1945 TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray)); |
|
1946 if (!ecomerror) |
|
1947 { |
|
1948 break; |
|
1949 } |
|
1950 else |
|
1951 { |
|
1952 ecomerror = 0; |
|
1953 User::After(0); |
|
1954 } |
|
1955 } |
|
1956 |
|
1957 const TInt availCount = implementationArray.Count(); |
|
1958 for (TInt count=0;count<availCount;++count) |
|
1959 { |
|
1960 const CImplementationInformation* info = implementationArray[count]; |
|
1961 TUid rasterizerUid = info->ImplementationUid(); |
|
1962 // Create a rasterizer |
|
1963 COpenFontRasterizer* rasterizer=0; |
|
1964 TRAP(error,rasterizer = COpenFontRasterizer::NewL(rasterizerUid)); |
|
1965 if (!error) |
|
1966 { |
|
1967 // Install it in the font store. |
|
1968 TRAP(error,aFontStore->InstallRasterizerL(rasterizer)); |
|
1969 if (error) |
|
1970 delete rasterizer; |
|
1971 } |
|
1972 } |
|
1973 CleanupStack::PopAndDestroy(&implementationArray); |
|
1974 |
|
1975 } |
|
1976 |
|
1977 void CTGlyphSelection::TestIsolatedCombiningLatinChars() |
|
1978 /** |
|
1979 This method is a test case to test GetCharacterPosition() correctly |
|
1980 processes isloated combining marks. |
|
1981 */ |
|
1982 { |
|
1983 // Need to use a valid font so that GetCharacterPosition will be able to find the necessary glyph information. |
|
1984 _LIT16(KTestFontFile, "C:\\s60ssb_v500.ttf"); |
|
1985 _LIT16(KTestFontFaceName, "Series 60 Sans"); |
|
1986 |
|
1987 // create a font store for testing |
|
1988 CFontStore* fontStore = CFontStore::NewL(&User::Heap()); |
|
1989 //load all ecom implemented rasterizer dlls. installs the rasterizer. |
|
1990 LoadOpenFontLibraries(fontStore); |
|
1991 // test font preparation |
|
1992 fontStore->iKPixelWidthInTwips = 11860; //This value is default |
|
1993 //add any required font files |
|
1994 TUid err = fontStore->AddFileL(KTestFontFile); |
|
1995 TFontSpec testFontSpec(KTestFontFaceName,200); |
|
1996 |
|
1997 CFbsBitmap* bmp = new(ELeave) CFbsBitmap; |
|
1998 |
|
1999 TInt ret = bmp->Create(TSize(100,100),EGray2); |
|
2000 if (ret == KErrNotSupported) |
|
2001 return; |
|
2002 else |
|
2003 User::LeaveIfError(ret); |
|
2004 |
|
2005 CFbsBitmapDevice* device = NULL; |
|
2006 TRAPD(err2,device = CFbsBitmapDevice::NewL(bmp)); |
|
2007 TEST(err2 == KErrNone); |
|
2008 |
|
2009 CFbsBitGc* gc = NULL; |
|
2010 User::LeaveIfError(device->CreateContext(gc)); |
|
2011 // Font file Creation |
|
2012 CFbsFont* testFont = NULL; |
|
2013 User::LeaveIfError(device->GetNearestFontToDesignHeightInTwips(testFont,testFontSpec)); |
|
2014 gc->UseFont(testFont); |
|
2015 CleanupStack::PushL(testFont); |
|
2016 |
|
2017 // Now start the test case: |
|
2018 |
|
2019 TBool r; |
|
2020 TBuf<20> testText(0); |
|
2021 CFont::TPositionParam param; |
|
2022 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
2023 |
|
2024 testText.SetLength(7); |
|
2025 testText[0] = 0x0323; //Below Dot |
|
2026 testText[1] = ' '; |
|
2027 testText[2] = 0x0300; //Above Grave Acent |
|
2028 testText[3] = ' '; |
|
2029 testText[4] = 0x0323; //Below Dot |
|
2030 testText[5] = 0x0300; //Above Grave Acent |
|
2031 testText[6] = 0x0301; //Above Acute Acent |
|
2032 param.iText.Set(testText); |
|
2033 |
|
2034 // 1: Test the bounds for combining below mark in isolation |
|
2035 param.iPosInText = 0; |
|
2036 param.iPen.iX = param.iPen.iY = 0; |
|
2037 r = testFont->GetCharacterPosition(param); |
|
2038 |
|
2039 TEST(r && param.iPosInText == 1 |
|
2040 && param.iOutputGlyphs == 1 |
|
2041 && param.iOutput[0].iCode == 0x0323); |
|
2042 |
|
2043 #if defined __WINS__ || defined __WINSCW__ |
|
2044 TEST(r && param.iPen == TPoint(0,0) |
|
2045 && param.iOutput[0].iBounds.iTl == TPoint(-6,1) |
|
2046 && param.iOutput[0].iBounds.iBr == TPoint(-4,3)); |
|
2047 #endif |
|
2048 |
|
2049 // 2: Test the bounds for combining above mark in isolation |
|
2050 param.iPosInText = 1; |
|
2051 param.iPen.iX = param.iPen.iY = 0; |
|
2052 r = testFont->GetCharacterPosition(param); |
|
2053 |
|
2054 TEST(r && param.iPosInText == 3 |
|
2055 && param.iOutputGlyphs == 2 |
|
2056 && param.iOutput[1].iCode == 0x0300); |
|
2057 |
|
2058 #if defined __WINS__ || defined __WINSCW__ |
|
2059 TEST(r && param.iPen == TPoint(4,0) |
|
2060 && param.iOutput[1].iBounds.iTl == TPoint(-2,-15) |
|
2061 && param.iOutput[1].iBounds.iBr == TPoint(2,-12)); |
|
2062 #endif |
|
2063 |
|
2064 // 3: Test the bounds for multiple combing marks in isolation |
|
2065 param.iPosInText = 3; |
|
2066 param.iPen.iX = param.iPen.iY = 0; |
|
2067 r = testFont->GetCharacterPosition(param); |
|
2068 |
|
2069 TEST(r && param.iPosInText == 7 |
|
2070 && param.iOutputGlyphs == 4 |
|
2071 && param.iOutput[1].iCode == 0x0323 |
|
2072 && param.iOutput[2].iCode == 0x0300 |
|
2073 && param.iOutput[3].iCode == 0x0301); |
|
2074 |
|
2075 #if defined __WINS__ || defined __WINSCW__ |
|
2076 TEST(r && param.iPen == TPoint(4,0) |
|
2077 && param.iOutput[1].iBounds.iTl == TPoint(-1,1) |
|
2078 && param.iOutput[1].iBounds.iBr == TPoint(1,3) |
|
2079 && param.iOutput[2].iBounds.iTl == TPoint(-2,-16) |
|
2080 && param.iOutput[2].iBounds.iBr == TPoint(2,-13) |
|
2081 && param.iOutput[3].iBounds.iTl == TPoint(-2,-20) |
|
2082 && param.iOutput[3].iBounds.iBr == TPoint(2,-17)); |
|
2083 #endif |
|
2084 |
|
2085 // Done with the font, pop it off. |
|
2086 CleanupStack::Pop(testFont); |
|
2087 |
|
2088 //Cleaning the memory |
|
2089 delete bmp; |
|
2090 delete device; |
|
2091 delete gc; |
|
2092 fontStore->RemoveFile(err); |
|
2093 delete fontStore; |
|
2094 REComSession::FinalClose(); |
|
2095 } |
|
2096 |
|
2097 |
|
2098 void CTGlyphSelection::TestContextInShapeInfo() |
|
2099 /** |
|
2100 This method is a test case to test GetCharacterPosition2() correctly |
|
2101 handle context. |
|
2102 */ |
|
2103 { |
|
2104 TBool r; |
|
2105 TBuf<20> testText(0); |
|
2106 CFont::TPositionParam param; |
|
2107 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
2108 RShapeInfo shapeInfo; |
|
2109 |
|
2110 //test control characters which has not defined processFun in TTableEntry |
|
2111 testText.SetLength(7); |
|
2112 testText[0] = 0xffff; //control character, test for the range { 0xFFFE, 0xFFFF, 0} |
|
2113 testText[1] = '1'; |
|
2114 testText[2] = 0x200E; //control character, test for the range { 0x200C, 0x200F, 0} |
|
2115 testText[3] = '.'; |
|
2116 testText[4] = 'a'; |
|
2117 testText[5] = 0x202A; //control character, test for the range { 0x202A, 0x202E, 0} |
|
2118 testText[6] = ','; |
|
2119 |
|
2120 param.iText.Set(testText); |
|
2121 |
|
2122 // 1. Test '0xffff' as NULL context at position zero - |
|
2123 // 0xffff should not be taken as context, and character '1' can be rendered correctly |
|
2124 param.iPosInText = 1; |
|
2125 param.iPen.iX = param.iPen.iY = 0; |
|
2126 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2127 TEST(r && param.iPosInText == 2 |
|
2128 && param.iOutputGlyphs == 1 |
|
2129 && param.iOutput[0].iCode == 49); |
|
2130 |
|
2131 // 2. Test '0x200E' - 0x200E is not rendered, either not treated as context. |
|
2132 // character '.' and 'a' should be rendered correctly. |
|
2133 param.iPosInText = 2; |
|
2134 param.iPen.iX = param.iPen.iY = 0; |
|
2135 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2136 TEST(r && param.iPosInText == 3 |
|
2137 && param.iOutputGlyphs == 0); |
|
2138 |
|
2139 param.iPosInText = 3; |
|
2140 param.iPen.iX = param.iPen.iY = 0; |
|
2141 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2142 TEST(r && param.iPosInText == 4 |
|
2143 && param.iOutputGlyphs == 1 |
|
2144 && param.iOutput[0].iCode == 46); |
|
2145 |
|
2146 param.iPosInText = 4; |
|
2147 param.iPen.iX = param.iPen.iY = 0; |
|
2148 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2149 TEST(r && param.iPosInText == 5 |
|
2150 && param.iOutputGlyphs == 1 |
|
2151 && param.iOutput[0].iCode == 'a'); |
|
2152 |
|
2153 // 3. Test '0x202A' - 0x202A is not rendered, either not treated as context. |
|
2154 // character ',' should be rendered correctly. |
|
2155 param.iPosInText = 5; |
|
2156 param.iPen.iX = param.iPen.iY = 0; |
|
2157 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2158 TEST(r && param.iPosInText == 6 |
|
2159 && param.iOutputGlyphs == 0); |
|
2160 |
|
2161 param.iPosInText = 6; |
|
2162 param.iPen.iX = param.iPen.iY = 0; |
|
2163 r = iTestFont->GetCharacterPosition2(param, shapeInfo); |
|
2164 TEST(r && param.iPosInText == 7 |
|
2165 && param.iOutputGlyphs == 1 |
|
2166 && param.iOutput[0].iCode == 44); |
|
2167 } |
|
2168 |
|
2169 /** |
|
2170 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-1580 |
|
2171 @SYMTestCaseDesc Automated GDI testing for Hindi |
|
2172 @SYMTestPriority High |
|
2173 @SYMTestActions Attempt to compose various valid and invalid Hindi glyph clusters. |
|
2174 @SYMTestExpectedResults The expected glyph clusters for given Unicode charactors must be returned |
|
2175 @SYMPREQ 18: Hindi for Bravo |
|
2176 */ |
|
2177 void CTGlyphSelection::TestHindiChars(CFbsFont* aFont) |
|
2178 { |
|
2179 INFO_PRINTF1(_L("Test Hindi Glyphs")); |
|
2180 // Do the testing |
|
2181 |
|
2182 TBool r; |
|
2183 TBuf<30> testText(0); |
|
2184 CFont::TPositionParam param; |
|
2185 param.iDirection = CFont::EHorizontal; |
|
2186 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
2187 |
|
2188 testText.SetLength(30); |
|
2189 |
|
2190 testText[0] = 0x0930; |
|
2191 testText[1] = 0x093C; |
|
2192 testText[2] = 0x094D; |
|
2193 testText[3] = 0x0915; |
|
2194 |
|
2195 testText[4] = 0x0915; |
|
2196 testText[5] = 0x094D; |
|
2197 testText[6] = 0x0915; |
|
2198 |
|
2199 testText[7] = 0x0930; |
|
2200 testText[8] = 0x094D; |
|
2201 testText[9] = 0x0915; |
|
2202 |
|
2203 testText[10] = 0x0915; |
|
2204 testText[11] = 0x094D; |
|
2205 testText[12] = 0x0930; |
|
2206 |
|
2207 testText[13] = 0x0915; |
|
2208 testText[14] = 0x094D; |
|
2209 testText[15] = 0x0937; |
|
2210 |
|
2211 testText[16] = 0x0915; |
|
2212 testText[17] = 0x094D; |
|
2213 testText[18] = 0x0930; |
|
2214 testText[19] = 0x094D; |
|
2215 testText[20] = 0x092A; |
|
2216 |
|
2217 /* When the following character 0x0036 is shaped, the context will be taken into consideration when |
|
2218 determining the glyph for 0x0036 |
|
2219 The context for 0x0036 is the Devanagari character 0x092A at position (iPosInText) 20 |
|
2220 **/ |
|
2221 testText[21] = 0x0036; |
|
2222 testText[22] = 0x094D; |
|
2223 |
|
2224 testText[23] = 0x0020; |
|
2225 |
|
2226 // INC101103: Strings containing ZWJ do not get rendered properly for Hindi |
|
2227 testText[24] = 0x092E; |
|
2228 testText[25] = 0x094D; |
|
2229 testText[26] = 0x200D; |
|
2230 testText[27] = 0x092E; |
|
2231 testText[28] = 0x093F; |
|
2232 testText[29] = 0x200D; |
|
2233 |
|
2234 param.iText.Set(testText); |
|
2235 |
|
2236 RShapeInfo aShapeInfo; |
|
2237 |
|
2238 // Do the testing |
|
2239 |
|
2240 param.iPosInText = 0; |
|
2241 param.iPen.iX = param.iPen.iY = 0; |
|
2242 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2243 |
|
2244 TEST(r && param.iPosInText == 4 |
|
2245 && param.iOutputGlyphs == 2 |
|
2246 && param.iOutput[0].iCode == 0x80000108 |
|
2247 && param.iOutput[1].iCode == 0x80000072); |
|
2248 |
|
2249 #if defined __WINS__ || defined __WINSCW__ |
|
2250 TEST(r && param.iPen.iX == 17); |
|
2251 #endif |
|
2252 |
|
2253 INFO_PRINTF6(_L("The result of this shaping is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2254 |
|
2255 param.iPosInText = 4; |
|
2256 param.iPen.iX = param.iPen.iY = 0; |
|
2257 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2258 |
|
2259 TEST(r && param.iPosInText == 7 |
|
2260 && param.iOutputGlyphs == 1 |
|
2261 && param.iOutput[0].iCode == 0x800001C2); |
|
2262 |
|
2263 #if defined __WINS__ || defined __WINSCW__ |
|
2264 TEST(r && param.iPen.iX == 12); |
|
2265 #endif |
|
2266 |
|
2267 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2268 |
|
2269 param.iPosInText = 7; |
|
2270 param.iPen.iX = param.iPen.iY = 0; |
|
2271 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2272 |
|
2273 TEST(r && param.iPosInText == 10 |
|
2274 && param.iOutputGlyphs == 2 |
|
2275 && param.iOutput[0].iCode == 0x80000072 |
|
2276 && param.iOutput[1].iCode == 0x80000130); |
|
2277 |
|
2278 #if defined __WINS__ || defined __WINSCW__ |
|
2279 TEST(r && param.iPen.iX == 11); |
|
2280 #endif |
|
2281 |
|
2282 INFO_PRINTF6(_L("The result of this shaping is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2283 |
|
2284 param.iPosInText = 10; |
|
2285 param.iPen.iX = param.iPen.iY = 0; |
|
2286 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2287 |
|
2288 TEST(r && param.iPosInText == 13 |
|
2289 && param.iOutputGlyphs == 1 |
|
2290 && param.iOutput[0].iCode == 0x80000136); |
|
2291 |
|
2292 #if defined __WINS__ || defined __WINSCW__ |
|
2293 TEST(r && param.iPen.iX == 12); |
|
2294 #endif |
|
2295 |
|
2296 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2297 |
|
2298 param.iPosInText = 13; |
|
2299 param.iPen.iX = param.iPen.iY = 0; |
|
2300 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2301 |
|
2302 TEST(r && param.iPosInText == 16 |
|
2303 && param.iOutputGlyphs == 1 |
|
2304 && param.iOutput[0].iCode == 0x800001BE); |
|
2305 |
|
2306 #if defined __WINS__ || defined __WINSCW__ |
|
2307 TEST(r && param.iPen.iX == 12); |
|
2308 #endif |
|
2309 |
|
2310 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2311 |
|
2312 param.iPosInText = 16; |
|
2313 param.iPen.iX = param.iPen.iY = 0; |
|
2314 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2315 |
|
2316 TEST(r && param.iPosInText == 21 |
|
2317 && param.iOutputGlyphs == 2 |
|
2318 && param.iOutput[0].iCode == 0x8000017A |
|
2319 && param.iOutput[1].iCode == 0x80000087); |
|
2320 |
|
2321 #if defined __WINS__ || defined __WINSCW__ |
|
2322 TEST(r && param.iPen.iX == 18); |
|
2323 #endif |
|
2324 |
|
2325 INFO_PRINTF6(_L("The result of this shaping is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2326 |
|
2327 /* The following shaping will consider the context when determining the glyph for 0x0036 Digit character |
|
2328 The context for 0x0036 is the Devanagari character 0x092A at position (iPosInText) 20 |
|
2329 **/ |
|
2330 param.iPosInText = 21; |
|
2331 param.iPen.iX = param.iPen.iY = 0; |
|
2332 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2333 |
|
2334 TEST(r && param.iPosInText == 22 |
|
2335 && param.iOutputGlyphs == 1 |
|
2336 && param.iOutput[0].iCode == 0x80000016); |
|
2337 |
|
2338 #if defined __WINS__ || defined __WINSCW__ |
|
2339 TEST(r && param.iPen.iX == 9); |
|
2340 #endif |
|
2341 |
|
2342 INFO_PRINTF5(_L("The result of this shaping is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2343 |
|
2344 // INC101103: Strings containing ZWJ do not get rendered properly for Hindi |
|
2345 param.iPosInText = 24; |
|
2346 param.iPen.iX = param.iPen.iY = 0; |
|
2347 r = aFont->GetCharacterPosition2(param, aShapeInfo); |
|
2348 // We are mainly testing the position in text after rendering, which should be at the end of the syllable |
|
2349 // that should include the ZWJ and any consonant that follows it |
|
2350 TEST(r && param.iPosInText == 29 |
|
2351 && param.iOutputGlyphs == 3 |
|
2352 && param.iOutput[0].iCode == 0x80000272 |
|
2353 && param.iOutput[1].iCode == 0x80000105 |
|
2354 && param.iOutput[2].iCode == 0x8000008B); |
|
2355 |
|
2356 // Close aShapeInfo which releases any memory it is occupying |
|
2357 if (aShapeInfo.IsOpen()) |
|
2358 aShapeInfo.Close(); |
|
2359 |
|
2360 } |
|
2361 |
|
2362 /** |
|
2363 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-3381 |
|
2364 @SYMTestCaseDesc Automated GDI testing for Kannada |
|
2365 @SYMTestPriority High |
|
2366 @SYMTestActions Attempt to compose various valid and invalid Kannada glyph clusters. |
|
2367 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
2368 @SYMPREQ 19: Kannada for Ogmha |
|
2369 */ |
|
2370 |
|
2371 void CTGlyphSelection::TestKannadaChars(CFbsFont* aFont) |
|
2372 { |
|
2373 INFO_PRINTF1(_L("Test Kannada Glyphs")); |
|
2374 |
|
2375 TBuf<79> testText(0); |
|
2376 CFont::TPositionParam param; |
|
2377 param.iDirection = CFont::EHorizontal; |
|
2378 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
2379 |
|
2380 testText.SetLength(79); |
|
2381 //Testdata for kannada Langauage |
|
2382 |
|
2383 testText[0] = 0x0C95; |
|
2384 testText[1] = 0x0CCD; |
|
2385 testText[2] = 0x0020; |
|
2386 |
|
2387 testText[3] = 0x0CAF; |
|
2388 testText[4] = 0x0CCD; |
|
2389 testText[5] = 0x0020; |
|
2390 |
|
2391 testText[6] = 0x0C99; |
|
2392 testText[7] = 0x0CCD; |
|
2393 testText[8] = 0x0020; |
|
2394 |
|
2395 testText[9] = 0x0CA3; |
|
2396 testText[10] = 0x0CCD; |
|
2397 testText[11] = 0x0020; |
|
2398 |
|
2399 testText[12] = 0x0C95; |
|
2400 testText[13] = 0x0CC3; |
|
2401 |
|
2402 testText[14] = 0x0CA4; |
|
2403 testText[15] = 0x0CC6; |
|
2404 |
|
2405 testText[16] = 0x0C9D; |
|
2406 testText[17] = 0x0CBE; |
|
2407 |
|
2408 testText[18] = 0x0C9E; |
|
2409 testText[19] = 0x0CBE; |
|
2410 |
|
2411 testText[20] = 0x0CA3; |
|
2412 testText[21] = 0x0CBE; |
|
2413 |
|
2414 testText[22] = 0x0CB3; |
|
2415 testText[23] = 0x0CC6; |
|
2416 |
|
2417 testText[24] = 0x0C9D; |
|
2418 testText[25] = 0x0CC6; |
|
2419 |
|
2420 testText[26] = 0x0CAC; |
|
2421 testText[27] = 0x0CC6; |
|
2422 |
|
2423 testText[28] = 0x0C9F; |
|
2424 testText[29] = 0x0CC6; |
|
2425 |
|
2426 testText[30] = 0x0C99; |
|
2427 testText[31] = 0x0CC6; |
|
2428 |
|
2429 testText[32] = 0x0CA3; |
|
2430 testText[33] = 0x0CC6; |
|
2431 |
|
2432 testText[34] = 0x0C95; |
|
2433 testText[35] = 0x0CBF; |
|
2434 |
|
2435 testText[36] = 0x0CB8; |
|
2436 testText[37] = 0x0CBF; |
|
2437 |
|
2438 testText[38] = 0x0CA1; |
|
2439 testText[39] = 0x0CBF; |
|
2440 |
|
2441 testText[40] = 0x0CA6; |
|
2442 testText[41] = 0x0CBF; |
|
2443 |
|
2444 testText[42] = 0x0C9D; |
|
2445 testText[43] = 0x0CBF; |
|
2446 |
|
2447 testText[44] = 0x0C9D; |
|
2448 testText[45] = 0x0CC1; |
|
2449 |
|
2450 testText[46] = 0x0CB5; |
|
2451 testText[47] = 0x0CC1; |
|
2452 |
|
2453 testText[48] = 0x0C95; |
|
2454 testText[49] = 0x0CC2; |
|
2455 |
|
2456 testText[50] = 0x0CAA; |
|
2457 testText[51] = 0x0CC2; |
|
2458 |
|
2459 testText[52] = 0x0CAE; |
|
2460 testText[53] = 0x0CCC; |
|
2461 |
|
2462 testText[54] = 0x0C95; |
|
2463 |
|
2464 testText[55] = 0x0CB0; |
|
2465 testText[56] = 0x200D; |
|
2466 testText[57] = 0x0CCD; |
|
2467 testText[58] = 0x0CAE; |
|
2468 |
|
2469 testText[59] = 0x0020; |
|
2470 |
|
2471 testText[60] = 0x0CB0; |
|
2472 testText[61] = 0x200D; |
|
2473 testText[62] = 0x0CCD; |
|
2474 testText[63] = 0x0CB0; |
|
2475 testText[64] = 0x200D; |
|
2476 testText[65] = 0x0CCD; |
|
2477 |
|
2478 |
|
2479 testText[66] = 0x0CB0; |
|
2480 testText[67] = 0x200D; |
|
2481 testText[68] = 0x0CCD; |
|
2482 testText[69] = 0x0CB0; |
|
2483 testText[70] = 0x0CCD; |
|
2484 testText[71] = 0x0CB0; |
|
2485 testText[72] = 0x0CCD; |
|
2486 testText[73] = 0x0CB0; |
|
2487 testText[74] = 0x0CCD; |
|
2488 testText[75] = 0x0CB0; |
|
2489 |
|
2490 // DEF103276: Kannada rendering: IcuLayoutEngine does not recongnise 0X0C8E as a vowel |
|
2491 testText[76] = 0x0020; |
|
2492 testText[77] = 0x0C8E; |
|
2493 testText[78] = 0x0C82; |
|
2494 // End of DEF103276: Kannada rendering: IcuLayoutEngine does not recongnise 0X0C8E as a vowel |
|
2495 |
|
2496 param.iText.Set(testText); |
|
2497 |
|
2498 // Do the testing |
|
2499 |
|
2500 TBool r; |
|
2501 param.iPosInText = 0; |
|
2502 param.iPen.iX = param.iPen.iY = 0; |
|
2503 RShapeInfo shapeInfo; |
|
2504 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2505 |
|
2506 TEST(r && param.iPosInText ==2 |
|
2507 && param.iOutputGlyphs == 1 |
|
2508 && param.iOutput[0].iCode == 0x80000839); |
|
2509 |
|
2510 #if defined __WINS__ || defined __WINSCW__ |
|
2511 TEST(r && param.iPen.iX == 16); |
|
2512 #endif |
|
2513 |
|
2514 INFO_PRINTF5(_L("The values of this shaping of Ka + Virama are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2515 |
|
2516 param.iPosInText = 3; |
|
2517 param.iPen.iX = param.iPen.iY = 0; |
|
2518 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2519 |
|
2520 TEST(r && param.iPosInText == 5 |
|
2521 && param.iOutputGlyphs ==1 |
|
2522 && param.iOutput[0].iCode == 0x80000852 ); |
|
2523 |
|
2524 #if defined __WINS__ || defined __WINSCW__ |
|
2525 TEST(r && param.iPen.iX == 27); |
|
2526 #endif |
|
2527 |
|
2528 INFO_PRINTF5(_L("The values of this shaping Ya + Virama are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2529 |
|
2530 param.iPosInText = 6; |
|
2531 param.iPen.iX = param.iPen.iY = 0; |
|
2532 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2533 |
|
2534 TEST(r && param.iPosInText == 8 |
|
2535 && param.iOutputGlyphs == 1 |
|
2536 && param.iOutput[0].iCode ==0x8000083D); |
|
2537 |
|
2538 #if defined __WINS__ || defined __WINSCW__ |
|
2539 TEST(r && param.iPen.iX == 19); |
|
2540 #endif |
|
2541 |
|
2542 INFO_PRINTF5(_L("The result of this shaping for Nya + Virama iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2543 |
|
2544 param.iPosInText = 9; |
|
2545 param.iPen.iX = param.iPen.iY = 0; |
|
2546 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2547 |
|
2548 TEST(r && param.iPosInText == 11 |
|
2549 && param.iOutputGlyphs ==1 |
|
2550 && param.iOutput[0].iCode == 0x80000847); |
|
2551 |
|
2552 #if defined __WINS__ || defined __WINSCW__ |
|
2553 TEST(r && param.iPen.iX == 20); |
|
2554 #endif |
|
2555 |
|
2556 INFO_PRINTF5(_L("The result of this shaping for NNA + Virama iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2557 |
|
2558 param.iPosInText = 12; |
|
2559 param.iPen.iX = param.iPen.iY = 0; |
|
2560 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2561 |
|
2562 TEST(r && param.iPosInText == 14 |
|
2563 && param.iOutputGlyphs == 2 |
|
2564 && param.iOutput[0].iCode == 0x800007A8 |
|
2565 && param.iOutput[1].iCode == 0x800007D2); |
|
2566 |
|
2567 #if defined __WINS__ || defined __WINSCW__ |
|
2568 TEST(r && param.iPen.iX == 12); |
|
2569 #endif |
|
2570 |
|
2571 INFO_PRINTF6(_L("The result of this shaping for Ka + Matra Vocalic R iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2572 |
|
2573 param.iPosInText = 14; |
|
2574 param.iPen.iX = param.iPen.iY = 0; |
|
2575 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2576 |
|
2577 TEST(r && param.iPosInText == 16 |
|
2578 && param.iOutputGlyphs == 1 |
|
2579 && param.iOutput[0].iCode == 0x8000088f); |
|
2580 |
|
2581 #if defined __WINS__ || defined __WINSCW__ |
|
2582 TEST(r && param.iPen.iX == 11); |
|
2583 #endif |
|
2584 |
|
2585 INFO_PRINTF5(_L("The result of this shaping for Ta + Matra AA iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2586 |
|
2587 param.iPosInText = 16; |
|
2588 param.iPen.iX = param.iPen.iY = 0; |
|
2589 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2590 |
|
2591 TEST(r && param.iPosInText == 18 |
|
2592 && param.iOutputGlyphs == 2 |
|
2593 && param.iOutput[0].iCode == 0x8000081E |
|
2594 && param.iOutput[1].iCode == 0x800007CD); |
|
2595 |
|
2596 #if defined __WINS__ || defined __WINSCW__ |
|
2597 TEST(r && param.iPen.iX == 29); |
|
2598 #endif |
|
2599 |
|
2600 INFO_PRINTF6(_L("The result of this shaping for Jha + Matra AA iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2601 |
|
2602 param.iPosInText = 18; |
|
2603 param.iPen.iX = param.iPen.iY = 0; |
|
2604 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2605 |
|
2606 TEST(r && param.iPosInText == 20 |
|
2607 && param.iOutputGlyphs == 2 |
|
2608 && param.iOutput[0].iCode == 0x800007b1 |
|
2609 && param.iOutput[1].iCode == 0x800007cd); |
|
2610 |
|
2611 #if defined __WINS__ || defined __WINSCW__ |
|
2612 TEST(r && param.iPen.iX == 23); |
|
2613 #endif |
|
2614 |
|
2615 INFO_PRINTF6(_L("The result of this shaping for Nya + Matra AA iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2616 |
|
2617 |
|
2618 param.iPosInText = 20; |
|
2619 param.iPen.iX = param.iPen.iY = 0; |
|
2620 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2621 |
|
2622 TEST(r && param.iPosInText == 22 |
|
2623 && param.iOutputGlyphs == 2 |
|
2624 && param.iOutput[0].iCode == 0x80000823 |
|
2625 && param.iOutput[1].iCode == 0x800007CD ); |
|
2626 |
|
2627 #if defined __WINS__ || defined __WINSCW__ |
|
2628 TEST(r && param.iPen.iX == 21); |
|
2629 #endif |
|
2630 |
|
2631 INFO_PRINTF6(_L("The result of this shaping for Nna + Matra AA iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2632 |
|
2633 param.iPosInText = 22; |
|
2634 param.iPen.iX = param.iPen.iY = 0; |
|
2635 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2636 |
|
2637 TEST(r && param.iPosInText == 24 |
|
2638 && param.iOutputGlyphs == 1 |
|
2639 && param.iOutput[0].iCode == 0x8000089C); |
|
2640 |
|
2641 #if defined __WINS__ || defined __WINSCW__ |
|
2642 TEST(r && param.iPen.iX == 12); |
|
2643 #endif |
|
2644 |
|
2645 INFO_PRINTF5(_L("The result of this shaping for LLa + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2646 |
|
2647 param.iPosInText = 24; |
|
2648 param.iPen.iX = param.iPen.iY = 0; |
|
2649 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2650 |
|
2651 TEST(r && param.iPosInText == 26 |
|
2652 && param.iOutputGlyphs == 1 |
|
2653 && param.iOutput[0].iCode == 0x80000889); |
|
2654 |
|
2655 #if defined __WINS__ || defined __WINSCW__ |
|
2656 TEST(r && param.iPen.iX == 22); |
|
2657 #endif |
|
2658 |
|
2659 INFO_PRINTF5(_L("The result of this shaping for Jha + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2660 |
|
2661 param.iPosInText = 26; |
|
2662 param.iPen.iX = param.iPen.iY = 0; |
|
2663 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2664 |
|
2665 TEST(r && param.iPosInText == 28 |
|
2666 && param.iOutputGlyphs == 1 |
|
2667 && param.iOutput[0].iCode == 0x80000896 ); |
|
2668 |
|
2669 #if defined __WINS__ || defined __WINSCW__ |
|
2670 TEST(r && param.iPen.iX == 13); |
|
2671 #endif |
|
2672 |
|
2673 INFO_PRINTF5(_L("The result of this shaping for Ba + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2674 |
|
2675 param.iPosInText = 28; |
|
2676 param.iPen.iX = param.iPen.iY = 0; |
|
2677 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2678 |
|
2679 TEST(r && param.iPosInText == 30 |
|
2680 && param.iOutputGlyphs == 1 |
|
2681 && param.iOutput[0].iCode == 0x8000088a); |
|
2682 |
|
2683 #if defined __WINS__ || defined __WINSCW__ |
|
2684 TEST(r && param.iPen.iX == 13); |
|
2685 #endif |
|
2686 |
|
2687 INFO_PRINTF5(_L("The result of this shaping for Tta + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2688 |
|
2689 param.iPosInText = 30; |
|
2690 param.iPen.iX = param.iPen.iY = 0; |
|
2691 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2692 |
|
2693 TEST(r && param.iPosInText == 32 |
|
2694 && param.iOutputGlyphs == 2 |
|
2695 && param.iOutput[0].iCode == 0x800007ac |
|
2696 && param.iOutput[1].iCode == 0x800007d4 ); |
|
2697 |
|
2698 #if defined __WINS__ || defined __WINSCW__ |
|
2699 TEST(r && param.iPen.iX == 19); |
|
2700 #endif |
|
2701 |
|
2702 INFO_PRINTF6(_L("The result of this shaping for Nya + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2703 |
|
2704 param.iPosInText = 32; |
|
2705 param.iPen.iX = param.iPen.iY = 0; |
|
2706 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2707 |
|
2708 TEST(r && param.iPosInText == 34 |
|
2709 && param.iOutputGlyphs == 1 |
|
2710 && param.iOutput[0].iCode == 0x8000088e); |
|
2711 |
|
2712 #if defined __WINS__ || defined __WINSCW__ |
|
2713 TEST(r && param.iPen.iX == 14); |
|
2714 #endif |
|
2715 |
|
2716 INFO_PRINTF5(_L("The result of this shaping for Nna + Matra E iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2717 |
|
2718 param.iPosInText = 34; |
|
2719 param.iPen.iX = param.iPen.iY = 0; |
|
2720 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2721 |
|
2722 TEST(r && param.iPosInText == 36 |
|
2723 && param.iOutputGlyphs == 1 |
|
2724 && param.iOutput[0].iCode == 0x80000860 ); |
|
2725 |
|
2726 #if defined __WINS__ || defined __WINSCW__ |
|
2727 TEST(r && param.iPen.iX == 10); |
|
2728 #endif |
|
2729 |
|
2730 INFO_PRINTF5(_L("The result of this shaping for Ka + Matra I iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2731 |
|
2732 param.iPosInText = 36; |
|
2733 param.iPen.iX = param.iPen.iY = 0; |
|
2734 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2735 |
|
2736 TEST(r && param.iPosInText == 38 |
|
2737 && param.iOutputGlyphs == 1 |
|
2738 && param.iOutput[0].iCode == 0x8000087e ); |
|
2739 |
|
2740 #if defined __WINS__ || defined __WINSCW__ |
|
2741 TEST(r && param.iPen.iX == 11); |
|
2742 #endif |
|
2743 |
|
2744 INFO_PRINTF5(_L("The result of this shaping for Sa + Matra I iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2745 |
|
2746 param.iPosInText = 38; |
|
2747 param.iPen.iX = param.iPen.iY = 0; |
|
2748 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2749 |
|
2750 TEST(r && param.iPosInText == 40 |
|
2751 && param.iOutputGlyphs == 1 |
|
2752 && param.iOutput[0].iCode == 0x8000086a); |
|
2753 |
|
2754 #if defined __WINS__ || defined __WINSCW__ |
|
2755 TEST(r && param.iPen.iX == 12); |
|
2756 #endif |
|
2757 |
|
2758 INFO_PRINTF5(_L("The result of this shaping for Dda + Matra I iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2759 |
|
2760 param.iPosInText = 40; |
|
2761 param.iPen.iX = param.iPen.iY = 0; |
|
2762 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2763 |
|
2764 TEST(r && param.iPosInText == 42 |
|
2765 && param.iOutputGlyphs == 1 |
|
2766 && param.iOutput[0].iCode == 0x8000086f); |
|
2767 |
|
2768 #if defined __WINS__ || defined __WINSCW__ |
|
2769 TEST(r && param.iPen.iX == 12); |
|
2770 #endif |
|
2771 |
|
2772 INFO_PRINTF5(_L("The result of this shaping for Va + Matra I iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2773 |
|
2774 param.iPosInText = 42; |
|
2775 param.iPen.iX = param.iPen.iY = 0; |
|
2776 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2777 |
|
2778 TEST(r && param.iPosInText == 44 |
|
2779 && param.iOutputGlyphs == 1 |
|
2780 && param.iOutput[0].iCode == 0x80000867 ); |
|
2781 |
|
2782 #if defined __WINS__ || defined __WINSCW__ |
|
2783 TEST(r && param.iPen.iX == 22); |
|
2784 #endif |
|
2785 |
|
2786 INFO_PRINTF5(_L("The result of this shaping for Jha + Matra I iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
2787 |
|
2788 param.iPosInText = 44; |
|
2789 param.iPen.iX = param.iPen.iY = 0; |
|
2790 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2791 |
|
2792 TEST(r && param.iPosInText == 46 |
|
2793 && param.iOutputGlyphs == 2 |
|
2794 && param.iOutput[0].iCode == 0x800007b0 |
|
2795 && param.iOutput[1].iCode == 0x800007d0); |
|
2796 |
|
2797 #if defined __WINS__ || defined __WINSCW__ |
|
2798 TEST(r && param.iPen.iX == 28); |
|
2799 #endif |
|
2800 |
|
2801 INFO_PRINTF6(_L("The result of this shaping for Jha + Matra U iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2802 |
|
2803 param.iPosInText = 46; |
|
2804 param.iPen.iX = param.iPen.iY = 0; |
|
2805 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2806 |
|
2807 TEST(r && param.iPosInText == 48 |
|
2808 && param.iOutputGlyphs == 2 |
|
2809 && param.iOutput[0].iCode == 0x800007c6 |
|
2810 && param.iOutput[1].iCode == 0x800007d0); |
|
2811 |
|
2812 #if defined __WINS__ || defined __WINSCW__ |
|
2813 TEST(r && param.iPen.iX == 18); |
|
2814 #endif |
|
2815 |
|
2816 INFO_PRINTF6(_L("The result of this shaping for Va + Matra U iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2817 |
|
2818 |
|
2819 param.iPosInText = 48; |
|
2820 param.iPen.iX = param.iPen.iY = 0; |
|
2821 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2822 |
|
2823 TEST(r && param.iPosInText == 50 |
|
2824 && param.iOutputGlyphs == 2 |
|
2825 && param.iOutput[0].iCode == 0x800007a8 |
|
2826 && param.iOutput[1].iCode == 0x800007d1 ); |
|
2827 |
|
2828 #if defined __WINS__ || defined __WINSCW__ |
|
2829 TEST(r && param.iPen.iX == 20); |
|
2830 #endif |
|
2831 |
|
2832 INFO_PRINTF6(_L("The result of this shaping for Ka Matra UU iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode,param.iOutput[1].iCode); |
|
2833 |
|
2834 param.iPosInText = 50; |
|
2835 param.iPen.iX = param.iPen.iY = 0; |
|
2836 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2837 |
|
2838 TEST(r && param.iPosInText == 52 |
|
2839 && param.iOutputGlyphs == 2 |
|
2840 && param.iOutput[0].iCode == 0x800007bc |
|
2841 && param.iOutput[1].iCode == 0x800008a5); |
|
2842 |
|
2843 #if defined __WINS__ || defined __WINSCW__ |
|
2844 TEST(r && param.iPen.iX == 21); |
|
2845 #endif |
|
2846 |
|
2847 INFO_PRINTF6(_L("The result of this shaping for Pa + Matra UU iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2848 |
|
2849 |
|
2850 param.iPosInText = 52; |
|
2851 param.iPen.iX = param.iPen.iY = 0; |
|
2852 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2853 |
|
2854 TEST(r && param.iPosInText == 54 |
|
2855 && param.iOutputGlyphs == 2 |
|
2856 && param.iOutput[0].iCode == 0x8000082d |
|
2857 && param.iOutput[1].iCode == 0x800007d9); |
|
2858 |
|
2859 #if defined __WINS__ || defined __WINSCW__ |
|
2860 TEST(r && param.iPen.iX == 26); |
|
2861 #endif |
|
2862 |
|
2863 INFO_PRINTF6(_L("The result of this shaping for Ma + Matra UU iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2864 |
|
2865 param.iPosInText = 55; |
|
2866 param.iPen.iX = param.iPen.iY = 0; |
|
2867 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2868 |
|
2869 TEST(r && param.iPosInText == 59 |
|
2870 && param.iOutputGlyphs == 2 |
|
2871 && param.iOutput[0].iCode == 0x800007c2 |
|
2872 && param.iOutput[1].iCode == 0x80000809); |
|
2873 |
|
2874 #if defined __WINS__ || defined __WINSCW__ |
|
2875 TEST(r && param.iPen.iX == 17); |
|
2876 #endif |
|
2877 |
|
2878 INFO_PRINTF6(_L("The result of this shaping for Ma + Matra UU iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2879 |
|
2880 param.iPosInText = 60; |
|
2881 param.iPen.iX = param.iPen.iY = 0; |
|
2882 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2883 TEST(r && param.iPosInText == 64 |
|
2884 && param.iOutputGlyphs == 2 |
|
2885 && param.iOutput[0].iCode == 0x800007c2 |
|
2886 && param.iOutput[1].iCode == 0x8000080b); |
|
2887 INFO_PRINTF6(_L("Results are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x "), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2888 |
|
2889 param.iPosInText = 66; |
|
2890 param.iPen.iX = param.iPen.iY = 0; |
|
2891 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2892 TEST(r && param.iPosInText == 75 |
|
2893 && param.iOutputGlyphs == 5 |
|
2894 && param.iOutput[0].iCode == 0x800007c2 |
|
2895 && param.iOutput[1].iCode == 0x8000080b |
|
2896 && param.iOutput[2].iCode == 0x800008db |
|
2897 && param.iOutput[3].iCode == 0x800008db |
|
2898 && param.iOutput[4].iCode == 0x800007da); |
|
2899 INFO_PRINTF7(_L("Results are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
2900 |
|
2901 // DEF103276: Kannada rendering: IcuLayoutEngine does not recongnise 0X0C8E as a vowel |
|
2902 param.iPosInText = 77; |
|
2903 param.iPen.iX = param.iPen.iY = 0; |
|
2904 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
2905 TEST(r && param.iPosInText == 79 |
|
2906 && param.iOutputGlyphs == 2 |
|
2907 && param.iOutput[0].iCode == 0x800007A2 |
|
2908 && param.iOutput[1].iCode == 0x80000798); |
|
2909 |
|
2910 INFO_PRINTF5(_L("DEF103276 Vowel E + Anusvara: iPosInText=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
2911 //End of DEF103276: Kannada rendering: IcuLayoutEngine does not recongnise 0X0C8E as a vowel |
|
2912 |
|
2913 } |
|
2914 |
|
2915 /** |
|
2916 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-3360 |
|
2917 @SYMTestCaseDesc Automated GDI testing for Marathi |
|
2918 @SYMTestPriority High |
|
2919 @SYMTestActions Attempt to compose various valid and invalid Marathi glyph clusters. |
|
2920 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
2921 @SYMPREQ 19: Marathi for Ogmha |
|
2922 */ |
|
2923 |
|
2924 void CTGlyphSelection::TestMarathiChars(CFbsFont* aFont) |
|
2925 { |
|
2926 INFO_PRINTF1(_L("Test Marathi Glyphs")); |
|
2927 |
|
2928 TBool r; |
|
2929 TBuf<47> testText(0); |
|
2930 CFont::TPositionParam param; |
|
2931 param.iDirection = CFont::EHorizontal; |
|
2932 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
2933 |
|
2934 testText.SetLength(47); |
|
2935 |
|
2936 //Testdata |
|
2937 testText[0] = 0x0905; |
|
2938 testText[1] = 0x0945; |
|
2939 |
|
2940 testText[2] = 0x0931; |
|
2941 testText[3] = 0x094D; |
|
2942 testText[4] = 0x0915; |
|
2943 |
|
2944 testText[5] = 0x0930; |
|
2945 testText[6] = 0x094D; |
|
2946 testText[7] = 0x200D; |
|
2947 testText[8] = 0x0915; |
|
2948 |
|
2949 testText[9] = 0x0905; |
|
2950 testText[10] = 0x200D; |
|
2951 testText[11] = 0x0945; |
|
2952 |
|
2953 testText[12] = 0x0909; |
|
2954 testText[13] = 0x0945; |
|
2955 |
|
2956 testText[14] = 0x0915; |
|
2957 testText[15] = 0x200D; |
|
2958 testText[16] = 0x0945; |
|
2959 |
|
2960 // DEF102132: Marathi - Certain sequence of characters does not work correctly |
|
2961 testText[17] = 0x0905; |
|
2962 testText[18] = 0x0945; |
|
2963 testText[19] = 0x0901; |
|
2964 |
|
2965 testText[20] = 0x0905; |
|
2966 testText[21] = 0x200D; |
|
2967 testText[22] = 0x0945; |
|
2968 testText[23] = 0x0901; |
|
2969 // End of DEF102132: Marathi - Certain sequence of characters does not work correctly |
|
2970 |
|
2971 |
|
2972 // DEF102858: Marathi - State table does not allow explicit half forms followed by modifiers |
|
2973 testText[24] = 0x0020; |
|
2974 |
|
2975 testText[25] = 0x0930; |
|
2976 testText[26] = 0x094D; |
|
2977 testText[27] = 0x200D; |
|
2978 testText[28] = 0x0901; |
|
2979 // End of DEF102858: Marathi - State table does not allow explicit half forms followed by modifiers |
|
2980 |
|
2981 // INC104705 Marathi input: Incorrect movement of cursor with eyelash ra forming ligature. |
|
2982 testText[29] = 0x0020; |
|
2983 |
|
2984 testText[30] = 0x0930; |
|
2985 testText[31] = 0x094D; |
|
2986 testText[32] = 0x200D; |
|
2987 testText[33] = 0x0930; |
|
2988 testText[34] = 0x094D; |
|
2989 testText[35] = 0x200D; |
|
2990 testText[36] = 0x0930; |
|
2991 testText[37] = 0x094D; |
|
2992 testText[38] = 0x200D; |
|
2993 testText[39] = 0x0930; |
|
2994 testText[40] = 0x094D; |
|
2995 testText[41] = 0x200D; |
|
2996 testText[42] = 0x0930; |
|
2997 testText[43] = 0x094D; |
|
2998 testText[44] = 0x200D; |
|
2999 // End of INC104705 Marathi input: Incorrect movement of cursor with eyelash ra forming ligature. |
|
3000 |
|
3001 // INC116507: Halant get attached with an independent vowel. |
|
3002 testText[45] = 0x0905; |
|
3003 testText[46] = 0x094D; |
|
3004 // End of INC116507: Halant get attached with an independent vowel. |
|
3005 |
|
3006 //To Do |
|
3007 |
|
3008 param.iText.Set(testText); |
|
3009 |
|
3010 // Test CANDRA A: Independent Vowel A + CANDRA E |
|
3011 param.iPosInText = 0; |
|
3012 param.iPen.iX = param.iPen.iY = 0; |
|
3013 RShapeInfo shapeInfo; |
|
3014 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3015 |
|
3016 TEST(r && param.iPosInText == 2 |
|
3017 && param.iOutputGlyphs == 2 |
|
3018 && param.iOutput[0].iCode == 0x80000528 |
|
3019 && param.iOutput[1].iCode == 0x80000566); |
|
3020 |
|
3021 #if defined __WINS__ || defined __WINSCW__ |
|
3022 TEST(r && param.iPen.iX == 12); |
|
3023 #endif |
|
3024 |
|
3025 INFO_PRINTF6(_L("The result of shaping CANDRA A is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3026 |
|
3027 |
|
3028 // Test Eyelash RA post Unicode 3.0: RRA + VIRAMA + CONSONANT |
|
3029 param.iPosInText = 2 ; |
|
3030 param.iPen.iX = param.iPen.iY = 0; |
|
3031 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3032 |
|
3033 TEST(r && param.iPosInText == 5 |
|
3034 && param.iOutputGlyphs == 2 |
|
3035 && param.iOutput[0].iCode == 0x800005d3 |
|
3036 && param.iOutput[1].iCode == 0x80000538); |
|
3037 |
|
3038 #if defined __WINS__ || defined __WINSCW__ |
|
3039 TEST(r && param.iPen.iX == 18); |
|
3040 #endif |
|
3041 |
|
3042 INFO_PRINTF6(_L("The result of shaping post Unicode 3.0 Eyelash RA is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3043 |
|
3044 // Test Eyelash RA pre Unicode 3.0: RA + VIRAMA + ZWJ + CONSONANT |
|
3045 param.iPosInText = 5; |
|
3046 param.iPen.iX = param.iPen.iY = 0; |
|
3047 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3048 |
|
3049 TEST(r && param.iPosInText == 9 |
|
3050 && param.iOutputGlyphs == 2 |
|
3051 && param.iOutput[0].iCode == 0x800005d3 |
|
3052 && param.iOutput[1].iCode == 0x80000538); |
|
3053 |
|
3054 #if defined __WINS__ || defined __WINSCW__ |
|
3055 TEST(r && param.iPen.iX == 18); |
|
3056 #endif |
|
3057 |
|
3058 INFO_PRINTF6(_L("The result of shaping pre Unicode 3.0 Eyelash RA is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3059 |
|
3060 // Test second form of CANDRA A: Independent Vowel A + ZWJ + CANDRA E |
|
3061 param.iPosInText = 9; |
|
3062 param.iPen.iX = param.iPen.iY = 0; |
|
3063 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3064 |
|
3065 TEST(r && param.iPosInText == 12 |
|
3066 && param.iOutputGlyphs == 2 |
|
3067 && param.iOutput[0].iCode == 0x80000528 |
|
3068 && param.iOutput[1].iCode == 0x80000566 ); |
|
3069 |
|
3070 #if defined __WINS__ || defined __WINSCW__ |
|
3071 TEST(r && param.iPen.iX == 12); |
|
3072 #endif |
|
3073 |
|
3074 INFO_PRINTF6(_L("The result of shaping second form of CANDRA A is %d %d %d 0x%x 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3075 |
|
3076 // Test that CANDRA E does not join with any other independent vowel |
|
3077 param.iPosInText = 12; |
|
3078 param.iPen.iX = param.iPen.iY = 0; |
|
3079 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3080 |
|
3081 TEST(r && param.iPosInText == 13 |
|
3082 && param.iOutputGlyphs == 1 |
|
3083 && param.iOutput[0].iCode == 0x8000052c); |
|
3084 |
|
3085 #if defined __WINS__ || defined __WINSCW__ |
|
3086 TEST(r && param.iPen.iX == 9); |
|
3087 #endif |
|
3088 |
|
3089 INFO_PRINTF5(_L("The result of shaping any other Independent Vowel + CANDRA E is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3090 |
|
3091 // Test that the second form of CANDRA A (i.e. using ZWJ) doesn't work for CONSONANTS (illegal) |
|
3092 param.iPosInText = 14; |
|
3093 param.iPen.iX = param.iPen.iY = 0; |
|
3094 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3095 |
|
3096 TEST(r && param.iPosInText == 15 |
|
3097 && param.iOutputGlyphs == 1 |
|
3098 && param.iOutput[0].iCode == 0x80000538); |
|
3099 |
|
3100 #if defined __WINS__ || defined __WINSCW__ |
|
3101 TEST(r && param.iPen.iX == 11); |
|
3102 #endif |
|
3103 |
|
3104 INFO_PRINTF5(_L("The result of shaping CONSONANT + ZWJ + CANDRA E is %d %d %d 0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3105 |
|
3106 // DEF102132: Marathi - Certain sequence of characters does not work correctly |
|
3107 param.iPosInText = 17; |
|
3108 param.iPen.iX = param.iPen.iY = 0; |
|
3109 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3110 |
|
3111 TEST(r && param.iPosInText == 20 |
|
3112 && param.iOutputGlyphs == 2 |
|
3113 && param.iOutput[0].iCode == 0x80000528 |
|
3114 && param.iOutput[1].iCode == 0x8000069d); |
|
3115 |
|
3116 |
|
3117 INFO_PRINTF5(_L("DEF102132 Independent Vowel A + CANDRA E + Vowel Modifier %d %d 0x%x 0x%x"), param.iPosInText, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3118 |
|
3119 param.iPosInText = 20; |
|
3120 param.iPen.iX = param.iPen.iY = 0; |
|
3121 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3122 |
|
3123 TEST(r && param.iPosInText == 23 |
|
3124 && param.iOutputGlyphs == 2 |
|
3125 && param.iOutput[0].iCode == 0x80000528 |
|
3126 && param.iOutput[1].iCode == 0x8000069d); |
|
3127 |
|
3128 INFO_PRINTF5(_L("DEF102132 Independent Vowel A + ZWJ + CANDRA E + Vowel Modifier %d %d 0x%x 0x%x"), param.iPosInText, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3129 // End of DEF102132: Marathi - Certain sequence of characters does not work correctly |
|
3130 |
|
3131 // DEF102858: Marathi - State table does not allow explicit half forms followed by modifiers |
|
3132 param.iPosInText = 25; |
|
3133 param.iPen.iX = param.iPen.iY = 0; |
|
3134 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3135 TEST(r && param.iPosInText == 29 |
|
3136 && param.iOutputGlyphs == 2 |
|
3137 && param.iOutput[0].iCode == 0x800005D3 |
|
3138 && param.iOutput[1].iCode == 0x80000524); |
|
3139 |
|
3140 INFO_PRINTF5(_L("DEF102858 Ra + Virama + ZWJ + Modifier %d %d 0x%x 0x%x"), param.iPosInText, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3141 // End of DEF102858: Marathi - State table does not allow explicit half forms followed by modifiers |
|
3142 |
|
3143 // INC104705 Marathi input: Incorrect movement of cursor with eyelash ra forming ligature. |
|
3144 param.iPosInText = 30; |
|
3145 param.iPen.iX = param.iPen.iY = 0; |
|
3146 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3147 TEST(r && param.iPosInText == 42 |
|
3148 && param.iOutputGlyphs == 5 |
|
3149 && param.iOutput[0].iCode == 0x800005D3 |
|
3150 && param.iOutput[1].iCode == 0x800005D3 |
|
3151 && param.iOutput[2].iCode == 0x800005B8 |
|
3152 && param.iOutput[3].iCode == 0x80000553 |
|
3153 && param.iOutput[4].iCode == 0x8000056E); |
|
3154 #if defined __WINS__ || defined __WINSCW__ |
|
3155 TEST(param.iPen.iX == 20); |
|
3156 #endif |
|
3157 |
|
3158 INFO_PRINTF7(_L("INC104705 Ra + Virama + ZWJ + Ra + Virama + ZWJ + Ra + Virama + ZWJ + Ra + Virama + ZWJ + Ra + Virama + ZWJ %d %d 0x%x 0x%x 0x%x 0x%x"), param.iPosInText, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode, param.iOutput[3].iCode); |
|
3159 // End of INC104705 Marathi input: Incorrect movement of cursor with eyelash ra forming ligature. |
|
3160 |
|
3161 // INC116507: Halant get attached with an independent vowel. |
|
3162 param.iPosInText = 45; |
|
3163 param.iPen.iX = param.iPen.iY = 0; |
|
3164 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3165 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3166 |
|
3167 TEST(r && param.iPosInText == 47 |
|
3168 && param.iOutputGlyphs == 2 |
|
3169 && param.iOutput[0].iCode == 0x8000058F |
|
3170 && param.iOutput[1].iCode == 0x8000056E); |
|
3171 |
|
3172 #if defined __WINS__ || defined __WINSCW__ |
|
3173 TEST(r && param.iPen.iX == 21); |
|
3174 #endif |
|
3175 |
|
3176 INFO_PRINTF6(_L("INC116507: Independent Vowel A + Halant %d %d %d 0x%x 0x%x"), param.iPosInText, param.iOutputGlyphs, param.iPen.iX, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3177 // End of INC116507: Halant get attached with an independent vowel. |
|
3178 |
|
3179 } |
|
3180 |
|
3181 /** |
|
3182 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-3417 |
|
3183 @SYMTestCaseDesc Automated GDI testing for Gujarati |
|
3184 @SYMTestPriority High |
|
3185 @SYMTestActions Attempt to compose various valid and invalid gujarati glyph clusters. |
|
3186 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
3187 @SYMPREQ 19: Gujarati for Ogmha |
|
3188 */ |
|
3189 |
|
3190 |
|
3191 void CTGlyphSelection::TestGujaratiChars(CFbsFont* aFont) |
|
3192 { |
|
3193 INFO_PRINTF1(_L("Test Gujarati Glyphs")); |
|
3194 |
|
3195 // Do the testing |
|
3196 |
|
3197 TBool r; |
|
3198 TBuf<162> testText(0); |
|
3199 CFont::TPositionParam param; |
|
3200 param.iDirection = CFont::EHorizontal; |
|
3201 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
3202 |
|
3203 testText.SetLength(162); |
|
3204 //Testdata for gujarati Langauage |
|
3205 |
|
3206 testText[0] = 0x0AAC; |
|
3207 testText[1] = 0x0ACD; |
|
3208 testText[2] = 0x200D; |
|
3209 testText[3] = 0x0020; |
|
3210 |
|
3211 testText[4] = 0x0A96; |
|
3212 testText[5] = 0x0ACD; |
|
3213 testText[6] = 0x0A97; |
|
3214 testText[7] = 0x0ACD; |
|
3215 testText[8] = 0x0A98; |
|
3216 testText[9] = 0x0ACD; |
|
3217 testText[10] = 0x0A9A; |
|
3218 |
|
3219 testText[11] = 0x0A95; |
|
3220 testText[12] = 0x0ACD; |
|
3221 testText[13] = 0x0A9C; |
|
3222 testText[14] = 0x200D; |
|
3223 testText[15] = 0x0020; |
|
3224 |
|
3225 testText[16] = 0x0A99; |
|
3226 testText[17] = 0x0ACD; |
|
3227 testText[18] = 0x0A9B; |
|
3228 testText[19] = 0x0ACD; |
|
3229 testText[20] = 0x0A9F; |
|
3230 testText[21] = 0x0ACD; |
|
3231 testText[22] = 0x0AA0; |
|
3232 |
|
3233 //Requirement (GUJ003) |
|
3234 |
|
3235 testText[23] = 0x0A95; |
|
3236 testText[24] = 0x0ACD; |
|
3237 testText[25] = 0x0AB7; |
|
3238 |
|
3239 |
|
3240 testText[26] = 0x0A95; |
|
3241 testText[27] = 0x0ACD; |
|
3242 testText[28] = 0x0AB7; |
|
3243 testText[29] = 0x0ACD; |
|
3244 testText[30] = 0x0AA4; |
|
3245 |
|
3246 testText[31] = 0x0A9C; |
|
3247 testText[32] = 0x0ACD; |
|
3248 testText[33] = 0x0AB7; |
|
3249 testText[34] = 0x0ACD; |
|
3250 testText[35] = 0x0AA4; |
|
3251 |
|
3252 testText[36] = 0x0A9C; |
|
3253 testText[37] = 0x0ACD; |
|
3254 testText[38] = 0x0A9E; |
|
3255 testText[39] = 0x0ACD; |
|
3256 testText[40] = 0x0AA4; |
|
3257 |
|
3258 //Requirement (GUJ 005) |
|
3259 |
|
3260 testText[41] = 0x0AB0; |
|
3261 testText[42] = 0x0ACD; |
|
3262 testText[43] = 0x0A95; |
|
3263 |
|
3264 testText[44] = 0x0AB0; |
|
3265 testText[45] = 0x0ACD; |
|
3266 testText[46] = 0x0A95; |
|
3267 testText[47] = 0x0AC9; |
|
3268 |
|
3269 testText[48] = 0x0AB0; |
|
3270 testText[49] = 0x0ACD; |
|
3271 testText[50] = 0x0A95; |
|
3272 testText[51] = 0x0A82; |
|
3273 |
|
3274 testText[52] = 0x0AB0; |
|
3275 testText[53] = 0x0ACD; |
|
3276 testText[54] = 0x0A95; |
|
3277 testText[55] = 0x0AC9; |
|
3278 testText[56] = 0x0A82; |
|
3279 testText[57] = 0x0020; |
|
3280 |
|
3281 //Requirement (GUJ 006) |
|
3282 |
|
3283 testText[58] = 0x0A97; |
|
3284 testText[59] = 0x0ACD; |
|
3285 testText[60] = 0x0AB0; |
|
3286 |
|
3287 testText[61] = 0x0A9A; |
|
3288 testText[62] = 0x0ACD; |
|
3289 testText[63] = 0x0AB0; |
|
3290 |
|
3291 testText[64] = 0x0A97; |
|
3292 testText[65] = 0x0ACD; |
|
3293 testText[66] = 0x0AB0; |
|
3294 testText[67] = 0x0ACD; |
|
3295 testText[68] = 0x0AA4; |
|
3296 |
|
3297 testText[69] = 0x0A9A; |
|
3298 testText[70] = 0x0ACD; |
|
3299 testText[71] = 0x0AB0; |
|
3300 testText[72] = 0x0ACD; |
|
3301 testText[73] = 0x0AA4; |
|
3302 |
|
3303 //Requirement (GUJ 007) |
|
3304 |
|
3305 testText[74] = 0x0A95; |
|
3306 testText[75] = 0x0ACD; |
|
3307 testText[76] = 0x0AB0; |
|
3308 |
|
3309 testText[77] = 0x0A9C; |
|
3310 testText[78] = 0x0ACD; |
|
3311 testText[79] = 0x0AB0; |
|
3312 |
|
3313 testText[80] = 0x0A95; |
|
3314 testText[81] = 0x0ACD; |
|
3315 testText[82] = 0x0AB0; |
|
3316 testText[83] = 0x0ACD; |
|
3317 testText[84] = 0x0AA4; |
|
3318 |
|
3319 testText[85] = 0x0A9C; |
|
3320 testText[86] = 0x0ACD; |
|
3321 testText[87] = 0x0AB0; |
|
3322 testText[88] = 0x0ACD; |
|
3323 testText[89] = 0x0AA4; |
|
3324 |
|
3325 //Requirement (GUJ 008) |
|
3326 |
|
3327 testText[90] = 0x0A9B; |
|
3328 testText[91] = 0x0ACD; |
|
3329 testText[92] = 0x0AB0; |
|
3330 |
|
3331 testText[93] = 0x0AAF; |
|
3332 testText[94] = 0x0ACD; |
|
3333 testText[95] = 0x0AB0; |
|
3334 |
|
3335 testText[96] = 0x0A9B; |
|
3336 testText[97] = 0x0ACD; |
|
3337 testText[98] = 0x0AB0; |
|
3338 testText[99] = 0x0ACD; |
|
3339 testText[100]= 0x0AA4; |
|
3340 |
|
3341 testText[101] = 0x0AAF; |
|
3342 testText[102] = 0x0ACD; |
|
3343 testText[103] = 0x0AB0; |
|
3344 |
|
3345 testText[104] = 0x0AAF; |
|
3346 testText[105] = 0x0ACD; |
|
3347 testText[106] = 0x0AB0; |
|
3348 testText[107] = 0x0ACD; |
|
3349 testText[108] = 0x0AA4; |
|
3350 |
|
3351 testText[109] = 0x0AB0; |
|
3352 testText[110] = 0x0ACD; |
|
3353 testText[111] = 0x0AB0; |
|
3354 testText[112] = 0x0ACD; |
|
3355 testText[113] = 0x0AB0; |
|
3356 |
|
3357 //Requirement (GUJ 009) |
|
3358 |
|
3359 testText[114] = 0x0A9F; |
|
3360 testText[115] = 0x0ACD; |
|
3361 testText[116] = 0x0AAF; |
|
3362 |
|
3363 testText[117] = 0x0A9B; |
|
3364 testText[118] = 0x0ACD; |
|
3365 testText[119] = 0x0AAF; |
|
3366 |
|
3367 testText[120] = 0x0AA2; |
|
3368 testText[121] = 0x0ACD; |
|
3369 testText[122] = 0x0AAF; |
|
3370 |
|
3371 testText[123] = 0x0A97; |
|
3372 testText[124] = 0x0ACD; |
|
3373 testText[125] = 0x0AAF; |
|
3374 |
|
3375 //Requirement (GUJ 010) |
|
3376 |
|
3377 testText[126] = 0x0A9F; |
|
3378 testText[127] = 0x0ACD; |
|
3379 testText[128] = 0x0AA0; |
|
3380 |
|
3381 testText[129] = 0x0AA6; |
|
3382 testText[130] = 0x0ACD; |
|
3383 testText[131] = 0x0AB5; |
|
3384 |
|
3385 testText[132] = 0x0A9F; |
|
3386 testText[133] = 0x0ACD; |
|
3387 testText[134] = 0x0AA0; |
|
3388 testText[135] = 0x0ACD; |
|
3389 testText[136] = 0x0AA4; |
|
3390 |
|
3391 |
|
3392 testText[137] = 0x0AA6; |
|
3393 testText[138] = 0x0ACD; |
|
3394 testText[139] = 0x0AB5; |
|
3395 testText[140] = 0x0ACD; |
|
3396 testText[141] = 0x0AA4; |
|
3397 |
|
3398 //Requirement (GUJ 011) |
|
3399 |
|
3400 testText[142] = 0x0AB0; |
|
3401 testText[143] = 0x0AC2; |
|
3402 |
|
3403 testText[144] = 0x0AB9; |
|
3404 testText[145] = 0x0AC3; |
|
3405 |
|
3406 testText[146] = 0x0AA6; |
|
3407 testText[147] = 0x0AC3; |
|
3408 |
|
3409 testText[148] = 0x0A9C; |
|
3410 testText[149] = 0x0AC0; |
|
3411 |
|
3412 //Subscript ligutares |
|
3413 |
|
3414 |
|
3415 testText[150] = 0x0A95; |
|
3416 testText[151] = 0x0A81; |
|
3417 |
|
3418 testText[152] = 0x0A95; |
|
3419 testText[153] = 0x0ABE; |
|
3420 testText[154] = 0x0A81; |
|
3421 |
|
3422 testText[155] = 0x0A95; |
|
3423 testText[156] = 0x0AC1; |
|
3424 testText[157] = 0x0A81; |
|
3425 |
|
3426 testText[158] = 0x0A8D; |
|
3427 testText[159] = 0x0A81; |
|
3428 |
|
3429 testText[160] = 0x0A88; |
|
3430 testText[161] = 0x0A81; |
|
3431 |
|
3432 |
|
3433 |
|
3434 param.iText.Set(testText); |
|
3435 |
|
3436 param.iPosInText = 0; |
|
3437 param.iPen.iX = param.iPen.iY = 0; |
|
3438 RShapeInfo shapeInfo; |
|
3439 |
|
3440 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3441 |
|
3442 TEST(r && param.iPosInText == 3 |
|
3443 && param.iOutputGlyphs == 1 |
|
3444 && param.iOutput[0].iCode == 0x800009ec); |
|
3445 |
|
3446 #if defined __WINS__ || defined __WINSCW__ |
|
3447 TEST(r && param.iPen.iX == 9); |
|
3448 #endif |
|
3449 |
|
3450 |
|
3451 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3452 |
|
3453 param.iPosInText = 4; |
|
3454 param.iPen.iX = param.iPen.iY = 0; |
|
3455 |
|
3456 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3457 |
|
3458 TEST(r && param.iPosInText == 11 |
|
3459 && param.iOutputGlyphs == 4 |
|
3460 && param.iOutput[0].iCode == 0x800009d7 |
|
3461 && param.iOutput[1].iCode == 0x800009d8 |
|
3462 && param.iOutput[2].iCode == 0x800009d9 |
|
3463 && param.iOutput[3].iCode == 0x80000967 ); |
|
3464 |
|
3465 #if defined __WINS__ || defined __WINSCW__ |
|
3466 TEST(r && param.iPen.iX == 34); |
|
3467 #endif |
|
3468 |
|
3469 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
3470 |
|
3471 param.iPosInText = 11; |
|
3472 param.iPen.iX = param.iPen.iY = 0; |
|
3473 |
|
3474 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3475 |
|
3476 TEST(r && param.iPosInText == 14 |
|
3477 && param.iOutputGlyphs == 2 |
|
3478 && param.iOutput[0].iCode == 0x800009d6 |
|
3479 && param.iOutput[1].iCode == 0x80000969 ); |
|
3480 |
|
3481 #if defined __WINS__ || defined __WINSCW__ |
|
3482 TEST(r && param.iPen.iX == 22); |
|
3483 #endif |
|
3484 |
|
3485 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3486 |
|
3487 param.iPosInText = 16; |
|
3488 param.iPen.iX = param.iPen.iY = 0; |
|
3489 |
|
3490 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3491 |
|
3492 TEST(r && param.iPosInText == 23 |
|
3493 && param.iOutputGlyphs == 3 |
|
3494 && param.iOutput[0].iCode == 0x800009da |
|
3495 && param.iOutput[1].iCode == 0x800009dc |
|
3496 && param.iOutput[2].iCode == 0x80000aad); |
|
3497 |
|
3498 #if defined __WINS__ || defined __WINSCW__ |
|
3499 TEST(r && param.iPen.iX == 30); |
|
3500 #endif |
|
3501 |
|
3502 |
|
3503 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
3504 |
|
3505 param.iPosInText = 23; |
|
3506 param.iPen.iX = param.iPen.iY = 0; |
|
3507 |
|
3508 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3509 |
|
3510 TEST(r && param.iPosInText == 26 |
|
3511 && param.iOutputGlyphs == 1 |
|
3512 && param.iOutput[0].iCode == 0x800009d2 ); |
|
3513 |
|
3514 #if defined __WINS__ || defined __WINSCW__ |
|
3515 TEST(r && param.iPen.iX == 12); |
|
3516 #endif |
|
3517 |
|
3518 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3519 |
|
3520 |
|
3521 param.iPosInText = 26; |
|
3522 param.iPen.iX = param.iPen.iY = 0; |
|
3523 |
|
3524 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3525 |
|
3526 TEST(r && param.iPosInText == 31 |
|
3527 && param.iOutputGlyphs == 2 |
|
3528 && param.iOutput[0].iCode == 0x800009f8 |
|
3529 && param.iOutput[1].iCode == 0x80000971); |
|
3530 |
|
3531 #if defined __WINS__ || defined __WINSCW__ |
|
3532 TEST(r && param.iPen.iX == 18); |
|
3533 #endif |
|
3534 |
|
3535 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3536 |
|
3537 param.iPosInText = 31; |
|
3538 param.iPen.iX = param.iPen.iY = 0; |
|
3539 |
|
3540 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3541 |
|
3542 TEST(r && param.iPosInText == 36 |
|
3543 && param.iOutputGlyphs == 3 |
|
3544 && param.iOutput[0].iCode == 0x800009dd |
|
3545 && param.iOutput[1].iCode == 0x800009f5 |
|
3546 && param.iOutput[2].iCode == 0x80000971); |
|
3547 |
|
3548 #if defined __WINS__ || defined __WINSCW__ |
|
3549 TEST(r && param.iPen.iX == 30); |
|
3550 #endif |
|
3551 |
|
3552 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
3553 |
|
3554 param.iPosInText = 36; |
|
3555 param.iPen.iX = param.iPen.iY = 0; |
|
3556 |
|
3557 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3558 |
|
3559 TEST(r && param.iPosInText == 41 |
|
3560 && param.iOutputGlyphs == 2 |
|
3561 && param.iOutput[0].iCode == 0x800009f9 |
|
3562 && param.iOutput[1].iCode == 0x80000971); |
|
3563 |
|
3564 #if defined __WINS__ || defined __WINSCW__ |
|
3565 TEST(r && param.iPen.iX == 17); |
|
3566 #endif |
|
3567 |
|
3568 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3569 |
|
3570 param.iPosInText = 41; |
|
3571 param.iPen.iX = param.iPen.iY = 0; |
|
3572 |
|
3573 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3574 |
|
3575 TEST(r && param.iPosInText == 44 |
|
3576 && param.iOutputGlyphs == 2 |
|
3577 && param.iOutput[0].iCode == 0x80000962 |
|
3578 && param.iOutput[1].iCode == 0x800009d4); |
|
3579 |
|
3580 #if defined __WINS__ || defined __WINSCW__ |
|
3581 TEST(r && param.iPen.iX == 8); |
|
3582 #endif |
|
3583 |
|
3584 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3585 |
|
3586 param.iPosInText = 44; |
|
3587 param.iPen.iX = param.iPen.iY = 0; |
|
3588 |
|
3589 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3590 |
|
3591 TEST(r && param.iPosInText == 48 |
|
3592 && param.iOutputGlyphs == 2 |
|
3593 && param.iOutput[0].iCode == 0x80000962 |
|
3594 && param.iOutput[1].iCode == 0x80000ae1 ); |
|
3595 |
|
3596 #if defined __WINS__ || defined __WINSCW__ |
|
3597 TEST(r && param.iPen.iX == 13); |
|
3598 #endif |
|
3599 |
|
3600 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3601 |
|
3602 param.iPosInText = 48; |
|
3603 param.iPen.iX = param.iPen.iY = 0; |
|
3604 |
|
3605 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3606 |
|
3607 TEST(r && param.iPosInText == 52 |
|
3608 && param.iOutputGlyphs == 2 |
|
3609 && param.iOutput[0].iCode == 0x80000962 |
|
3610 && param.iOutput[1].iCode == 0x80000ae9); |
|
3611 |
|
3612 #if defined __WINS__ || defined __WINSCW__ |
|
3613 TEST(r && param.iPen.iX == 8); |
|
3614 #endif |
|
3615 |
|
3616 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3617 |
|
3618 param.iPosInText = 52; |
|
3619 param.iPen.iX = param.iPen.iY = 0; |
|
3620 |
|
3621 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3622 |
|
3623 TEST(r && param.iPosInText == 57 |
|
3624 && param.iOutputGlyphs == 2 |
|
3625 && param.iOutput[0].iCode == 0x80000962 |
|
3626 && param.iOutput[1].iCode == 0x80000ae2); |
|
3627 |
|
3628 #if defined __WINS__ || defined __WINSCW__ |
|
3629 TEST(r && param.iPen.iX == 13); |
|
3630 #endif |
|
3631 |
|
3632 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3633 |
|
3634 param.iPosInText = 58; |
|
3635 param.iPen.iX = param.iPen.iY = 0; |
|
3636 |
|
3637 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3638 |
|
3639 TEST(r && param.iPosInText == 61 |
|
3640 && param.iOutputGlyphs == 1 |
|
3641 && param.iOutput[0].iCode == 0x80000a1e ); |
|
3642 |
|
3643 #if defined __WINS__ || defined __WINSCW__ |
|
3644 TEST(r && param.iPen.iX == 11); |
|
3645 #endif |
|
3646 |
|
3647 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3648 |
|
3649 param.iPosInText = 61; |
|
3650 param.iPen.iX = param.iPen.iY = 0; |
|
3651 |
|
3652 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3653 |
|
3654 TEST(r && param.iPosInText == 64 |
|
3655 && param.iOutputGlyphs == 1 |
|
3656 && param.iOutput[0].iCode == 0x80000a21 ); |
|
3657 |
|
3658 #if defined __WINS__ || defined __WINSCW__ |
|
3659 TEST(r && param.iPen.iX == 10); |
|
3660 #endif |
|
3661 |
|
3662 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3663 |
|
3664 param.iPosInText = 64; |
|
3665 param.iPen.iX = param.iPen.iY = 0; |
|
3666 |
|
3667 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3668 |
|
3669 TEST(r && param.iPosInText == 69 |
|
3670 && param.iOutputGlyphs == 2 |
|
3671 && param.iOutput[0].iCode == 0x80000a64 |
|
3672 && param.iOutput[1].iCode == 0x80000971 ); |
|
3673 |
|
3674 #if defined __WINS__ || defined __WINSCW__ |
|
3675 TEST(r && param.iPen.iX == 17); |
|
3676 #endif |
|
3677 |
|
3678 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3679 |
|
3680 param.iPosInText = 69; |
|
3681 param.iPen.iX = param.iPen.iY = 0; |
|
3682 |
|
3683 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3684 |
|
3685 TEST(r && param.iPosInText == 74 |
|
3686 && param.iOutputGlyphs == 2 |
|
3687 && param.iOutput[0].iCode == 0x80000a67 |
|
3688 && param.iOutput[1].iCode == 0x80000971); |
|
3689 |
|
3690 #if defined __WINS__ || defined __WINSCW__ |
|
3691 TEST(r && param.iPen.iX == 16); |
|
3692 #endif |
|
3693 |
|
3694 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3695 |
|
3696 param.iPosInText = 74; |
|
3697 param.iPen.iX = param.iPen.iY = 0; |
|
3698 |
|
3699 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3700 |
|
3701 TEST(r && param.iPosInText == 77 |
|
3702 && param.iOutputGlyphs == 1 |
|
3703 && param.iOutput[0].iCode == 0x80000a1c); |
|
3704 |
|
3705 #if defined __WINS__ || defined __WINSCW__ |
|
3706 TEST(r && param.iPen.iX == 8); |
|
3707 #endif |
|
3708 |
|
3709 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3710 |
|
3711 param.iPosInText = 77; |
|
3712 param.iPen.iX = param.iPen.iY = 0; |
|
3713 |
|
3714 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3715 |
|
3716 TEST(r && param.iPosInText == 80 |
|
3717 && param.iOutputGlyphs == 1 |
|
3718 && param.iOutput[0].iCode == 0x80000a23); |
|
3719 |
|
3720 #if defined __WINS__ || defined __WINSCW__ |
|
3721 TEST(r && param.iPen.iX == 15); |
|
3722 #endif |
|
3723 |
|
3724 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3725 |
|
3726 param.iPosInText = 80; |
|
3727 param.iPen.iX = param.iPen.iY = 0; |
|
3728 |
|
3729 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3730 |
|
3731 TEST(r && param.iPosInText == 85 |
|
3732 && param.iOutputGlyphs == 2 |
|
3733 && param.iOutput[0].iCode == 0x80000a62 |
|
3734 && param.iOutput[1].iCode == 0x80000971); |
|
3735 |
|
3736 #if defined __WINS__ || defined __WINSCW__ |
|
3737 TEST(r && param.iPen.iX == 17); |
|
3738 #endif |
|
3739 |
|
3740 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3741 |
|
3742 param.iPosInText = 85; |
|
3743 param.iPen.iX = param.iPen.iY = 0; |
|
3744 |
|
3745 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3746 |
|
3747 TEST(r && param.iPosInText == 90 |
|
3748 && param.iOutputGlyphs == 2 |
|
3749 && param.iOutput[0].iCode == 0x80000a69 |
|
3750 && param.iOutput[1].iCode == 0x80000971); |
|
3751 |
|
3752 #if defined __WINS__ || defined __WINSCW__ |
|
3753 TEST(r && param.iPen.iX == 24); |
|
3754 #endif |
|
3755 |
|
3756 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3757 |
|
3758 param.iPosInText =90; |
|
3759 param.iPen.iX = param.iPen.iY = 0; |
|
3760 |
|
3761 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3762 |
|
3763 TEST(r && param.iPosInText == 93 |
|
3764 && param.iOutputGlyphs == 1 |
|
3765 && param.iOutput[0].iCode == 0x80000a22 ); |
|
3766 |
|
3767 #if defined __WINS__ || defined __WINSCW__ |
|
3768 TEST(r && param.iPen.iX == 12); |
|
3769 #endif |
|
3770 |
|
3771 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3772 |
|
3773 param.iPosInText = 93; |
|
3774 param.iPen.iX = param.iPen.iY = 0; |
|
3775 |
|
3776 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3777 |
|
3778 TEST(r && param.iPosInText == 96 |
|
3779 && param.iOutputGlyphs == 1 |
|
3780 && param.iOutput[0].iCode == 0x80000a35 ); |
|
3781 |
|
3782 #if defined __WINS__ || defined __WINSCW__ |
|
3783 TEST(r && param.iPen.iX == 10); |
|
3784 #endif |
|
3785 |
|
3786 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3787 |
|
3788 param.iPosInText = 96; |
|
3789 param.iPen.iX = param.iPen.iY = 0; |
|
3790 |
|
3791 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3792 |
|
3793 TEST(r && param.iPosInText == 101 |
|
3794 && param.iOutputGlyphs == 2 |
|
3795 && param.iOutput[0].iCode == 0x80000a68 |
|
3796 && param.iOutput[1].iCode == 0x80000971); |
|
3797 |
|
3798 #if defined __WINS__ || defined __WINSCW__ |
|
3799 TEST(r && param.iPen.iX == 21); |
|
3800 #endif |
|
3801 |
|
3802 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3803 |
|
3804 param.iPosInText = 101; |
|
3805 param.iPen.iX = param.iPen.iY = 0; |
|
3806 |
|
3807 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3808 |
|
3809 TEST(r && param.iPosInText == 104 |
|
3810 && param.iOutputGlyphs == 1 |
|
3811 && param.iOutput[0].iCode == 0x80000a35 ); |
|
3812 #if defined __WINS__ || defined __WINSCW__ |
|
3813 TEST(r && param.iPen.iX == 10); |
|
3814 #endif |
|
3815 |
|
3816 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3817 |
|
3818 param.iPosInText = 104; |
|
3819 param.iPen.iX = param.iPen.iY = 0; |
|
3820 |
|
3821 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3822 |
|
3823 TEST(r && param.iPosInText == 109 |
|
3824 && param.iOutputGlyphs == 2 |
|
3825 && param.iOutput[0].iCode == 0x80000a7b |
|
3826 && param.iOutput[1].iCode == 0x80000971 ); |
|
3827 |
|
3828 #if defined __WINS__ || defined __WINSCW__ |
|
3829 TEST(r && param.iPen.iX == 16); |
|
3830 #endif |
|
3831 |
|
3832 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3833 |
|
3834 param.iPosInText = 109; |
|
3835 param.iPen.iX = param.iPen.iY = 0; |
|
3836 |
|
3837 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3838 |
|
3839 TEST(r && param.iPosInText == 114 |
|
3840 && param.iOutputGlyphs == 2 |
|
3841 && param.iOutput[0].iCode == 0x80000a36 |
|
3842 && param.iOutput[1].iCode == 0x800009d4 ); |
|
3843 |
|
3844 #if defined __WINS__ || defined __WINSCW__ |
|
3845 TEST(r && param.iPen.iX == 7); |
|
3846 #endif |
|
3847 |
|
3848 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3849 |
|
3850 param.iPosInText = 114; |
|
3851 param.iPen.iX = param.iPen.iY = 0; |
|
3852 |
|
3853 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3854 |
|
3855 TEST(r && param.iPosInText == 117 |
|
3856 && param.iOutputGlyphs == 1 |
|
3857 && param.iOutput[0].iCode == 0x80000aae); |
|
3858 |
|
3859 #if defined __WINS__ || defined __WINSCW__ |
|
3860 TEST(r && param.iPen.iX == 17); |
|
3861 #endif |
|
3862 |
|
3863 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3864 |
|
3865 param.iPosInText = 117; |
|
3866 param.iPen.iX = param.iPen.iY = 0; |
|
3867 |
|
3868 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3869 |
|
3870 TEST(r && param.iPosInText == 120 |
|
3871 && param.iOutputGlyphs == 1 |
|
3872 && param.iOutput[0].iCode == 0x80000aab ); |
|
3873 |
|
3874 #if defined __WINS__ || defined __WINSCW__ |
|
3875 TEST(r && param.iPen.iX == 21); |
|
3876 #endif |
|
3877 |
|
3878 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3879 |
|
3880 param.iPosInText = 120; |
|
3881 param.iPen.iX = param.iPen.iY = 0; |
|
3882 |
|
3883 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3884 |
|
3885 TEST(r && param.iPosInText == 123 |
|
3886 && param.iOutputGlyphs == 1 |
|
3887 && param.iOutput[0].iCode == 0x80000ab5 ); |
|
3888 |
|
3889 #if defined __WINS__ || defined __WINSCW__ |
|
3890 TEST(r && param.iPen.iX == 18); |
|
3891 #endif |
|
3892 |
|
3893 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3894 |
|
3895 param.iPosInText = 123; |
|
3896 param.iPen.iX = param.iPen.iY = 0; |
|
3897 |
|
3898 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3899 |
|
3900 TEST(r && param.iPosInText == 126 |
|
3901 && param.iOutputGlyphs == 2 |
|
3902 && param.iOutput[0].iCode == 0x800009d8 |
|
3903 && param.iOutput[1].iCode == 0x8000097b); |
|
3904 |
|
3905 #if defined __WINS__ || defined __WINSCW__ |
|
3906 TEST(r && param.iPen.iX == 17); |
|
3907 #endif |
|
3908 |
|
3909 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
3910 |
|
3911 param.iPosInText = 126; |
|
3912 param.iPen.iX = param.iPen.iY = 0; |
|
3913 |
|
3914 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3915 |
|
3916 TEST(r && param.iPosInText == 129 |
|
3917 && param.iOutputGlyphs == 1 |
|
3918 && param.iOutput[0].iCode == 0x80000aad); |
|
3919 |
|
3920 #if defined __WINS__ || defined __WINSCW__ |
|
3921 TEST(r && param.iPen.iX == 9); |
|
3922 #endif |
|
3923 |
|
3924 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3925 |
|
3926 param.iPosInText = 129; |
|
3927 param.iPen.iX = param.iPen.iY = 0; |
|
3928 |
|
3929 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3930 |
|
3931 TEST(r && param.iPosInText == 132 |
|
3932 && param.iOutputGlyphs == 1 |
|
3933 && param.iOutput[0].iCode == 0x80000ac0 ); |
|
3934 |
|
3935 #if defined __WINS__ || defined __WINSCW__ |
|
3936 TEST(r && param.iPen.iX == 10); |
|
3937 #endif |
|
3938 |
|
3939 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3940 |
|
3941 param.iPosInText =132; |
|
3942 param.iPen.iX = param.iPen.iY = 0; |
|
3943 |
|
3944 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3945 |
|
3946 TEST(r && param.iPosInText == 137 |
|
3947 && param.iOutputGlyphs == 3 |
|
3948 && param.iOutput[0].iCode == 0x800009e0 |
|
3949 && param.iOutput[1].iCode == 0x800009e1 |
|
3950 && param.iOutput[2].iCode == 0x80000971); |
|
3951 |
|
3952 #if defined __WINS__ || defined __WINSCW__ |
|
3953 TEST(r && param.iPen.iX == 26); |
|
3954 #endif |
|
3955 |
|
3956 |
|
3957 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
3958 |
|
3959 param.iPosInText = 137; |
|
3960 param.iPen.iX = param.iPen.iY = 0; |
|
3961 |
|
3962 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3963 |
|
3964 TEST(r && param.iPosInText == 142 |
|
3965 && param.iOutputGlyphs == 3 |
|
3966 && param.iOutput[0].iCode == 0x800009e7 |
|
3967 && param.iOutput[1].iCode == 0x800009f3 |
|
3968 && param.iOutput[2].iCode == 0x80000971); |
|
3969 |
|
3970 #if defined __WINS__ || defined __WINSCW__ |
|
3971 TEST(r && param.iPen.iX == 23); |
|
3972 #endif |
|
3973 |
|
3974 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
3975 |
|
3976 param.iPosInText = 142; |
|
3977 param.iPen.iX = param.iPen.iY = 0; |
|
3978 |
|
3979 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3980 |
|
3981 TEST(r && param.iPosInText == 144 |
|
3982 && param.iOutputGlyphs == 1 |
|
3983 && param.iOutput[0].iCode == 0x80000b04); |
|
3984 |
|
3985 #if defined __WINS__ || defined __WINSCW__ |
|
3986 TEST(r && param.iPen.iX == 7); |
|
3987 #endif |
|
3988 |
|
3989 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
3990 |
|
3991 param.iPosInText = 144; |
|
3992 param.iPen.iX = param.iPen.iY = 0; |
|
3993 |
|
3994 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
3995 |
|
3996 TEST(r && param.iPosInText == 146 |
|
3997 && param.iOutputGlyphs == 1 |
|
3998 && param.iOutput[0].iCode == 0x80000b05); |
|
3999 |
|
4000 #if defined __WINS__ || defined __WINSCW__ |
|
4001 TEST(r && param.iPen.iX == 9); |
|
4002 #endif |
|
4003 |
|
4004 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4005 |
|
4006 param.iPosInText = 146; |
|
4007 param.iPen.iX = param.iPen.iY = 0; |
|
4008 |
|
4009 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4010 |
|
4011 TEST(r && param.iPosInText == 148 |
|
4012 && param.iOutputGlyphs == 1 |
|
4013 && param.iOutput[0].iCode == 0x80000b02); |
|
4014 |
|
4015 #if defined __WINS__ || defined __WINSCW__ |
|
4016 TEST(r && param.iPen.iX == 7); |
|
4017 #endif |
|
4018 |
|
4019 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4020 |
|
4021 param.iPosInText = 148; |
|
4022 param.iPen.iX = param.iPen.iY = 0; |
|
4023 |
|
4024 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4025 |
|
4026 TEST(r && param.iPosInText == 150 |
|
4027 && param.iOutputGlyphs == 1 |
|
4028 && param.iOutput[0].iCode == 0x80000aff); |
|
4029 |
|
4030 #if defined __WINS__ || defined __WINSCW__ |
|
4031 TEST(r && param.iPen.iX == 16); |
|
4032 #endif |
|
4033 |
|
4034 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4035 |
|
4036 param.iPosInText = 150; |
|
4037 param.iPen.iX = param.iPen.iY = 0; |
|
4038 |
|
4039 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4040 |
|
4041 TEST(r && param.iPosInText == 152 |
|
4042 && param.iOutputGlyphs == 2 |
|
4043 && param.iOutput[0].iCode == 0x80000962 |
|
4044 && param.iOutput[1].iCode ==0x80000951); |
|
4045 |
|
4046 #if defined __WINS__ || defined __WINSCW__ |
|
4047 TEST(r && param.iPen.iX == 8); |
|
4048 #endif |
|
4049 |
|
4050 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4051 |
|
4052 param.iPosInText = 152; |
|
4053 param.iPen.iX = param.iPen.iY = 0; |
|
4054 |
|
4055 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4056 |
|
4057 TEST(r && param.iPosInText == 155 |
|
4058 && param.iOutputGlyphs == 3 |
|
4059 && param.iOutput[0].iCode == 0x80000962 |
|
4060 && param.iOutput[1].iCode == 0x80000986 |
|
4061 && param.iOutput[2].iCode == 0x80000951); |
|
4062 |
|
4063 #if defined __WINS__ || defined __WINSCW__ |
|
4064 TEST(r && param.iPen.iX == 12); |
|
4065 #endif |
|
4066 |
|
4067 |
|
4068 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
4069 |
|
4070 param.iPosInText = 155; |
|
4071 param.iPen.iX = param.iPen.iY = 0; |
|
4072 |
|
4073 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4074 |
|
4075 TEST(r && param.iPosInText == 158 |
|
4076 && param.iOutputGlyphs == 3 |
|
4077 && param.iOutput[0].iCode == 0x80000962 |
|
4078 && param.iOutput[1].iCode == 0x80000989 |
|
4079 && param.iOutput[2].iCode == 0x80000951); |
|
4080 |
|
4081 #if defined __WINS__ || defined __WINSCW__ |
|
4082 TEST(r && param.iPen.iX == 8); |
|
4083 #endif |
|
4084 |
|
4085 |
|
4086 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
4087 param.iPosInText = 158; |
|
4088 param.iPen.iX = param.iPen.iY = 0; |
|
4089 |
|
4090 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4091 |
|
4092 TEST(r && param.iPosInText == 160 |
|
4093 && param.iOutputGlyphs == 1 |
|
4094 && param.iOutput[0].iCode == 0x80000aee); |
|
4095 |
|
4096 #if defined __WINS__ || defined __WINSCW__ |
|
4097 TEST(r && param.iPen.iX == 14); |
|
4098 #endif |
|
4099 |
|
4100 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4101 |
|
4102 param.iPosInText = 160; |
|
4103 param.iPen.iX = param.iPen.iY = 0; |
|
4104 |
|
4105 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4106 |
|
4107 TEST(r && param.iPosInText == 162 |
|
4108 && param.iOutputGlyphs == 1 |
|
4109 && param.iOutput[0].iCode == 0x80000aed); |
|
4110 |
|
4111 #if defined __WINS__ || defined __WINSCW__ |
|
4112 TEST(r && param.iPen.iX == 10); |
|
4113 #endif |
|
4114 |
|
4115 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4116 } |
|
4117 |
|
4118 |
|
4119 void CTGlyphSelection::TestBengaliChars(CFbsFont* aFont) |
|
4120 { |
|
4121 INFO_PRINTF1(_L("Test Bengali Glyphs")); |
|
4122 |
|
4123 // Do the testing |
|
4124 |
|
4125 TBool r; |
|
4126 TBuf<115> testText(0); |
|
4127 CFont::TPositionParam param; |
|
4128 param.iDirection = CFont::EHorizontal; |
|
4129 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
4130 |
|
4131 testText.SetLength(115); |
|
4132 // Make sure there is no garbage values in the memory we are using. |
|
4133 for (TInt i = 0; i < testText.Length(); i++) |
|
4134 testText[i]=0xFFFF; |
|
4135 |
|
4136 //Testdata for Bengali language |
|
4137 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4002")); |
|
4138 /** |
|
4139 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4002 |
|
4140 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4141 @SYMTestPriority High |
|
4142 @SYMTestActions Attempt to compose various invalid Bengali glyph clusters to test the requirement. |
|
4143 If any part of stored text (e.g. received or downloaded document) is not properly encoded in logical order, the relevant text handling processes must treat that part as an invalid sequence of text and use appropriate fallback mechanisms. Invalid sequences of characters must be rendered as incomplete syllables and rendering engine must be able to handle invalid coding appropriately |
|
4144 @SYMTestExpectedResults Rendering engine will render as incomplete syllables |
|
4145 @SYMPREQ 1766 Bengali for Sphinx |
|
4146 @SYMREQ 8741 Bengali Text Rendering |
|
4147 */ |
|
4148 |
|
4149 // BEN002: Test invalid sequences |
|
4150 testText[0] = 0x09C7; |
|
4151 testText[1] = 0x0995; |
|
4152 testText[2] = 0x0995; |
|
4153 testText[3] = 0x09C1; |
|
4154 testText[4] = 0x09C1; |
|
4155 testText[5] = 0x0995; |
|
4156 testText[6] = 0x09CD; |
|
4157 testText[7] = 0x09C1; |
|
4158 testText[8] = 0x0995; |
|
4159 testText[9] = 0x0981; |
|
4160 testText[10] = 0x09C1; |
|
4161 |
|
4162 param.iText.Set(testText); |
|
4163 RShapeInfo shapeInfo; |
|
4164 param.iPosInText = 0; |
|
4165 param.iPen.iX = param.iPen.iY = 0; |
|
4166 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4167 |
|
4168 TEST(r && param.iPosInText == 1 |
|
4169 && param.iOutputGlyphs == 2 |
|
4170 && param.iOutput[0].iCode == 0x80000ce5 |
|
4171 && param.iOutput[1].iCode == 0x8000058f); |
|
4172 |
|
4173 #if defined __WINS__ || defined __WINSCW__ |
|
4174 TEST(r && param.iPen.iX == 15); |
|
4175 #endif |
|
4176 |
|
4177 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4178 |
|
4179 param.iPosInText = 1; |
|
4180 param.iPen.iX = param.iPen.iY = 0; |
|
4181 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4182 |
|
4183 TEST(r && param.iPosInText == 2 |
|
4184 && param.iOutputGlyphs == 1 |
|
4185 && param.iOutput[0].iCode == 0x80000cbc); |
|
4186 |
|
4187 #if defined __WINS__ || defined __WINSCW__ |
|
4188 TEST(r && param.iPen.iX == 12); |
|
4189 #endif |
|
4190 |
|
4191 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4192 |
|
4193 param.iPosInText = 2; |
|
4194 param.iPen.iX = param.iPen.iY = 0; |
|
4195 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4196 |
|
4197 TEST(r && param.iPosInText == 4 |
|
4198 && param.iOutputGlyphs == 1 |
|
4199 && param.iOutput[0].iCode == 0x80000ebe); |
|
4200 |
|
4201 #if defined __WINS__ || defined __WINSCW__ |
|
4202 TEST(r && param.iPen.iX == 13); |
|
4203 #endif |
|
4204 |
|
4205 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4206 |
|
4207 param.iPosInText = 4; |
|
4208 param.iPen.iX = param.iPen.iY = 0; |
|
4209 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4210 |
|
4211 TEST(r && param.iPosInText == 5 |
|
4212 && param.iOutputGlyphs == 2 |
|
4213 && param.iOutput[0].iCode == 0x8000058f |
|
4214 && param.iOutput[1].iCode == 0x80000ce1 |
|
4215 ); |
|
4216 #if defined __WINS__ || defined __WINSCW__ |
|
4217 TEST(r && param.iPen.iX == 9); |
|
4218 #endif |
|
4219 |
|
4220 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4221 |
|
4222 param.iPosInText = 5; |
|
4223 param.iPen.iX = param.iPen.iY = 0; |
|
4224 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4225 |
|
4226 TEST(r && param.iPosInText == 7 |
|
4227 && param.iOutputGlyphs == 2 |
|
4228 && param.iOutput[0].iCode == 0x80000cbc |
|
4229 && param.iOutput[1].iCode == 0x80000ce9 |
|
4230 ); |
|
4231 |
|
4232 #if defined __WINS__ || defined __WINSCW__ |
|
4233 TEST(r && param.iPen.iX == 12); |
|
4234 #endif |
|
4235 |
|
4236 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4237 |
|
4238 param.iPosInText = 7; |
|
4239 param.iPen.iX = param.iPen.iY = 0; |
|
4240 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4241 |
|
4242 TEST(r && param.iPosInText == 8 |
|
4243 && param.iOutputGlyphs == 2 |
|
4244 && param.iOutput[0].iCode == 0x8000058f |
|
4245 && param.iOutput[1].iCode == 0x80000ce1 |
|
4246 ); |
|
4247 |
|
4248 #if defined __WINS__ || defined __WINSCW__ |
|
4249 TEST(r && param.iPen.iX == 9); |
|
4250 #endif |
|
4251 |
|
4252 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4253 |
|
4254 param.iPosInText = 8; |
|
4255 param.iPen.iX = param.iPen.iY = 0; |
|
4256 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4257 |
|
4258 TEST(r && param.iPosInText == 10 |
|
4259 && param.iOutputGlyphs == 2 |
|
4260 && param.iOutput[0].iCode == 0x80000cbc |
|
4261 && param.iOutput[1].iCode == 0x80000cad |
|
4262 ); |
|
4263 |
|
4264 #if defined __WINS__ || defined __WINSCW__ |
|
4265 TEST(r && param.iPen.iX == 12); |
|
4266 #endif |
|
4267 |
|
4268 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4269 |
|
4270 param.iPosInText = 10; |
|
4271 param.iPen.iX = param.iPen.iY = 0; |
|
4272 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4273 |
|
4274 TEST(r && param.iPosInText == 11 |
|
4275 && param.iOutputGlyphs == 2 |
|
4276 && param.iOutput[0].iCode == 0x8000058f |
|
4277 && param.iOutput[1].iCode == 0x80000ce1 |
|
4278 ); |
|
4279 |
|
4280 #if defined __WINS__ || defined __WINSCW__ |
|
4281 TEST(r && param.iPen.iX == 9); |
|
4282 #endif |
|
4283 |
|
4284 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4285 TRAPD(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4286 if (err!=KErrNone) |
|
4287 INFO_PRINTF1(_L("Failed to record test result")); |
|
4288 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4003")); |
|
4289 /** |
|
4290 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4003 |
|
4291 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4292 @SYMTestPriority High |
|
4293 @SYMTestActions |
|
4294 Passing both Bengali and Latin scripts simultaneously |
|
4295 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4296 @SYMPREQ 1766 Bengali for Sphinx |
|
4297 @SYMREQ 8741 Bengali Text Rendering |
|
4298 */ |
|
4299 //BEN003 |
|
4300 testText[11] = 0x0995; |
|
4301 testText[12] = 0x0041; // Unicode value for A |
|
4302 testText[13] = 0x09E6; //Bengali digit 1 |
|
4303 |
|
4304 param.iPosInText = 11; |
|
4305 param.iPen.iX = param.iPen.iY = 0; |
|
4306 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4307 |
|
4308 TEST(r && param.iPosInText == 12 |
|
4309 && param.iOutputGlyphs == 1 |
|
4310 && param.iOutput[0].iCode == 0x80000cbc |
|
4311 ); |
|
4312 |
|
4313 #if defined __WINS__ || defined __WINSCW__ |
|
4314 TEST(r && param.iPen.iX == 12); |
|
4315 #endif |
|
4316 |
|
4317 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4318 |
|
4319 param.iPosInText = 12; |
|
4320 param.iPen.iX = param.iPen.iY = 0; |
|
4321 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4322 |
|
4323 TEST(r && param.iPosInText == 13 |
|
4324 && param.iOutputGlyphs == 1 |
|
4325 && param.iOutput[0].iCode == 0x41 |
|
4326 ); |
|
4327 |
|
4328 #if defined __WINS__ || defined __WINSCW__ |
|
4329 TEST(r && param.iPen.iX == 10); |
|
4330 #endif |
|
4331 |
|
4332 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x "), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4333 |
|
4334 param.iPosInText = 13; |
|
4335 param.iPen.iX = param.iPen.iY = 0; |
|
4336 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4337 |
|
4338 TEST(r && param.iPosInText == 14 |
|
4339 && param.iOutputGlyphs == 1 |
|
4340 && param.iOutput[0].iCode ==0x80000cf3 |
|
4341 ); |
|
4342 |
|
4343 #if defined __WINS__ || defined __WINSCW__ |
|
4344 TEST(r && param.iPen.iX == 10); |
|
4345 #endif |
|
4346 |
|
4347 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4348 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4349 if (err!=KErrNone) |
|
4350 INFO_PRINTF1(_L("Failed to record test result")); |
|
4351 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4004")); |
|
4352 /** |
|
4353 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4004 |
|
4354 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4355 @SYMTestPriority High |
|
4356 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test the reequirement. |
|
4357 Text rendering in Bengali must be based on syllables and the text rendering engine must be capable of handling the Bengali syllabic structure. If a single word is longer than one row, the line can only be broken at syllable border. |
|
4358 Invalid sequences of characters must be rendered as incomplete syllables |
|
4359 |
|
4360 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4361 @SYMPREQ 1766: Bengali for Sphinx |
|
4362 @SYMREQ 8741: Bengali Text Rendering |
|
4363 */ |
|
4364 // BEN004: |
|
4365 testText[14] = 0x0985; |
|
4366 testText[15] = 0x09A4; |
|
4367 testText[16] = 0x09CD; |
|
4368 testText[17] = 0x09AF; |
|
4369 testText[18] = 0x09A8; |
|
4370 testText[19] = 0x09CD; |
|
4371 testText[20] = 0x09A4; |
|
4372 |
|
4373 param.iPosInText = 14; |
|
4374 param.iPen.iX = param.iPen.iY = 0; |
|
4375 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4376 |
|
4377 TEST(r && param.iPosInText == 15 |
|
4378 && param.iOutputGlyphs == 1 |
|
4379 && param.iOutput[0].iCode == 0x80000cb0 |
|
4380 ); |
|
4381 |
|
4382 #if defined __WINS__ || defined __WINSCW__ |
|
4383 TEST(r && param.iPen.iX == 14); |
|
4384 #endif |
|
4385 |
|
4386 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4387 |
|
4388 param.iPosInText = 15; |
|
4389 param.iPen.iX = param.iPen.iY = 0; |
|
4390 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4391 |
|
4392 TEST(r && param.iPosInText == 18 |
|
4393 && param.iOutputGlyphs == 2 |
|
4394 && param.iOutput[0].iCode ==0x80000ccb |
|
4395 && param.iOutput[1].iCode ==0x80000d6e |
|
4396 ); |
|
4397 |
|
4398 #if defined __WINS__ || defined __WINSCW__ |
|
4399 TEST(r && param.iPen.iX == 16); |
|
4400 #endif |
|
4401 |
|
4402 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode,param.iOutput[1].iCode); |
|
4403 |
|
4404 param.iPosInText = 18; |
|
4405 param.iPen.iX = param.iPen.iY = 0; |
|
4406 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4407 |
|
4408 TEST(r && param.iPosInText == 21 |
|
4409 && param.iOutputGlyphs == 1 |
|
4410 && param.iOutput[0].iCode == 0x80000e14 |
|
4411 ); |
|
4412 |
|
4413 #if defined __WINS__ || defined __WINSCW__ |
|
4414 TEST(r && param.iPen.iX == 13); |
|
4415 #endif |
|
4416 |
|
4417 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4418 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4419 if (err!=KErrNone) |
|
4420 INFO_PRINTF1(_L("Failed to record test result")); |
|
4421 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4005")); |
|
4422 // BEN005 |
|
4423 /** |
|
4424 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4005 |
|
4425 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4426 @SYMTestPriority High |
|
4427 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test the requirment |
|
4428 Text rendering must be able to display specified character sequences using ligatures and set of ligatures (stable/unstable) must be font dependent / configurable. |
|
4429 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4430 @SYMPREQ 1766: Bengali for Sphinx |
|
4431 @SYMREQ 8741: Bengali Text Rendering |
|
4432 */ |
|
4433 testText[21] = 0x0995; |
|
4434 testText[22] = 0x09CD; |
|
4435 testText[23] = 0x09B7; |
|
4436 |
|
4437 testText[24] = 0x09A4; |
|
4438 testText[25] = 0x09CD; |
|
4439 testText[26] = 0x09B0; |
|
4440 |
|
4441 testText[27] = 0x09A6; |
|
4442 testText[28] = 0x09CD; |
|
4443 testText[29] = 0x09A6; |
|
4444 |
|
4445 |
|
4446 param.iPosInText = 21; |
|
4447 param.iPen.iX = param.iPen.iY = 0; |
|
4448 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4449 |
|
4450 TEST(r && param.iPosInText == 24 |
|
4451 && param.iOutputGlyphs == 1 |
|
4452 && param.iOutput[0].iCode == 0x80000d25 |
|
4453 ); |
|
4454 |
|
4455 #if defined __WINS__ || defined __WINSCW__ |
|
4456 TEST(r && param.iPen.iX == 15); |
|
4457 #endif |
|
4458 |
|
4459 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4460 |
|
4461 param.iPosInText = 24; |
|
4462 param.iPen.iX = param.iPen.iY = 0; |
|
4463 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4464 |
|
4465 TEST(r && param.iPosInText == 27 |
|
4466 && param.iOutputGlyphs == 1 |
|
4467 && param.iOutput[0].iCode ==0x80000d89 |
|
4468 ); |
|
4469 |
|
4470 #if defined __WINS__ || defined __WINSCW__ |
|
4471 TEST(r && param.iPen.iX == 12); |
|
4472 #endif |
|
4473 |
|
4474 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4475 |
|
4476 param.iPosInText = 27; |
|
4477 param.iPen.iX = param.iPen.iY = 0; |
|
4478 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4479 |
|
4480 TEST(r && param.iPosInText == 30 |
|
4481 && param.iOutputGlyphs == 1 |
|
4482 && param.iOutput[0].iCode == 0x80000e0a |
|
4483 ); |
|
4484 |
|
4485 #if defined __WINS__ || defined __WINSCW__ |
|
4486 TEST(r && param.iPen.iX == 13); |
|
4487 #endif |
|
4488 |
|
4489 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4490 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4491 if (err!=KErrNone) |
|
4492 INFO_PRINTF1(_L("Failed to record test result")); |
|
4493 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4006")); |
|
4494 // BEN006 |
|
4495 /** |
|
4496 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4006 |
|
4497 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4498 @SYMTestPriority High |
|
4499 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
4500 whether tamil digits are recongized as numerals. |
|
4501 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4502 @SYMPREQ 1766: Bengali for Sphinx |
|
4503 @SYMREQ 8741: Bengali Text Rendering |
|
4504 */ |
|
4505 testText[30] = 0x09E6; // Bengali 1 |
|
4506 testText[31] = 0x0030; //Basic Latin 0 |
|
4507 |
|
4508 |
|
4509 param.iPosInText = 30; |
|
4510 param.iPen.iX = param.iPen.iY = 0; |
|
4511 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4512 |
|
4513 TEST(r && param.iPosInText == 31 |
|
4514 && param.iOutputGlyphs == 1 |
|
4515 && param.iOutput[0].iCode == 0x80000cf3 |
|
4516 ); |
|
4517 |
|
4518 #if defined __WINS__ || defined __WINSCW__ |
|
4519 TEST(r && param.iPen.iX == 10); |
|
4520 #endif |
|
4521 |
|
4522 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4523 |
|
4524 param.iPosInText = 31; |
|
4525 param.iPen.iX = param.iPen.iY = 0; |
|
4526 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4527 |
|
4528 TEST(r && param.iPosInText == 32 |
|
4529 && param.iOutputGlyphs == 1 |
|
4530 && param.iOutput[0].iCode == 0x80000774 |
|
4531 ); |
|
4532 |
|
4533 #if defined __WINS__ || defined __WINSCW__ |
|
4534 TEST(r && param.iPen.iX == 8); |
|
4535 #endif |
|
4536 |
|
4537 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x "), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4538 |
|
4539 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4540 if (err!=KErrNone) |
|
4541 INFO_PRINTF1(_L("Failed to record test result")); |
|
4542 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4007")); |
|
4543 //BEN 008 |
|
4544 /** |
|
4545 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4007 |
|
4546 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4547 @SYMTestPriority High |
|
4548 @SYMTestActions Attempt to compose various valid |
|
4549 All text handling processes ((rendering, editing, searching, sorting etc.) MUST treat the sequence of a base consonant and a nukta equivalently to Nukta consonants |
|
4550 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4551 @SYMPREQ 1766: Bengali for Sphinx |
|
4552 @SYMREQ 8741: Bengali Text Rendering |
|
4553 */ |
|
4554 testText[32] = 0x09AF; |
|
4555 testText[33] = 0x09BC; |
|
4556 testText[34] = 0x09DF; |
|
4557 |
|
4558 param.iPosInText = 32; |
|
4559 param.iPen.iX = param.iPen.iY = 0; |
|
4560 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4561 |
|
4562 TEST(r && param.iPosInText == 34 |
|
4563 && param.iOutputGlyphs == 1 |
|
4564 && param.iOutput[0].iCode == 0x80000cee |
|
4565 ); |
|
4566 |
|
4567 #if defined __WINS__ || defined __WINSCW__ |
|
4568 TEST(r && param.iPen.iX == 10); |
|
4569 #endif |
|
4570 |
|
4571 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x "), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4572 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4573 if (err!=KErrNone) |
|
4574 INFO_PRINTF1(_L("Failed to record test result")); |
|
4575 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4008")); |
|
4576 // BEN011 |
|
4577 /** |
|
4578 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4008 |
|
4579 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4580 @SYMTestPriority High |
|
4581 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
4582 Rendering engine must be capable of handling joining formatters. |
|
4583 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4584 @SYMPREQ 1766: Bengali for Sphinx |
|
4585 @SYMREQ 8741: Bengali Text Rendering |
|
4586 */ |
|
4587 testText[35] = 0x0995; |
|
4588 testText[36] = 0x09CD; |
|
4589 testText[37] = 0x09B7; |
|
4590 |
|
4591 testText[38] = 0x0995; |
|
4592 testText[39] = 0x09CD; |
|
4593 testText[40] = 0x200C; |
|
4594 testText[42] = 0x09B7; |
|
4595 |
|
4596 testText[43] = 0x0995; |
|
4597 testText[44] = 0x09CD; |
|
4598 testText[45] = 0x200D; |
|
4599 testText[46] = 0x09B7; |
|
4600 |
|
4601 |
|
4602 param.iPosInText = 35; |
|
4603 param.iPen.iX = param.iPen.iY = 0; |
|
4604 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4605 |
|
4606 TEST(r && param.iPosInText == 38 |
|
4607 && param.iOutputGlyphs == 1 |
|
4608 && param.iOutput[0].iCode == 0x80000d25 |
|
4609 ); |
|
4610 |
|
4611 #if defined __WINS__ || defined __WINSCW__ |
|
4612 TEST(r && param.iPen.iX == 15); |
|
4613 #endif |
|
4614 |
|
4615 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4616 |
|
4617 param.iPosInText = 38; |
|
4618 param.iPen.iX = param.iPen.iY = 0; |
|
4619 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4620 |
|
4621 TEST(r && param.iPosInText == 40 |
|
4622 && param.iOutputGlyphs == 2 |
|
4623 && param.iOutput[0].iCode == 0x80000cbc |
|
4624 && param.iOutput[1].iCode == 0x80000ce9 |
|
4625 ); |
|
4626 |
|
4627 #if defined __WINS__ || defined __WINSCW__ |
|
4628 TEST(r && param.iPen.iX == 12); |
|
4629 #endif |
|
4630 |
|
4631 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode,param.iOutput[1].iCode); |
|
4632 |
|
4633 param.iPosInText = 43; |
|
4634 param.iPen.iX = param.iPen.iY = 0; |
|
4635 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4636 |
|
4637 TEST(r && param.iPosInText == 47 |
|
4638 && param.iOutputGlyphs == 2 |
|
4639 && param.iOutput[0].iCode == 0x80000d2a |
|
4640 && param.iOutput[1].iCode == 0x80000cd9 |
|
4641 ); |
|
4642 |
|
4643 #if defined __WINS__ || defined __WINSCW__ |
|
4644 TEST(r && param.iPen.iX == 22); |
|
4645 #endif |
|
4646 |
|
4647 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4648 |
|
4649 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4650 if (err!=KErrNone) |
|
4651 INFO_PRINTF1(_L("Failed to record test result")); |
|
4652 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4009")); |
|
4653 // BEN012 |
|
4654 |
|
4655 /** |
|
4656 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4009 |
|
4657 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4658 @SYMTestPriority High |
|
4659 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
4660 If consonant /ya/, /ra/, /la/, /ma/, /na/ or /ba/, is the last element of a consonant cluster, the consonant assumes a phala form. |
|
4661 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4662 @SYMPREQ 1766: Bengali for Sphinx |
|
4663 @SYMREQ 8741: Bengali Text Rendering |
|
4664 */ |
|
4665 testText[47] = 0x09AA; |
|
4666 testText[48] = 0x09CD; |
|
4667 testText[49] = 0x09AF; |
|
4668 |
|
4669 testText[50] = 0x09AA; |
|
4670 testText[51] = 0x09CD; |
|
4671 testText[52] = 0x09A8; |
|
4672 |
|
4673 // Not working with Series60Sans font: |
|
4674 testText[53] = 0x09AA; |
|
4675 testText[54] = 0x09CD; |
|
4676 testText[55] = 0x09AE; |
|
4677 |
|
4678 param.iPosInText = 47; |
|
4679 param.iPen.iX = param.iPen.iY = 0; |
|
4680 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4681 |
|
4682 TEST(r && param.iPosInText == 50 |
|
4683 && param.iOutputGlyphs == 2 |
|
4684 && param.iOutput[0].iCode == 0x80000cd0 |
|
4685 ); |
|
4686 |
|
4687 #if defined __WINS__ || defined __WINSCW__ |
|
4688 TEST(r && param.iPen.iX == 15); |
|
4689 #endif |
|
4690 |
|
4691 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4692 |
|
4693 param.iPosInText = 50; |
|
4694 param.iPen.iX = param.iPen.iY = 0; |
|
4695 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4696 |
|
4697 TEST(r && param.iPosInText == 53 |
|
4698 && param.iOutputGlyphs == 1 |
|
4699 && param.iOutput[0].iCode == 0x80000e25 |
|
4700 ); |
|
4701 |
|
4702 #if defined __WINS__ || defined __WINSCW__ |
|
4703 TEST(r && param.iPen.iX == 11); |
|
4704 #endif |
|
4705 |
|
4706 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4707 // Not working with Series60Sans font: |
|
4708 param.iPosInText = 53; |
|
4709 param.iPen.iX = param.iPen.iY = 0; |
|
4710 |
|
4711 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4712 |
|
4713 TEST(r && param.iPosInText == 56 |
|
4714 && param.iOutputGlyphs == 2 |
|
4715 && param.iOutput[0].iCode == 0x80000d3e |
|
4716 && param.iOutput[1].iCode == 0x80000cd4 |
|
4717 ); |
|
4718 |
|
4719 #if defined __WINS__ || defined __WINSCW__ |
|
4720 TEST(r && param.iPen.iX == 19); |
|
4721 #endif |
|
4722 |
|
4723 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4724 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4725 if (err!=KErrNone) |
|
4726 INFO_PRINTF1(_L("Failed to record test result")); |
|
4727 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4010")); |
|
4728 // BEN013 |
|
4729 /** |
|
4730 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4010 |
|
4731 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4732 @SYMTestPriority High |
|
4733 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to tet |
|
4734 Sequence <virama, ya>, i.e. ya-phala, MUST be allowed after independent vowels /a/ and /e/. |
|
4735 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4736 @SYMPREQ 1766: Bengali for Sphinx |
|
4737 @SYMREQ 8741: Bengali Text Rendering |
|
4738 */ |
|
4739 testText[56] = 0x0985; |
|
4740 testText[57] = 0x09CD; |
|
4741 testText[58] = 0x09AF; |
|
4742 testText[59] = 0x09BE; |
|
4743 |
|
4744 // Double ya -> Ya, ya-phala |
|
4745 testText[60] = 0x09AA; |
|
4746 testText[61] = 0x09CD; |
|
4747 testText[62] = 0x09AF; |
|
4748 testText[63] = 0x09CD; |
|
4749 testText[64] = 0x09AF; |
|
4750 |
|
4751 param.iPosInText = 56; |
|
4752 param.iPen.iX = param.iPen.iY = 0; |
|
4753 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4754 #if defined __WINS__ || defined __WINSCW__ |
|
4755 TEST(r && param.iPosInText == 57 |
|
4756 && param.iPen.iX == 14 |
|
4757 && param.iOutputGlyphs == 1 |
|
4758 && param.iOutput[0].iCode == 0x80000cb0 |
|
4759 ); |
|
4760 #elif defined __ARMCC__ |
|
4761 TEST(r && param.iPosInText == 57 |
|
4762 && param.iOutputGlyphs == 1 |
|
4763 && param.iOutput[0].iCode == 0x80000cb0 |
|
4764 ); |
|
4765 #endif |
|
4766 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4767 |
|
4768 param.iPosInText = 57; |
|
4769 param.iPen.iX = param.iPen.iY = 0; |
|
4770 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4771 |
|
4772 TEST(r && param.iPosInText == 58 |
|
4773 && param.iOutputGlyphs == 0 |
|
4774 ); |
|
4775 |
|
4776 #if defined __WINS__ || defined __WINSCW__ |
|
4777 TEST(r && param.iPen.iX == 0); |
|
4778 #endif |
|
4779 |
|
4780 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4781 |
|
4782 param.iPosInText = 60; |
|
4783 param.iPen.iX = param.iPen.iY = 0; |
|
4784 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4785 |
|
4786 TEST(r && param.iPosInText == 65 |
|
4787 && param.iOutputGlyphs == 3 |
|
4788 && param.iOutput[0].iCode == 0x80000d3e |
|
4789 && param.iOutput[1].iCode == 0x80000cd5 |
|
4790 && param.iOutput[2].iCode == 0x80000d6e |
|
4791 ); |
|
4792 |
|
4793 #if defined __WINS__ || defined __WINSCW__ |
|
4794 TEST(r && param.iPen.iX == 23); |
|
4795 #endif |
|
4796 |
|
4797 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
4798 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4799 if (err!=KErrNone) |
|
4800 INFO_PRINTF1(_L("Failed to record test result")); |
|
4801 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4011")); |
|
4802 // BEN014 |
|
4803 /** |
|
4804 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4011 |
|
4805 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4806 @SYMTestPriority High |
|
4807 @SYMTestActions Attempt to compose various valid and glyph clusters to test |
|
4808 When consonant /ga/, /nna/, /na/, /pa/, /la/, /sha/, /ssa/ or /sa/ is a dead consonant, and none of the other consonant cluster formation rules apply, the consonant MUST be rendered with a stemless half form. |
|
4809 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4810 @SYMPREQ 1766: Bengali for Sphinx |
|
4811 @SYMREQ 8741: Bengali Text Rendering |
|
4812 */ |
|
4813 testText[65] = 0x0997; |
|
4814 testText[66] = 0x09CD; |
|
4815 testText[67] = 0x099C; |
|
4816 |
|
4817 testText[68] = 0x09AA; |
|
4818 testText[69] = 0x09CD; |
|
4819 testText[70] = 0x099C; |
|
4820 |
|
4821 |
|
4822 param.iPosInText = 65; |
|
4823 param.iPen.iX = param.iPen.iY = 0; |
|
4824 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4825 |
|
4826 TEST(r && param.iPosInText == 68 |
|
4827 && param.iOutputGlyphs == 2 |
|
4828 && param.iOutput[0].iCode == 0x80000d2c |
|
4829 && param.iOutput[1].iCode == 0x80000cc3 |
|
4830 ); |
|
4831 |
|
4832 #if defined __WINS__ || defined __WINSCW__ |
|
4833 TEST(r && param.iPen.iX == 21); |
|
4834 #endif |
|
4835 |
|
4836 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4837 |
|
4838 param.iPosInText = 68; |
|
4839 param.iPen.iX = param.iPen.iY = 0; |
|
4840 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4841 |
|
4842 TEST(r && param.iPosInText == 71 |
|
4843 && param.iOutputGlyphs == 2 |
|
4844 && param.iOutput[0].iCode == 0x80000d3e |
|
4845 ); |
|
4846 |
|
4847 #if defined __WINS__ || defined __WINSCW__ |
|
4848 TEST(r && param.iPen.iX == 23); |
|
4849 #endif |
|
4850 |
|
4851 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4852 |
|
4853 |
|
4854 // BEN015 |
|
4855 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4856 if (err!=KErrNone) |
|
4857 INFO_PRINTF1(_L("Failed to record test result")); |
|
4858 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4012")); |
|
4859 /** |
|
4860 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4012 |
|
4861 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4862 @SYMTestPriority High |
|
4863 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
4864 When /ka/, /nga/, /ca/, /tta/, /dda/, /ta/ or /da/ is a dead consonant, and none of the other consonant cluster formation rules apply, the consonant MUST be rendered with a miniature half form. |
|
4865 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4866 @SYMPREQ 1766: Bengali for Sphinx |
|
4867 @SYMREQ 8741: Bengali Text Rendering |
|
4868 */ |
|
4869 testText[71] = 0x0995; |
|
4870 testText[72] = 0x09CD; |
|
4871 testText[73] = 0x099C; |
|
4872 |
|
4873 |
|
4874 param.iPosInText = 71; |
|
4875 param.iPen.iX = param.iPen.iY = 0; |
|
4876 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4877 |
|
4878 TEST(r && param.iPosInText == 74 |
|
4879 && param.iOutputGlyphs == 2 |
|
4880 && param.iOutput[0].iCode == 0x80000d2a |
|
4881 ); |
|
4882 |
|
4883 #if defined __WINS__ || defined __WINSCW__ |
|
4884 TEST(r && param.iPen.iX == 26); |
|
4885 #endif |
|
4886 |
|
4887 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4888 |
|
4889 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4890 if (err!=KErrNone) |
|
4891 INFO_PRINTF1(_L("Failed to record test result")); |
|
4892 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4013")); |
|
4893 // BEN016 |
|
4894 |
|
4895 /** |
|
4896 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4013 |
|
4897 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4898 @SYMTestPriority High |
|
4899 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
4900 The consonant pairs /k.ka/, /ng.kha/, /c.nya/, /nn.nna/, /n.tha/, /n.pha/, /m.ta/, /m.tha/, /m.pha/, /m.bha/, /l.ka/, /l.ga/, /l.pa/, /ss.ka/, /ss.pha/, /s.ka/, /s.kha/, /s.ta/, /s.tha/, /s.pha/, /h.nna/ MUST be representend as stacks of two consonants. |
|
4901 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
4902 @SYMPREQ 1766: Bengali for Sphinx |
|
4903 @SYMREQ 8741: Bengali Text Rendering |
|
4904 */ |
|
4905 // Ma does not stack correctly on top with Series60Sans font, produces half form instead. Font defect. |
|
4906 testText[74] = 0x09AE; |
|
4907 testText[75] = 0x09CD; |
|
4908 testText[76] = 0x09A5; |
|
4909 |
|
4910 testText[77] = 0x09AE; |
|
4911 testText[78] = 0x09CD; |
|
4912 testText[79] = 0x09AB; |
|
4913 // Ma does not stack correctly on top, produces half form instead. |
|
4914 testText[80] = 0x09AE; |
|
4915 testText[81] = 0x09CD; |
|
4916 testText[82] = 0x0995; |
|
4917 |
|
4918 testText[83] = 0x09A8; |
|
4919 testText[84] = 0x09CD; |
|
4920 testText[85] = 0x09A5; |
|
4921 |
|
4922 |
|
4923 //Combination pa,virama,ma produces incorrect glyph mapping: Font defect. |
|
4924 |
|
4925 param.iPosInText = 74; |
|
4926 param.iPen.iX = param.iPen.iY = 0; |
|
4927 |
|
4928 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4929 |
|
4930 TEST(r && param.iPosInText == 77 |
|
4931 && param.iOutputGlyphs == 2 |
|
4932 && param.iOutput[0].iCode == 0x80000d42 |
|
4933 && param.iOutput[1].iCode == 0x80000ccc |
|
4934 ); |
|
4935 |
|
4936 #if defined __WINS__ || defined __WINSCW__ |
|
4937 TEST(r && param.iPen.iX == 21); |
|
4938 #endif |
|
4939 |
|
4940 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
4941 |
|
4942 |
|
4943 param.iPosInText = 77; |
|
4944 param.iPen.iX = param.iPen.iY = 0; |
|
4945 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4946 |
|
4947 TEST(r && param.iPosInText == 80 |
|
4948 && param.iOutputGlyphs == 1 |
|
4949 && param.iOutput[0].iCode == 0x80000e30 |
|
4950 ); |
|
4951 |
|
4952 #if defined __WINS__ || defined __WINSCW__ |
|
4953 TEST(r && param.iPen.iX == 19); |
|
4954 #endif |
|
4955 |
|
4956 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4957 |
|
4958 // Ma does not stack correctly on top, produces half form instead. |
|
4959 param.iPosInText = 80; |
|
4960 param.iPen.iX = param.iPen.iY = 0; |
|
4961 |
|
4962 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4963 |
|
4964 TEST(r && param.iPosInText == 83 |
|
4965 && param.iOutputGlyphs == 2 |
|
4966 && param.iOutput[0].iCode == 0x80000d42 |
|
4967 ); |
|
4968 |
|
4969 #if defined __WINS__ || defined __WINSCW__ |
|
4970 TEST(r && param.iPen.iX == 22); |
|
4971 #endif |
|
4972 |
|
4973 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4974 |
|
4975 |
|
4976 param.iPosInText = 83; |
|
4977 param.iPen.iX = param.iPen.iY = 0; |
|
4978 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
4979 |
|
4980 TEST(r && param.iPosInText == 86 |
|
4981 && param.iOutputGlyphs == 1 |
|
4982 && param.iOutput[0].iCode == 0x80000e15 |
|
4983 ); |
|
4984 |
|
4985 #if defined __WINS__ || defined __WINSCW__ |
|
4986 TEST(r && param.iPen.iX == 10); |
|
4987 #endif |
|
4988 |
|
4989 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
4990 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
4991 if (err!=KErrNone) |
|
4992 INFO_PRINTF1(_L("Failed to record test result")); |
|
4993 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4014")); |
|
4994 // BEN017 |
|
4995 |
|
4996 /** |
|
4997 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4014 |
|
4998 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
4999 @SYMTestPriority High |
|
5000 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test |
|
5001 Consonant pairs /k.tta/, /k.ta/, /k.ssa/, /k.sa/, /g.ga/, /g.dha/, /ng.ka/, /ng.ga/, /j.ja/, /j.jha/, /j.nya/, /ny.ca/, /ny.cha/, /ny.ja/, /ny.jha/, /tt.tta/, /nn.ttha/, /nn.dda/, /t.ta/, /t.tha/, /d.da/, /d.dha/, /d.ba/, /d.bha/, /n.ta/, /n.dha/, /p.ta/, /b.ja/, /b.da/, /b.dha/, /m.pa/, /ss.tta/, /ss.ttha/, /ss.nna/, /s.pa/, /h.na/ /h.ma/ MUST be displayed as ligatures, if they appear at the end of a consonant cluster. |
|
5002 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5003 @SYMPREQ 1766: Bengali for Sphinx |
|
5004 @SYMREQ 8741: Bengali Text Rendering |
|
5005 */ |
|
5006 testText[86] = 0x0995; |
|
5007 testText[87] = 0x09CD; |
|
5008 testText[88] = 0x099F; |
|
5009 |
|
5010 testText[89] = 0x0995; |
|
5011 testText[90] = 0x09CD; |
|
5012 testText[91] = 0x09A4; |
|
5013 |
|
5014 // Not sure if this is forming the correct ligature |
|
5015 testText[92] = 0x09AE; |
|
5016 testText[93] = 0x09CD; |
|
5017 testText[94] = 0x09AA; |
|
5018 |
|
5019 // Not sure if this is forming the correct ligature |
|
5020 testText[95] = 0x09B8; |
|
5021 testText[96] = 0x09CD; |
|
5022 testText[97] = 0x09AA; |
|
5023 |
|
5024 testText[98] = 0x09B9; |
|
5025 testText[99] = 0x09CD; |
|
5026 testText[100] = 0x09A8; |
|
5027 |
|
5028 param.iPosInText = 86; |
|
5029 param.iPen.iX = param.iPen.iY = 0; |
|
5030 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5031 |
|
5032 TEST(r && param.iPosInText == 89 |
|
5033 && param.iOutputGlyphs == 1 |
|
5034 && param.iOutput[0].iCode == 0x80000dd7 |
|
5035 ); |
|
5036 |
|
5037 #if defined __WINS__ || defined __WINSCW__ |
|
5038 TEST(r && param.iPen.iX == 12); |
|
5039 #endif |
|
5040 |
|
5041 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5042 |
|
5043 param.iPosInText = 89; |
|
5044 param.iPen.iX = param.iPen.iY = 0; |
|
5045 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5046 |
|
5047 TEST(r && param.iPosInText == 92 |
|
5048 && param.iOutputGlyphs == 1 |
|
5049 && param.iOutput[0].iCode == 0x80000dd9 |
|
5050 ); |
|
5051 |
|
5052 #if defined __WINS__ || defined __WINSCW__ |
|
5053 TEST(r && param.iPen.iX == 15); |
|
5054 #endif |
|
5055 |
|
5056 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5057 |
|
5058 param.iPosInText = 92; |
|
5059 param.iPen.iX = param.iPen.iY = 0; |
|
5060 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5061 |
|
5062 TEST(r && param.iPosInText == 95 |
|
5063 && param.iOutputGlyphs == 1 |
|
5064 && param.iOutput[0].iCode == 0x80000e2f |
|
5065 ); |
|
5066 |
|
5067 #if defined __WINS__ || defined __WINSCW__ |
|
5068 TEST(r && param.iPen.iX == 19); |
|
5069 #endif |
|
5070 |
|
5071 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5072 |
|
5073 param.iPosInText = 95; |
|
5074 param.iPen.iX = param.iPen.iY = 0; |
|
5075 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5076 |
|
5077 TEST(r && param.iPosInText == 98 |
|
5078 && param.iOutputGlyphs == 1 |
|
5079 && param.iOutput[0].iCode == 0x80000e56 |
|
5080 ); |
|
5081 |
|
5082 #if defined __WINS__ || defined __WINSCW__ |
|
5083 TEST(r && param.iPen.iX == 20); |
|
5084 #endif |
|
5085 |
|
5086 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5087 |
|
5088 param.iPosInText = 98; |
|
5089 param.iPen.iX = param.iPen.iY = 0; |
|
5090 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5091 |
|
5092 TEST(r && param.iPosInText == 101 |
|
5093 && param.iOutputGlyphs == 1 |
|
5094 && param.iOutput[0].iCode == 0x80000e5d |
|
5095 ); |
|
5096 |
|
5097 #if defined __WINS__ || defined __WINSCW__ |
|
5098 TEST(r && param.iPen.iX == 13); |
|
5099 #endif |
|
5100 |
|
5101 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5102 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5103 if (err!=KErrNone) |
|
5104 INFO_PRINTF1(_L("Failed to record test result")); |
|
5105 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4015")); |
|
5106 // BEN020 |
|
5107 /** |
|
5108 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4015 |
|
5109 @SYMTestCaseDesc Automated GDI testing for Bengali |
|
5110 @SYMTestPriority High |
|
5111 @SYMTestActions Attempt to compose various valid Bengali glyph clusters to test that |
|
5112 If RA is the first consonant cluster, it must assume the form of Repha. |
|
5113 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5114 @SYMPREQ 1766: Bengali for Sphinx |
|
5115 @SYMREQ 8741: Bengali Text Rendering |
|
5116 */ |
|
5117 testText[101] = 0x09B0; |
|
5118 testText[102] = 0x09CD; |
|
5119 testText[103] = 0x0995; |
|
5120 |
|
5121 testText[104] = 0x09B0; |
|
5122 testText[105] = 0x200C; |
|
5123 testText[106] = 0x09CD; |
|
5124 testText[107] = 0x09AF; |
|
5125 |
|
5126 param.iPosInText = 101; |
|
5127 param.iPen.iX = param.iPen.iY = 0; |
|
5128 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5129 |
|
5130 TEST(r && param.iPosInText == 104 |
|
5131 && param.iOutputGlyphs == 2 |
|
5132 && param.iOutput[0].iCode == 0x80000cbc |
|
5133 && param.iOutput[1].iCode == 0x80000d27 |
|
5134 ); |
|
5135 |
|
5136 #if defined __WINS__ || defined __WINSCW__ |
|
5137 TEST(r && param.iPen.iX == 12); |
|
5138 #endif |
|
5139 |
|
5140 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5141 |
|
5142 param.iPosInText =104; |
|
5143 param.iPen.iX = param.iPen.iY = 0; |
|
5144 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5145 |
|
5146 TEST(r && param.iPosInText == 105 |
|
5147 && param.iOutputGlyphs == 1 |
|
5148 && param.iOutput[0].iCode == 0x80000cd6 |
|
5149 ); |
|
5150 |
|
5151 #if defined __WINS__ || defined __WINSCW__ |
|
5152 TEST(r && param.iPen.iX == 9); |
|
5153 #endif |
|
5154 |
|
5155 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5156 |
|
5157 } |
|
5158 |
|
5159 |
|
5160 void CTGlyphSelection::TestTamilChars(CFbsFont* aFont) |
|
5161 { |
|
5162 INFO_PRINTF1(_L("Test Tamil Glyphs")); |
|
5163 |
|
5164 TBool r; |
|
5165 TBuf<162> testText(0); |
|
5166 CFont::TPositionParam param; |
|
5167 param.iDirection = CFont::EHorizontal; |
|
5168 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
5169 |
|
5170 testText.SetLength(162); |
|
5171 // Make sure there is no garbage values in the memory we are using. |
|
5172 for (TInt i = 0; i < testText.Length(); i++) |
|
5173 testText[i]=0xFFFF; |
|
5174 param.iText.Set(testText); |
|
5175 RShapeInfo shapeInfo; |
|
5176 //Testdata for Tamil Langauage |
|
5177 TRAPD(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5178 if (err!=KErrNone) |
|
5179 INFO_PRINTF1(_L("Failed to record test result")); |
|
5180 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4016")); |
|
5181 /* |
|
5182 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4016 |
|
5183 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5184 @SYMTestPriority High |
|
5185 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5186 a)The Tamil alphabets are listed in contiguous Unicode range(U+0B80U+0BFF), This also contains Tamil Numbers. |
|
5187 b)The Tamil alphabets are listed in contiguous Unicode range(U+0B80U+0BFF), This also contains Tamil Numbers. |
|
5188 c)Internal data storage should always be in the logical order, but the rendering of it may be different to that of the logical order |
|
5189 d)Combination of Unicode sequences must be rendered as valid blocks. In Tamil some character sequences are invalid and therefore only the sequences which follow the logical order as described in Req 1.2.3 should be rendered properly |
|
5190 e)If the text being rendered contains a mixture of scripts, the text in each script should be rendered according to the rules of that particular script. |
|
5191 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5192 @SYMPREQ 1766: Tamil for Sphinx |
|
5193 @SYMREQ 8742:Tamil Text Rendering |
|
5194 */ |
|
5195 testText[0] = 0x0B95; //Tamil Ka |
|
5196 testText[1] = 0x0B8E; //Tamil e |
|
5197 testText[2] = 0x0061; //Latin A |
|
5198 testText[3] = 0x0905; // Hindi Ka |
|
5199 testText[4] = 0x0020; |
|
5200 // Do the testing |
|
5201 param.iPosInText = 0 ; |
|
5202 param.iPen.iX = param.iPen.iY = 0; |
|
5203 |
|
5204 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5205 |
|
5206 TEST(r && param.iPosInText == 1 |
|
5207 && param.iOutputGlyphs == 1 |
|
5208 && param.iOutput[0].iCode == 0x80000bf6); |
|
5209 |
|
5210 #if defined __WINS__ || defined __WINSCW__ |
|
5211 TEST(r && param.iPen.iX == 13); |
|
5212 #endif |
|
5213 |
|
5214 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5215 |
|
5216 param.iPosInText = 1 ; |
|
5217 param.iPen.iX = param.iPen.iY = 0; |
|
5218 |
|
5219 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5220 |
|
5221 TEST(r && param.iPosInText == 2 |
|
5222 && param.iOutputGlyphs == 1 |
|
5223 && param.iOutput[0].iCode == 0x80000bf0); |
|
5224 |
|
5225 #if defined __WINS__ || defined __WINSCW__ |
|
5226 TEST(r && param.iPen.iX == 14); |
|
5227 #endif |
|
5228 |
|
5229 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5230 |
|
5231 param.iPosInText = 2 ; |
|
5232 param.iPen.iX = param.iPen.iY = 0; |
|
5233 |
|
5234 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5235 |
|
5236 TEST(r && param.iPosInText == 3 |
|
5237 && param.iOutputGlyphs == 1 |
|
5238 && param.iOutput[0].iCode == 0x61 ); |
|
5239 |
|
5240 #if defined __WINS__ || defined __WINSCW__ |
|
5241 TEST(r && param.iPen.iX == 10); |
|
5242 #endif |
|
5243 |
|
5244 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5245 param.iPosInText = 3 ; |
|
5246 param.iPen.iX = param.iPen.iY = 0; |
|
5247 |
|
5248 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5249 |
|
5250 TEST(r && param.iPosInText == 4 |
|
5251 && param.iOutputGlyphs == 1 |
|
5252 && param.iOutput[0].iCode == 0x80000528); |
|
5253 |
|
5254 #if defined __WINS__ || defined __WINSCW__ |
|
5255 TEST(r && param.iPen.iX == 12); |
|
5256 #endif |
|
5257 |
|
5258 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5259 |
|
5260 /*Req 02 1.2.3, 1.3.21, 1.3.21.1, 1.3.21.2 1.3.21.3 |
|
5261 |
|
5262 1.2.3 The attachment presents the logical order used to present Tamil text. In the schematic samples, square brackets are used to presents the components that may be omitted. |
|
5263 1.3.21 If the text-rendering engine detects invalid sequences of characters, it should render the invalid sequences using an appropriate fallback rendering mechanism |
|
5264 Please see the attachment for examples |
|
5265 1.3.21.1 For normal rendering, combining Tamil characters must be preceded by a valid base character. |
|
5266 1.3.21.2 Combining Tamil characters that do not follow a valid base character must be rendered using an appropriate fallback rendering. |
|
5267 1.3.21.3 Device must not hang or crash because of unexpected character sequences.*/ |
|
5268 |
|
5269 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5270 if (err!=KErrNone) |
|
5271 INFO_PRINTF1(_L("Failed to record test result")); |
|
5272 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4017")); |
|
5273 //Req 03 |
|
5274 |
|
5275 /** |
|
5276 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4017 |
|
5277 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5278 @SYMTestPriority High |
|
5279 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5280 It is reasonably common to mix Latin, Tamil as well as other script in texts. This must include the numerals. |
|
5281 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5282 @SYMPREQ 1766: Tamil for Sphinx |
|
5283 @SYMREQ 8742:Tamil Text Rendering |
|
5284 */ |
|
5285 testText[4] = 0x0036;//Latin 06 |
|
5286 testText[5] = 0x0BEC;//Tamil 06 |
|
5287 |
|
5288 param.iPosInText = 4 ; |
|
5289 param.iPen.iX = param.iPen.iY = 0; |
|
5290 |
|
5291 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5292 |
|
5293 TEST(r && param.iPosInText == 5 |
|
5294 && param.iOutputGlyphs == 1 |
|
5295 && param.iOutput[0].iCode == 0x8000077A); |
|
5296 |
|
5297 #if defined __WINS__ || defined __WINSCW__ |
|
5298 TEST(r && param.iPen.iX == 8); |
|
5299 #endif |
|
5300 |
|
5301 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5302 |
|
5303 param.iPosInText = 5 ; |
|
5304 param.iPen.iX = param.iPen.iY = 0; |
|
5305 |
|
5306 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5307 |
|
5308 TEST(r && param.iPosInText == 6 |
|
5309 && param.iOutputGlyphs == 1 |
|
5310 && param.iOutput[0].iCode == 0x80000c20); |
|
5311 |
|
5312 #if defined __WINS__ || defined __WINSCW__ |
|
5313 TEST(r && param.iPen.iX == 16); |
|
5314 #endif |
|
5315 |
|
5316 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5317 |
|
5318 /*Req 04 1.3.4, 1.3.20 |
|
5319 1.3.4 1. Tamil is a semi-syllabic script and in Tamil text rendering the basic unit for handling text must be the orthographic syllable. |
|
5320 2. Therefore, a text-rendering engine should first identify a syllable and then analyze the syllable. Based on the analysis, text-rendering engine should then be able to select and/or shape the glyphs required for rendering the syllable and to perform contextual positioning of glyphs inside a syllable. |
|
5321 3. After a syllable has been formed it must be considered an indivisible and invariable unit. |
|
5322 4. The shape of a syllable is not affected by surrounding syllables. |
|
5323 1.3.20 Syllable is the smallest unbreakable component in Tamil*/ |
|
5324 |
|
5325 /*Req 07 1.3.5 |
|
5326 |
|
5327 1.3.5 1. In Tamil, when ligatures are used there is a possibility that the shaping of the previous consonant will depend on the next consonant the user enters |
|
5328 2. In Tamil, there is a possibility that even though the characters are entered one by one the position of the matras change depending on the consonant and the type of the matra |
|
5329 |
|
5330 Req 08 1.3.19 |
|
5331 |
|
5332 1.3.19 In Tamil white space is used as a word boundary. Line breaking should be based on word boundaries |
|
5333 |
|
5334 |
|
5335 Req 09 1.2.4 |
|
5336 |
|
5337 1.2.4 For compatibility with legacy encodings, split matra and vowel representations must be recognized as identical to the single code representations (preferred) |
|
5338 */ |
|
5339 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5340 if (err!=KErrNone) |
|
5341 INFO_PRINTF1(_L("Failed to record test result")); |
|
5342 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4018")); |
|
5343 //Req 10 1.3.6 |
|
5344 /** |
|
5345 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4018 |
|
5346 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5347 @SYMTestPriority High |
|
5348 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement. |
|
5349 Tamil character shaping MUST be based on combining character sequences. All shaping processes (splitting, reordering, glyph selection) MUST occur in the context of combining character sequence. |
|
5350 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5351 @SYMPREQ 1766: Tamil for Sphinx |
|
5352 @SYMREQ 8742:Tamil Text Rendering |
|
5353 */ |
|
5354 testText[6] = 0x0BAA; // Pa |
|
5355 testText[7] = 0x0BCD; //Virama |
|
5356 testText[8] = 0x0B95; //Ka |
|
5357 testText[9] = 0x0BCD; //Virama |
|
5358 testText[10] = 0x0B9F; //Tta |
|
5359 testText[11] = 0x0BC7; //-e |
|
5360 |
|
5361 testText[12] = 0x0BAA;//Pa |
|
5362 testText[13] = 0x0BCD;//Virama |
|
5363 testText[14] = 0x0B95;//Ka |
|
5364 testText[15] = 0x0BCC;//AU |
|
5365 |
|
5366 testText[16] = 0x0B95; //Ka |
|
5367 testText[17] = 0x0BCD; //Virama |
|
5368 testText[18] = 0x0BB7; //Ssa |
|
5369 testText[19] = 0x0BCB; //OO |
|
5370 |
|
5371 param.iPosInText = 6 ; |
|
5372 param.iPen.iX = param.iPen.iY = 0; |
|
5373 |
|
5374 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5375 |
|
5376 TEST(r && param.iPosInText == 12 |
|
5377 && param.iOutputGlyphs == 4 |
|
5378 && param.iOutput[0].iCode == 0x80000c3a |
|
5379 && param.iOutput[1].iCode == 0x80000c30 |
|
5380 && param.iOutput[2].iCode == 0x80000c13 |
|
5381 && param.iOutput[3].iCode == 0x80000bfb); |
|
5382 |
|
5383 #if defined __WINS__ || defined __WINSCW__ |
|
5384 TEST(r && param.iPen.iX == 51); |
|
5385 #endif |
|
5386 |
|
5387 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[3].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[3].iCode); |
|
5388 |
|
5389 param.iPosInText = 12 ; |
|
5390 param.iPen.iX = param.iPen.iY = 0; |
|
5391 |
|
5392 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5393 |
|
5394 TEST(r && param.iPosInText == 16 |
|
5395 && param.iOutputGlyphs ==4 |
|
5396 && param.iOutput[0].iCode == 0x80000c3a |
|
5397 && param.iOutput[1].iCode == 0x80000c12 |
|
5398 && param.iOutput[2].iCode == 0x80000bf6 |
|
5399 && param.iOutput[3].iCode == 0x80000c19); |
|
5400 |
|
5401 #if defined __WINS__ || defined __WINSCW__ |
|
5402 TEST(r && param.iPen.iX == 56); |
|
5403 #endif |
|
5404 |
|
5405 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[3].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[3].iCode); |
|
5406 |
|
5407 param.iPosInText = 16 ; |
|
5408 param.iPen.iX = param.iPen.iY = 0; |
|
5409 |
|
5410 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5411 |
|
5412 TEST(r && param.iPosInText == 20 |
|
5413 && param.iOutputGlyphs == 3 |
|
5414 && param.iOutput[0].iCode == 0x80000c13 |
|
5415 && param.iOutput[1].iCode == 0x80000c2f |
|
5416 && param.iOutput[2].iCode == 0x80000c0d); |
|
5417 |
|
5418 #if defined __WINS__ || defined __WINSCW__ |
|
5419 TEST(r && param.iPen.iX == 54); |
|
5420 #endif |
|
5421 |
|
5422 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
5423 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5424 if (err!=KErrNone) |
|
5425 INFO_PRINTF1(_L("Failed to record test result")); |
|
5426 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4019")); |
|
5427 //Req 11 |
|
5428 /** |
|
5429 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4019 |
|
5430 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5431 @SYMTestPriority High |
|
5432 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement |
|
5433 Matras /-e/, /-ee/ and /-ai/ are reordered with the consonant they follow in memory order. |
|
5434 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5435 @SYMPREQ 1766: Tamil for Sphinx |
|
5436 @SYMREQ 8742:Tamil Text Rendering |
|
5437 */ |
|
5438 |
|
5439 testText[20] = 0x0B95; //Ka |
|
5440 testText[21] = 0x0BC7; //-e |
|
5441 |
|
5442 param.iPosInText = 20 ; |
|
5443 param.iPen.iX = param.iPen.iY = 0; |
|
5444 |
|
5445 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5446 |
|
5447 TEST(r && param.iPosInText == 22 |
|
5448 && param.iOutputGlyphs == 2 |
|
5449 && param.iOutput[0].iCode == 0x80000c13 |
|
5450 && param.iOutput[1].iCode == 0x80000bf6 ); |
|
5451 |
|
5452 #if defined __WINS__ || defined __WINSCW__ |
|
5453 TEST(r && param.iPen.iX == 26); |
|
5454 #endif |
|
5455 |
|
5456 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5457 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5458 if (err!=KErrNone) |
|
5459 INFO_PRINTF1(_L("Failed to record test result")); |
|
5460 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4020")); |
|
5461 //Req 12 1.3.5.2 |
|
5462 /** |
|
5463 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4020 |
|
5464 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5465 @SYMTestPriority High |
|
5466 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirment |
|
5467 Matras /-o/, /-oo/ and /-au/ are split into two halves that enclose the consonant they follow in memory order. |
|
5468 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5469 @SYMPREQ 1766: Tamil for Sphinx |
|
5470 @SYMREQ 8742:Tamil Text Rendering |
|
5471 */ |
|
5472 |
|
5473 testText[22] = 0x0B95; //Ka |
|
5474 testText[23] = 0x0BCA; //O |
|
5475 |
|
5476 |
|
5477 param.iPosInText = 22 ; |
|
5478 param.iPen.iX = param.iPen.iY = 0; |
|
5479 |
|
5480 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5481 |
|
5482 TEST(r && param.iPosInText == 24 |
|
5483 && param.iOutputGlyphs == 3 |
|
5484 && param.iOutput[0].iCode == 0x80000c12 |
|
5485 && param.iOutput[1].iCode == 0x80000bf6 |
|
5486 && param.iOutput[2].iCode == 0x80000c0d); |
|
5487 |
|
5488 #if defined __WINS__ || defined __WINSCW__ |
|
5489 TEST(r && param.iPen.iX == 37); |
|
5490 #endif |
|
5491 |
|
5492 INFO_PRINTF7(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x iOutput[2].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode, param.iOutput[2].iCode); |
|
5493 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5494 if (err!=KErrNone) |
|
5495 INFO_PRINTF1(_L("Failed to record test result")); |
|
5496 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4021")); |
|
5497 //Req 13 |
|
5498 /** |
|
5499 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4021 |
|
5500 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5501 @SYMTestPriority High |
|
5502 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirment. |
|
5503 Tamil Modifier "Ayatham" MUST be treated as an independent character |
|
5504 @SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5505 @SYMPREQ 1766: Tamil for Sphinx |
|
5506 @SYMREQ 8742:Tamil Text Rendering |
|
5507 */ |
|
5508 |
|
5509 testText[24] = 0x0B95; //Ka |
|
5510 testText[25] = 0x0B83; //Aythem |
|
5511 testText[26] = 0x0B85; //A |
|
5512 |
|
5513 param.iPosInText = 24; |
|
5514 param.iPen.iX = param.iPen.iY = 0; |
|
5515 |
|
5516 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5517 |
|
5518 TEST(r && param.iPosInText == 25 |
|
5519 && param.iOutputGlyphs == 1 |
|
5520 && param.iOutput[0].iCode == 0x80000bf6); |
|
5521 |
|
5522 #if defined __WINS__ || defined __WINSCW__ |
|
5523 TEST(r && param.iPen.iX == 13); |
|
5524 #endif |
|
5525 |
|
5526 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5527 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5528 if (err!=KErrNone) |
|
5529 INFO_PRINTF1(_L("Failed to record test result")); |
|
5530 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4022")); |
|
5531 //Req 14 |
|
5532 /** |
|
5533 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4022 |
|
5534 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5535 @SYMTestPriority High |
|
5536 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement. |
|
5537 Rendering Engine MUST be capable of handling TAMIL ANUSVARA |
|
5538 It has been suggested that this character be deprecated in Unicode |
|
5539 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5540 @SYMPREQ 1766: Tamil for Sphinx |
|
5541 @SYMREQ 8742:Tamil Text Rendering |
|
5542 */ |
|
5543 |
|
5544 testText[27] = 0x0B95; //Ka |
|
5545 testText[28] = 0x0B82; //Anusvara |
|
5546 testText[29] = 0x0B95; //Ka |
|
5547 |
|
5548 param.iPosInText = 27; |
|
5549 param.iPen.iX = param.iPen.iY = 0; |
|
5550 |
|
5551 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5552 |
|
5553 TEST(r && param.iPosInText == 29 |
|
5554 && param.iOutputGlyphs == 2 |
|
5555 && param.iOutput[0].iCode == 0x80000bf6 |
|
5556 && param.iOutput[1].iCode == 0x80000be8); |
|
5557 |
|
5558 #if defined __WINS__ || defined __WINSCW__ |
|
5559 TEST(r && param.iPen.iX == 19); |
|
5560 #endif |
|
5561 |
|
5562 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5563 param.iPosInText = 29; |
|
5564 param.iPen.iX = param.iPen.iY = 0; |
|
5565 |
|
5566 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5567 |
|
5568 TEST(r && param.iPosInText == 30 |
|
5569 && param.iOutputGlyphs == 1 |
|
5570 && param.iOutput[0].iCode == 0x80000bf6 ); |
|
5571 |
|
5572 #if defined __WINS__ || defined __WINSCW__ |
|
5573 TEST(r && param.iPen.iX == 13); |
|
5574 #endif |
|
5575 |
|
5576 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5577 |
|
5578 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5579 if (err!=KErrNone) |
|
5580 INFO_PRINTF1(_L("Failed to record test result")); |
|
5581 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4023")); |
|
5582 //Req 15 |
|
5583 /** |
|
5584 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4023 |
|
5585 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5586 @SYMTestPriority High |
|
5587 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirment |
|
5588 Tamil consonant /ra/ changes its shape, when a virama is applied to it. |
|
5589 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5590 @SYMPREQ 1766: Tamil for Sphinx |
|
5591 @SYMREQ 8742:Tamil Text Rendering |
|
5592 */ |
|
5593 |
|
5594 testText[30] = 0x0BB0; //Ra |
|
5595 testText[31] = 0x0BCD; //Virama |
|
5596 testText[32] = 0x8205; //ZWJ |
|
5597 |
|
5598 |
|
5599 param.iPosInText = 30; |
|
5600 param.iPen.iX = param.iPen.iY = 0; |
|
5601 |
|
5602 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5603 |
|
5604 TEST(r && param.iPosInText == 32 |
|
5605 && param.iOutputGlyphs == 2 |
|
5606 && param.iOutput[0].iCode == 0x80000c03 ); |
|
5607 |
|
5608 #if defined __WINS__ || defined __WINSCW__ |
|
5609 TEST(r && param.iPen.iX == 10); |
|
5610 #endif |
|
5611 |
|
5612 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5613 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5614 if (err!=KErrNone) |
|
5615 INFO_PRINTF1(_L("Failed to record test result")); |
|
5616 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4024")); |
|
5617 //Req 16 |
|
5618 /** |
|
5619 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4024 |
|
5620 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5621 @SYMTestPriority High |
|
5622 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5623 Matra /-aa/ is combined to consonants in regular fashion. No extra shaping is required. |
|
5624 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5625 @SYMPREQ 1766: Tamil for Sphinx |
|
5626 @SYMREQ 8742:Tamil Text Rendering |
|
5627 */ |
|
5628 |
|
5629 testText[33] = 0x0B95; //Ka |
|
5630 testText[34] = 0x0B82; //Anusvara |
|
5631 |
|
5632 param.iPosInText = 33 ; |
|
5633 param.iPen.iX = param.iPen.iY = 0; |
|
5634 |
|
5635 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5636 |
|
5637 TEST(r && param.iPosInText == 35 |
|
5638 && param.iOutputGlyphs == 2 |
|
5639 && param.iOutput[0].iCode == 0x80000bf6 ); |
|
5640 |
|
5641 #if defined __WINS__ || defined __WINSCW__ |
|
5642 TEST(r && param.iPen.iX == 19); |
|
5643 #endif |
|
5644 |
|
5645 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5646 |
|
5647 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5648 if (err!=KErrNone) |
|
5649 INFO_PRINTF1(_L("Failed to record test result")); |
|
5650 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4025")); |
|
5651 //Req 17 1.3.11 |
|
5652 /** |
|
5653 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4025 |
|
5654 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5655 @SYMTestPriority High |
|
5656 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5657 Matras /-i/ and /-ii/ MUST form a ligature with consonant /tta/. |
|
5658 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5659 @SYMPREQ 1766: Tamil for Sphinx |
|
5660 @SYMREQ 8742:Tamil Text Rendering |
|
5661 */ |
|
5662 |
|
5663 testText[35] = 0x0B9F; //Tta |
|
5664 testText[36] = 0x0BBF; //I |
|
5665 |
|
5666 testText[37] = 0x0B9F; //Tta |
|
5667 testText[38] = 0x0BC0; //Ii |
|
5668 |
|
5669 param.iPosInText = 35 ; |
|
5670 param.iPen.iX = param.iPen.iY = 0; |
|
5671 |
|
5672 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5673 |
|
5674 TEST(r && param.iPosInText == 37 |
|
5675 && param.iOutputGlyphs == 1 |
|
5676 && param.iOutput[0].iCode == 0x80000c51); |
|
5677 |
|
5678 #if defined __WINS__ || defined __WINSCW__ |
|
5679 TEST(r && param.iPen.iX == 15); |
|
5680 #endif |
|
5681 |
|
5682 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5683 |
|
5684 param.iPosInText = 37 ; |
|
5685 param.iPen.iX = param.iPen.iY = 0; |
|
5686 |
|
5687 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5688 |
|
5689 TEST(r && param.iPosInText == 39 |
|
5690 && param.iOutputGlyphs == 1 |
|
5691 && param.iOutput[0].iCode == 0x80000c52); |
|
5692 |
|
5693 #if defined __WINS__ || defined __WINSCW__ |
|
5694 TEST(r && param.iPen.iX == 13); |
|
5695 #endif |
|
5696 |
|
5697 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5698 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5699 if (err!=KErrNone) |
|
5700 INFO_PRINTF1(_L("Failed to record test result")); |
|
5701 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4026")); |
|
5702 //Req 18 |
|
5703 /** |
|
5704 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4026 |
|
5705 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5706 @SYMTestPriority High |
|
5707 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5708 Consonant /ra/ takes an alternate shape when combined with matras /-i/ and /-ii/. |
|
5709 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5710 @SYMPREQ 1766: Tamil for Sphinx |
|
5711 @SYMREQ 8742:Tamil Text Rendering |
|
5712 */ |
|
5713 testText[39] = 0x0BB0; //Ra |
|
5714 testText[40] = 0x0BBF; //I |
|
5715 |
|
5716 testText[41] = 0x0BB0; //Ra |
|
5717 testText[42] = 0x0BC0; //Ii |
|
5718 |
|
5719 param.iPosInText = 39 ; |
|
5720 param.iPen.iX = param.iPen.iY = 0; |
|
5721 |
|
5722 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5723 |
|
5724 TEST(r && param.iPosInText == 41 |
|
5725 && param.iOutputGlyphs == 2 |
|
5726 && param.iOutput[0].iCode == 0x80000c0d |
|
5727 && param.iOutput[1].iCode == 0x80000c0e ); |
|
5728 |
|
5729 #if defined __WINS__ || defined __WINSCW__ |
|
5730 TEST(r && param.iPen.iX == 13); |
|
5731 #endif |
|
5732 |
|
5733 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5734 |
|
5735 param.iPosInText = 41 ; |
|
5736 param.iPen.iX = param.iPen.iY = 0; |
|
5737 |
|
5738 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5739 |
|
5740 TEST(r && param.iPosInText == 43 |
|
5741 && param.iOutputGlyphs == 2 |
|
5742 && param.iOutput[0].iCode == 0x80000c0d |
|
5743 && param.iOutput[1].iCode == 0x80000c0f); |
|
5744 |
|
5745 #if defined __WINS__ || defined __WINSCW__ |
|
5746 TEST(r && param.iPen.iX == 13); |
|
5747 #endif |
|
5748 |
|
5749 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5750 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5751 if (err!=KErrNone) |
|
5752 INFO_PRINTF1(_L("Failed to record test result")); |
|
5753 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4027")); |
|
5754 //Req 19 |
|
5755 /** |
|
5756 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4027 |
|
5757 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5758 @SYMTestPriority High |
|
5759 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement |
|
5760 Matras /-i/ and /-ii/ take an alternate form when applied to consonants /nga/, /pa/, /ya/ and /va/. |
|
5761 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5762 @SYMPREQ 1766: Tamil for Sphinx |
|
5763 @SYMREQ 8742:Tamil Text Rendering |
|
5764 */ |
|
5765 testText[43] = 0x0B99; //Nga |
|
5766 testText[44] = 0x0BBF; //I |
|
5767 |
|
5768 testText[45] = 0x0B99; //Nga |
|
5769 testText[46] = 0x0BC0; //Ii |
|
5770 |
|
5771 param.iPosInText = 43 ; |
|
5772 param.iPen.iX = param.iPen.iY = 0; |
|
5773 |
|
5774 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5775 |
|
5776 TEST(r && param.iPosInText == 45 |
|
5777 && param.iOutputGlyphs == 2 |
|
5778 && param.iOutput[0].iCode == 0x80000bf7 |
|
5779 && param.iOutput[1].iCode == 0x80000c0e ); |
|
5780 |
|
5781 #if defined __WINS__ || defined __WINSCW__ |
|
5782 TEST(r && param.iPen.iX == 19); |
|
5783 #endif |
|
5784 |
|
5785 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5786 param.iPosInText = 45 ; |
|
5787 param.iPen.iX = param.iPen.iY = 0; |
|
5788 |
|
5789 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5790 |
|
5791 TEST(r && param.iPosInText == 47 |
|
5792 && param.iOutputGlyphs == 1 |
|
5793 && param.iOutput[0].iCode == 0x80000c4a ); |
|
5794 |
|
5795 #if defined __WINS__ || defined __WINSCW__ |
|
5796 TEST(r && param.iPen.iX == 17); |
|
5797 #endif |
|
5798 |
|
5799 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5800 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5801 if (err!=KErrNone) |
|
5802 INFO_PRINTF1(_L("Failed to record test result")); |
|
5803 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4028")); |
|
5804 |
|
5805 //Req 20 |
|
5806 /** |
|
5807 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4028 |
|
5808 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5809 @SYMTestPriority High |
|
5810 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement. |
|
5811 Matras /-u/ and /-uu/ join in ligature form with all other consonants than /ha/, /ja/, /sa/, /ssa/ and /k.ssa/. |
|
5812 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5813 @SYMPREQ 1766: Tamil for Sphinx |
|
5814 @SYMREQ 8742:Tamil Text Rendering |
|
5815 */ |
|
5816 testText[47] = 0x0B9C; //Ja |
|
5817 testText[48] = 0x0BC1; //U |
|
5818 |
|
5819 testText[49] = 0x0B9C; //Ja |
|
5820 testText[50] = 0x0BC2; //Uu |
|
5821 |
|
5822 param.iPosInText = 47 ; |
|
5823 param.iPen.iX = param.iPen.iY = 0; |
|
5824 |
|
5825 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5826 |
|
5827 TEST(r && param.iPosInText == 49 |
|
5828 && param.iOutputGlyphs == 2 |
|
5829 && param.iOutput[0].iCode == 0x80000bf9 |
|
5830 && param.iOutput[1].iCode == 0x80000c10); |
|
5831 |
|
5832 #if defined __WINS__ || defined __WINSCW__ |
|
5833 TEST(r && param.iPen.iX == 26); |
|
5834 #endif |
|
5835 |
|
5836 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5837 |
|
5838 param.iPosInText = 49; |
|
5839 param.iPen.iX = param.iPen.iY = 0; |
|
5840 |
|
5841 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5842 |
|
5843 TEST(r && param.iPosInText == 51 |
|
5844 && param.iOutputGlyphs == 2 |
|
5845 && param.iOutput[0].iCode == 0x80000bf9 |
|
5846 && param.iOutput[1].iCode == 0x80000c11 ); |
|
5847 |
|
5848 #if defined __WINS__ || defined __WINSCW__ |
|
5849 TEST(r && param.iPen.iX == 29); |
|
5850 #endif |
|
5851 |
|
5852 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5853 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5854 if (err!=KErrNone) |
|
5855 INFO_PRINTF1(_L("Failed to record test result")); |
|
5856 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4029")); |
|
5857 //Req 21 1.3.15 |
|
5858 /** |
|
5859 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4029 |
|
5860 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5861 @SYMTestPriority High |
|
5862 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement. |
|
5863 Matra /-ai/ is combined to consonants in regular fashion. No extra shaping is required. |
|
5864 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5865 @SYMPREQ 1766: Tamil for Sphinx |
|
5866 @SYMREQ 8742:Tamil Text Rendering |
|
5867 */ |
|
5868 testText[51] = 0x0B95; //Ka |
|
5869 testText[52] = 0x0BC8; //Ai |
|
5870 |
|
5871 param.iPosInText = 51; |
|
5872 param.iPen.iX = param.iPen.iY = 0; |
|
5873 |
|
5874 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5875 |
|
5876 TEST(r && param.iPosInText == 53 |
|
5877 && param.iOutputGlyphs == 2 |
|
5878 && param.iOutput[0].iCode == 0x80000c14 |
|
5879 && param.iOutput[1].iCode == 0x80000bf6); |
|
5880 |
|
5881 #if defined __WINS__ || defined __WINSCW__ |
|
5882 TEST(r && param.iPen.iX == 31); |
|
5883 #endif |
|
5884 |
|
5885 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
5886 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5887 if (err!=KErrNone) |
|
5888 INFO_PRINTF1(_L("Failed to record test result")); |
|
5889 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4030")); |
|
5890 //Req 22 |
|
5891 /** |
|
5892 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4030 |
|
5893 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5894 @SYMTestPriority High |
|
5895 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test the requirement |
|
5896 Consonant cluster <ka, virama, ssa> MUST always form conjunct consonant /k.ssa/, which behaves as if it were a proper consonant of its own |
|
5897 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5898 @SYMPREQ 1766: Tamil for Sphinx |
|
5899 @SYMREQ 8742:Tamil Text Rendering |
|
5900 */ |
|
5901 testText[53] = 0x0B95; //Ka |
|
5902 testText[54] = 0x0BCD; //Virama |
|
5903 testText[55] = 0x0BB7; //Ssa |
|
5904 |
|
5905 param.iPosInText = 53; |
|
5906 param.iPen.iX = param.iPen.iY = 0; |
|
5907 |
|
5908 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5909 |
|
5910 TEST(r && param.iPosInText == 56 |
|
5911 && param.iOutputGlyphs == 1 |
|
5912 && param.iOutput[0].iCode == 0x80000c2f ); |
|
5913 |
|
5914 #if defined __WINS__ || defined __WINSCW__ |
|
5915 TEST(r && param.iPen.iX == 31); |
|
5916 #endif |
|
5917 |
|
5918 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5919 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5920 if (err!=KErrNone) |
|
5921 INFO_PRINTF1(_L("Failed to record test result")); |
|
5922 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4031")); |
|
5923 //Req 23 1.3.17 |
|
5924 /** |
|
5925 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4031 |
|
5926 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5927 @SYMTestPriority High |
|
5928 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5929 Character sequence <sa, virama, ra, matra_ii> MUST be rendered as a ligature form /s.rii/. |
|
5930 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5931 @SYMPREQ 1766: Tamil for Sphinx |
|
5932 @SYMREQ 8742:Tamil Text Rendering |
|
5933 */ |
|
5934 testText[56] = 0x0BB8; //Sa |
|
5935 testText[57] = 0x0BCD; //Virama |
|
5936 testText[58] = 0x0BB0; //Ra |
|
5937 testText[59] = 0x0BC0; //Matra I |
|
5938 |
|
5939 param.iPosInText = 56; |
|
5940 param.iPen.iX = param.iPen.iY = 0; |
|
5941 |
|
5942 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5943 |
|
5944 TEST(r && param.iPosInText == 60 |
|
5945 && param.iOutputGlyphs == 1 |
|
5946 && param.iOutput[0].iCode == 0x80000c79 ); |
|
5947 |
|
5948 #if defined __WINS__ || defined __WINSCW__ |
|
5949 TEST(r && param.iPen.iX == 27); |
|
5950 #endif |
|
5951 |
|
5952 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5953 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5954 if (err!=KErrNone) |
|
5955 INFO_PRINTF1(_L("Failed to record test result")); |
|
5956 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4032")); |
|
5957 //Req 24 1.3.18 |
|
5958 /** |
|
5959 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4032 |
|
5960 @SYMTestCaseDesc Automated GDI testing for Tamil |
|
5961 @SYMTestPriority High |
|
5962 @SYMTestActions Attempt to compose various valid Tamil glyph clusters to test |
|
5963 Vertical position of the glyphs for combining characters virama, matras /-i/ and /-ii/ must be determined separately in relation to the relevant base glyph |
|
5964 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
5965 @SYMPREQ 1766: Tamil for Sphinx |
|
5966 @SYMREQ 8742:Tamil Text Rendering |
|
5967 */ |
|
5968 testText[60] = 0x0B95; //Ka |
|
5969 testText[62] = 0x0BCD; //Virama |
|
5970 testText[63] = 0x8205; //ZWJ |
|
5971 |
|
5972 param.iPosInText = 60; |
|
5973 param.iPen.iX = param.iPen.iY = 0; |
|
5974 |
|
5975 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
5976 |
|
5977 TEST(r && param.iPosInText == 61 |
|
5978 && param.iOutputGlyphs == 1 |
|
5979 && param.iOutput[0].iCode == 0x80000bf6 ); |
|
5980 |
|
5981 #if defined __WINS__ || defined __WINSCW__ |
|
5982 TEST(r && param.iPen.iX == 13); |
|
5983 #endif |
|
5984 |
|
5985 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
5986 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
5987 if (err!=KErrNone) |
|
5988 INFO_PRINTF1(_L("Failed to record test result")); |
|
5989 } |
|
5990 |
|
5991 /** |
|
5992 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-3479 |
|
5993 @SYMTestCaseDesc Automated GDI testing for correct localised punctuation after indic characters |
|
5994 @SYMTestPriority High |
|
5995 @SYMTestActions Attempt to compose various valid Indic strings with western punctuation |
|
5996 @SYMTestExpectedResults The expected punctuation glyphs for the implied locale should be returned |
|
5997 @SYMDEF DEF106651 |
|
5998 */ |
|
5999 void CTGlyphSelection::TestGlyphs(CFont* aFont, CFont::TPositionParam& aParam, |
|
6000 const TPtrC16& aText, const TPtrC16& aExpectedGlyphs) |
|
6001 { |
|
6002 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-3479")); |
|
6003 TUint16* glyphs = CONST_CAST(TUint16*,aExpectedGlyphs.Ptr()); |
|
6004 const TInt mask = 0x80000000-1; |
|
6005 TBool r; |
|
6006 RShapeInfo shapeInfo; |
|
6007 aParam.iText.Set(aText); |
|
6008 aParam.iPosInText = aParam.iPen.iX = aParam.iPen.iY = 0; |
|
6009 while(aParam.iPosInText < aParam.iText.Length()) |
|
6010 { |
|
6011 r = aFont->GetCharacterPosition2(aParam,shapeInfo); |
|
6012 //INFO_PRINTF3(_L("Glyph %d Icode 0x%x"),*glyphs,aParam.iOutput[0].iCode); |
|
6013 TEST(r && ((aParam.iOutput[0].iCode & mask) == *glyphs++)); |
|
6014 } |
|
6015 shapeInfo.Close(); |
|
6016 TRAPD(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6017 if (err!=KErrNone) |
|
6018 INFO_PRINTF1(_L("Failed to record test result")); |
|
6019 } |
|
6020 void CTGlyphSelection::TestTeluguChars(CFbsFont* aFont) |
|
6021 { |
|
6022 INFO_PRINTF1(_L("Test Telugu Glyphs")); |
|
6023 |
|
6024 TBool r; |
|
6025 TBuf<162> testText(0); |
|
6026 CFont::TPositionParam param; |
|
6027 param.iDirection = CFont::EHorizontal; |
|
6028 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
6029 |
|
6030 testText.SetLength(162); |
|
6031 // Make sure there is no garbage values in the memory we are using. |
|
6032 for (TInt i = 0; i < testText.Length(); i++) |
|
6033 testText[i]=0xFFFF; |
|
6034 |
|
6035 param.iText.Set(testText); |
|
6036 RShapeInfo shapeInfo; |
|
6037 |
|
6038 //Testdata for Telugu Langauage |
|
6039 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4033")); |
|
6040 /* |
|
6041 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4033 |
|
6042 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6043 @SYMTestPriority High |
|
6044 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6045 These consonants contain a small tick mark (crest) at the top of the glyph. This graphical detail can be considered to be a vocalic stem that indirectly indicates the inherent vowel /-a/. VIRAMA replaces the vocalic stem. |
|
6046 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6047 @SYMPREQ 1766: Tamil for Sphinx |
|
6048 @SYMREQ 8743:Tamil Text Rendering |
|
6049 */ |
|
6050 // Req 4.1 |
|
6051 |
|
6052 testText[0] = 0x0C15; |
|
6053 testText[1] = 0x0C4D; |
|
6054 param.iPosInText = 0 ; |
|
6055 param.iPen.iX = param.iPen.iY = 0; |
|
6056 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6057 |
|
6058 TEST(r && param.iPosInText == 2 |
|
6059 && param.iOutputGlyphs == 1 |
|
6060 && param.iOutput[0].iCode == 0x80000f49 ); |
|
6061 |
|
6062 #if defined __WINS__ || defined __WINSCW__ |
|
6063 TEST(r && param.iPen.iX == 9); |
|
6064 #endif |
|
6065 |
|
6066 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6067 TRAPD(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6068 if (err!=KErrNone) |
|
6069 INFO_PRINTF1(_L("Failed to record test result")); |
|
6070 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4034")); |
|
6071 /* |
|
6072 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4034 |
|
6073 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6074 @SYMTestPriority High |
|
6075 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6076 ?VIRAMA attaches the upward stroke at the right of the glyph. |
|
6077 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6078 @SYMPREQ 1766: Tamil for Sphinx |
|
6079 @SYMREQ 8743:Tamil Text Rendering |
|
6080 */ |
|
6081 testText[2] = 0x0C16; |
|
6082 testText[3] = 0x0C4D; |
|
6083 |
|
6084 param.iPosInText = 2 ; |
|
6085 |
|
6086 param.iPen.iX = param.iPen.iY = 0; |
|
6087 |
|
6088 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6089 |
|
6090 |
|
6091 TEST(r && param.iPosInText == 4 |
|
6092 && param.iOutputGlyphs == 1 |
|
6093 && param.iOutput[0].iCode == 0x80000f4a); |
|
6094 |
|
6095 #if defined __WINS__ || defined __WINSCW__ |
|
6096 TEST(r && param.iPen.iX == 13); |
|
6097 #endif |
|
6098 |
|
6099 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6100 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6101 if (err!=KErrNone) |
|
6102 INFO_PRINTF1(_L("Failed to record test result")); |
|
6103 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4035")); |
|
6104 /* |
|
6105 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4035 |
|
6106 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6107 @SYMTestPriority High |
|
6108 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6109 ?VIRAMA is attached to a stroke at the upper right corner. |
|
6110 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6111 @SYMPREQ 1766: Tamil for Sphinx |
|
6112 @SYMREQ 8743:Tamil Text Rendering |
|
6113 */ |
|
6114 |
|
6115 testText[4] = 0x0C23; |
|
6116 testText[5] = 0x0C4D; |
|
6117 |
|
6118 param.iPosInText = 4 ; |
|
6119 param.iPen.iX = param.iPen.iY = 0; |
|
6120 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6121 |
|
6122 TEST(r && param.iPosInText == 6 |
|
6123 && param.iOutputGlyphs == 1 |
|
6124 && param.iOutput[0].iCode == 0x80000f57 ); |
|
6125 |
|
6126 #if defined __WINS__ || defined __WINSCW__ |
|
6127 TEST(r && param.iPen.iX == 13); |
|
6128 #endif |
|
6129 |
|
6130 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6131 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6132 if (err!=KErrNone) |
|
6133 INFO_PRINTF1(_L("Failed to record test result")); |
|
6134 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4036")); |
|
6135 /** |
|
6136 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4036 |
|
6137 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6138 @SYMTestPriority High |
|
6139 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6140 Matras MATRA VOCALIC R and MATRA VOCALIC RR never attach the consonant glyph causing shape changes, but they are always placed at the right of the consonant glyph. |
|
6141 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6142 @SYMPREQ 1766: Tamil for Sphinx |
|
6143 @SYMREQ 8743:Tamil Text Rendering |
|
6144 */ |
|
6145 //Req 4.2 |
|
6146 testText[6] = 0x0C2E; |
|
6147 testText[7] = 0x0C43; |
|
6148 |
|
6149 param.iPosInText = 6 ; |
|
6150 param.iPen.iX = param.iPen.iY = 0; |
|
6151 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6152 |
|
6153 TEST(r && param.iPosInText == 8 |
|
6154 && param.iOutputGlyphs == 2 |
|
6155 && param.iOutput[0].iCode == 0x80000f21 |
|
6156 && param.iOutput[1].iCode == 0x80000f31 ); |
|
6157 |
|
6158 #if defined __WINS__ || defined __WINSCW__ |
|
6159 TEST(r && param.iPen.iX == 24); |
|
6160 #endif |
|
6161 |
|
6162 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
6163 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6164 if (err!=KErrNone) |
|
6165 INFO_PRINTF1(_L("Failed to record test result")); |
|
6166 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4037")); |
|
6167 /* |
|
6168 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4037 |
|
6169 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6170 @SYMTestPriority High |
|
6171 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6172 Matras MATRA VOCALIC R and MATRA VOCALIC RR never attach the consonant glyph causing shape changes, but they are always placed at the right of the consonant glyph. |
|
6173 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6174 @SYMPREQ 1766: Tamil for Sphinx |
|
6175 @SYMREQ 8743:Tamil Text Rendering |
|
6176 */ |
|
6177 testText[8] = 0x0C32; |
|
6178 |
|
6179 testText[9] = 0x0C44; |
|
6180 |
|
6181 param.iPosInText = 8 ; |
|
6182 param.iPen.iX = param.iPen.iY = 0; |
|
6183 |
|
6184 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6185 |
|
6186 TEST(r && param.iPosInText == 10 |
|
6187 && param.iOutputGlyphs == 2 |
|
6188 && param.iOutput[0].iCode == 0x80000f25 |
|
6189 && param.iOutput[1].iCode == 0x80000f32); |
|
6190 |
|
6191 #if defined __WINS__ || defined __WINSCW__ |
|
6192 TEST(r && param.iPen.iX == 22); |
|
6193 #endif |
|
6194 |
|
6195 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
6196 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6197 if (err!=KErrNone) |
|
6198 INFO_PRINTF1(_L("Failed to record test result")); |
|
6199 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4038")); |
|
6200 /* |
|
6201 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4038 |
|
6202 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6203 @SYMTestPriority High |
|
6204 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6205 ?Matras MATRA VOCALIC R and MATRA VOCALIC RR never attach the consonant glyph causing shape changes, but they are always placed at the right of the consonant glyph. |
|
6206 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6207 @SYMPREQ 1766: Tamil for Sphinx |
|
6208 @SYMREQ 8743:Tamil Text Rendering |
|
6209 */ |
|
6210 //Req 4.2.1 |
|
6211 testText[10] = 0x0C15; |
|
6212 testText[11] = 0x0C3E; |
|
6213 |
|
6214 param.iPosInText = 10 ; |
|
6215 param.iPen.iX = param.iPen.iY = 0; |
|
6216 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6217 |
|
6218 TEST(r && param.iPosInText == 12 |
|
6219 && param.iOutputGlyphs == 1 |
|
6220 && param.iOutput[0].iCode == 0x80000f6d ); |
|
6221 |
|
6222 #if defined __WINS__ || defined __WINSCW__ |
|
6223 TEST(r && param.iPen.iX == 13); |
|
6224 #endif |
|
6225 |
|
6226 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6227 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6228 if (err!=KErrNone) |
|
6229 INFO_PRINTF1(_L("Failed to record test result")); |
|
6230 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4039")); |
|
6231 /* |
|
6232 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4039 |
|
6233 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6234 @SYMTestPriority High |
|
6235 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6236 ?MATRA AA attaches to the upwards left curving stroke |
|
6237 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6238 @SYMPREQ 1766: Tamil for Sphinx |
|
6239 @SYMREQ 8743:Tamil Text Rendering |
|
6240 */ |
|
6241 testText[12] = 0x0C1F; |
|
6242 testText[13] = 0x0C3E; |
|
6243 param.iPosInText = 12 ; |
|
6244 param.iPen.iX = param.iPen.iY = 0; |
|
6245 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6246 |
|
6247 TEST(r && param.iPosInText == 14 |
|
6248 && param.iOutputGlyphs == 1 |
|
6249 && param.iOutput[0].iCode == 0x80000f77 ); |
|
6250 |
|
6251 #if defined __WINS__ || defined __WINSCW__ |
|
6252 TEST(r && param.iPen.iX == 16); |
|
6253 #endif |
|
6254 |
|
6255 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6256 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6257 if (err!=KErrNone) |
|
6258 INFO_PRINTF1(_L("Failed to record test result")); |
|
6259 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4040")); |
|
6260 /* |
|
6261 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4040 |
|
6262 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6263 @SYMTestPriority High |
|
6264 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6265 ?MATRA AA attaches the upwards (left curving) stroke at the top of the glyph |
|
6266 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6267 @SYMPREQ 1766: Tamil for Sphinx |
|
6268 @SYMREQ 8743:Tamil Text Rendering |
|
6269 */ |
|
6270 testText[14] = 0x0C1C; |
|
6271 testText[15] = 0x0C3E; |
|
6272 |
|
6273 param.iPosInText = 14 ; |
|
6274 param.iPen.iX = param.iPen.iY = 0; |
|
6275 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6276 |
|
6277 TEST(r && param.iPosInText == 16 |
|
6278 && param.iOutputGlyphs == 1 |
|
6279 && param.iOutput[0].iCode == 0x80000f74 ); |
|
6280 |
|
6281 #if defined __WINS__ || defined __WINSCW__ |
|
6282 TEST(r && param.iPen.iX == 15); |
|
6283 #endif |
|
6284 |
|
6285 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6286 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6287 if (err!=KErrNone) |
|
6288 INFO_PRINTF1(_L("Failed to record test result")); |
|
6289 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4041")); |
|
6290 /* |
|
6291 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4041 |
|
6292 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6293 @SYMTestPriority High |
|
6294 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6295 ?MATRA AA is drawn on top of the glyph |
|
6296 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6297 @SYMPREQ 1766: Tamil for Sphinx |
|
6298 @SYMREQ 8743:Tamil Text Rendering |
|
6299 */ |
|
6300 testText[16] = 0x0C23; |
|
6301 testText[17] = 0x0C3E; |
|
6302 |
|
6303 param.iPosInText = 16 ; |
|
6304 param.iPen.iX = param.iPen.iY = 0; |
|
6305 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6306 |
|
6307 TEST(r && param.iPosInText == 18 |
|
6308 && param.iOutputGlyphs == 1 |
|
6309 && param.iOutput[0].iCode == 0x80000f7b ); |
|
6310 |
|
6311 #if defined __WINS__ || defined __WINSCW__ |
|
6312 TEST(r && param.iPen.iX == 16); |
|
6313 #endif |
|
6314 |
|
6315 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6316 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6317 if (err!=KErrNone) |
|
6318 INFO_PRINTF1(_L("Failed to record test result")); |
|
6319 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4042")); |
|
6320 /* |
|
6321 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4042 |
|
6322 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6323 @SYMTestPriority High |
|
6324 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6325 ?MATRA AA attaches to the upwards left curving stroke, the vowel stem remains intact |
|
6326 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6327 @SYMPREQ 1766: Tamil for Sphinx |
|
6328 @SYMREQ 8743:Tamil Text Rendering |
|
6329 */ |
|
6330 testText[18] = 0x0C2B; |
|
6331 testText[19] = 0x0C3E; |
|
6332 |
|
6333 param.iPosInText = 18 ; |
|
6334 param.iPen.iX = param.iPen.iY = 0; |
|
6335 |
|
6336 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6337 |
|
6338 TEST(r && param.iPosInText == 20 |
|
6339 && param.iOutputGlyphs == 1 |
|
6340 && param.iOutput[0].iCode == 0x80000f82 ); |
|
6341 |
|
6342 #if defined __WINS__ || defined __WINSCW__ |
|
6343 TEST(r && param.iPen.iX == 16); |
|
6344 #endif |
|
6345 |
|
6346 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6347 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6348 if (err!=KErrNone) |
|
6349 INFO_PRINTF1(_L("Failed to record test result")); |
|
6350 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4043")); |
|
6351 /* |
|
6352 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4043 |
|
6353 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6354 @SYMTestPriority High |
|
6355 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6356 ?MATRA AA replaces the vowel stem, the upwards left curving stroke is extended |
|
6357 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6358 @SYMPREQ 1766: Tamil for Sphinx |
|
6359 @SYMREQ 8743:Tamil Text Rendering |
|
6360 */ |
|
6361 testText[20] = 0x0C2A; |
|
6362 testText[21] = 0x0C3E; |
|
6363 |
|
6364 param.iPosInText = 20 ; |
|
6365 param.iPen.iX = param.iPen.iY = 0; |
|
6366 |
|
6367 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6368 |
|
6369 TEST(r && param.iPosInText == 22 |
|
6370 && param.iOutputGlyphs == 1 |
|
6371 && param.iOutput[0].iCode == 0x80000f81); |
|
6372 |
|
6373 #if defined __WINS__ || defined __WINSCW__ |
|
6374 TEST(r && param.iPen.iX == 16); |
|
6375 #endif |
|
6376 |
|
6377 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6378 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6379 if (err!=KErrNone) |
|
6380 INFO_PRINTF1(_L("Failed to record test result")); |
|
6381 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4044")); |
|
6382 //Req 4.2.2 |
|
6383 /* |
|
6384 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4044 |
|
6385 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6386 @SYMTestPriority High |
|
6387 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6388 ?Vowel sign replaces the vowel stem |
|
6389 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6390 @SYMPREQ 1766: Tamil for Sphinx |
|
6391 @SYMREQ 8743:Tamil Text Rendering |
|
6392 */ |
|
6393 testText[22] = 0x0C26; |
|
6394 testText[23] = 0x0C3F; |
|
6395 |
|
6396 param.iPosInText = 22 ; |
|
6397 param.iPen.iX = param.iPen.iY = 0; |
|
6398 |
|
6399 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6400 |
|
6401 TEST(r && param.iPosInText == 24 |
|
6402 && param.iOutputGlyphs == 1 |
|
6403 && param.iOutput[0].iCode == 0x80000fa2 ); |
|
6404 |
|
6405 #if defined __WINS__ || defined __WINSCW__ |
|
6406 TEST(r && param.iPen.iX == 11); |
|
6407 #endif |
|
6408 |
|
6409 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6410 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6411 if (err!=KErrNone) |
|
6412 INFO_PRINTF1(_L("Failed to record test result")); |
|
6413 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4045")); |
|
6414 /* |
|
6415 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4045 |
|
6416 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6417 @SYMTestPriority High |
|
6418 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6419 ?The upwards left curving stroke extends, vowel sign attaches to the extended stroke |
|
6420 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6421 @SYMPREQ 1766: Tamil for Sphinx |
|
6422 @SYMREQ 8743:Tamil Text Rendering |
|
6423 */ |
|
6424 testText[24] = 0x0C16; |
|
6425 testText[25] = 0x0C3F; |
|
6426 |
|
6427 param.iPosInText = 24 ; |
|
6428 param.iPen.iX = param.iPen.iY = 0; |
|
6429 |
|
6430 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6431 |
|
6432 TEST(r && param.iPosInText == 26 |
|
6433 && param.iOutputGlyphs == 1 |
|
6434 && param.iOutput[0].iCode == 0x80000f92); |
|
6435 |
|
6436 #if defined __WINS__ || defined __WINSCW__ |
|
6437 TEST(r && param.iPen.iX == 12); |
|
6438 #endif |
|
6439 |
|
6440 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6441 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6442 if (err!=KErrNone) |
|
6443 INFO_PRINTF1(_L("Failed to record test result")); |
|
6444 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4046")); |
|
6445 /* |
|
6446 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4046 |
|
6447 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6448 @SYMTestPriority High |
|
6449 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6450 ?Vowel sign attaches the upward stroke at the top of the glyph |
|
6451 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6452 @SYMPREQ 1766: Tamil for Sphinx |
|
6453 @SYMREQ 8743:Tamil Text Rendering |
|
6454 */ |
|
6455 testText[26] = 0x0C1C; |
|
6456 testText[27] = 0x0C3F; |
|
6457 |
|
6458 param.iPosInText = 26 ; |
|
6459 param.iPen.iX = param.iPen.iY = 0; |
|
6460 |
|
6461 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6462 |
|
6463 TEST(r && param.iPosInText == 28 |
|
6464 && param.iOutputGlyphs == 1 |
|
6465 && param.iOutput[0].iCode == 0x80000f98 ); |
|
6466 |
|
6467 #if defined __WINS__ || defined __WINSCW__ |
|
6468 TEST(r && param.iPen.iX == 12); |
|
6469 #endif |
|
6470 |
|
6471 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6472 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6473 if (err!=KErrNone) |
|
6474 INFO_PRINTF1(_L("Failed to record test result")); |
|
6475 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4047")); |
|
6476 /* |
|
6477 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4047 |
|
6478 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6479 @SYMTestPriority High |
|
6480 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6481 ?Vowel sign attaches the upward stroke at the top of the glyph |
|
6482 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6483 @SYMPREQ 1766: Tamil for Sphinx |
|
6484 @SYMREQ 8743:Tamil Text Rendering |
|
6485 */ |
|
6486 testText[28] = 0x0C1E; |
|
6487 testText[29] = 0x0C40; |
|
6488 |
|
6489 param.iPosInText = 28 ; |
|
6490 param.iPen.iX = param.iPen.iY = 0; |
|
6491 |
|
6492 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6493 |
|
6494 TEST(r && param.iPosInText == 30 |
|
6495 && param.iOutputGlyphs == 1 |
|
6496 && param.iOutput[0].iCode == 0x80000fbe ); |
|
6497 |
|
6498 #if defined __WINS__ || defined __WINSCW__ |
|
6499 TEST(r && param.iPen.iX == 14); |
|
6500 #endif |
|
6501 |
|
6502 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6503 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6504 if (err!=KErrNone) |
|
6505 INFO_PRINTF1(_L("Failed to record test result")); |
|
6506 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4048")); |
|
6507 /* |
|
6508 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4048 |
|
6509 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6510 @SYMTestPriority High |
|
6511 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6512 ?Vowel sign attaches to the right upper corner of the glyph |
|
6513 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6514 @SYMPREQ 1766: Tamil for Sphinx |
|
6515 @SYMREQ 8743:Tamil Text Rendering |
|
6516 */ |
|
6517 testText[30] = 0x0C1F; |
|
6518 testText[31] = 0x0C3F; |
|
6519 |
|
6520 param.iPosInText = 30; |
|
6521 param.iPen.iX = param.iPen.iY = 0; |
|
6522 |
|
6523 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6524 |
|
6525 TEST(r && param.iPosInText == 32 |
|
6526 && param.iOutputGlyphs == 1 |
|
6527 && param.iOutput[0].iCode == 0x80000f9b ); |
|
6528 |
|
6529 #if defined __WINS__ || defined __WINSCW__ |
|
6530 TEST(r && param.iPen.iX == 12); |
|
6531 #endif |
|
6532 |
|
6533 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6534 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6535 if (err!=KErrNone) |
|
6536 INFO_PRINTF1(_L("Failed to record test result")); |
|
6537 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4049")); |
|
6538 /* |
|
6539 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4049 |
|
6540 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6541 @SYMTestPriority High |
|
6542 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6543 ?Vowel sign takes a loop form that replaces the vowel stem |
|
6544 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6545 @SYMPREQ 1766: Tamil for Sphinx |
|
6546 @SYMREQ 8743:Tamil Text Rendering |
|
6547 */ |
|
6548 testText[32] = 0x0C1D; |
|
6549 testText[33] = 0x0C3F; |
|
6550 |
|
6551 param.iPosInText = 32 ; |
|
6552 param.iPen.iX = param.iPen.iY = 0; |
|
6553 |
|
6554 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6555 |
|
6556 TEST(r && param.iPosInText == 34 |
|
6557 && param.iOutputGlyphs == 1 |
|
6558 && param.iOutput[0].iCode == 0x80000f99 ); |
|
6559 |
|
6560 #if defined __WINS__ || defined __WINSCW__ |
|
6561 TEST(r && param.iPen.iX == 19); |
|
6562 #endif |
|
6563 |
|
6564 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6565 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6566 if (err!=KErrNone) |
|
6567 INFO_PRINTF1(_L("Failed to record test result")); |
|
6568 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4050")); |
|
6569 /* |
|
6570 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4050 |
|
6571 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6572 @SYMTestPriority High |
|
6573 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6574 ?The upwards left curving stroke extends, vowel sign replaces the vowel stem at the tip of the extended stroke |
|
6575 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6576 @SYMPREQ 1766: Tamil for Sphinx |
|
6577 @SYMREQ 8743:Tamil Text Rendering |
|
6578 */ |
|
6579 testText[34] = 0x0C1B; |
|
6580 testText[35] = 0x0C3F; |
|
6581 |
|
6582 param.iPosInText =34 ; |
|
6583 param.iPen.iX = param.iPen.iY = 0; |
|
6584 |
|
6585 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6586 |
|
6587 TEST(r && param.iPosInText == 36 |
|
6588 && param.iOutputGlyphs == 1 |
|
6589 && param.iOutput[0].iCode == 0x80000f97 ); |
|
6590 |
|
6591 #if defined __WINS__ || defined __WINSCW__ |
|
6592 TEST(r && param.iPen.iX == 12); |
|
6593 #endif |
|
6594 |
|
6595 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6596 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6597 if (err!=KErrNone) |
|
6598 INFO_PRINTF1(_L("Failed to record test result")); |
|
6599 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4051")); |
|
6600 /* |
|
6601 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4051 |
|
6602 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6603 @SYMTestPriority High |
|
6604 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6605 ?Vowel sign replaces the upwards curving stroke at the top of the glyph |
|
6606 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6607 @SYMPREQ 1766: Tamil for Sphinx |
|
6608 @SYMREQ 8743:Tamil Text Rendering |
|
6609 */ |
|
6610 testText[36] = 0x0C1C; |
|
6611 testText[37] = 0x0C3F; |
|
6612 |
|
6613 param.iPosInText = 36 ; |
|
6614 param.iPen.iX = param.iPen.iY = 0; |
|
6615 |
|
6616 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6617 |
|
6618 TEST(r && param.iPosInText == 38 |
|
6619 && param.iOutputGlyphs == 1 |
|
6620 && param.iOutput[0].iCode == 0x80000f98 ); |
|
6621 |
|
6622 #if defined __WINS__ || defined __WINSCW__ |
|
6623 TEST(r && param.iPen.iX == 12); |
|
6624 #endif |
|
6625 |
|
6626 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6627 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6628 if (err!=KErrNone) |
|
6629 INFO_PRINTF1(_L("Failed to record test result")); |
|
6630 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4052")); |
|
6631 /* |
|
6632 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4052 |
|
6633 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6634 @SYMTestPriority High |
|
6635 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6636 ?Vowel stem is removed. |
|
6637 ?Vowel stem is removed and MATRA II takes a form that looks like MATRA AA |
|
6638 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6639 @SYMPREQ 1766: Tamil for Sphinx |
|
6640 @SYMREQ 8743:Tamil Text Rendering |
|
6641 */ |
|
6642 testText[38] = 0x0C2F; |
|
6643 testText[39] = 0x0C3F; |
|
6644 |
|
6645 param.iPosInText = 38 ; |
|
6646 param.iPen.iX = param.iPen.iY = 0; |
|
6647 |
|
6648 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6649 |
|
6650 TEST(r && param.iPosInText == 40 |
|
6651 && param.iOutputGlyphs == 1 |
|
6652 && param.iOutput[0].iCode == 0x80000faa ); |
|
6653 |
|
6654 #if defined __WINS__ || defined __WINSCW__ |
|
6655 TEST(r && param.iPen.iX == 19); |
|
6656 #endif |
|
6657 |
|
6658 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6659 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6660 if (err!=KErrNone) |
|
6661 INFO_PRINTF1(_L("Failed to record test result")); |
|
6662 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4053")); |
|
6663 /* |
|
6664 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4053 |
|
6665 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6666 @SYMTestPriority High |
|
6667 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6668 ?Vowel sign attaches to the right of the consonant glyph, vowel stem remains intact |
|
6669 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6670 @SYMPREQ 1766: Tamil for Sphinx |
|
6671 @SYMREQ 8743:Tamil Text Rendering |
|
6672 */ |
|
6673 testText[40] = 0x0C15; |
|
6674 testText[41] = 0x0C41; |
|
6675 |
|
6676 param.iPosInText = 40 ; |
|
6677 param.iPen.iX = param.iPen.iY = 0; |
|
6678 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6679 |
|
6680 TEST(r && param.iPosInText ==42 |
|
6681 && param.iOutputGlyphs == 1 |
|
6682 && param.iOutput[0].iCode == 0x80000fd9 ); |
|
6683 |
|
6684 #if defined __WINS__ || defined __WINSCW__ |
|
6685 TEST(r && param.iPen.iX == 14); |
|
6686 #endif |
|
6687 |
|
6688 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6689 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6690 if (err!=KErrNone) |
|
6691 INFO_PRINTF1(_L("Failed to record test result")); |
|
6692 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4054")); |
|
6693 /* |
|
6694 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4054 |
|
6695 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6696 @SYMTestPriority High |
|
6697 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6698 ?Vowel sign takes a miniature form which attaches to the stroke at the top of the consonant glyph |
|
6699 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6700 @SYMPREQ 1766: Tamil for Sphinx |
|
6701 @SYMREQ 8743:Tamil Text Rendering |
|
6702 */ |
|
6703 testText[42] = 0x0C19; |
|
6704 testText[43] = 0x0C41; |
|
6705 |
|
6706 param.iPosInText = 42 ; |
|
6707 param.iPen.iX = param.iPen.iY = 0; |
|
6708 |
|
6709 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6710 |
|
6711 TEST(r && param.iPosInText == 44 |
|
6712 && param.iOutputGlyphs == 1 |
|
6713 && param.iOutput[0].iCode == 0x80000fda ); |
|
6714 |
|
6715 #if defined __WINS__ || defined __WINSCW__ |
|
6716 TEST(r && param.iPen.iX == 15); |
|
6717 #endif |
|
6718 |
|
6719 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6720 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6721 if (err!=KErrNone) |
|
6722 INFO_PRINTF1(_L("Failed to record test result")); |
|
6723 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4055")); |
|
6724 /* |
|
6725 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4055 |
|
6726 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6727 @SYMTestPriority High |
|
6728 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6729 ?Vowel sign attaches the consonant sign from below. Vowel stem remains intact. |
|
6730 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6731 @SYMPREQ 1766: Tamil for Sphinx |
|
6732 @SYMREQ 8743:Tamil Text Rendering |
|
6733 */ |
|
6734 testText[44] = 0x0C2E; |
|
6735 testText[45] = 0x0C41; |
|
6736 |
|
6737 param.iPosInText = 44 ; |
|
6738 param.iPen.iX = param.iPen.iY = 0; |
|
6739 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6740 |
|
6741 TEST(r && param.iPosInText == 46 |
|
6742 && param.iOutputGlyphs == 2 |
|
6743 && param.iOutput[0].iCode == 0x80000f21 ); |
|
6744 |
|
6745 #if defined __WINS__ || defined __WINSCW__ |
|
6746 TEST(r && param.iPen.iX == 21); |
|
6747 #endif |
|
6748 |
|
6749 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6750 |
|
6751 testText[46] = 0x0C36; |
|
6752 testText[47] = 0x0C41; |
|
6753 |
|
6754 param.iPosInText = 46 ; |
|
6755 param.iPen.iX = param.iPen.iY = 0; |
|
6756 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6757 |
|
6758 TEST(r && param.iPosInText == 48 |
|
6759 && param.iOutputGlyphs == 2 |
|
6760 && param.iOutput[0].iCode == 0x80000f28 ); |
|
6761 |
|
6762 #if defined __WINS__ || defined __WINSCW__ |
|
6763 TEST(r && param.iPen.iX == 14); |
|
6764 #endif |
|
6765 |
|
6766 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6767 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6768 if (err!=KErrNone) |
|
6769 INFO_PRINTF1(_L("Failed to record test result")); |
|
6770 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4056")); |
|
6771 /* |
|
6772 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4056 |
|
6773 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6774 @SYMTestPriority High |
|
6775 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6776 ?Vowel sign replaces the vowel stem |
|
6777 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6778 @SYMPREQ 1766: Tamil for Sphinx |
|
6779 @SYMREQ 8743:Tamil Text Rendering |
|
6780 */ |
|
6781 // Req 4.2.4 |
|
6782 testText[48] = 0x0C28; |
|
6783 testText[49] = 0x0C46; |
|
6784 |
|
6785 param.iPosInText = 48 ; |
|
6786 param.iPen.iX = param.iPen.iY = 0; |
|
6787 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6788 |
|
6789 TEST(r && param.iPosInText == 50 |
|
6790 && param.iOutputGlyphs == 1 |
|
6791 && param.iOutput[0].iCode == 0x80001000 ); |
|
6792 |
|
6793 #if defined __WINS__ || defined __WINSCW__ |
|
6794 TEST(r && param.iPen.iX == 11); |
|
6795 #endif |
|
6796 |
|
6797 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6798 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6799 if (err!=KErrNone) |
|
6800 INFO_PRINTF1(_L("Failed to record test result")); |
|
6801 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4057")); |
|
6802 /* |
|
6803 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4057 |
|
6804 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6805 @SYMTestPriority High |
|
6806 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6807 ?Vowel sign replaces the vowel stem |
|
6808 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6809 @SYMPREQ 1766: Tamil for Sphinx |
|
6810 @SYMREQ 8743:Tamil Text Rendering |
|
6811 */ |
|
6812 testText[50] = 0x0C1B; |
|
6813 testText[51] = 0x0C47; |
|
6814 |
|
6815 param.iPosInText = 50 ; |
|
6816 param.iPen.iX = param.iPen.iY = 0; |
|
6817 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6818 |
|
6819 TEST(r && param.iPosInText == 52 |
|
6820 && param.iOutputGlyphs == 1 |
|
6821 && param.iOutput[0].iCode == 0x80001017 ); |
|
6822 |
|
6823 #if defined __WINS__ || defined __WINSCW__ |
|
6824 TEST(r && param.iPen.iX == 12); |
|
6825 #endif |
|
6826 |
|
6827 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6828 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6829 if (err!=KErrNone) |
|
6830 INFO_PRINTF1(_L("Failed to record test result")); |
|
6831 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4058")); |
|
6832 /* |
|
6833 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4058 |
|
6834 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6835 @SYMTestPriority High |
|
6836 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6837 ?Vowel sign replaces the vowel stem |
|
6838 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6839 @SYMPREQ 1766: Tamil for Sphinx |
|
6840 @SYMREQ 8743:Tamil Text Rendering |
|
6841 */ |
|
6842 testText[52] = 0x0C1D; |
|
6843 testText[53] = 0x0C48; |
|
6844 |
|
6845 param.iPosInText = 52 ; |
|
6846 param.iPen.iX = param.iPen.iY = 0; |
|
6847 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6848 |
|
6849 TEST(r && param.iPosInText == 54 |
|
6850 && param.iOutputGlyphs == 2 |
|
6851 && param.iOutput[0].iCode == 0x80000ff5 |
|
6852 && param.iOutput[1].iCode == 0x80000f3b ); |
|
6853 |
|
6854 #if defined __WINS__ || defined __WINSCW__ |
|
6855 TEST(r && param.iPen.iX == 19); |
|
6856 #endif |
|
6857 |
|
6858 INFO_PRINTF6(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x iOutput[1].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode, param.iOutput[1].iCode); |
|
6859 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6860 if (err!=KErrNone) |
|
6861 INFO_PRINTF1(_L("Failed to record test result")); |
|
6862 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4059")); |
|
6863 /* |
|
6864 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4059 |
|
6865 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6866 @SYMTestPriority High |
|
6867 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6868 ?Vowel sign replaces the vowel stem. |
|
6869 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6870 @SYMPREQ 1766: Tamil for Sphinx |
|
6871 @SYMREQ 8743:Tamil Text Rendering |
|
6872 */ |
|
6873 // Req 4.2.5 |
|
6874 testText[54] = 0x0C15; |
|
6875 testText[55] = 0x0C4A; |
|
6876 |
|
6877 param.iPosInText = 54 ; |
|
6878 param.iPen.iX = param.iPen.iY = 0; |
|
6879 |
|
6880 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6881 |
|
6882 TEST(r && param.iPosInText == 56 |
|
6883 && param.iOutputGlyphs == 1 |
|
6884 && param.iOutput[0].iCode == 0x80001059 ); |
|
6885 |
|
6886 #if defined __WINS__ || defined __WINSCW__ |
|
6887 TEST(r && param.iPen.iX == 13); |
|
6888 #endif |
|
6889 |
|
6890 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6891 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6892 if (err!=KErrNone) |
|
6893 INFO_PRINTF1(_L("Failed to record test result")); |
|
6894 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4060")); |
|
6895 /* |
|
6896 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4060 |
|
6897 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6898 @SYMTestPriority High |
|
6899 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6900 ?Vowel sign replaces the vowel stem. |
|
6901 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6902 @SYMPREQ 1766: Tamil for Sphinx |
|
6903 @SYMREQ 8743:Tamil Text Rendering |
|
6904 */ |
|
6905 |
|
6906 testText[56] = 0x0C21; |
|
6907 testText[57] = 0x0C4B; |
|
6908 |
|
6909 param.iPosInText = 56 ; |
|
6910 param.iPen.iX = param.iPen.iY = 0; |
|
6911 |
|
6912 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6913 |
|
6914 TEST(r && param.iPosInText == 58 |
|
6915 && param.iOutputGlyphs == 1 |
|
6916 && param.iOutput[0].iCode == 0x80001089 ); |
|
6917 |
|
6918 #if defined __WINS__ || defined __WINSCW__ |
|
6919 TEST(r && param.iPen.iX == 14); |
|
6920 #endif |
|
6921 |
|
6922 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6923 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
6924 if (err!=KErrNone) |
|
6925 INFO_PRINTF1(_L("Failed to record test result")); |
|
6926 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-4061")); |
|
6927 /* |
|
6928 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-4061 |
|
6929 @SYMTestCaseDesc Automated GDI testing for Telugu |
|
6930 @SYMTestPriority High |
|
6931 @SYMTestActions Attempt to compose various valid Telugu glyph clusters to test |
|
6932 ?Vowel sign replaces the vowel stem. |
|
6933 @@SYMTestExpectedResults The expected glyph clusters for given Unicode characters must be returned |
|
6934 @SYMPREQ 1766: Tamil for Sphinx |
|
6935 @SYMREQ 8743:Tamil Text Rendering |
|
6936 */ |
|
6937 testText[58] = 0x0C26; |
|
6938 testText[59] = 0x0C4C; |
|
6939 |
|
6940 param.iPosInText = 58 ; |
|
6941 param.iPen.iX = param.iPen.iY = 0; |
|
6942 |
|
6943 r = aFont->GetCharacterPosition2(param,shapeInfo); |
|
6944 |
|
6945 TEST(r && param.iPosInText == 60 |
|
6946 && param.iOutputGlyphs == 1 |
|
6947 && param.iOutput[0].iCode == 0x800010b2 ); |
|
6948 |
|
6949 #if defined __WINS__ || defined __WINSCW__ |
|
6950 TEST(r && param.iPen.iX == 14); |
|
6951 #endif |
|
6952 |
|
6953 INFO_PRINTF5(_L("The values are iPosInText=%d iPen.iX=%d iOutputGlyphs=%d iOutput[0].iCode=0x%x"), param.iPosInText, param.iPen.iX, param.iOutputGlyphs, param.iOutput[0].iCode); |
|
6954 } |
|
6955 |
|
6956 void CTGlyphSelection::TestIndicPunctuation(CFbsFont* aFont) |
|
6957 { |
|
6958 INFO_PRINTF1(_L("Test Indic Punctuation")); |
|
6959 |
|
6960 CFont::TPositionParam param; |
|
6961 param.iDirection = CFont::EHorizontal; |
|
6962 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
6963 |
|
6964 //INFO_PRINTF1(_L("// punctuation string after Kannada text")); |
|
6965 TestGlyphs(aFont,param,_L("\xC95!?#@"),_L("\x7A8\x920\x93C\x922\x23")); |
|
6966 //INFO_PRINTF1(_L("// punctuation string before Kannada text")); |
|
6967 TestGlyphs(aFont,param,_L("!?#@\xC95"),_L("\x21\x3F\x23\x40\x7A8")); |
|
6968 //INFO_PRINTF1(_L("// punctuation string before and after Kannada text")); |
|
6969 TestGlyphs(aFont,param,_L(" \"\xC95\" "),_L("\x20\x20\x22\x7A8\x22\x20\x20")); |
|
6970 //INFO_PRINTF1(_L("// punctuation before and after latin text followed by punctuation before and after kannada text")); |
|
6971 TestGlyphs(aFont,param,_L("\x201c\x041\x201D (\xc95)"),_L("\x201c\x41\x201d\x20\x28\x7a8\x29")); |
|
6972 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation surrounded by whitespace inbetween")); |
|
6973 TestGlyphs(aFont,param,_L("\xc95 , \x041"),_L("\x7a8\x20\x929\x20\x41")); |
|
6974 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation surrounded by whitespace inbetween (reversed)")); |
|
6975 TestGlyphs(aFont,param,_L("\x041 , \xc95"),_L("\x41\x20\x2C\x20\x7a8")); |
|
6976 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation next to latin")); |
|
6977 TestGlyphs(aFont,param,_L("\x041, \xc95"),_L("\x41\x2C\x20\x7a8")); |
|
6978 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation next to kannada")); |
|
6979 TestGlyphs(aFont,param,_L("\x041 ,\xc95"),_L("\x41\x20\x2C\x7a8")); |
|
6980 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation next to latin and seperating tab")); |
|
6981 TestGlyphs(aFont,param,_L("\x041,\t\xc95"),_L("\x41\x2C\x9\x7a8")); |
|
6982 //INFO_PRINTF1(_L("// mixed kannada/ latin with punctuation next to kannada and seperating tab")); |
|
6983 TestGlyphs(aFont,param,_L("\x041\t,\xc95"),_L("\x41\x9\x2C\x7a8")); |
|
6984 //INFO_PRINTF1(_L("// devanagari digits with colons")); |
|
6985 TestGlyphs(aFont,param,_L("\x966\x03a\x967\x03a\x968\x03a\x969\x03a\x96a\x03a\x96b\x03a\x96c\x03a\x96d\x03a\x96e\x03a\x96f\x03a"), |
|
6986 _L("\x582\x77e\x583\x77e\x584\x77e\x585\x77e\x586\x77e\x587\x77e\x588\x77e\x589\x77e\x58a\x77e\x58b\x77e")); |
|
6987 //INFO_PRINTF1(_L("// string of only punctuation")); |
|
6988 TestGlyphs(aFont,param,_L("\x002D\x002D\x002D\x002D\x002D\x002D"),_L("\x002D\x002D\x002D\x002D\x002D\x002D")); |
|
6989 //INFO_PRINTF1(_L("// one Kannada character followed my multiple punctuation and non-punctuaion")); |
|
6990 TestGlyphs(aFont,param,_L("\x0C95!\x0022\x00A3$%^&*()-={}[]:@~;'#<>?,./"), |
|
6991 _L("\x07A8\x0920\x0022\x00A3\x0024\x0923\x005E\x0009\x0927\x0028\x0029\x092A\x003D\x007B\x007D\x005B\x005D\x0937\x0023\x007E\x0938\x0027\x0922\x003C\x003E\x093C\x0929\x092B\x092C")); |
|
6992 } |
|
6993 |
|
6994 |
|
6995 |
|
6996 void CTGlyphSelection::TestIndicCharsL() |
|
6997 { |
|
6998 // create a font store for testing |
|
6999 CFontStore* fontStore = CFontStore::NewL(&User::Heap()); |
|
7000 |
|
7001 //load all ecom implemented rasterizer dlls. installs the rasterizer. |
|
7002 LoadOpenFontLibraries(fontStore); |
|
7003 // test font preparation |
|
7004 fontStore->iKPixelWidthInTwips = 11860; //This value is default |
|
7005 |
|
7006 //add any required font files |
|
7007 TUid err = fontStore->AddFileL(KTestHindiFontFile); |
|
7008 |
|
7009 TFontSpec testHindiFontSpec(KTestHindiFontFaceName,200); |
|
7010 |
|
7011 TUid err1 = fontStore->AddFileL(KTestIndicFontFile); |
|
7012 |
|
7013 TFontSpec testIndicFontSpec(KTestIndicFontFaceName,200); |
|
7014 |
|
7015 CFbsBitmap* bmp = new(ELeave) CFbsBitmap; |
|
7016 |
|
7017 TInt ret = bmp->Create(TSize(100,100),EGray2); |
|
7018 if (ret == KErrNotSupported) |
|
7019 return; |
|
7020 else |
|
7021 User::LeaveIfError(ret); |
|
7022 |
|
7023 CFbsBitmapDevice* device = NULL; |
|
7024 TRAPD(err2,device = CFbsBitmapDevice::NewL(bmp)); |
|
7025 TEST(err2 == KErrNone); |
|
7026 |
|
7027 CFbsBitGc* gc = NULL; |
|
7028 User::LeaveIfError(device->CreateContext(gc)); |
|
7029 // Font file Creation |
|
7030 CFbsFont* hindiFont = NULL; |
|
7031 User::LeaveIfError(device->GetNearestFontToDesignHeightInTwips(hindiFont,testHindiFontSpec)); |
|
7032 gc->UseFont(hindiFont); |
|
7033 CleanupStack::PushL(hindiFont); |
|
7034 |
|
7035 //Testcode for Hindi language |
|
7036 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7037 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-1580")); |
|
7038 TestHindiChars(hindiFont); |
|
7039 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7040 |
|
7041 CleanupStack::Pop(hindiFont); |
|
7042 |
|
7043 // Font file Creation |
|
7044 CFbsFont* indicFont = NULL; |
|
7045 User::LeaveIfError(device->GetNearestFontToDesignHeightInTwips(indicFont,testIndicFontSpec)); |
|
7046 gc->UseFont(indicFont); |
|
7047 CleanupStack::PushL(indicFont); |
|
7048 |
|
7049 //Testcode for Kannada, Marathi,Gujarati,Bengali language |
|
7050 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-3381")); |
|
7051 TestKannadaChars(indicFont); |
|
7052 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7053 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-3360")); |
|
7054 TestMarathiChars(indicFont); |
|
7055 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7056 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-3417")); |
|
7057 TestGujaratiChars(indicFont); |
|
7058 TestBengaliChars(indicFont); |
|
7059 TestTamilChars(indicFont); |
|
7060 TestTeluguChars(indicFont); |
|
7061 TestIndicPunctuation(indicFont); |
|
7062 CleanupStack::Pop(indicFont); |
|
7063 |
|
7064 //Cleaning the memory |
|
7065 delete bmp; |
|
7066 delete device; |
|
7067 delete gc; |
|
7068 fontStore->RemoveFile(err); |
|
7069 fontStore->RemoveFile(err1); |
|
7070 delete fontStore; |
|
7071 REComSession::FinalClose(); |
|
7072 } |
|
7073 |
|
7074 |
|
7075 /** |
|
7076 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CT-0221 |
|
7077 @SYMTestCaseDesc Test support for Vietnamese characters. |
|
7078 @SYMTestPriority High |
|
7079 @SYMTestActions Attempt to compose various valid and invalid Vietnamese glyph clusters. |
|
7080 @SYMTestExpectedResults The test must not fail. |
|
7081 @SYMPREQ 402: GDI for Bravo. |
|
7082 */ |
|
7083 void CTGlyphSelection::TestVietnameseChars() |
|
7084 { |
|
7085 /** |
|
7086 This method is a test case to test GetCharacterPosition() correctly |
|
7087 processes Vietnamese characters. |
|
7088 */ |
|
7089 TBool r; |
|
7090 TBuf<41> testText(0); |
|
7091 CFont::TPositionParam param; |
|
7092 param.iDirection = CFont::EHorizontal; |
|
7093 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7094 |
|
7095 testText.SetLength(41); |
|
7096 |
|
7097 testText[0] = 0x0055; // capital U |
|
7098 testText[1] = 0x031B; // combining horn - expect 0x01AF (succeed) |
|
7099 |
|
7100 testText[2] = 0x0055; // capital U |
|
7101 testText[3] = 0x0027; // apostrophe - expect 0x0055 (fail) |
|
7102 |
|
7103 testText[4] = 0x0055; // capital U |
|
7104 testText[5] = 0x02B9; // modifier prime - expect 0x0055 (fail) |
|
7105 |
|
7106 testText[6] = 0x0055; // capital U |
|
7107 testText[7] = 0x02BC; // modifier apostrophe - expect 0x0055 (fail) |
|
7108 |
|
7109 testText[8] = 0x0055; // capital U |
|
7110 testText[9] = 0x0315; // combining comma above right - expect 0x0055, 0x0315 (fail) |
|
7111 |
|
7112 testText[10] = 0x0055; // capital U |
|
7113 testText[11] = 0x2019; // right single quote mark - expect 0x0055 (fail) |
|
7114 |
|
7115 testText[12] = 0x01AF; // capital U with horn |
|
7116 testText[13] = 0x0020; // space - expect 0x01AF (succeed) |
|
7117 |
|
7118 testText[14] = 0x0045; // capital E |
|
7119 testText[15] = 0x031B; // combining horn - expect 0x0045, 0x031B (fail) |
|
7120 |
|
7121 testText[16] = 0x0041; // capital A |
|
7122 testText[17] = 0x0306; // combining breve |
|
7123 testText[18] = 0x0301; // combining acute - expect 0x1EAE (succeed) |
|
7124 |
|
7125 testText[19] = 0x0102; // capital A with breve |
|
7126 testText[20] = 0x0301; // combining acute - expect 0x1EAE (succeed) |
|
7127 |
|
7128 testText[21] = 0x0041; // capital A |
|
7129 testText[22] = 0x0301; // combining acute |
|
7130 testText[23] = 0x0306; // combining breve - expect 0x0041, 0x0301, 0x0306 (fail) |
|
7131 |
|
7132 testText[24] = 0x0041; // capital A |
|
7133 testText[25] = 0x0323; // combining dot below |
|
7134 testText[26] = 0x0306; // combining breve - expect 0x1EB6 (succeed) |
|
7135 |
|
7136 testText[27] = 0x1EA0; // capital A with dot below |
|
7137 testText[28] = 0x0306; // combining breve - expect 0x1EB6 (succeed) |
|
7138 |
|
7139 testText[29] = 0x0102; // capital A with breve |
|
7140 testText[30] = 0x0323; // combining dot below - expect 0x0102, 0x0323 (fail) |
|
7141 |
|
7142 testText[31] = 0x0045; // capital A |
|
7143 testText[32] = 0x0302; // combining circumflex |
|
7144 testText[33] = 0x0301; // combining acute - expect 0x1EBE (succeed) |
|
7145 |
|
7146 testText[34] = 0x00CA; // capital A with circumflex |
|
7147 testText[35] = 0x0301; // combining acute - expect 0x1EBE (succeed) |
|
7148 |
|
7149 testText[36] = 0x004F; // capital O |
|
7150 testText[37] = 0x031B; // combining horn |
|
7151 testText[38] = 0x0309; // combining hook above - expect 0x1EDE (succeed) |
|
7152 |
|
7153 testText[39] = 0x01A0; // capital O with horn |
|
7154 testText[40] = 0x0309; // combining hook above - expect 0x1EDE (succeed) |
|
7155 |
|
7156 param.iText.Set(testText); |
|
7157 |
|
7158 // 1: Capital U with combining horn |
|
7159 param.iPosInText = 0; |
|
7160 param.iPen.iX = param.iPen.iY = 0; |
|
7161 r = iTestFont->GetCharacterPosition(param); |
|
7162 TEST(r && param.iPosInText == 2 |
|
7163 && param.iPen.iX == 10 |
|
7164 && param.iOutputGlyphs == 1 |
|
7165 && param.iOutput[0].iCode == 0x01AF); |
|
7166 |
|
7167 // 2: Capital U with apostrophe |
|
7168 param.iPosInText = 2; |
|
7169 param.iPen.iX = param.iPen.iY = 0; |
|
7170 r = iTestFont->GetCharacterPosition(param); |
|
7171 TEST(r && param.iPosInText == 3 |
|
7172 && param.iPen.iX == 10 |
|
7173 && param.iOutputGlyphs == 1 |
|
7174 && param.iOutput[0].iCode == 0x0055); |
|
7175 |
|
7176 // 3: Capital U with modifier prime |
|
7177 param.iPosInText = 4; |
|
7178 param.iPen.iX = param.iPen.iY = 0; |
|
7179 r = iTestFont->GetCharacterPosition(param); |
|
7180 TEST(r && param.iPosInText == 5 |
|
7181 && param.iPen.iX == 10 |
|
7182 && param.iOutputGlyphs == 1 |
|
7183 && param.iOutput[0].iCode == 0x0055); |
|
7184 |
|
7185 // 4: Capital U with modifier apostrophe |
|
7186 param.iPosInText = 6; |
|
7187 param.iPen.iX = param.iPen.iY = 0; |
|
7188 r = iTestFont->GetCharacterPosition(param); |
|
7189 TEST(r && param.iPosInText == 7 |
|
7190 && param.iPen.iX == 10 |
|
7191 && param.iOutputGlyphs == 1 |
|
7192 && param.iOutput[0].iCode == 0x0055); |
|
7193 |
|
7194 // 5: Capital U with combining comma above right |
|
7195 param.iPosInText = 8; |
|
7196 param.iPen.iX = param.iPen.iY = 0; |
|
7197 r = iTestFont->GetCharacterPosition(param); |
|
7198 TEST(r && param.iPosInText == 10 |
|
7199 && param.iPen.iX == 10 |
|
7200 && param.iOutputGlyphs == 2 |
|
7201 && param.iOutput[0].iCode == 0x0055 |
|
7202 && param.iOutput[1].iCode == 0x0315); |
|
7203 |
|
7204 // 6: Capital U with right single quote |
|
7205 param.iPosInText = 10; |
|
7206 param.iPen.iX = param.iPen.iY = 0; |
|
7207 r = iTestFont->GetCharacterPosition(param); |
|
7208 TEST(r && param.iPosInText == 11 |
|
7209 && param.iPen.iX == 10 |
|
7210 && param.iOutputGlyphs == 1 |
|
7211 && param.iOutput[0].iCode == 0x0055); |
|
7212 |
|
7213 // 7: Capital U with horn plus space |
|
7214 param.iPosInText = 12; |
|
7215 param.iPen.iX = param.iPen.iY = 0; |
|
7216 r = iTestFont->GetCharacterPosition(param); |
|
7217 TEST(r && param.iPosInText == 13 |
|
7218 && param.iPen.iX == 10 |
|
7219 && param.iOutputGlyphs == 1 |
|
7220 && param.iOutput[0].iCode == 0x01AF); |
|
7221 |
|
7222 // 8: Capital E with combining horn |
|
7223 param.iPosInText = 14; |
|
7224 param.iPen.iX = param.iPen.iY = 0; |
|
7225 r = iTestFont->GetCharacterPosition(param); |
|
7226 TEST(r && param.iPosInText == 16 |
|
7227 && param.iPen.iX == 10 |
|
7228 && param.iOutputGlyphs == 2 |
|
7229 && param.iOutput[0].iCode == 0x0045 |
|
7230 && param.iOutput[1].iCode == 0x031B); |
|
7231 |
|
7232 // 9: Capital A with combining breve with combining acute |
|
7233 param.iPosInText = 16; |
|
7234 param.iPen.iX = param.iPen.iY = 0; |
|
7235 r = iTestFont->GetCharacterPosition(param); |
|
7236 TEST(r && param.iPosInText == 19 |
|
7237 && param.iPen.iX == 10 |
|
7238 && param.iOutputGlyphs == 1 |
|
7239 && param.iOutput[0].iCode == 0x1EAE); |
|
7240 |
|
7241 // 10: Capital A with breve with combining acute |
|
7242 param.iPosInText = 19; |
|
7243 param.iPen.iX = param.iPen.iY = 0; |
|
7244 r = iTestFont->GetCharacterPosition(param); |
|
7245 TEST(r && param.iPosInText == 21 |
|
7246 && param.iPen.iX == 10 |
|
7247 && param.iOutputGlyphs == 1 |
|
7248 && param.iOutput[0].iCode == 0x1EAE); |
|
7249 |
|
7250 // 11: Capital A with combining acute with combining breve |
|
7251 param.iPosInText = 21; |
|
7252 param.iPen.iX = param.iPen.iY = 0; |
|
7253 r = iTestFont->GetCharacterPosition(param); |
|
7254 TEST(r && param.iPosInText == 24 |
|
7255 && param.iPen.iX == 10 |
|
7256 && param.iOutputGlyphs == 3 |
|
7257 && param.iOutput[0].iCode == 0x0041 |
|
7258 && param.iOutput[1].iCode == 0x0301 |
|
7259 && param.iOutput[2].iCode == 0x0306); |
|
7260 |
|
7261 // 12: Capital A with combining dot below with combining breve |
|
7262 param.iPosInText = 24; |
|
7263 param.iPen.iX = param.iPen.iY = 0; |
|
7264 r = iTestFont->GetCharacterPosition(param); |
|
7265 TEST(r && param.iPosInText == 27 |
|
7266 && param.iPen.iX == 10 |
|
7267 && param.iOutputGlyphs == 1 |
|
7268 && param.iOutput[0].iCode == 0x1EB6); |
|
7269 |
|
7270 // 13: Capital A with dot below with combining breve |
|
7271 param.iPosInText = 27; |
|
7272 param.iPen.iX = param.iPen.iY = 0; |
|
7273 r = iTestFont->GetCharacterPosition(param); |
|
7274 TEST(r && param.iPosInText == 29 |
|
7275 && param.iPen.iX == 10 |
|
7276 && param.iOutputGlyphs == 1 |
|
7277 && param.iOutput[0].iCode == 0x1EB6); |
|
7278 |
|
7279 // 14: Capital A with breve with combining dot below |
|
7280 param.iPosInText = 29; |
|
7281 param.iPen.iX = param.iPen.iY = 0; |
|
7282 r = iTestFont->GetCharacterPosition(param); |
|
7283 TEST(r && param.iPosInText == 31 |
|
7284 && param.iPen.iX == 10 |
|
7285 && param.iOutputGlyphs == 2 |
|
7286 && param.iOutput[0].iCode == 0x0102 |
|
7287 && param.iOutput[1].iCode == 0x0323); |
|
7288 |
|
7289 // 15: Capital A with combining circumflex with combining acute |
|
7290 param.iPosInText = 31; |
|
7291 param.iPen.iX = param.iPen.iY = 0; |
|
7292 r = iTestFont->GetCharacterPosition(param); |
|
7293 TEST(r && param.iPosInText == 34 |
|
7294 && param.iPen.iX == 10 |
|
7295 && param.iOutputGlyphs == 1 |
|
7296 && param.iOutput[0].iCode == 0x1EBE); |
|
7297 |
|
7298 // 16: Capital A with circumflex with combining acute |
|
7299 param.iPosInText = 34; |
|
7300 param.iPen.iX = param.iPen.iY = 0; |
|
7301 r = iTestFont->GetCharacterPosition(param); |
|
7302 TEST(r && param.iPosInText == 36 |
|
7303 && param.iPen.iX == 10 |
|
7304 && param.iOutputGlyphs == 1 |
|
7305 && param.iOutput[0].iCode == 0x1EBE); |
|
7306 |
|
7307 // 17: Capital O with combining horn with combing hook above |
|
7308 param.iPosInText = 36; |
|
7309 param.iPen.iX = param.iPen.iY = 0; |
|
7310 r = iTestFont->GetCharacterPosition(param); |
|
7311 TEST(r && param.iPosInText == 39 |
|
7312 && param.iPen.iX == 10 |
|
7313 && param.iOutputGlyphs == 1 |
|
7314 && param.iOutput[0].iCode == 0x1EDE); |
|
7315 |
|
7316 // 18: Capital O with horn with combing hook above |
|
7317 param.iPosInText = 39; |
|
7318 param.iPen.iX = param.iPen.iY = 0; |
|
7319 r = iTestFont->GetCharacterPosition(param); |
|
7320 TEST(r && param.iPosInText == 41 |
|
7321 && param.iPen.iX == 10 |
|
7322 && param.iOutputGlyphs == 1 |
|
7323 && param.iOutput[0].iCode == 0x1EDE); |
|
7324 } |
|
7325 |
|
7326 |
|
7327 void CTGlyphSelection::TestNonBmpCharsL() |
|
7328 { |
|
7329 // create a font store for testing |
|
7330 CFontStore* fontStore = CFontStore::NewL(&User::Heap()); |
|
7331 |
|
7332 //load all ecom implemented rasterizer dlls. installs the rasterizer. |
|
7333 LoadOpenFontLibraries(fontStore); |
|
7334 // test font preparation |
|
7335 fontStore->iKPixelWidthInTwips = 11860; //This value is default |
|
7336 |
|
7337 //add any required font files |
|
7338 TUid err = fontStore->AddFileL(KTestGB18030FontFile); |
|
7339 |
|
7340 TFontSpec testGB18030FontSpec(KTestGB18030FontFaceName,200); |
|
7341 |
|
7342 CFbsBitmap* bmp = new(ELeave) CFbsBitmap; |
|
7343 |
|
7344 TInt ret = bmp->Create(TSize(100,100),EGray2); |
|
7345 if (ret == KErrNotSupported) |
|
7346 return; |
|
7347 else |
|
7348 User::LeaveIfError(ret); |
|
7349 |
|
7350 CFbsBitmapDevice* device = NULL; |
|
7351 TRAPD(err2,device = CFbsBitmapDevice::NewL(bmp)); |
|
7352 TEST(err2 == KErrNone); |
|
7353 |
|
7354 CFbsBitGc* gc = NULL; |
|
7355 User::LeaveIfError(device->CreateContext(gc)); |
|
7356 // Font file Creation |
|
7357 CFbsFont* gb18030Font = NULL; |
|
7358 User::LeaveIfError(device->GetNearestFontToDesignHeightInTwips(gb18030Font,testGB18030FontSpec)); |
|
7359 gc->UseFont(gb18030Font); |
|
7360 CleanupStack::PushL(gb18030Font); |
|
7361 |
|
7362 //Testcode for GB18030 |
|
7363 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7364 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4077")); |
|
7365 TestNonBmpCharsInGB18030(gb18030Font); |
|
7366 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7367 |
|
7368 CleanupStack::Pop(gb18030Font); |
|
7369 |
|
7370 //Cleaning the memory |
|
7371 delete bmp; |
|
7372 delete device; |
|
7373 delete gc; |
|
7374 fontStore->RemoveFile(err); |
|
7375 delete fontStore; |
|
7376 REComSession::FinalClose(); |
|
7377 } |
|
7378 |
|
7379 |
|
7380 void CTGlyphSelection::TestTextDirection() |
|
7381 /** |
|
7382 This method is a test case to test GetCharacterPosition() correctly |
|
7383 produces glyph bounding boxes and utilizes various pen offsets in |
|
7384 a horizontal and vertical context. |
|
7385 */ |
|
7386 { |
|
7387 TBool r; |
|
7388 TBuf<20> testText(0); |
|
7389 CFont::TPositionParam param; |
|
7390 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7391 |
|
7392 testText.SetLength(5); |
|
7393 testText[0] = 'a'; |
|
7394 testText[1] = 'B'; |
|
7395 testText[2] = 'c'; |
|
7396 testText[3] = ' '; |
|
7397 testText[4] = '1'; |
|
7398 param.iText.Set(testText); |
|
7399 |
|
7400 // 1: Test horizontal text pen advancement & bounds |
|
7401 param.iDirection = CFont::EHorizontal; |
|
7402 param.iPosInText = 0; |
|
7403 param.iPen.iX = param.iPen.iY = 0; |
|
7404 r = iTestFont->GetCharacterPosition(param); |
|
7405 TEST(r && param.iPosInText == 1 |
|
7406 && param.iPen == TPoint(10,0) |
|
7407 && param.iOutputGlyphs == 1 |
|
7408 && param.iOutput[0].iCode == 'a' |
|
7409 && param.iOutput[0].iBounds.iTl == TPoint(0,-10) |
|
7410 && param.iOutput[0].iBounds.iBr == TPoint(10,2)); |
|
7411 // add check for bounds |
|
7412 |
|
7413 // 2: Test horizontal text pen advancement with +ve pen offset |
|
7414 param.iPosInText = 4; |
|
7415 param.iPen.iX = 20; |
|
7416 param.iPen.iY = 12; |
|
7417 r = iTestFont->GetCharacterPosition(param); |
|
7418 TEST(r && param.iPosInText == 5 |
|
7419 && param.iPen == TPoint(30,12) |
|
7420 && param.iOutputGlyphs == 1 |
|
7421 && param.iOutput[0].iCode == '1' |
|
7422 && param.iOutput[0].iBounds.iTl == TPoint(20,2) |
|
7423 && param.iOutput[0].iBounds.iBr == TPoint(30,14)); |
|
7424 |
|
7425 // 3: Test horizontal text pen advancement with -ve pen offset |
|
7426 param.iPosInText = 4; |
|
7427 param.iPen.iX = -10; |
|
7428 param.iPen.iY = -24; |
|
7429 r = iTestFont->GetCharacterPosition(param); |
|
7430 TEST(r && param.iPosInText == 5 |
|
7431 && param.iPen == TPoint(0,-24) |
|
7432 && param.iOutputGlyphs == 1 |
|
7433 && param.iOutput[0].iCode == '1' |
|
7434 && param.iOutput[0].iBounds.iTl == TPoint(-10,-34) |
|
7435 && param.iOutput[0].iBounds.iBr == TPoint(0,-22)); |
|
7436 |
|
7437 // 4: Test vertical text pen advancement & bounds |
|
7438 param.iDirection = CFont::EVertical; |
|
7439 param.iPosInText = 1; |
|
7440 param.iPen.iX = param.iPen.iY = 0; |
|
7441 r = iTestFont->GetCharacterPosition(param); |
|
7442 TEST(r && param.iPosInText == 2 |
|
7443 && param.iPen == TPoint(0,12) |
|
7444 && param.iOutputGlyphs == 1 |
|
7445 && param.iOutput[0].iCode == 'B' |
|
7446 && param.iOutput[0].iBounds.iTl == TPoint(0,0) |
|
7447 && param.iOutput[0].iBounds.iBr == TPoint(10,12)); |
|
7448 |
|
7449 // 5: Test vertical text pen advancement with +ve pen offset |
|
7450 param.iPosInText = 4; |
|
7451 param.iPen.iX = 20; |
|
7452 param.iPen.iY = 12; |
|
7453 r = iTestFont->GetCharacterPosition(param); |
|
7454 TEST(r && param.iPosInText == 5 |
|
7455 && param.iPen == TPoint(20,24) |
|
7456 && param.iOutputGlyphs == 1 |
|
7457 && param.iOutput[0].iCode == '1' |
|
7458 && param.iOutput[0].iBounds.iTl == TPoint(20,12) |
|
7459 && param.iOutput[0].iBounds.iBr == TPoint(30,24)); |
|
7460 |
|
7461 // 6: Test vertical text pen advancement with -ve pen offset |
|
7462 param.iPosInText = 4; |
|
7463 param.iPen.iX = -10; |
|
7464 param.iPen.iY = -24; |
|
7465 r = iTestFont->GetCharacterPosition(param); |
|
7466 TEST(r && param.iPosInText == 5 |
|
7467 && param.iPen == TPoint(-10,-12) |
|
7468 && param.iOutputGlyphs == 1 |
|
7469 && param.iOutput[0].iCode == '1' |
|
7470 && param.iOutput[0].iBounds.iTl == TPoint(-10,-24) |
|
7471 && param.iOutput[0].iBounds.iBr == TPoint(0,-12)); |
|
7472 } |
|
7473 |
|
7474 void CTGlyphSelection::TestAllUnicodeChars() |
|
7475 /** |
|
7476 This method is a test case to test GetCharacterPosition() correctly |
|
7477 processes all the characters in the Unicode code space 0x0000 to |
|
7478 0xffff. |
|
7479 */ |
|
7480 { |
|
7481 TBool r; |
|
7482 TBuf<8> testText(0); |
|
7483 CFont::TPositionParam param; |
|
7484 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7485 |
|
7486 TInt errors = 0; |
|
7487 testText.SetLength(1); |
|
7488 for (TUint i = 0xd802; i <= 0xffff; i++) |
|
7489 { |
|
7490 testText[0] = (TText16) i; |
|
7491 if (i==0x1b) continue; // Skip as CTestFont designed to fail here r==0. |
|
7492 param.iText.Set(testText); |
|
7493 param.iDirection = CFont::EHorizontal; |
|
7494 param.iPosInText = 0; |
|
7495 param.iPen.iX = param.iPen.iY = 0; |
|
7496 r = iTestFont->GetCharacterPosition(param); |
|
7497 if (!r || param.iPosInText != 1) |
|
7498 { |
|
7499 errors++; |
|
7500 //RDebug::Print(_L("%04x(%d,%d,%d), "), i, r, param.iPosInText, param.iOutputGlyphs ); |
|
7501 //if (errors%8 == 0) |
|
7502 // RDebug::Print(_L("\n")); |
|
7503 } |
|
7504 } |
|
7505 |
|
7506 TEST (errors == 0); |
|
7507 } |
|
7508 |
|
7509 /** Tests that ligatures (presently just Lam-Alef in Arabic) work correctly |
|
7510 when diacritics are required on one, both or neither character comprising the |
|
7511 ligature. */ |
|
7512 void CTGlyphSelection::TestLigaturesWithDiacritics() |
|
7513 { |
|
7514 // independent letters |
|
7515 const TText KAlef = 0x627; |
|
7516 const TText KLam = 0x644; |
|
7517 const TText KBeh = 0x628; |
|
7518 // dependent marks |
|
7519 const TText KFatha = 0x64E; |
|
7520 const TText KDamma = 0x64F; |
|
7521 // ligature forms |
|
7522 const TText KLamAlefIsolated = 0xFEFB; |
|
7523 const TText KLamAlefFinal = 0xFEFC; |
|
7524 |
|
7525 struct TTestCase |
|
7526 { |
|
7527 // Logical order input. |
|
7528 TText iInputL[8]; |
|
7529 // Visual order input, should be equivalent to iInputL. |
|
7530 TText iInputV[8]; |
|
7531 // Which cluster to test |
|
7532 TInt iClusterUnderTestStartL; |
|
7533 TInt iClusterUnderTestStartV; |
|
7534 // Expected glyphs to appear (in any order, but...) |
|
7535 TInt iGlyphs[8]; |
|
7536 // ...number of glyphs from the start of iGlyphs that |
|
7537 // are in order of their expected x-coordinates (of their |
|
7538 // centres) |
|
7539 TInt iGlyphsInOrder; |
|
7540 }; |
|
7541 const TTestCase KTestCases[] = |
|
7542 { |
|
7543 {{KLam, KAlef, 0}, {KAlef, KLam, 0}, |
|
7544 0, 0, {KLamAlefIsolated, 0}, 1}, |
|
7545 {{KBeh, KLam, KAlef, KBeh, 0}, {KBeh, KAlef, KLam, KBeh, 0}, |
|
7546 1, 1, {KLamAlefFinal, 0}, 1}, |
|
7547 {{KLam, KFatha, KAlef, 0}, {KAlef, KLam, KFatha, 0}, |
|
7548 0, 0, {KLamAlefIsolated, KFatha, 0}, 1}, |
|
7549 {{KBeh, KLam, KFatha, KAlef, KBeh, 0}, {KBeh, KAlef, KLam, KFatha, KBeh, 0}, |
|
7550 1, 1, {KLamAlefFinal, KFatha, 0}, 1}, |
|
7551 {{KLam, KAlef, KDamma, 0}, {KAlef, KDamma, KLam, 0}, |
|
7552 0, 0, {KLamAlefIsolated, KDamma, 0}, 1}, |
|
7553 {{KBeh, KLam, KAlef, KDamma, KBeh, 0}, {KBeh, KAlef, KDamma, KLam, KBeh, 0}, |
|
7554 1, 1, {KLamAlefFinal, KDamma, 0}, 1}, |
|
7555 {{KLam, KFatha, KAlef, KDamma, 0}, {KAlef, KDamma, KLam, KFatha, 0}, |
|
7556 0, 0, {KDamma, KFatha, KLamAlefIsolated, 0}, 2}, |
|
7557 {{KBeh, KLam, KFatha, KAlef, KDamma, KBeh, 0}, |
|
7558 {KBeh, KAlef, KDamma, KLam, KFatha, KBeh, 0}, |
|
7559 1, 1, {KDamma, KFatha, KLamAlefFinal, 0}, 2}, |
|
7560 }; |
|
7561 TBuf<8> input; |
|
7562 CFont::TPositionParam param; |
|
7563 for (TInt testCase = 0; |
|
7564 testCase != sizeof(KTestCases)/sizeof(KTestCases[0]); |
|
7565 ++testCase) |
|
7566 { |
|
7567 const TTestCase& t = KTestCases[testCase]; |
|
7568 for (TInt logical = 0; logical != 2; ++logical) |
|
7569 { |
|
7570 const TText* in = logical? |
|
7571 t.iInputL : t.iInputV; |
|
7572 input.Zero(); |
|
7573 while (*in) |
|
7574 input.Append(*in++); |
|
7575 param.iText.Set(input); |
|
7576 param.iPosInText = logical? |
|
7577 t.iClusterUnderTestStartL : t.iClusterUnderTestStartV; |
|
7578 param.iFlags = static_cast<TUint16>(logical? |
|
7579 CFont::TPositionParam::EFLogicalOrder : 0); |
|
7580 param.iPen.SetXY(0, 0); |
|
7581 TBool r = iTestFont->GetCharacterPosition(param); |
|
7582 TEST(r); |
|
7583 TInt currentX = KMinTInt; |
|
7584 TInt expectedGlyphNo = 0; |
|
7585 while (t.iGlyphs[expectedGlyphNo] != 0) |
|
7586 { |
|
7587 // FInd the expected glyph in the output. |
|
7588 TInt outputGlyph = 0; |
|
7589 while (outputGlyph != param.iOutputGlyphs |
|
7590 && static_cast<TInt>(param.iOutput[outputGlyph].iCode) |
|
7591 != t.iGlyphs[expectedGlyphNo]) |
|
7592 { |
|
7593 ++outputGlyph; |
|
7594 } |
|
7595 TEST(outputGlyph < param.iOutputGlyphs); |
|
7596 TInt x = param.iOutput[outputGlyph].iBounds.Center().iX; |
|
7597 TEST(t.iGlyphsInOrder <= expectedGlyphNo |
|
7598 || currentX < x); |
|
7599 currentX = x; |
|
7600 ++expectedGlyphNo; |
|
7601 } |
|
7602 TEST(expectedGlyphNo == param.iOutputGlyphs); |
|
7603 } |
|
7604 } |
|
7605 } |
|
7606 |
|
7607 #if defined(__GCC32__) |
|
7608 typedef wchar_t __TText; |
|
7609 #elif defined(__VC32__) |
|
7610 typedef TUint16 __TText; |
|
7611 #elif defined(__CW32__) |
|
7612 typedef TUint16 __TText; |
|
7613 #elif !defined(__TText_defined) |
|
7614 #error no typedef for __TText |
|
7615 #endif |
|
7616 const __TText* KLatinNoSideBearings = L"ABCDE"; |
|
7617 const __TText* KLatinLeftSideBearing = L"WABCD"; |
|
7618 const __TText* KLatinRightSideBearing = L"ABCDW"; |
|
7619 const __TText* KLatinBothSideBearings = L"WABCW"; |
|
7620 const __TText* KArabicAlefWaw = L"\x627\x648"; |
|
7621 const __TText* KArabicWawAlef = L"\x648\x627"; |
|
7622 const __TText* KGb18030NoSideBearings = L"\xD840\xDC00xyz\xD87E\xDE1D"; |
|
7623 const __TText* KGb18030LeftSideBearings = L"W\xD840\xDC00xy\xD87E\xDE1D"; |
|
7624 const __TText* KGb18030RightSideBearings = L"\xD840\xDC00xy\xD87E\xDE1DW"; |
|
7625 const __TText* KGb18030BothSideBearings = L"W\xD840\xDC00x\xD87E\xDE1DW"; |
|
7626 struct TMeasureTextTest |
|
7627 { |
|
7628 const __TText* iText; |
|
7629 TInt iExpectedAdvanceLogical; |
|
7630 TInt iExpectedAdvanceL2R; |
|
7631 TInt iExpectedBoundsL2RLeft; |
|
7632 TInt iExpectedBoundsL2RRight; |
|
7633 TInt iExpectedBoundsL2RTop; |
|
7634 TInt iExpectedBoundsL2RBottom; |
|
7635 TInt iExpectedAdvanceR2L; |
|
7636 TInt iExpectedBoundsR2LLeft; |
|
7637 TInt iExpectedBoundsR2LRight; |
|
7638 TInt iExpectedBoundsR2LTop; |
|
7639 TInt iExpectedBoundsR2LBottom; |
|
7640 }; |
|
7641 const TMeasureTextTest KMeasureTextResults[] = |
|
7642 { |
|
7643 {KLatinNoSideBearings, 50, 50, 0, 50, -10, 2, 50, 0, 50, -10, 2}, |
|
7644 {KLatinLeftSideBearing, 50, 50, -1, 50, -10, 2, 50, 0, 51, -10, 2}, |
|
7645 {KLatinRightSideBearing, 50, 50, 0, 51, -10, 2, 50, -1, 50, -10, 2}, |
|
7646 {KLatinBothSideBearings, 50, 50, -1, 51, -10, 2, 50, -1, 51, -10, 2}, |
|
7647 {KArabicAlefWaw, 20, 20, 0, 20, -10, 2, 20, -5, 20, -10, 2}, |
|
7648 {KArabicWawAlef, 20, 20, -5, 20, -10, 2, 20, 0, 20, -10, 2}, |
|
7649 // ones containing surrogate pairs |
|
7650 {KGb18030NoSideBearings, 50, 50, 0, 50, -10, 2, 50, 0, 50, -10, 2}, |
|
7651 {KGb18030LeftSideBearings, 50, 50, -1, 50, -10, 2, 50, 0, 51, -10, 2}, |
|
7652 {KGb18030RightSideBearings, 50, 50, 0, 51, -10, 2, 50, -1, 50, -10, 2}, |
|
7653 {KGb18030BothSideBearings, 50, 50, -1, 51, -10, 2, 50, -1, 51, -10, 2}, |
|
7654 }; |
|
7655 /** Tests CFont::MeasureText */ |
|
7656 void CTGlyphSelection::TestMeasureText() |
|
7657 { |
|
7658 CFont::TMeasureTextInput input; |
|
7659 CFont::TMeasureTextOutput output; |
|
7660 TInt advance; |
|
7661 for (TInt i = 0; |
|
7662 i != sizeof(KMeasureTextResults)/sizeof(KMeasureTextResults[0]); ++i) |
|
7663 { |
|
7664 TPtrC text(reinterpret_cast<const TText16*>( |
|
7665 KMeasureTextResults[i].iText)); |
|
7666 advance = iTestFont->MeasureText(text, &input, &output); |
|
7667 TEST(advance == KMeasureTextResults[i].iExpectedAdvanceLogical); |
|
7668 input.iFlags = CFont::TMeasureTextInput::EFVisualOrder; |
|
7669 advance = iTestFont->MeasureText(text, &input, &output); |
|
7670 TEST(advance == KMeasureTextResults[i].iExpectedAdvanceL2R); |
|
7671 TEST(output.iBounds.iTl.iX == KMeasureTextResults[i].iExpectedBoundsL2RLeft); |
|
7672 TEST(output.iBounds.iBr.iX == KMeasureTextResults[i].iExpectedBoundsL2RRight); |
|
7673 TEST(output.iBounds.iTl.iY == KMeasureTextResults[i].iExpectedBoundsL2RTop); |
|
7674 TEST(output.iBounds.iBr.iY == KMeasureTextResults[i].iExpectedBoundsL2RBottom); |
|
7675 input.iFlags = CFont::TMeasureTextInput::EFVisualOrderRightToLeft; |
|
7676 advance = iTestFont->MeasureText(text, &input, &output); |
|
7677 TEST(advance == KMeasureTextResults[i].iExpectedAdvanceR2L); |
|
7678 TEST(output.iBounds.iTl.iX == KMeasureTextResults[i].iExpectedBoundsR2LLeft); |
|
7679 TEST(output.iBounds.iBr.iX == KMeasureTextResults[i].iExpectedBoundsR2LRight); |
|
7680 TEST(output.iBounds.iTl.iY == KMeasureTextResults[i].iExpectedBoundsR2LTop); |
|
7681 TEST(output.iBounds.iBr.iY == KMeasureTextResults[i].iExpectedBoundsR2LBottom); |
|
7682 } |
|
7683 |
|
7684 INFO_PRINTF1(_L("Test fix for INC086257 - EFIncludePenPositionInBoundsCheck")); |
|
7685 // left-to-right w/o flag and bounds set to just fit string disregarding sidebearings |
|
7686 input.iFlags = 0; |
|
7687 input.iMaxBounds = 50; |
|
7688 iTestFont->MeasureText(_L("XXXXX"), &input, &output); |
|
7689 TEST(output.iChars == 5); |
|
7690 // set flag, string should no longer fit (break happens) |
|
7691 input.iFlags = CFont::TMeasureTextInput::EFIncludePenPositionInBoundsCheck; |
|
7692 iTestFont->MeasureText(_L("XXXXX"), &input, &output); |
|
7693 TEST(output.iChars == 4); |
|
7694 // right-to-left w/o flag and bounds set to just fit string disregarding sidebearings |
|
7695 input.iFlags = CFont::TMeasureTextInput::EFVisualOrderRightToLeft; |
|
7696 iTestFont->MeasureText(_L("\x5EA\x5EA\x5EA\x5EA\x5EA"), &input, &output); |
|
7697 TEST(output.iChars == 5); |
|
7698 // set flag, string should no longer fit (break happens) |
|
7699 input.iFlags |= CFont::TMeasureTextInput::EFIncludePenPositionInBoundsCheck; |
|
7700 iTestFont->MeasureText(_L("\x5EA\x5EA\x5EA\x5EA\x5EA"), &input, &output); |
|
7701 TEST(output.iChars == 4); |
|
7702 // top-to-bottom w/o flag and bounds set to just fit string disregarding endbearings |
|
7703 input.iFlags = 0; |
|
7704 input.iMaxBounds = 60; |
|
7705 input.iDirection = CFont::EVertical; |
|
7706 iTestFont->MeasureText(_L("\x304B\x304B\x304B\x304B\x304B"), &input, &output); |
|
7707 TEST(output.iChars == 5); |
|
7708 // set flag, string should no longer fit (break happens) |
|
7709 input.iFlags = CFont::TMeasureTextInput::EFIncludePenPositionInBoundsCheck; |
|
7710 iTestFont->MeasureText(_L("\x304B\x304B\x304B\x304B\x304B"), &input, &output); |
|
7711 TEST(output.iChars == 4); |
|
7712 } |
|
7713 |
|
7714 void CTGlyphSelection::RunTestCaseL(TInt aCurTestCase) |
|
7715 /** |
|
7716 This method will execute each test case method in the class |
|
7717 logging its progress as it does so. |
|
7718 */ |
|
7719 { |
|
7720 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); |
|
7721 switch(aCurTestCase) |
|
7722 { |
|
7723 case 1: |
|
7724 /** |
|
7725 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0200 |
|
7726 */ |
|
7727 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0200")); |
|
7728 INFO_PRINTF1(_L("Test API Boundaries")); |
|
7729 TestApiBoundaries(); |
|
7730 break; |
|
7731 case 2: |
|
7732 /** |
|
7733 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0201 |
|
7734 */ |
|
7735 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0201")); |
|
7736 INFO_PRINTF1(_L("Test CTRL Chars")); |
|
7737 TestCtrlCharsIgnored(); |
|
7738 break; |
|
7739 case 3: |
|
7740 /** |
|
7741 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0202 |
|
7742 */ |
|
7743 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0202")); |
|
7744 INFO_PRINTF1(_L("Test Latin Chars")); |
|
7745 TestLatinChars(); |
|
7746 break; |
|
7747 case 4: |
|
7748 /** |
|
7749 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0203 |
|
7750 */ |
|
7751 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0203")); |
|
7752 INFO_PRINTF1(_L("Test Soft Hypen Char")); |
|
7753 TestSoftHyphen(); |
|
7754 break; |
|
7755 case 5: |
|
7756 /** |
|
7757 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0204 |
|
7758 */ |
|
7759 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0204")); |
|
7760 INFO_PRINTF1(_L("Test Surrogate Pairs")); |
|
7761 TestSurrogates(); |
|
7762 INFO_PRINTF1(_L("Test Supplementary Chars")); |
|
7763 TestNonBmpCharsL(); |
|
7764 break; |
|
7765 case 6: |
|
7766 /** |
|
7767 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0205 |
|
7768 */ |
|
7769 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0205")); |
|
7770 INFO_PRINTF1(_L("Test Combining Latin Chars")); |
|
7771 TestCombiningLatinChars(); |
|
7772 break; |
|
7773 case 7: |
|
7774 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0221")); |
|
7775 INFO_PRINTF1(_L("Test Vietnamese Chars")); |
|
7776 TestVietnameseChars(); |
|
7777 break; |
|
7778 case 8: |
|
7779 /** |
|
7780 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0206 |
|
7781 */ |
|
7782 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0206")); |
|
7783 INFO_PRINTF1(_L("Test Vertical/Horizontal Text Bounds")); |
|
7784 TestTextDirection(); |
|
7785 break; |
|
7786 case 9: |
|
7787 /** |
|
7788 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0207 |
|
7789 */ |
|
7790 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0207")); |
|
7791 INFO_PRINTF1(_L("Test All Unicode Characters")); |
|
7792 TestAllUnicodeChars(); |
|
7793 break; |
|
7794 case 10: |
|
7795 /** |
|
7796 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0208 |
|
7797 */ |
|
7798 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0208")); |
|
7799 INFO_PRINTF1(_L("Test Ligatures with Diacritics")); |
|
7800 TestLigaturesWithDiacritics(); |
|
7801 break; |
|
7802 case 11: |
|
7803 /** |
|
7804 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0209 |
|
7805 */ |
|
7806 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0209")); |
|
7807 INFO_PRINTF1(_L("Test CFont::MeasureText()")); |
|
7808 TestMeasureText(); |
|
7809 break; |
|
7810 case 12: |
|
7811 /** |
|
7812 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0210 |
|
7813 */ |
|
7814 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0210")); |
|
7815 INFO_PRINTF1(_L("Test Indic Glyphs")); |
|
7816 TestIndicCharsL(); |
|
7817 break; |
|
7818 case 13: |
|
7819 /** |
|
7820 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0211 |
|
7821 */ |
|
7822 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0211")); |
|
7823 INFO_PRINTF1(_L("Test Thai Rendering")); |
|
7824 ExecuteThaiTests(); |
|
7825 break; |
|
7826 case 14: |
|
7827 /** |
|
7828 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0212 |
|
7829 */ |
|
7830 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0212")); |
|
7831 INFO_PRINTF1(_L("Test isolated Combining Latin Chars")); |
|
7832 TestIsolatedCombiningLatinChars(); |
|
7833 break; |
|
7834 case 15: |
|
7835 /** |
|
7836 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0213 |
|
7837 */ |
|
7838 INFO_PRINTF1(_L("Test Indic Gurmukhi and Malayalam Chars")); |
|
7839 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0213")); |
|
7840 ExecuteIndicGurmukhiMalayalamTests(); |
|
7841 break; |
|
7842 case 16: |
|
7843 /** |
|
7844 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CIT-0214 |
|
7845 */ |
|
7846 INFO_PRINTF1(_L("Test Rendering Context")); |
|
7847 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-SYSLIB-GDI-CIT-0214")); |
|
7848 TestContextInShapeInfo(); |
|
7849 break; |
|
7850 case 17: |
|
7851 TestComplete(); |
|
7852 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); |
|
7853 ((CTGlyphSelectionStep*)iStep)->CloseTMSGraphicsStep(); |
|
7854 break; |
|
7855 } |
|
7856 ((CTGlyphSelectionStep*)iStep)->RecordTestResultL(); |
|
7857 } |
|
7858 |
|
7859 void CTGlyphSelection::TestPerformance() |
|
7860 /** |
|
7861 This method tests the performance of the API under test |
|
7862 by executing a 10000 cycles of each test case. |
|
7863 **/ |
|
7864 { |
|
7865 TStopWatch profile; |
|
7866 INFO_PRINTF1(_L("Test Performance...")); |
|
7867 |
|
7868 profile.Start(); |
|
7869 for (TInt i = 0; i < 10000; i++) |
|
7870 { |
|
7871 TestCtrlCharsIgnored(); |
|
7872 TestLatinChars(); |
|
7873 TestSoftHyphen(); |
|
7874 TestSurrogates(); |
|
7875 TestCombiningLatinChars(); |
|
7876 TestTextDirection(); |
|
7877 |
|
7878 } |
|
7879 TUint numMilliSecs = profile.Stop(); |
|
7880 |
|
7881 INFO_PRINTF3(_L("Performance test end %d.%d s\n"),numMilliSecs/1000,numMilliSecs%1000); |
|
7882 } |
|
7883 |
|
7884 |
|
7885 void CTGlyphSelection::TestThai_SimpleChars() |
|
7886 /** |
|
7887 This routine tests individual Thai base characters pumping them |
|
7888 through the CFont::GetCharacterPosition() API. |
|
7889 */ |
|
7890 { |
|
7891 TBool r; |
|
7892 CFont::TPositionParam param; |
|
7893 param.iDirection = CFont::EHorizontal; |
|
7894 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7895 TBuf<5> testText(0); |
|
7896 testText.SetLength(1); |
|
7897 param.iText.Set(testText); |
|
7898 |
|
7899 for (TUint i=0; Thai_SimpleChars[i] != 0xFFFF; i++) |
|
7900 { |
|
7901 testText[0] = Thai_SimpleChars[i]; |
|
7902 param.iPosInText = 0; |
|
7903 param.iPen.iX = param.iPen.iY = 0; |
|
7904 |
|
7905 r = iTestFont->GetCharacterPosition(param); |
|
7906 |
|
7907 TEST(r && param.iPosInText == 1 |
|
7908 && param.iPen.iX == 10 |
|
7909 && param.iOutputGlyphs == 1 |
|
7910 && param.iOutput[0].iCode == Thai_SimpleChars[i]); |
|
7911 } |
|
7912 } |
|
7913 |
|
7914 |
|
7915 void CTGlyphSelection::TestThai_ValidGlyphClusters() |
|
7916 /** |
|
7917 This routine tests combining sequences of Thai base & mark |
|
7918 characters pumping them through the CFont::GetCharacterPosition() API. |
|
7919 The sequences mainly test the correct formation of Thay Glyph clusters |
|
7920 and the PUA substutions that take place. |
|
7921 */ |
|
7922 { |
|
7923 TInt failures=0; |
|
7924 TBool r; |
|
7925 CFont::TPositionParam param; |
|
7926 param.iDirection = CFont::EHorizontal; |
|
7927 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7928 |
|
7929 for (TUint i=0; Thai_ValidGlyphClusters[i].iTextLen != -1; i++) |
|
7930 { |
|
7931 TBuf<8> testText(Thai_ValidGlyphClusters[i].iText); |
|
7932 param.iText.Set(testText); |
|
7933 param.iPosInText = Thai_ValidGlyphClusters[i].iPosInText; |
|
7934 param.iPen.iX = param.iPen.iY = 0; |
|
7935 |
|
7936 r = iTestFont->GetCharacterPosition(param); |
|
7937 |
|
7938 if (r && param.iPosInText == Thai_ValidGlyphClusters[i].oPosInText |
|
7939 && param.iOutputGlyphs == Thai_ValidGlyphClusters[i].oOutputLen) |
|
7940 { |
|
7941 for (TInt j=0; j<Thai_ValidGlyphClusters[i].oOutputLen; j++) |
|
7942 { |
|
7943 if (param.iOutput[j].iCode != Thai_ValidGlyphClusters[i].oOutput[j]) |
|
7944 { |
|
7945 INFO_PRINTF4(_L("FAILURE: Glyph code invariance, Complex TEST(%d), %x != %x\n"), i, param.iOutput[j].iCode, Thai_ValidGlyphClusters[i].oOutput[j]); |
|
7946 failures++; |
|
7947 break; |
|
7948 } |
|
7949 } |
|
7950 } |
|
7951 else |
|
7952 { |
|
7953 INFO_PRINTF2(_L("FAILURE: Bad output result from GetCharacterPosition, Complex TEST(%d)\n"), i); |
|
7954 failures++; |
|
7955 } |
|
7956 } |
|
7957 |
|
7958 TEST(failures == 0); |
|
7959 } |
|
7960 |
|
7961 |
|
7962 void CTGlyphSelection::TestThai_InvalidGlyphClusters() |
|
7963 /** |
|
7964 This routine tests Thai base & mark cluster boundaries to ensure where |
|
7965 requried the KUnicodeDottedCircle char is used when an invalid sequence is |
|
7966 processed. Test data from the global Thai_GlyphClusterBoundaries |
|
7967 variable is pumped through the CFont::GetCharacterPosition() API. |
|
7968 */ |
|
7969 { |
|
7970 TInt failures=0; |
|
7971 TBool r; |
|
7972 CFont::TPositionParam param; |
|
7973 param.iDirection = CFont::EHorizontal; |
|
7974 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
7975 |
|
7976 for (TUint i=0; Thai_GlyphClusterBoundaries[i].iTextLen != -1; i++) |
|
7977 { |
|
7978 TBuf<8> testText(Thai_GlyphClusterBoundaries[i].iText); |
|
7979 param.iText.Set(testText); |
|
7980 |
|
7981 for (TUint k=0; k<2; k++) |
|
7982 { |
|
7983 if (Thai_GlyphClusterBoundaries[i].oOut[k].iPosInText == -1) |
|
7984 continue; |
|
7985 |
|
7986 param.iPosInText = Thai_GlyphClusterBoundaries[i].oOut[k].iPosInText; |
|
7987 param.iPen.iX = param.iPen.iY = 0; |
|
7988 |
|
7989 r = iTestFont->GetCharacterPosition(param); |
|
7990 |
|
7991 if (r && param.iPosInText == Thai_GlyphClusterBoundaries[i].oOut[k].oPosInText |
|
7992 && param.iOutputGlyphs == Thai_GlyphClusterBoundaries[i].oOut[k].oOutputLen) |
|
7993 { |
|
7994 for (TInt j=0; j<Thai_GlyphClusterBoundaries[i].oOut[k].oOutputLen; j++) |
|
7995 { |
|
7996 if (!(param.iOutput[j].iCode == Thai_GlyphClusterBoundaries[i].oOut[k].oOutput[j])) |
|
7997 { |
|
7998 INFO_PRINTF5(_L("FAILURE: Glyph code invariance, Complex TEST(%d,%d), %x != %x\n"), i, k, param.iOutput[j].iCode, Thai_GlyphClusterBoundaries[i].oOut[k].oOutput[j]); |
|
7999 failures++; |
|
8000 break; |
|
8001 } |
|
8002 } |
|
8003 } |
|
8004 else |
|
8005 { |
|
8006 INFO_PRINTF3(_L("FAILURE: Bad output result from GetCharacterPosition, Complex TEST(%d,%d)\n"), i, k); |
|
8007 failures++; |
|
8008 } |
|
8009 |
|
8010 } |
|
8011 } |
|
8012 |
|
8013 if (failures) |
|
8014 RDebug::Print(_L("TOTAL FAILURES: %d\n"), failures); |
|
8015 TEST(failures == 0); |
|
8016 } |
|
8017 |
|
8018 /** |
|
8019 @SYMTestCaseID GRAPHICS-SYSLIB-GDI-CT-4062 |
|
8020 @SYMTestCaseDesc Tests that a punctuation character following the special-case |
|
8021 character Thai SaraAm is rendered as a punctuation, not |
|
8022 another SaraAm character. |
|
8023 @SYMTestPriority High |
|
8024 @SYMTestActions Compare input string and corresponding output glyph codes |
|
8025 @SYMTestExpectedResults In this case, the string and the codes should match. |
|
8026 @SYMDEF INC118424 |
|
8027 */ |
|
8028 void CTGlyphSelection::TestThai_INC118424() |
|
8029 { |
|
8030 CFont::TPositionParam param; |
|
8031 param.iDirection = CFont::EHorizontal; |
|
8032 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
8033 |
|
8034 //punctuation after SaraAm |
|
8035 TestGlyphs(iTestFont,param,_L("\xE04\xE33:\?>"),_L("\xE04\xE33:\?>")); |
|
8036 } |
|
8037 |
|
8038 /** |
|
8039 This fuction tests Indic Gurmukhi and Malayalam support |
|
8040 */ |
|
8041 void CTGlyphSelection::ExecuteIndicGurmukhiMalayalamTests() |
|
8042 { |
|
8043 // create a font store for testing |
|
8044 CFontStore* fontStore = CFontStore::NewL(&User::Heap()); |
|
8045 |
|
8046 //load all ecom implemented rasterizer dlls. installs the rasterizer. |
|
8047 LoadOpenFontLibraries(fontStore); |
|
8048 // test font preparation |
|
8049 fontStore->iKPixelWidthInTwips = 11860; //This value is default |
|
8050 |
|
8051 //add any required font files |
|
8052 TUid err1 = fontStore->AddFileL(KTestIndicFontFile); |
|
8053 |
|
8054 TFontSpec testIndicFontSpec(KTestIndicFontFaceName,200); |
|
8055 |
|
8056 CFbsBitmap* bmp = new(ELeave) CFbsBitmap; |
|
8057 |
|
8058 TInt ret = bmp->Create(TSize(100,100),EGray2); |
|
8059 if (ret == KErrNotSupported) |
|
8060 return; |
|
8061 else |
|
8062 User::LeaveIfError(ret); |
|
8063 |
|
8064 CFbsBitmapDevice* device = NULL; |
|
8065 TRAPD(err2,device = CFbsBitmapDevice::NewL(bmp)); |
|
8066 TEST(err2 == KErrNone); |
|
8067 |
|
8068 CFbsBitGc* gc = NULL; |
|
8069 User::LeaveIfError(device->CreateContext(gc)); |
|
8070 |
|
8071 // Font file Creation |
|
8072 CFbsFont* indicFont = NULL; |
|
8073 User::LeaveIfError(device->GetNearestFontToDesignHeightInTwips(indicFont,testIndicFontSpec)); |
|
8074 gc->UseFont(indicFont); |
|
8075 CleanupStack::PushL(indicFont); |
|
8076 |
|
8077 //Testcode for Kannada, Marathi,Gujarati,Bengali language |
|
8078 // Test Indic Gurmukhi digit. |
|
8079 TInt err; |
|
8080 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8081 if (err!=KErrNone) |
|
8082 INFO_PRINTF1(_L("Failed to record test result")); |
|
8083 INFO_PRINTF1(_L("Test Indic Gurmukhi digits")); |
|
8084 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4063")); |
|
8085 TestGurmukhiDigit( *indicFont ); |
|
8086 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8087 if (err!=KErrNone) |
|
8088 INFO_PRINTF1(_L("Failed to record test result")); |
|
8089 INFO_PRINTF1(_L("Test Indic Gurmukhi and Latin")); |
|
8090 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4064")); |
|
8091 TestGurmukhiAndLatin( *indicFont ); |
|
8092 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8093 if (err!=KErrNone) |
|
8094 INFO_PRINTF1(_L("Failed to record test result")); |
|
8095 INFO_PRINTF1(_L("Test Indic DEF102858 on Gurmukhi")); |
|
8096 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4065")); |
|
8097 TestGurmukhiModifierAfterConsonantViramaZWJ( *indicFont ); |
|
8098 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8099 if (err!=KErrNone) |
|
8100 INFO_PRINTF1(_L("Failed to record test result")); |
|
8101 INFO_PRINTF1(_L("Test Indic Gurmukhi consonant leading")); |
|
8102 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4066")); |
|
8103 TestGurmukhiWithConsonantInitial( *indicFont ); |
|
8104 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8105 if (err!=KErrNone) |
|
8106 INFO_PRINTF1(_L("Failed to record test result")); |
|
8107 INFO_PRINTF1(_L("Test Indic Gurmukhi vowel leading")); |
|
8108 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4068")); |
|
8109 TestGurmukhiWithVowelInitial( *indicFont ); |
|
8110 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8111 if (err!=KErrNone) |
|
8112 INFO_PRINTF1(_L("Failed to record test result")); |
|
8113 INFO_PRINTF1(_L("Test Indic Malayalam digits")); |
|
8114 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4067")); |
|
8115 TestMalayalamDigit( *indicFont ); |
|
8116 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8117 if (err!=KErrNone) |
|
8118 INFO_PRINTF1(_L("Failed to record test result")); |
|
8119 INFO_PRINTF1(_L("Test Indic Malayalam and Latin")); |
|
8120 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4069")); |
|
8121 TestMalayalamAndLatin( *indicFont ); |
|
8122 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8123 if (err!=KErrNone) |
|
8124 INFO_PRINTF1(_L("Failed to record test result")); |
|
8125 INFO_PRINTF1(_L("Test Indic DEF102858 on Malayalam")); |
|
8126 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4070")); |
|
8127 TestMalayalamModifierAfterConsonantViramaZWJ( *indicFont ); |
|
8128 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8129 if (err!=KErrNone) |
|
8130 INFO_PRINTF1(_L("Failed to record test result")); |
|
8131 INFO_PRINTF1(_L("Test Indic Malayalam consonant leading")); |
|
8132 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4071")); |
|
8133 TestMalayalamWithConsonantInitial( *indicFont ); |
|
8134 TRAP(err,((CTGlyphSelectionStep*)iStep)->RecordTestResultL()); |
|
8135 if (err!=KErrNone) |
|
8136 INFO_PRINTF1(_L("Failed to record test result")); |
|
8137 INFO_PRINTF1(_L("Test Indic Malayalam vowel leading")); |
|
8138 ((CTGlyphSelectionStep*)iStep)->SetTestStepID(_L("GRAPHICS-TI18N-GDI-CIT-4072")); |
|
8139 TestMalayalamWithVowelInitial( *indicFont ); |
|
8140 CleanupStack::Pop(indicFont); |
|
8141 |
|
8142 //Cleaning the memory |
|
8143 delete bmp; |
|
8144 delete device; |
|
8145 delete gc; |
|
8146 fontStore->RemoveFile(err1); |
|
8147 delete fontStore; |
|
8148 REComSession::FinalClose(); |
|
8149 } |
|
8150 /** |
|
8151 This function tests the Thai Font Rendering feature of the CFont class |
|
8152 in the GDI.dll and in particular the modifications made to |
|
8153 CFont::GetCharacterPosition() to support the Unicocde Thai code page. |
|
8154 First introduced during the Sirocco project (A3.1.1) |
|
8155 @SYMFssID Graphics/GDI/GDI/1 |
|
8156 @SYMFssID Graphics/GDI/GDI/2 |
|
8157 */ |
|
8158 |
|
8159 void CTGlyphSelection::ExecuteThaiTests() |
|
8160 { |
|
8161 // Test individual Thai digits, letters and sign characters. |
|
8162 INFO_PRINTF1(_L("Test Thai simple charecters")); |
|
8163 TestThai_SimpleChars(); |
|
8164 |
|
8165 // Test complex Thai char sequences. |
|
8166 INFO_PRINTF1(_L("Test valid Thai glyph clusters")); |
|
8167 TestThai_ValidGlyphClusters(); |
|
8168 |
|
8169 // Test Thai glyph cluster boundaries. |
|
8170 INFO_PRINTF1(_L("Test invalid Thai glyph clusters")); |
|
8171 TestThai_InvalidGlyphClusters(); |
|
8172 |
|
8173 // Test Thai SaraAm-punctuation exception. |
|
8174 INFO_PRINTF1(_L("Test fix for INC118424")); |
|
8175 TestThai_INC118424(); |
|
8176 } |
|
8177 |
|
8178 |
|
8179 /* |
|
8180 * Note: |
|
8181 * This is just a easy way to help generate the test data info |
|
8182 * Any new added test data should do manually check firstly to check the correction before using this function |
|
8183 */ |
|
8184 // #define GEN_GURMUKHIMALAYALAMTESTDATA |
|
8185 void CTGlyphSelection::GenerateGurmukhiMalayalamData( const TDesC& filename, const TTestInput_PositionParam6* testArray, const CFbsFont& aFont ) |
|
8186 { |
|
8187 RFile file; |
|
8188 file.Replace( iFs, filename, EFileWrite ); |
|
8189 |
|
8190 CFont::TPositionParam param; |
|
8191 param.iDirection = CFont::EHorizontal; |
|
8192 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
8193 RShapeInfo shapeInfo; |
|
8194 |
|
8195 if (!testArray) |
|
8196 { |
|
8197 return; |
|
8198 } |
|
8199 |
|
8200 for (TUint i = 0; testArray[i].iTextLen != -1; i++) |
|
8201 { |
|
8202 TTestInput_PositionParam6 currentArray = testArray[i]; |
|
8203 TBuf<8> testText(testArray[i].iText); |
|
8204 param.iText.Set(testText); |
|
8205 |
|
8206 TBuf8<256> datatext; |
|
8207 datatext.SetLength(0); |
|
8208 //{ 1, {0x0a66}, { {0, 1, 1, {0x12fe} }, {-1, 1, 1, {0} } } }, |
|
8209 datatext.Format(_L8("{ %d, {"), testArray[i].iTextLen); // 1, |
|
8210 |
|
8211 for (TUint i = 0; i<testText.Length(); i++) |
|
8212 { |
|
8213 TBuf8<8> tmp; |
|
8214 tmp.Format(_L8("0x%x, "), currentArray.iText[i]); // {0x0a66}, |
|
8215 datatext.Append(tmp); |
|
8216 } |
|
8217 datatext = datatext.Left(datatext.Length()-2); |
|
8218 datatext.Append(_L8("}, { ")); |
|
8219 |
|
8220 if (shapeInfo.IsOpen()) |
|
8221 shapeInfo.Close(); |
|
8222 |
|
8223 for (TUint k = 0; k < 6; k++) |
|
8224 { |
|
8225 param.iPosInText = k; |
|
8226 param.iPen.iX = param.iPen.iY = 0; |
|
8227 TBool ret = aFont.GetCharacterPosition2(param, shapeInfo); |
|
8228 if (0 == param.iOutputGlyphs) |
|
8229 continue; |
|
8230 |
|
8231 TBuf8<16> tmp; |
|
8232 tmp.Format(_L8("{%d, %d, %d, {"), k, param.iPosInText, param.iOutputGlyphs); |
|
8233 datatext.Append(tmp); |
|
8234 |
|
8235 for (TInt j = 0; j < param.iOutputGlyphs; j++) |
|
8236 { |
|
8237 TText16 aCode = param.iOutput[j].iCode; |
|
8238 TBuf8<128> tmp; |
|
8239 tmp.Format(_L8("0x%x, "), aCode); |
|
8240 datatext.Append(tmp); |
|
8241 } //end for |
|
8242 datatext = datatext.Left(datatext.Length()-2); |
|
8243 datatext.Append(_L8("}}, ")); |
|
8244 } //end for |
|
8245 datatext.Append(_L8(" {-1, 1, 1, {0}} } }, \n")); |
|
8246 |
|
8247 file.Write(datatext); |
|
8248 } //end for |
|
8249 |
|
8250 file.Close(); |
|
8251 return; |
|
8252 } |
|
8253 |
|
8254 void CTGlyphSelection::DoEachGurmukhiMalayalamCase( const TTestInput_PositionParam6* testArray, const CFbsFont& aFont ) |
|
8255 { |
|
8256 TInt failures=0; |
|
8257 TBool r; |
|
8258 CFont::TPositionParam param; |
|
8259 param.iDirection = CFont::EHorizontal; |
|
8260 param.iFlags = CFont::TPositionParam::EFLogicalOrder; |
|
8261 RShapeInfo shapeInfo; |
|
8262 |
|
8263 if ( !testArray ) |
|
8264 { |
|
8265 return; |
|
8266 } |
|
8267 |
|
8268 for (TUint i=0; testArray[i].iTextLen != -1; i++) |
|
8269 { |
|
8270 TBuf<8> testText(testArray[i].iText); |
|
8271 param.iText.Set(testText); |
|
8272 if(shapeInfo.IsOpen()) |
|
8273 shapeInfo.Close(); |
|
8274 |
|
8275 for (TUint k=0; k<6; k++) |
|
8276 { |
|
8277 // If it's end of sequence |
|
8278 if ( testArray[i].oOut[k].iPosInText == -1) |
|
8279 break; |
|
8280 |
|
8281 param.iPosInText = testArray[i].oOut[k].iPosInText; |
|
8282 param.iPen.iX = param.iPen.iY = 0; |
|
8283 |
|
8284 r = aFont.GetCharacterPosition2(param, shapeInfo); |
|
8285 |
|
8286 if (r && param.iPosInText == testArray[i].oOut[k].oPosInText |
|
8287 && param.iOutputGlyphs == testArray[i].oOut[k].oOutputLen) |
|
8288 { |
|
8289 for (TInt j=0; j<testArray[i].oOut[k].oOutputLen; j++) |
|
8290 { |
|
8291 // Trim off the highest bit |
|
8292 TText16 aCode = param.iOutput[j].iCode; |
|
8293 if (!( aCode == testArray[i].oOut[k].oOutput[j])) |
|
8294 { |
|
8295 INFO_PRINTF5(_L("FAILURE: Glyph code invariance, Complex TEST(%d,%d), %x != %x\n"), i, k, param.iOutput[j].iCode, testArray[i].oOut[k].oOutput[j]); |
|
8296 failures++; |
|
8297 break; |
|
8298 } |
|
8299 } |
|
8300 } |
|
8301 else |
|
8302 { |
|
8303 INFO_PRINTF4(_L("FAILURE: Bad output result from GetCharacterPosition, Complex TEST(%d,%d,%d)\n"), i, k, param.iOutputGlyphs); |
|
8304 failures++; |
|
8305 } |
|
8306 |
|
8307 } |
|
8308 } |
|
8309 |
|
8310 if (failures) |
|
8311 RDebug::Print(_L("TOTAL FAILURES: %d\n"), failures); |
|
8312 TEST(failures == 0); |
|
8313 } |
|
8314 /** |
|
8315 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4063 |
|
8316 @SYMTestCaseDesc Case to check Gurmukhi digit support |
|
8317 @SYMTestPriority High |
|
8318 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8319 1.Pass Gurmukhi digit (0xa66 ~ 0x0a6f) sequence |
|
8320 2.Pass any Consonant + Gurmukhi digit sequence |
|
8321 3.Pass any Consonant + Gurmukhi digit + Matra sequence |
|
8322 4.Repetitive callss with Unicode sequence from the first 3 action items |
|
8323 5.Pass Modifer + digit sequence |
|
8324 6.Pass Vowel and digit sequence |
|
8325 7.Pass Virama and digit sequence |
|
8326 @SYMTestExpectedResults 1.Glyph count, character count for digit is 1 for each digit, and glyph indices depends on font |
|
8327 2.Digit is recognized as a separate syllable |
|
8328 3.Matra and digit is not combined together |
|
8329 4.The shaper returned the same result as first 3 results |
|
8330 5.digit is recognized, and not combined with Modifier |
|
8331 6.digit is recognized, and not combined with Vowel. |
|
8332 7.digit is recognized, and not combined with Virama. |
|
8333 @SYMPREQ 1922: Gurmukhi support |
|
8334 */ |
|
8335 void CTGlyphSelection::TestGurmukhiDigit( const CFbsFont& aFont ) |
|
8336 { |
|
8337 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8338 |
|
8339 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8340 _LIT(KValidFontPath, "c:\\GurmukhiDigit.txt"); |
|
8341 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8342 #endif |
|
8343 } |
|
8344 |
|
8345 /** |
|
8346 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4064 |
|
8347 @SYMTestCaseDesc case to check if shaper can render Gurmukhi with other implemented Indic scripts and Latin |
|
8348 @SYMTestPriority High |
|
8349 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8350 1.Pass Gurmukhi sentence and Latin to the function |
|
8351 2.Pass Latin and Gurmukhi setence. |
|
8352 3.Pass syllable, Latin and syllable |
|
8353 4.Pass phoneme, Latin and phoneme |
|
8354 5.Pass Gurmukhi syllable and other Indic scripts together. |
|
8355 6.Pass Gurmukhi phoneme and other Indic script phoneme |
|
8356 @SYMTestExpectedResults Gurumuki and Latin characters donĄ¯t mess up. Gurmukhi phoneme doesnĄ¯t combine with Latin into a new syllable, |
|
8357 Gurmukhi phoneme doesnĄ¯t form a syllable with other Indic script. |
|
8358 @SYMPREQ 1922: Gurmukhi support |
|
8359 */ |
|
8360 void CTGlyphSelection::TestGurmukhiAndLatin( const CFbsFont& aFont ) |
|
8361 { |
|
8362 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_GurmukhiAndLatin, aFont ); |
|
8363 |
|
8364 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8365 _LIT(KValidFontPath, "c:\\GurmukhiAndLatin.txt"); |
|
8366 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8367 #endif |
|
8368 } |
|
8369 |
|
8370 /** |
|
8371 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4065 |
|
8372 @SYMTestCaseDesc case to check Gurmukhi modifier after Consonant, Virama, ZWJ |
|
8373 @SYMTestPriority High |
|
8374 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8375 1.Pass Consonant + Virama + ZWJ + Modifier |
|
8376 @SYMTestExpectedResults Modifier is part of the syllable. |
|
8377 @SYMPREQ 1922: Gurmukhi support, make sure DEF102858 fixing does not cause side effect |
|
8378 */ |
|
8379 void CTGlyphSelection::TestGurmukhiModifierAfterConsonantViramaZWJ( const CFbsFont& aFont ) |
|
8380 { |
|
8381 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_GurmukhiModifierAfterConsonantViramaZWJ, aFont ); |
|
8382 |
|
8383 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8384 _LIT(KValidFontPath, "c:\\GurmukhiModifierAfterConsonantViramaZWJ.txt"); |
|
8385 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8386 #endif |
|
8387 } |
|
8388 |
|
8389 /** |
|
8390 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4066 |
|
8391 @SYMTestCaseDesc case to check syllable with consonant in initial position |
|
8392 @SYMTestPriority High |
|
8393 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following using data from above requirements, each requirement above gives a consonant leading Unicode sequence. Each sequence falls into one of the following structure, then pass it to the calling. |
|
8394 1.Pass consonant and Nukta sequence |
|
8395 2.Pass two consonant and dependent vowel sequences to shaper, save both returned results. The consonant is first sequence is difference with that of the second sequence.. |
|
8396 3.Pass consonant and matra /i/ t sequence |
|
8397 4.Pass the following Consonant, Virama and HA sequence |
|
8398 Another sequence: Consonant , Virama and RA |
|
8399 Another sequence: Consonant, Virama and VA |
|
8400 Another sequence: Consonant, Virama and YA |
|
8401 5.Pass Consonant and Addak sequence to shaper |
|
8402 Pass Consonant, Addak and Consonant to shaper |
|
8403 6.Pass Consonant and BINDI sequence: |
|
8404 Sequence1:Consonant and BINDI, |
|
8405 Sequence2: Consonant, dependent vowel which is shown to the right of base consonant and BINDI, |
|
8406 Sequence3: Consonant, dependent vowel which is shown to the top of the base consonant and BINDI |
|
8407 Pass Consonant and TIPPI sequence: |
|
8408 Sequence1: Consonant and TIPPI, |
|
8409 Sequence2: Consonant, dependent vowel which is shown to the left of the base consonant and TIPPI. |
|
8410 Sequence3: Consonant, dependent vowel which is shown to the bottom of the base consonant and TIPPI. |
|
8411 7.Pass Nukta, equavalent consonant, Nukta sequence to shaper sepeartely, save both result |
|
8412 @SYMTestExpectedResults 1.nukta is combined to the base consonant according to the returned shape info |
|
8413 2.The matra position is different between two ShapeText calls according to the returned shaped info. |
|
8414 3.matra /i/ is combined to the left of the base consonant in position |
|
8415 4.HA, RA, VA is on bottom of the base consonant and subscripted, YA in final form according to the returned shape info. |
|
8416 5.Addak is on top of consonant, addak belongs to the consonant precedes it. |
|
8417 6.BINDI is on top, TIPPI is on bottom |
|
8418 7.The combinationĄ¯s character count, glyph count, glyph indices info is the same as the single nuktaĄ¯s |
|
8419 @SYMPREQ 1922: Gurmukhi support |
|
8420 */ |
|
8421 void CTGlyphSelection::TestGurmukhiWithConsonantInitial( const CFbsFont& aFont ) |
|
8422 { |
|
8423 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_GurmukhiConsonantLeading, aFont ); |
|
8424 |
|
8425 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8426 _LIT(KValidFontPath, "c:\\GurmukhiWithConsonantInitial.txt"); |
|
8427 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8428 #endif |
|
8429 } |
|
8430 |
|
8431 |
|
8432 /** |
|
8433 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4067 |
|
8434 @SYMTestCaseDesc Case to check Malayalam digit support |
|
8435 @SYMTestPriority High |
|
8436 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8437 1.Pass Malayalam digit (0xd66 ~ 0x0d6f) sequence |
|
8438 2.Pass any Consonant + Malayalam digit sequence |
|
8439 3.Pass any Consonant + Malayalam digit + Matra sequence |
|
8440 4.Repetitive callss with Unicode sequence from the first 3 action items |
|
8441 5.Pass Modifer + digit sequence |
|
8442 6.Pass Vowel and digit sequence |
|
8443 7.Pass Virama and digit sequence |
|
8444 @SYMTestExpectedResults 1.Glyph count, character count for digit is 1 for each digit, and glyph indices depends on font |
|
8445 2.Digit is recognized as a separate syllable |
|
8446 3.Matra and digit is not combined together |
|
8447 4.The shaper returned the same result as first 3 results |
|
8448 5.digit is recognized, and not combined with Modifier |
|
8449 6.digit is recognized, and not combined with Vowel. |
|
8450 7.digit is recognized, and not combined with Virama. |
|
8451 @SYMPREQ 1922: Malayalam support |
|
8452 */ |
|
8453 void CTGlyphSelection::TestMalayalamDigit( const CFbsFont& aFont ) |
|
8454 { |
|
8455 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_MalayalamDigit, aFont ); |
|
8456 |
|
8457 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8458 _LIT(KValidFontPath, "c:\\MalayalamDigit.txt"); |
|
8459 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8460 #endif |
|
8461 } |
|
8462 |
|
8463 /** |
|
8464 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4068 |
|
8465 @SYMTestCaseDesc case to check syllable with vowel in initial position |
|
8466 @SYMTestPriority High |
|
8467 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following using data from above requirements, |
|
8468 each requirement above gives a vowel leading Unicode sequence. Each sequence falls into one of the following structure, |
|
8469 then pass it to the calling. |
|
8470 1.Pass ARA, IRI to shaper, pass URA sequence |
|
8471 2.Pass valid bearer and vowel pair sequence |
|
8472 Pass invalid bearer and vowel pair sequence |
|
8473 @SYMTestExpectedResults 1.ARA character count is 1, IRI, URA character count is 0 |
|
8474 2.valid combination is combined together, invalid is not combined together |
|
8475 @SYMPREQ 1922: Gurmukhi support |
|
8476 */ |
|
8477 void CTGlyphSelection::TestGurmukhiWithVowelInitial( const CFbsFont& aFont ) |
|
8478 { |
|
8479 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_GurmukhiVowelLeading, aFont ); |
|
8480 |
|
8481 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8482 _LIT(KValidFontPath, "c:\\GurmukhiWithVowelInitial.txt"); |
|
8483 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8484 #endif |
|
8485 } |
|
8486 |
|
8487 /** |
|
8488 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4069 |
|
8489 @SYMTestCaseDesc case to check if shaper can render Malayalam with other implemented Indic scripts and Latin |
|
8490 @SYMTestPriority High |
|
8491 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8492 1.Pass Malayalam sentence and Latin to the function |
|
8493 2.Pass Latin and Gurmukhi setence. |
|
8494 3.Pass syllable, Latin and syllable |
|
8495 4.Pass phoneme, Latin and phoneme |
|
8496 5.Pass Malayalam syllable and other Indic scripts together. |
|
8497 6.Pass Malayalam phoneme and other Indic script phoneme |
|
8498 @SYMTestExpectedResults Malayalam and Latin characters donĄ¯t mess up. Malayalam phoneme doesnĄ¯t combine with Latin into a new syllable, |
|
8499 Malayalam phoneme doesnĄ¯t form a syllable with other Indic script. |
|
8500 @SYMPREQ 1922: Malayalam support |
|
8501 */ |
|
8502 void CTGlyphSelection::TestMalayalamAndLatin( const CFbsFont& aFont ) |
|
8503 { |
|
8504 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_MalayalamAndLatin, aFont ); |
|
8505 |
|
8506 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8507 _LIT(KValidFontPath, "c:\\MalayalamAndLatin.txt"); |
|
8508 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8509 #endif |
|
8510 } |
|
8511 |
|
8512 /** |
|
8513 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4070 |
|
8514 @SYMTestCaseDesc case to check Malayalam modifier after Consonant, Virama, ZWJ |
|
8515 @SYMTestPriority High |
|
8516 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8517 1. Pass Consonant + Virama + ZWJ + Modifier |
|
8518 @SYMTestExpectedResults Modifier is part of the syllable. |
|
8519 @SYMPREQ 1922: Malayalam support, make sure DEF102858 fixing does not cause side effect |
|
8520 */ |
|
8521 void CTGlyphSelection::TestMalayalamModifierAfterConsonantViramaZWJ( const CFbsFont& aFont ) |
|
8522 { |
|
8523 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_MalayalamModifierAfterConsonantViramaZWJ, aFont ); |
|
8524 |
|
8525 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8526 _LIT(KValidFontPath, "c:\\MalayalamModifierAfterConsonantViramaZWJ.txt"); |
|
8527 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8528 #endif |
|
8529 } |
|
8530 |
|
8531 /** |
|
8532 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4071 |
|
8533 @SYMTestCaseDesc case to check syllable with consonant in initial position |
|
8534 @SYMTestPriority High |
|
8535 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following using data from above requirements, |
|
8536 each requirement above gives a consonant leading Unicode sequence. Each sequence falls into one of the following structure, |
|
8537 then pass it to the calling. |
|
8538 1.Pass consonant + vowel single code, and consonant + its split representation to shaper |
|
8539 The following Single representation /Split representation is passed to shaper |
|
8540 0x0d14/0x0d12 + 0x0d57, 0x0d4a/0x0d46 + 0x0d3e, 0x0d4b/0x0d47 + 0x0d3e |
|
8541 0x0d4c/0x0d46 + 0x0d57 |
|
8542 2.Pass two Consonant and dependent Vowel sequences to shaper, save both returned results. |
|
8543 The Consonant is first sequence is difference with that of the second sequence, and the dependent Vowel is identical. |
|
8544 3.Pass Consonant and Matras /-e/, /-ee/, /-ai/ to shaper. |
|
8545 4.Pass Consonant and Matras /-o/, /-oo/, /-au/ to shaper |
|
8546 Pass Consonant and 0x0d4c (first form of Matra /-au/ ) to shaper, |
|
8547 Pass Consonant, 0x0d46 and 0x0d57 (second form of Matra /-au/) to shaper002E |
|
8548 5.Pass Consonant + 0x0d4d + Consonant to shaper |
|
8549 Pass Consonant + Virama + Consonant + 0x0d4d to shaper |
|
8550 6.Pass Consonant (NNA, NA, RA, LA, LLA) + Virama + ZWJ to shaper |
|
8551 Pass KA + Virama + ZWJ to shaper. |
|
8552 Pass other Consonant + Virama + ZWJ to shaper. |
|
8553 7.Pass RA + Virama + ZWJ to shaper, |
|
8554 Pass RRA + Viram + ZWJ to shaper. |
|
8555 8.Pass Chillu ( one of 6 special consontants + Virama + ZWJ) and Vowel to shaper |
|
8556 Pass Chillu and Modifier to shaper |
|
8557 Pass Chillu and Virama to shaper |
|
8558 9.Pass one of (KA, GA, PA, BA, MA, LA, SHA, SA, HA), Virama and LA to shaper |
|
8559 10.Pass CA, Virama and CA to shaper |
|
8560 Pass BA, Virama and BA to shaper |
|
8561 Pass YA, Virama and YA to shaper |
|
8562 Pass VA, Virama and VA to shaper |
|
8563 PASS other Consonant, Virama and the same Consonant to shaper. |
|
8564 11.Pass G.GA, C.CHA, K.TTA, SS.TTA, DD.DDA, NN.NNA, B.DA, B.DHA, P.PA, RR.RRA, SH.SHA, S.SA clusters to shaper. |
|
8565 12.Pass Consonant clusters from REQ1.3.11 to shaper. |
|
8566 13.Pass S.RR.RRA to shaper, |
|
8567 Pass N.RR.RRA to shaper |
|
8568 @SYMTestExpectedResults 1.First sequence is equivalent to the second sequence |
|
8569 2.The dependent vowel position is different between the two sequence |
|
8570 3.The visual position of the Matras is different with the logical order (The same as Keyboard input order). |
|
8571 4.The Matra is split into halves from visual effect. And the second form of Matra /-au/ is recognized the same as the first form of it. |
|
8572 5.0x0d4d is recognized as a Virama in first sequence, itĄ¯s recognized as MATRA (mid-u sound) in the second sequence |
|
8573 6.Virama and ZWJ is interpreted as Chillaksharam for the 6 consonants, for others itĄ¯s not interpreted that way. |
|
8574 7.Both sequences will interprete RA Chillu. |
|
8575 8.The combining character should not combine with Chillu. |
|
8576 9.LA takes subscript shape. |
|
8577 10.CA, BA, YA, VA double should result in a ligature, other consonants donĄ¯t. |
|
8578 11.The latter consonant in the cluster becomes a miniature subscript. |
|
8579 12.sequence forms a ligature. |
|
8580 13.sequence forms a ligature |
|
8581 @SYMPREQ 1922: Malayalam support |
|
8582 */ |
|
8583 void CTGlyphSelection::TestMalayalamWithConsonantInitial( const CFbsFont& aFont ) |
|
8584 { |
|
8585 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_MalayalamConsonantLeading, aFont ); |
|
8586 |
|
8587 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8588 _LIT(KValidFontPath, "c:\\MalayalamWithConsonantInitial.txt"); |
|
8589 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8590 #endif |
|
8591 } |
|
8592 |
|
8593 /** |
|
8594 @SYMTestCaseID GRAPHICS-TI18N-GDI-CIT-4072 |
|
8595 @SYMTestCaseDesc case to check if shaper can render Malayalam with other implemented Indic scripts and Latin |
|
8596 @SYMTestPriority High |
|
8597 @SYMTestActions Call to CFont::GetCharacterPosition2/CFont::MeasureText to check the following |
|
8598 1.Pass Malayalam sentence and Latin to the function |
|
8599 2.Pass Latin and Malayalam setence. |
|
8600 3.Pass syllable, Latin and syllable |
|
8601 4.Pass phoneme, Latin and phoneme |
|
8602 5.Pass Malayalam syllable and other Indic scripts together. |
|
8603 6.Pass Malayalam phoneme and other Indic script phoneme |
|
8604 @SYMTestExpectedResults Malayalam and Latin characters donĄ¯t mess up. Malayalam phoneme doesnĄ¯t combine with Latin into a new syllable, |
|
8605 Malayalam phoneme doesnĄ¯t form a syllable with other Indic script. |
|
8606 @SYMPREQ 1922: Malayalam support |
|
8607 */ |
|
8608 void CTGlyphSelection::TestMalayalamWithVowelInitial( const CFbsFont& aFont ) |
|
8609 { |
|
8610 DoEachGurmukhiMalayalamCase( (TTestInput_PositionParam6*)Indic_MalayalamVowelLeading, aFont ); |
|
8611 |
|
8612 #ifdef GEN_GURMUKHIMALAYALAMTESTDATA |
|
8613 _LIT(KValidFontPath, "c:\\MalayalamWithVowelInitial.txt"); |
|
8614 GenerateGurmukhiMalayalamData(KValidFontPath, (TTestInput_PositionParam6*)Indic_GurmukhiDigit, aFont ); |
|
8615 #endif |
|
8616 } |
|
8617 |
|
8618 |
|
8619 //-------------- |
|
8620 |
|
8621 __CONSTRUCT_STEP__(GlyphSelection) |
|
8622 |
|
8623 void CTGlyphSelectionStep::TestSetupL() |
|
8624 { |
|
8625 #ifdef _GLOWCODE_LAUNCH_DELAY |
|
8626 INFO_PRINTF1(_L("Time delay....")); |
|
8627 TTime t1, t2; |
|
8628 t1.UniversalTime(); |
|
8629 t1 += TTimeIntervalSeconds(15); |
|
8630 do |
|
8631 { |
|
8632 t2.UniversalTime(); |
|
8633 } |
|
8634 while (t2 < t1); |
|
8635 #endif |
|
8636 } |