2 * Copyright (c) 2015 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.
21 #include <dali-toolkit/internal/text/character-set-conversion.h>
22 #include <dali-toolkit/internal/text/segmentation.h>
23 #include <dali-toolkit/internal/text/multi-language-support.h>
24 #include <dali-toolkit/internal/text/logical-model-impl.h>
25 #include <dali-toolkit-test-suite-utils.h>
26 #include <dali-toolkit/dali-toolkit.h>
30 using namespace Toolkit;
33 // Tests the following functions with different scripts.
34 // Constructor, destructor and MultilanguageSupport::Get()
35 // void MultilanguageSupport::SetScripts( const Vector<Character>& text, const Vector<LineBreakInfo>& lineBreakInfo, Vector<ScriptRun>& scripts );
36 // void MultilanguageSupport::ValidateFonts( const Vector<Character>& text, const Vector<ScriptRun>& scripts, Vector<FontRun>& fonts );
38 //////////////////////////////////////////////////////////
45 std::string description; ///< Description of the experiment.
46 std::string text; ///< Input text.
47 Vector<ScriptRun> scriptRuns; ///< Expected script runs.
50 struct ValidateFontsData
52 std::string description; ///< Description of the experiment.
53 std::string text; ///< Input text.
56 //////////////////////////////////////////////////////////
58 bool ScriptsTest( const ScriptsData& data )
60 MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get();
62 // 1) Convert to utf32
63 Vector<Character> utf32;
64 utf32.Resize( data.text.size() );
66 const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast<const uint8_t* const>( data.text.c_str() ),
69 utf32.Resize( numberOfCharacters );
71 // 2) Set the line break info.
72 Vector<LineBreakInfo> lineBreakInfo;
73 lineBreakInfo.Resize( numberOfCharacters );
75 SetLineBreakInfo( utf32, lineBreakInfo );
77 // 3) Set the script info.
78 Vector<ScriptRun> scripts;
79 multilanguageSupport.SetScripts( utf32,
83 // 4) Compare the results.
85 if( scripts.Count() != data.scriptRuns.Count() )
87 tet_infoline("ScriptsTest: different number of scripts.");
91 for( unsigned int index = 0u; index < scripts.Count(); ++index )
93 const ScriptRun& scriptRun1 = scripts[index];
94 const ScriptRun& scriptRun2 = data.scriptRuns[index];
96 if( scriptRun1.characterRun.characterIndex != scriptRun2.characterRun.characterIndex )
98 tet_infoline("ScriptsTest: different character index.");
102 if( scriptRun1.characterRun.numberOfCharacters != scriptRun2.characterRun.numberOfCharacters )
104 tet_infoline("ScriptsTest: different number of characters.");
108 if( scriptRun1.script != scriptRun2.script )
110 tet_infoline("ScriptsTest: different script.");
118 bool ValidateFontTest( const ValidateFontsData& data )
120 MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get();
122 // 1) Convert to utf32
123 Vector<Character> utf32;
124 utf32.Resize( data.text.size() );
126 const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast<const uint8_t* const>( data.text.c_str() ),
129 utf32.Resize( numberOfCharacters );
131 // 2) Set the line break info.
132 Vector<LineBreakInfo> lineBreakInfo;
133 lineBreakInfo.Resize( numberOfCharacters );
135 SetLineBreakInfo( utf32, lineBreakInfo );
137 // 3) Set the script info.
138 Vector<ScriptRun> scripts;
139 multilanguageSupport.SetScripts( utf32,
143 Vector<FontRun> fonts;
144 // 4) Validate the fonts
145 multilanguageSupport.ValidateFonts( utf32,
154 int UtcDaliTextMultiLanguageConstructor(void)
156 ToolkitTestApplication application;
157 tet_infoline(" UtcDaliTextMultiLanguageConstructor");
159 MultilanguageSupport multilanguageSupport;
160 DALI_TEST_CHECK( !multilanguageSupport );
162 MultilanguageSupport multilanguageSupport1 = MultilanguageSupport::Get();
163 DALI_TEST_CHECK( multilanguageSupport1 );
165 // To increase coverage.
166 MultilanguageSupport multilanguageSupport2 = MultilanguageSupport::Get();
167 DALI_TEST_CHECK( multilanguageSupport2 );
169 DALI_TEST_CHECK( multilanguageSupport1 == multilanguageSupport2 );
171 tet_result(TET_PASS);
175 int UtcDaliTextMultiLanguageSetScripts(void)
177 ToolkitTestApplication application;
178 tet_infoline(" UtcDaliTextMultiLanguageSetScripts" );
181 Vector<ScriptRun> scriptRuns00;
184 Vector<ScriptRun> scriptRuns01;
185 ScriptRun scriptRun0100 =
189 TextAbstraction::LATIN
191 scriptRuns01.PushBack( scriptRun0100 );
193 const ScriptsData data[] =
206 const unsigned int numberOfTests = 2u;
208 for( unsigned int index = 0u; index < numberOfTests; ++index )
210 if( !ScriptsTest( data[index] ) )
212 tet_result(TET_FAIL);
216 tet_result(TET_PASS);
220 int UtcDaliTextMultiLanguageReplaceScripts(void)
222 ToolkitTestApplication application;
223 tet_infoline(" UtcDaliTextMultiLanguageReplaceScripts");
225 MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get();
227 LogicalModelPtr model = LogicalModel::New();
228 CharacterIndex characterIndex = 0u;
229 Length numberOfCharactersToRemove = 0u;
230 Length numberOfCharactersToInsert = 0u;
232 multilanguageSupport.ReplaceScripts( *model,
234 numberOfCharactersToRemove,
235 numberOfCharactersToInsert );
237 tet_result(TET_PASS);
241 int UtcDaliTextMultiLanguageValidateFonts01(void)
243 ToolkitTestApplication application;
244 tet_infoline(" UtcDaliTextMultiLanguageValidateFonts");
246 const ValidateFontsData data[] =
257 const unsigned int numberOfTests = 2u;
259 for( unsigned int index = 0u; index < numberOfTests; ++index )
261 if( !ValidateFontTest( data[index] ) )
263 tet_result(TET_FAIL);
267 tet_result(TET_PASS);
271 int UtcDaliTextMultiLanguageValidateFonts02(void)
273 ToolkitTestApplication application;
274 tet_infoline(" UtcDaliTextMultiLanguageValidateFonts");
276 MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get();
278 LogicalModelPtr model = LogicalModel::New();
279 CharacterIndex characterIndex = 0u;
280 Length numberOfCharactersToRemove = 0u;
281 Length numberOfCharactersToInsert = 0u;
283 multilanguageSupport.ValidateFonts( *model,
285 numberOfCharactersToRemove,
286 numberOfCharactersToInsert );
288 tet_result(TET_PASS);