2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <toolkit-text-model.h>
28 using namespace Toolkit;
31 // Tests the following functions.
33 // void CreateCharacterToGlyphTable( CharacterIndex startIndex,
34 // Length numberOfCharacters )
36 // void CreateGlyphsPerCharacterTable( CharacterIndex startIndex,
37 // Length numberOfCharacters )
40 //////////////////////////////////////////////////////////
45 struct SetGlyphsPerCharacterData
47 std::string description; ///< Description of the test.
48 std::string text; ///< Input text.
49 unsigned int startIndex; ///< The start index from where the glyphs per character table is set.
50 unsigned int numberOfCharacters; ///< The number of characters to set.
51 unsigned int totalNumberOfCharacters; ///< The total number of characters.
52 unsigned int* glyphsPerCharacter; ///< The number of glyphs per character.
55 struct SetCharacterToGlyphData
57 std::string description; ///< Description of the test.
58 std::string text; ///< Input text.
59 unsigned int startIndex; ///< The start index from where the character to glyph table is set.
60 unsigned int numberOfCharacters; ///< The number of characters to set.
61 unsigned int totalNumberOfCharacters; ///< The total number of characters.
62 unsigned int* glyphsIndices; ///< The glyph indices.
65 bool SetGlyphsPerCharacterTest( const SetGlyphsPerCharacterData& data )
67 // 1) Create the model.
68 LogicalModelPtr logicalModel = LogicalModel::New();
69 VisualModelPtr visualModel = VisualModel::New();
70 Size textArea(100.f, 60.f);
73 CreateTextModel( data.text,
79 // 2) Clear the model.
80 Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
81 Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
83 if( 0u != charactersToGlyph.Count() )
85 // The number of glyphs to be removed.
86 const Length numberOfGlyphs = charactersToGlyph[data.startIndex + data.numberOfCharacters - 1u] + glyphsPerCharacter[data.startIndex + data.numberOfCharacters - 1u] - charactersToGlyph[data.startIndex];
88 charactersToGlyph.Erase( charactersToGlyph.Begin() + data.startIndex,
89 charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters );
90 glyphsPerCharacter.Erase( glyphsPerCharacter.Begin() + data.startIndex,
91 glyphsPerCharacter.Begin() + data.startIndex + data.numberOfCharacters );
93 // Update the character to glyph indices.
94 for( Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
95 endIt = charactersToGlyph.End();
99 *it -= numberOfGlyphs;
103 // 3) Call the CreateGlyphsPerCharacterTable() function
104 visualModel->CreateGlyphsPerCharacterTable( data.startIndex,
105 data.numberOfCharacters );
107 // 4) Compare the results.
108 if( data.totalNumberOfCharacters != glyphsPerCharacter.Count() )
110 std::cout << " Different number of characters : " << glyphsPerCharacter.Count() << ", expected : " << data.totalNumberOfCharacters << std::endl;
114 for( unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i )
116 if( data.glyphsPerCharacter[i] != glyphsPerCharacter[i] )
118 std::cout << " Different number of glyphs for index " << i << std::endl;
119 for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
121 std::cout << glyphsPerCharacter[j] << " ";
123 std::cout << std::endl;
124 std::cout << " expected" << std::endl;
125 for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
127 std::cout << data.glyphsPerCharacter[j] << " ";
129 std::cout << std::endl;
137 bool SetCharacterToGlyphTest( const SetCharacterToGlyphData& data )
139 // 1) Create the model.
140 LogicalModelPtr logicalModel = LogicalModel::New();
141 VisualModelPtr visualModel = VisualModel::New();
142 Size textArea(100.f, 60.f);
145 CreateTextModel( data.text,
151 // 2) Clear the model.
152 Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
153 Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
155 if( 0u != charactersToGlyph.Count() )
157 // The number of glyphs to be removed.
158 const Length numberOfGlyphs = charactersToGlyph[data.startIndex + data.numberOfCharacters - 1u] + glyphsPerCharacter[data.startIndex + data.numberOfCharacters - 1u] - charactersToGlyph[data.startIndex];
160 charactersToGlyph.Erase( charactersToGlyph.Begin() + data.startIndex,
161 charactersToGlyph.Begin() + data.startIndex + data.numberOfCharacters );
163 // Update the character to glyph indices.
164 for( Vector<GlyphIndex>::Iterator it = charactersToGlyph.Begin() + data.startIndex,
165 endIt = charactersToGlyph.End();
169 *it -= numberOfGlyphs;
173 // 3) Call the CreateCharacterToGlyphTable() function
174 visualModel->CreateCharacterToGlyphTable( data.startIndex,
175 data.numberOfCharacters );
177 // 4) Compare the results.
178 if( data.totalNumberOfCharacters != charactersToGlyph.Count() )
180 std::cout << " Different number of character : " << charactersToGlyph.Count() << ", expected : " << data.totalNumberOfCharacters << std::endl;
184 for( unsigned int i = 0u; i < data.totalNumberOfCharacters; ++i )
186 if( data.glyphsIndices[i] != charactersToGlyph[i] )
188 std::cout << " Different number of character to glyph index " << i << std::endl;
189 for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
191 std::cout << charactersToGlyph[j] << " ";
193 std::cout << std::endl;
194 std::cout << " expected" << std::endl;
195 for( unsigned int j = 0; j < data.totalNumberOfCharacters; ++j )
197 std::cout << data.glyphsIndices[j] << " ";
199 std::cout << std::endl;
209 //////////////////////////////////////////////////////////
211 int UtcDaliSetGlyphsPerCharacter(void)
213 ToolkitTestApplication application;
214 tet_infoline(" UtcDaliSetGlyphsPerCharacter");
216 Length glyphsPerCharacter02[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
217 Length glyphsPerCharacter03[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
218 Length glyphsPerCharacter04[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 0u, 1u,
219 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
220 1u, 1u, 1u, 1u, 0u, 1u, 0u, 2u, 1u, 0u,
221 2u, 0u, 2u, 0u, 2u, 1u, 1u, 0u, 0u, 0u,
222 2u, 1u, 1u, 1u, 1u, 1u, 0u, 0u, 2u, 1u,
225 struct SetGlyphsPerCharacterData data[] =
228 "Zero characters text",
236 "Simple 1 to 1 text",
241 glyphsPerCharacter02,
244 "Text with different number of glyphs and characters.",
245 "Hello different world",
249 glyphsPerCharacter03,
252 "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
253 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
257 glyphsPerCharacter04,
260 "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
261 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
265 glyphsPerCharacter04,
268 "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
269 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
273 glyphsPerCharacter04,
276 const unsigned int numberOfTests = 6u;
278 for( unsigned int index = 0u; index < numberOfTests; ++index )
280 if( !SetGlyphsPerCharacterTest( data[index] ) )
282 tet_result(TET_FAIL);
286 tet_result(TET_PASS);
290 int UtcDaliSetCharacterToGlyph(void)
292 ToolkitTestApplication application;
293 tet_infoline(" UtcDaliSetGlyphsPerCharacter");
295 GlyphIndex glyphIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
296 GlyphIndex glyphIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u };
297 GlyphIndex glyphIndices04[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u, 20u,
298 21u, 22u, 23u, 23u, 24u, 24u, 26u, 27u, 27u, 29u, 29u, 31u, 31u, 33u,
299 34u, 35u, 35u, 35u, 35u, 37u, 38u, 39u, 40u, 41u, 42u, 42u, 42u, 44u, 45u, 45u, 47u, 48u };
301 struct SetCharacterToGlyphData data[] =
304 "Zero characters text",
312 "Simple 1 to 1 text",
320 "Text with different number of glyphs and characters.",
321 "Hello different world",
328 "Text paragraphs with different number of glyphs and characters. Update initial paragraphs.",
329 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
336 "Text paragraphs with different number of glyphs and characters. Update mid paragraphs.",
337 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
344 "Text paragraphs with different number of glyphs and characters. Update final paragraphs.",
345 "Hello different world\nनमस्ते दुनिया\nမင်္ဂလာပါကမ္ဘာလောက",
353 const unsigned int numberOfTests = 6u;
355 for( unsigned int index = 0u; index < numberOfTests; ++index )
357 if( !SetCharacterToGlyphTest( data[index] ) )
359 tet_result(TET_FAIL);
363 tet_result(TET_PASS);