X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Text-Cursor.cpp;h=920a826af8636dd766e359400b471510247a5be3;hb=0c862d5823332bc2161c64f901395f2390c82fd2;hp=377f976b9c7da37bb51315c8da9e3006a7003d89;hpb=0f5a244a8e8f8fa680dccafca44ccc9fedb387a8;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Cursor.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Cursor.cpp index 377f976..920a826 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Cursor.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Cursor.cpp @@ -16,8 +16,8 @@ */ #include - #include +#include #include #include @@ -46,6 +46,8 @@ using namespace Text; namespace { + const std::string DEFAULT_FONT_DIR( "/resources/fonts" ); + const unsigned int DEFAULT_FONT_SIZE = 1152u; struct GetClosestLineData { @@ -92,6 +94,15 @@ struct FindSelectionIndicesData CharacterIndex* noTextHitIndex; ///< The expected character index when there is no hit. }; +struct PrimaryCursorHeightData +{ + std::string description; ///< Description of the test. + std::string text; ///< Input text. + unsigned int numberOfTests; ///< The number of tests. + CharacterIndex* logicalIndex; ///< The logical cursor index for each test. + float* heights; ///< The expected primary cursor height for each test. +}; + bool GetClosestLineTest( const GetClosestLineData& data ) { std::cout << " testing : " << data.description << std::endl; @@ -114,7 +125,8 @@ bool GetClosestLineTest( const GetClosestLineData& data ) false, LineWrap::WORD, false, - Toolkit::DevelText::EllipsisPosition::END ); + Toolkit::DevelText::EllipsisPosition::END, + 0.f ); LogicalModelPtr logicalModel = textModel->mLogicalModel; VisualModelPtr visualModel = textModel->mVisualModel; @@ -163,7 +175,8 @@ bool GetClosestCursorIndexTest( const GetClosestCursorIndexData& data ) false, LineWrap::WORD, false, - Toolkit::DevelText::EllipsisPosition::END ); + Toolkit::DevelText::EllipsisPosition::END, + 0.f ); LogicalModelPtr logicalModel = textModel->mLogicalModel; VisualModelPtr visualModel = textModel->mVisualModel; @@ -216,7 +229,8 @@ bool GetCursorPositionTest( const GetCursorPositionData& data ) false, LineWrap::WORD, false, - Toolkit::DevelText::EllipsisPosition::END ); + Toolkit::DevelText::EllipsisPosition::END, + 0.f ); LogicalModelPtr logicalModel = textModel->mLogicalModel; VisualModelPtr visualModel = textModel->mVisualModel; @@ -233,6 +247,7 @@ bool GetCursorPositionTest( const GetCursorPositionData& data ) parameters.logical = data.logicalIndex[index]; GetCursorPosition( parameters, + 0.f,// Since this test case is not testing the primary cursor height, the default font line height can be set to 0.f. cursorInfo ); if( floor(cursorInfo.primaryPosition.x) != data.visualX[index] ) @@ -243,7 +258,7 @@ bool GetCursorPositionTest( const GetCursorPositionData& data ) if( floor(cursorInfo.primaryPosition.y) != data.visualY[index] ) { std::cout << " test " << index << " failed. Different 'y' cursor position : " << cursorInfo.primaryPosition.y << ", expected : " << data.visualY[index] << std::endl; - return false; + return false; } } @@ -272,7 +287,8 @@ bool FindSelectionIndicesTest( const FindSelectionIndicesData& data ) false, LineWrap::WORD, false, - Toolkit::DevelText::EllipsisPosition::END ); + Toolkit::DevelText::EllipsisPosition::END, + 0.f ); LogicalModelPtr logicalModel = textModel->mLogicalModel; VisualModelPtr visualModel = textModel->mVisualModel; @@ -315,12 +331,102 @@ bool FindSelectionIndicesTest( const FindSelectionIndicesData& data ) return true; } +bool PrimaryCursorHeightTest( const PrimaryCursorHeightData& data ) +{ + std::cout << " testing : " << data.description << std::endl; + + // 1) Create the model. + ModelPtr textModel; + MetricsPtr metrics; + Size textArea(400.f, 600.f); + Size layoutSize; + + Vector fontDescriptionRuns; + + const std::string fontFamily( "DejaVuSans" ); + + // Set a known font description + FontDescriptionRun fontDescriptionRun1; + fontDescriptionRun1.characterRun.characterIndex = 0u; + fontDescriptionRun1.characterRun.numberOfCharacters = 13u; + fontDescriptionRun1.familyLength = fontFamily.size(); + fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength]; + memcpy( fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength ); + fontDescriptionRun1.familyDefined = true; + fontDescriptionRun1.weightDefined = false; + fontDescriptionRun1.widthDefined = false; + fontDescriptionRun1.slantDefined = false; + fontDescriptionRun1.sizeDefined = true; + fontDescriptionRun1.size = 768u;//Font size = 12.0f (768/64 = 12) + + fontDescriptionRuns.PushBack( fontDescriptionRun1 ); + + LayoutOptions options; + CreateTextModel( data.text, + textArea, + fontDescriptionRuns, + options, + layoutSize, + textModel, + metrics, + false, + LineWrap::WORD, + false, + Toolkit::DevelText::EllipsisPosition::END, + 50.f ); + + LogicalModelPtr logicalModel = textModel->mLogicalModel; + VisualModelPtr visualModel = textModel->mVisualModel; + + GetCursorPositionParameters parameters; + parameters.visualModel = visualModel; + parameters.logicalModel = logicalModel; + parameters.metrics = metrics; + parameters.isMultiline = true; + + for( unsigned int index = 0; index < data.numberOfTests; ++index ) + { + CursorInfo cursorInfo; + parameters.logical = data.logicalIndex[index]; + + // Load some fonts. + TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); + fontClient.SetDpi( 93u, 93u ); + + char* pathNamePtr = get_current_dir_name(); + const std::string pathName( pathNamePtr ); + free( pathNamePtr ); + + FontId fontID = fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf" ); + + Text::FontMetrics fontMetrics; + MetricsPtr mMetrics = Metrics::New(fontClient); + mMetrics->GetFontMetrics(fontID, fontMetrics); + float defaultFontLineHeight = (fontMetrics.ascender - fontMetrics.descender); + + GetCursorPosition( parameters, + defaultFontLineHeight, + cursorInfo ); + + if( floor(cursorInfo.primaryCursorHeight) != data.heights[index] ) + { + std::cout << " test " << index << " failed. Different primaryCursorHeight : " << cursorInfo.primaryCursorHeight << ", expected : " << data.heights[index] << std::endl; + return false; + } + } + + return true; +} + } // namespace ////////////////////////////////////////////////////////// // // UtcDaliGetClosestLine // UtcDaliGetClosestCursorIndex +// UtcDaliGetCursorPosition +// UtcDaliFindSelectionIndices +// UtcDaliPrimaryCursorHeight // ////////////////////////////////////////////////////////// @@ -426,7 +532,7 @@ int UtcDaliGetClosestCursorIndex(void) CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP }; CharacterIndex logicalIndex04[] = { 0, 5u, 6u, 11u, 11u, 12u, 16u, 17u, 21u, 21u, - 22u, 25u, 31u, 32u, 35u, 34u, 40u, + 22u, 25u, 30u, 32u, 35u, 34u, 40u, 41u }; bool isCharacterHit04[] = { false, true, true, true, false, false, true, true, true, false, @@ -464,11 +570,11 @@ int UtcDaliGetClosestCursorIndex(void) CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP }; CharacterIndex logicalIndex05[] = { 0, 10u, 19u, 28u, 39u, 44u, - 45u, 49u, 59u, 66u, 78u, 87u, + 45u, 48u, 59u, 66u, 78u, 87u, 89u, 96u, 106u, 115u, 124u, 133u, 134u, 145u, 154u, 162u, 171u, 179u, 180u, 184u, 191u, 203u, 212u, - 221u, 222u, 233u, 240u, 251u, 265u }; + 221u, 222u, 233u, 241u, 251u, 265u }; bool isCharacterHit05[] = { false, true, true, true, true, false, false, true, true, true, true, false, false, true, true, true, true, false, @@ -507,7 +613,7 @@ int UtcDaliGetClosestCursorIndex(void) CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP, CharacterHitTest::TAP }; - CharacterIndex logicalIndex06[] = { 0, 10u, 19u, 28u, 39u, 44u, + CharacterIndex logicalIndex06[] = { 0, 11u, 19u, 28u, 39u, 44u, 45u, 48u, 57u, 65u, 78u, 87u, 89u, 96u, 107u, 114u, 124u, 133u, 134u, 144u, 154u, 162u, 171u, 178u, @@ -529,7 +635,7 @@ int UtcDaliGetClosestCursorIndex(void) float visualX08[] = { 7.f }; float visualY08[] = { 12.f }; CharacterHitTest::Mode mode08[] = { CharacterHitTest::TAP }; - CharacterIndex logicalIndex08[] = { 2u }; + CharacterIndex logicalIndex08[] = { 1u }; bool isCharacterHit08[] = { true }; struct GetClosestCursorIndexData data[] = @@ -646,7 +752,7 @@ int UtcDaliGetCursorPosition(void) { tet_infoline(" UtcDaliGetCursorPosition"); - float visualX08[] = { 4.f }; + float visualX08[] = { 5.f }; float visualY08[] = { 0.f }; CharacterIndex logicalIndex08[] = { 1u }; @@ -805,3 +911,35 @@ int UtcDaliFindSelectionIndices(void) tet_result(TET_PASS); END_TEST; } + +int UtcDaliPrimaryCursorHeight(void) +{ + tet_infoline(" UtcDaliPrimaryCursorHeight"); + + float heights[] = { 19.f }; + CharacterIndex logicalIndex[] = { 1u }; + + struct PrimaryCursorHeightData data[] = + { + { + "Testing primary cursor height when line spacing is used.", + "Hello World", + 1u, + logicalIndex, + heights, + } + }; + const unsigned int numberOfTests = 1u; + + for( unsigned int index = 0; index < numberOfTests; ++index ) + { + ToolkitTestApplication application; + if( !PrimaryCursorHeightTest( data[index] ) ) + { + tet_result(TET_FAIL); + } + } + + tet_result(TET_PASS); + END_TEST; +}