From: Paul Wisbey Date: Tue, 23 Jun 2015 09:01:30 +0000 (-0700) Subject: Merge "Improve Selection handle hit region so not above the handle" into devel/master X-Git-Tag: dali_1.0.46~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=e588a3f271c0ad5bcd11c7d246fe48bb9a101932;hp=0daec19363b6c0c28c44859febfcbd203f203c29 Merge "Improve Selection handle hit region so not above the handle" into devel/master --- diff --git a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt index c3b14ab..9324e48 100644 --- a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt @@ -10,6 +10,7 @@ SET(TC_SOURCES utc-Dali-PushButton.cpp utc-Dali-Text-CharacterSetConversion.cpp utc-Dali-Text-Segmentation.cpp + utc-Dali-Text-MultiLanguage.cpp ) # Append list of test harness files (Won't get parsed for test cases) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp new file mode 100644 index 0000000..e907bfb --- /dev/null +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-MultiLanguage.cpp @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include + +#include +#include +#include +#include +#include +#include +#include + + +using namespace Dali; +using namespace Toolkit; +using namespace Text; + +// Tests the following functions with different scripts. +// Constructor, destructor and MultilanguageSupport::Get() +// void MultilanguageSupport::SetScripts( const Vector& text, const Vector& lineBreakInfo, Vector& scripts ); +// void MultilanguageSupport::ValidateFonts( const Vector& text, const Vector& scripts, Vector& fonts ); + +////////////////////////////////////////////////////////// + +namespace +{ + +struct ScriptsData +{ + std::string description; ///< Description of the experiment. + std::string text; ///< Input text. + Vector scriptRuns; ///< Expected script runs. +}; + +struct ValidateFontsData +{ + std::string description; ///< Description of the experiment. + std::string text; ///< Input text. +}; + +////////////////////////////////////////////////////////// + +bool ScriptsTest( const ScriptsData& data ) +{ + MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get(); + + // 1) Convert to utf32 + Vector utf32; + utf32.Resize( data.text.size() ); + + const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), + data.text.size(), + &utf32[0u] ); + utf32.Resize( numberOfCharacters ); + + // 2) Set the line break info. + Vector lineBreakInfo; + lineBreakInfo.Resize( numberOfCharacters ); + + SetLineBreakInfo( utf32, lineBreakInfo ); + + // 3) Set the script info. + Vector scripts; + multilanguageSupport.SetScripts( utf32, + lineBreakInfo, + scripts ); + + // 4) Compare the results. + + if( scripts.Count() != data.scriptRuns.Count() ) + { + tet_infoline("ScriptsTest: different number of scripts."); + return false; + } + + for( unsigned int index = 0u; index < scripts.Count(); ++index ) + { + const ScriptRun& scriptRun1 = scripts[index]; + const ScriptRun& scriptRun2 = data.scriptRuns[index]; + + if( scriptRun1.characterRun.characterIndex != scriptRun2.characterRun.characterIndex ) + { + tet_infoline("ScriptsTest: different character index."); + return false; + } + + if( scriptRun1.characterRun.numberOfCharacters != scriptRun2.characterRun.numberOfCharacters ) + { + tet_infoline("ScriptsTest: different number of characters."); + return false; + } + + if( scriptRun1.script != scriptRun2.script ) + { + tet_infoline("ScriptsTest: different script."); + return false; + } + } + + return true; +} + +bool ValidateFontTest( const ValidateFontsData& data ) +{ + MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get(); + + // 1) Convert to utf32 + Vector utf32; + utf32.Resize( data.text.size() ); + + const uint32_t numberOfCharacters = Utf8ToUtf32( reinterpret_cast( data.text.c_str() ), + data.text.size(), + &utf32[0u] ); + utf32.Resize( numberOfCharacters ); + + // 2) Set the line break info. + Vector lineBreakInfo; + lineBreakInfo.Resize( numberOfCharacters ); + + SetLineBreakInfo( utf32, lineBreakInfo ); + + // 3) Set the script info. + Vector scripts; + multilanguageSupport.SetScripts( utf32, + lineBreakInfo, + scripts ); + + Vector fonts; + // 4) Validate the fonts + multilanguageSupport.ValidateFonts( utf32, + scripts, + fonts ); + + return true; +} + +} // namespace + +int UtcDaliTextMultiLanguageConstructor(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageConstructor"); + + MultilanguageSupport multilanguageSupport; + DALI_TEST_CHECK( !multilanguageSupport ); + + MultilanguageSupport multilanguageSupport1 = MultilanguageSupport::Get(); + DALI_TEST_CHECK( multilanguageSupport1 ); + + // To increase coverage. + MultilanguageSupport multilanguageSupport2 = MultilanguageSupport::Get(); + DALI_TEST_CHECK( multilanguageSupport2 ); + + DALI_TEST_CHECK( multilanguageSupport1 == multilanguageSupport2 ); + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextMultiLanguageSetScripts(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageSetScripts" ); + + // Void text. + Vector scriptRuns00; + + // Hello world. + Vector scriptRuns01; + ScriptRun scriptRun0100 = + { + 0u, + 11u, + TextAbstraction::LATIN + }; + scriptRuns01.PushBack( scriptRun0100 ); + + const ScriptsData data[] = + { + { + "void text", + "", + scriptRuns00, + }, + { + "Easy latin script", + "Hello world", + scriptRuns01, + }, + }; + const unsigned int numberOfTests = 2u; + + for( unsigned int index = 0u; index < numberOfTests; ++index ) + { + if( !ScriptsTest( data[index] ) ) + { + tet_result(TET_FAIL); + } + } + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextMultiLanguageReplaceScripts(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageReplaceScripts"); + + MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get(); + + LogicalModelPtr model = LogicalModel::New(); + CharacterIndex characterIndex = 0u; + Length numberOfCharactersToRemove = 0u; + Length numberOfCharactersToInsert = 0u; + + multilanguageSupport.ReplaceScripts( *model, + characterIndex, + numberOfCharactersToRemove, + numberOfCharactersToInsert ); + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextMultiLanguageValidateFonts01(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageValidateFonts"); + + const ValidateFontsData data[] = + { + { + "void text", + "", + }, + { + "Easy latin script", + "Hello world", + }, + }; + const unsigned int numberOfTests = 2u; + + for( unsigned int index = 0u; index < numberOfTests; ++index ) + { + if( !ValidateFontTest( data[index] ) ) + { + tet_result(TET_FAIL); + } + } + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextMultiLanguageValidateFonts02(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliTextMultiLanguageValidateFonts"); + + MultilanguageSupport multilanguageSupport = MultilanguageSupport::Get(); + + LogicalModelPtr model = LogicalModel::New(); + CharacterIndex characterIndex = 0u; + Length numberOfCharactersToRemove = 0u; + Length numberOfCharactersToInsert = 0u; + + multilanguageSupport.ValidateFonts( *model, + characterIndex, + numberOfCharactersToRemove, + numberOfCharactersToInsert ); + + tet_result(TET_PASS); + END_TEST; +}