X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-BidirectionalSupport.cpp;h=e056f73526ff6d87b40dd4651b3b1091abbb07ce;hp=629e4f3126cc9952ab463dd1c9d8be79bbdba75b;hb=610495b8647d1a25c98bf0773ccc0dd6d1996263;hpb=479693b4fd773eb8888ae401d02b49188293e231 diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-BidirectionalSupport.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-BidirectionalSupport.cpp index 629e4f3..e056f73 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-BidirectionalSupport.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-BidirectionalSupport.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 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. @@ -24,7 +24,7 @@ #include #include #include -#include +#include using namespace Dali; using namespace Toolkit; @@ -38,11 +38,6 @@ using namespace Text; // CharacterIndex startIndex, // Length numberOfCharacters, // Vector& bidirectionalInfo ) -// void ReorderLines( const Vector& bidirectionalInfo, -// CharacterIndex startIndex, -// Length numberOfCharacters, -// Vector& lineRuns, -// Vector& lineInfoRuns ) // bool GetMirroredText( const Vector& text, // Vector& directions, // const Vector& bidirectionalInfo, @@ -50,6 +45,7 @@ using namespace Text; // Length numberOfCharacters, // Vector& mirroredText ) // void GetCharactersDirection( const Vector& bidirectionalInfo, +// Length totalNumberOfCharacters, // CharacterIndex startIndex, // Length numberOfCharacters, // Vector& directions ) @@ -78,18 +74,6 @@ struct BidiLineData unsigned int* visualToLogical; }; -struct ReorderLinesData -{ - std::string description; ///< Description of the test. - std::string text; ///< Input text. - unsigned int startIndex; ///< The index from where the model is updated. - unsigned int numberOfCharacters; ///< The number of characters. - unsigned int numberOfLineInfo; ///< The number or reordered lines. - BidiLineData* bidiLineData; ///< The bidirectional line info. - unsigned int numberOfLines; ///< The number of laid-out lines. - bool* lineDirections; ///< The directions of the lines. -}; - struct GetMirroredTextData { std::string description; ///< Description of the test. @@ -101,18 +85,18 @@ struct GetMirroredTextData struct GetCharactersDirectionData { - std::string description; ///< Description of the test. - std::string text; ///< Input text. - unsigned int startIndex; ///< The index from where the model is updated. - unsigned int numberOfCharacters; ///< The number of characters. - bool* directions; ///< The expected directions. + std::string description; ///< Description of the test. + std::string text; ///< Input text. + unsigned int startIndex; ///< The index from where the model is updated. + unsigned int numberOfCharacters; ///< The number of characters. + bool* directions; ///< The expected directions. + bool markupProcessorEnabled; ///< Enable markup processor to use markup text. }; bool SetBidirectionalInfoTest( const SetBidirectionalInfoData& data ) { // 1) Create the model. - LogicalModelPtr logicalModel; - VisualModelPtr visualModel; + ModelPtr textModel; MetricsPtr metrics; Size textArea(100.f, 60.f); Size layoutSize; @@ -125,9 +109,12 @@ bool SetBidirectionalInfoTest( const SetBidirectionalInfoData& data ) fontDescriptions, options, layoutSize, - logicalModel, - visualModel, - metrics ); + textModel, + metrics, + false ); + + LogicalModelPtr logicalModel = textModel->mLogicalModel; + VisualModelPtr visualModel = textModel->mVisualModel; // 2) Clear the bidirectional paragraph info data. Vector& bidirectionalInfo = logicalModel->mBidirectionalParagraphInfo; @@ -191,159 +178,10 @@ bool SetBidirectionalInfoTest( const SetBidirectionalInfoData& data ) return true; } -/** - * @brief Frees previously allocated bidirectional resources. - * - * @param[in] bidirectionalLineInfo Bidirectional info per line. - * @param[in] startIndex Index to the first line with bidirectional info to be freed. - * @param[in] endIndex Index to the last line with bidirectional info to be freed. - */ -void FreeBidirectionalLineInfoResources( Vector bidirectionalLineInfo, - uint32_t startIndex, - uint32_t endIndex ) -{ - // Free the allocated memory used to store the conversion table in the bidirectional line info run. - for( Vector::Iterator it = bidirectionalLineInfo.Begin() + startIndex, - endIt = bidirectionalLineInfo.Begin() + endIndex; - it != endIt; - ++it ) - { - BidirectionalLineInfoRun& bidiLineInfo = *it; - - free( bidiLineInfo.visualToLogicalMap ); - } -} - -bool ReorderLinesTest( const ReorderLinesData& data ) -{ - // 1) Create the model. - LogicalModelPtr logicalModel; - VisualModelPtr visualModel; - MetricsPtr metrics; - Size textArea(100.f, 300.f); - Size layoutSize; - - // Create the model. - const Vector fontDescriptions; - const LayoutOptions options; - CreateTextModel( data.text, - textArea, - fontDescriptions, - options, - layoutSize, - logicalModel, - visualModel, - metrics ); - - // 2) Clear the bidirectional line info data. - uint32_t startRemoveIndex = logicalModel->mBidirectionalLineInfo.Count(); - uint32_t endRemoveIndex = startRemoveIndex; - ClearCharacterRuns( data.startIndex, - data.startIndex + data.numberOfCharacters - 1u, - logicalModel->mBidirectionalLineInfo, - startRemoveIndex, - endRemoveIndex ); - - // Index to the first index to be removed. - - FreeBidirectionalLineInfoResources( logicalModel->mBidirectionalLineInfo, startRemoveIndex, endRemoveIndex ); - BidirectionalLineInfoRun* bidiLineBuffer = logicalModel->mBidirectionalLineInfo.Begin(); - logicalModel->mBidirectionalLineInfo.Erase( bidiLineBuffer + startRemoveIndex, - bidiLineBuffer + endRemoveIndex ); - - // 3) Call the function ReorderLines() - - ReorderLines( logicalModel->mBidirectionalParagraphInfo, - data.startIndex, - data.numberOfCharacters, - visualModel->mLines, - logicalModel->mBidirectionalLineInfo ); - - // 4) Compare the results. - - if( data.numberOfLineInfo != logicalModel->mBidirectionalLineInfo.Count() ) - { - // Different number of bidirectional lines. - std::cout << " different number of bidi lines : " << logicalModel->mBidirectionalLineInfo.Count() << ", expected : " << data.numberOfLineInfo << std::endl; - for( unsigned int index = 0u; index < logicalModel->mBidirectionalLineInfo.Count(); ++index ) - { - const BidirectionalLineInfoRun& run = logicalModel->mBidirectionalLineInfo[index]; - const BidiLineData& bidiLineData = data.bidiLineData[index]; - - std::cout << " bidi line : " << index << ", index : " << run.characterRun.characterIndex << ", num chars : " << run.characterRun.numberOfCharacters << std::endl; - std::cout << " expected index : " << bidiLineData.characterIndex << ", num chars : " << bidiLineData.numberOfCharacters << std::endl; - } - return false; - } - - for( unsigned int index = 0u; index < data.numberOfLineInfo; ++index ) - { - const BidirectionalLineInfoRun& run = logicalModel->mBidirectionalLineInfo[index]; - const BidiLineData& bidiLineData = data.bidiLineData[index]; - - if( bidiLineData.characterIndex != run.characterRun.characterIndex ) - { - std::cout << " bidi line : " << index << ", index : " << run.characterRun.characterIndex << ", num chars : " << run.characterRun.numberOfCharacters << std::endl; - std::cout << " expected index : " << bidiLineData.characterIndex << ", num chars : " << bidiLineData.numberOfCharacters << std::endl; - return false; - } - if( bidiLineData.numberOfCharacters != run.characterRun.numberOfCharacters ) - { - std::cout << " bidi line : " << index << ", index : " << run.characterRun.characterIndex << ", num chars : " << run.characterRun.numberOfCharacters << std::endl; - std::cout << " expected index : " << bidiLineData.characterIndex << ", num chars : " << bidiLineData.numberOfCharacters << std::endl; - return false; - } - - for( unsigned int i = 0u; i < run.characterRun.numberOfCharacters; ++i ) - { - if( bidiLineData.visualToLogical[i] != run.visualToLogicalMap[i] ) - { - std::cout << " v2l : "; - for( unsigned int i = 0u; i < run.characterRun.numberOfCharacters; ++i ) - { - std::cout << run.visualToLogicalMap[i] << " "; - } - std::cout << std::endl; - std::cout << " expected v2l : "; - for( unsigned int i = 0u; i < run.characterRun.numberOfCharacters; ++i ) - { - std::cout << bidiLineData.visualToLogical[i] << " "; - } - std::cout << std::endl; - - return false; - } - } - } - - if( data.numberOfLines != visualModel->mLines.Count() ) - { - std::cout << "Different number of lines : " << visualModel->mLines.Count() << ", expected : " << data.numberOfLines << std::endl; - - unsigned int index = 0u; - for( Vector::ConstIterator it = visualModel->mLines.Begin(), - endIt = visualModel->mLines.End(); - it != endIt; - ++it, ++index ) - { - const LineRun& line = *it; - - if( line.direction != *( data.lineDirections + index ) ) - { - std::cout << " Different line direction : " << line.direction << ", expected : " << *( data.lineDirections + index ) << std::endl; - return false; - } - } - } - - return true; -} - bool GetMirroredTextTest( const GetMirroredTextData& data ) { // 1) Create the model. - LogicalModelPtr logicalModel; - VisualModelPtr visualModel; + ModelPtr textModel; MetricsPtr metrics; Size textArea(100.f, 60.f); Size layoutSize; @@ -356,9 +194,12 @@ bool GetMirroredTextTest( const GetMirroredTextData& data ) fontDescriptions, options, layoutSize, - logicalModel, - visualModel, - metrics ); + textModel, + metrics, + false ); + + LogicalModelPtr logicalModel = textModel->mLogicalModel; + VisualModelPtr visualModel = textModel->mVisualModel; // 2) Call the GetMirroredText() function for the whole text Vector mirroredText; @@ -416,8 +257,7 @@ bool GetMirroredTextTest( const GetMirroredTextData& data ) bool GetCharactersDirectionTest( const GetCharactersDirectionData& data ) { // 1) Create the model. - LogicalModelPtr logicalModel; - VisualModelPtr visualModel; + ModelPtr textModel; MetricsPtr metrics; Size textArea(100.f, 60.f); Size layoutSize; @@ -430,17 +270,23 @@ bool GetCharactersDirectionTest( const GetCharactersDirectionData& data ) fontDescriptions, options, layoutSize, - logicalModel, - visualModel, - metrics ); + textModel, + metrics, + data.markupProcessorEnabled ); + + LogicalModelPtr logicalModel = textModel->mLogicalModel; + VisualModelPtr visualModel = textModel->mVisualModel; Vector& bidirectionalInfo = logicalModel->mBidirectionalParagraphInfo; // 2) Clear the direction info data. Vector& directions = logicalModel->mCharacterDirections; - directions.Erase( directions.Begin() + data.startIndex, - directions.Begin() + data.startIndex + data.numberOfCharacters ); + if( directions.Count() >= data.startIndex + data.numberOfCharacters ) + { + directions.Erase( directions.Begin() + data.startIndex, + directions.Begin() + data.startIndex + data.numberOfCharacters ); + } // 3) Call GetCharactersDirection() function. @@ -612,193 +458,6 @@ int UtcDaliSetBidirectionalInfo(void) END_TEST; } -int UtcDaliReorderLines(void) -{ - tet_infoline(" UtcDaliSetBidirectionalInfo"); - - unsigned int visualToLogical0301[] = { 0u, 1u, 2u, 3u, 4u, 5u, 9u, 8u, 7u, 6u, 10u }; - unsigned int visualToLogical0302[] = { 3u, 2u, 1u, 0u, 4u, 5u, 6u, 7u, 8u, 9u, 10u }; - unsigned int visualToLogical0303[] = { 0u, 1u, 2u, 3u, 4u }; - unsigned int visualToLogical0304[] = { 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0305[] = { 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0306[] = { 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0307[] = { 13u, 8u, 9u, 10u, 11u, 12u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0308[] = { 5u, 0u, 1u, 2u, 3u, 4u }; - unsigned int visualToLogical0309[] = { 0u, 1u, 2u, 3u, 4u, 5u, 9u, 8u, 7u, 6u, 10u }; - unsigned int visualToLogical0310[] = { 3u, 2u, 1u, 0u, 4u, 5u, 6u, 7u, 8u, 9u, 10u }; - unsigned int visualToLogical0311[] = { 0u, 1u, 2u, 3u, 4u }; - unsigned int visualToLogical0312[] = { 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0313[] = { 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0314[] = { 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0315[] = { 13u, 8u, 9u, 10u, 11u, 12u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u }; - unsigned int visualToLogical0316[] = { 0u, 1u, 2u, 3u, 4u }; - - BidiLineData bidiLine01[] = {}; - BidiLineData bidiLine02[] = {}; - BidiLineData bidiLine03[] = { - { - 17u, - 11u, - visualToLogical0301 - }, - { - 28u, - 11u, - visualToLogical0302 - }, - { - 39u, - 5u, - visualToLogical0303 - }, - { - 44u, - 13u, - visualToLogical0304 - }, - { - 57u, - 11u, - visualToLogical0305 - }, - { - 68u, - 10u, - visualToLogical0306 - }, - { - 78u, - 14u, - visualToLogical0307 - }, - { - 92u, - 6u, - visualToLogical0308 - }, - { - 115u, - 11u, - visualToLogical0309 - }, - { - 126u, - 11u, - visualToLogical0310 - }, - { - 137u, - 5u, - visualToLogical0311 - }, - { - 142u, - 13u, - visualToLogical0312 - }, - { - 155u, - 11u, - visualToLogical0313 - }, - { - 166u, - 10u, - visualToLogical0314 - }, - { - 176u, - 14u, - visualToLogical0315 - }, - { - 190u, - 5u, - visualToLogical0316 - }, - }; - - bool directions02[] = { false, false, false, false, false, false }; - bool directions03[] = { false, false, false, false, false, true, true, true, true, true, false, false, false, false, false, true, true, true, true, true }; - - struct ReorderLinesData data[] = - { - { - "Zero characters.", - "", - 0u, - 0u, - 0u, - bidiLine01, - 0u, - NULL - }, - { - "Left to right text only.", - "Hello world demo\nhello world demo\nhello world demo.", - 0u, - 51u, - 0u, - bidiLine02, - 6u, - directions02 - }, - { - "Bidirectional paragraphs.", - "Hello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world\nHello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world", - 0u, - 195u, - 16u, - bidiLine03, - 20u, - directions03 - }, - { - "Bidirectional paragraphs. Update initial paragraphs.", - "Hello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world\nHello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world", - 0u, - 44u, - 16u, - bidiLine03, - 20u, - directions03 - }, - { - "Bidirectional paragraphs. Update middle paragraphs.", - "Hello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world\nHello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world", - 44u, - 54u, - 16u, - bidiLine03, - 20u, - directions03 - }, - { - "Bidirectional paragraphs. Update final paragraphs.", - "Hello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world\nHello world demo\nhello שלום עולם world demo\nשלום بالعالم עולם مرحبا שלום עולם بالعالم hello world", - 142u, - 53u, - 16u, - bidiLine03, - 20u, - directions03 - }, - }; - const unsigned int numberOfTests = 6u; - - for( unsigned int index = 0u; index < numberOfTests; ++index ) - { - ToolkitTestApplication application; - if( !ReorderLinesTest( data[index] ) ) - { - tet_result(TET_FAIL); - } - } - - tet_result(TET_PASS); - END_TEST; -} - int UtcDaliGetMirroredText(void) { tet_infoline(" UtcDaliGetMirroredText"); @@ -927,6 +586,11 @@ int UtcDaliGetCharactersDirection(void) true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false }; + bool directions06[] = { + true, true, true, true, true, true, true, true, true, true, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false }; + struct GetCharactersDirectionData data[] = { { @@ -934,28 +598,32 @@ int UtcDaliGetCharactersDirection(void) "", 0u, 0u, - directions01 + directions01, + false }, { "Left to right characters only", "Hello world\nhello world demo", 0u, 28u, - directions02 + directions02, + false }, { "Right to left characters only", "שלום עולם\nשלום עולם", 0u, 19u, - directions03 + directions03, + false }, { "Mix of bidirectional text", "Hello world\nhello world שלום עולם\nשלום עולם hello world", 0u, 55u, - directions04 + directions04, + false }, { "Mix of bidirectional text. With more paragraphs.", @@ -963,7 +631,8 @@ int UtcDaliGetCharactersDirection(void) " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello", 0u, 227u, - directions05 + directions05, + false }, { "Mix of bidirectional text. With more paragraphs. Update first paragraph.", @@ -971,7 +640,8 @@ int UtcDaliGetCharactersDirection(void) " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello", 0u, 17u, - directions05 + directions05, + false }, { "Mix of bidirectional text. With more paragraphs. Update from character 29", @@ -979,7 +649,8 @@ int UtcDaliGetCharactersDirection(void) " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello", 29u, 134u, - directions05 + directions05, + false }, { "Mix of bidirectional text. With more paragraphs. Update from character 163", @@ -987,10 +658,19 @@ int UtcDaliGetCharactersDirection(void) " مرحبا بالعالم שלום עולם hello world hello world\nبالعالم שלום hello world demo עולם\nשלום مرحبا بالعالم עולם hello", 163u, 35u, - directions05 + directions05, + false + }, + { + "Mix of bidirectional text. With brackets and LRM", + "שלום עולם ‎(hello)[world]‎", + 0u, + 26u, + directions06, + true } }; - const unsigned int numberOfTests = 8u; + const unsigned int numberOfTests = 9u; for( unsigned int index = 0u; index < numberOfTests; ++index ) {