X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Text-ViewModel.cpp;h=b13fcdaf9e1b9b7730f35e850f0c2d49f90b34f8;hb=31d704fbcf71a27571c66b30452a0c6ab4fe9b6e;hp=66e26828ff509295d81aebaf5c3056dfbd9dde1e;hpb=87a9019904ab49c42f1e32e7ebb6a1512b0dc28c;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-ViewModel.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-ViewModel.cpp index 66e2682..b13fcda 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-ViewModel.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-ViewModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -21,11 +21,12 @@ #include #include -#include +#include +#include #include #include #include -#include +#include using namespace Dali; using namespace Toolkit; @@ -53,10 +54,10 @@ const Vector2 LOREM_SCROLL_POSITION( 0.f, -265.f ); const Length LOREM_NUMBER_OF_LINES = 35u; const Length LOREM_NUMBER_OF_LINES_ELIDED = 21u; const Length LOREM_NUMBER_OF_GLYPHS = 632; -const Length LOREM_NUMBER_OF_GLYPHS_ELIDED = 395u; +const Length LOREM_NUMBER_OF_GLYPHS_ELIDED = 393u; // The expected layout size for UtcDaliTextViewModelGetLayoutSize -const Size LAYOUT_SIZE( 197.f, 45.f ); +const Size LAYOUT_SIZE( 181.f, 48.f ); // The expected color indices for UtcDaliTextViewModelGetColors const ColorIndex COLOR_INDICES[] = { 0u, 0u, 0u, 0u, 0u, 0u, 1u, 1u, 1u, 2u, 2u, 2u, 2u, 2u, 1u, 1u, 1u, 1u, 1u, 3u, 1u, 1u, 1u, 0u, 0u, 0u, 0u }; @@ -132,16 +133,16 @@ bool ElideTest( const ElideData& data ) const LineRun& lastLine = *( model->GetLines() + numberOfLines - 1u ); const Length numberOfLastLineGlyphs = data.numberOfGlyphs - lastLine.glyphRun.glyphIndex; - std::cout << " last line alignment offset : " << lastLine.alignmentOffset << std::endl; + std::cout << " last line alignment offset : " << floor(lastLine.alignmentOffset) << std::endl; for( unsigned int index = 0u; index < numberOfLastLineGlyphs; ++index ) { - if( *( data.positions + index ) != ( lastLine.alignmentOffset + ( *( layoutBuffer + lastLine.glyphRun.glyphIndex + index ) ).x ) ) + if( *( data.positions + index ) != floor(lastLine.alignmentOffset + ( *( layoutBuffer + lastLine.glyphRun.glyphIndex + index ) ).x ) ) { std::cout << " different layout :"; for( unsigned int i = 0; i < numberOfLastLineGlyphs; ++i ) { - std::cout << " " << ( lastLine.alignmentOffset + ( *( layoutBuffer + lastLine.glyphRun.glyphIndex + i ) ).x ); + std::cout << " " << floor( lastLine.alignmentOffset + ( *( layoutBuffer + lastLine.glyphRun.glyphIndex + i ) ).x ); } std::cout << std::endl; std::cout << " expected :"; @@ -572,6 +573,24 @@ int UtcDaliTextViewModelElideText01(void) DALI_TEST_CHECK( NULL != glyphs ); DALI_TEST_CHECK( NULL != layouts ); + // When the ellipsis is enabled, at least a glyph has to be rendered. + // Even if the given width is too narrow for rendering an ellipsis glyph. + controller->SetText( "…" ); + Vector3 sizeEllipsis = controller->GetNaturalSize(); + controller->SetText( "A" ); + Vector3 sizeA = controller->GetNaturalSize(); + float testWidth = sizeA.width < sizeEllipsis.width ? sizeA.width : sizeEllipsis.width - 1.0; + + controller->SetText( "AB" ); + Vector3 sizeAB = controller->GetNaturalSize(); + + controller->Relayout( Size(testWidth, sizeAB.height) ); + + // Elide the glyphs. + model->ElideGlyphs(); + DALI_TEST_EQUALS( 1u, model->GetNumberOfGlyphs(), TEST_LOCATION ); + DALI_TEST_EQUALS( 1u, model->GetNumberOfLines(), TEST_LOCATION ); + tet_result(TET_PASS); END_TEST; } @@ -583,16 +602,16 @@ int UtcDaliTextViewModelElideText02(void) Size textSize00( 100.f, 100.f ); Size textSize01( 80.f, 100.f ); - float positions01[] = { 0.f, 8.f, 16.f, 26.f, 33.f, 41.f, 45.f, 54.f, 64.0f }; + float positions01[] = { 0.f, 7.f, 16.f, 26.f, 33.f, 41.f, 45.f, 55.f, 64.0f }; Size textSize02( 80.f, 100.f ); - float positions02[] = { 72.f, 63.f, 54.f, 50.f, 43.f, 38.f, 30.f, 23.0f }; + float positions02[] = { 68.f, 62.f, 58.f, 50.f, 46.f, 42.f, 32.f, 24.f, 5.f }; Size textSize03( 80.f, 100.f ); - float positions03[] = { 78.f, 73.f, 70.f, 65.f, 57.f, 55.f, 51.f, 50.f, 45.f, 35.f, 32.f, 24.f, 21.f }; + float positions03[] = { 78.f, 72.f, 66.f, 62.f, 57.f, 50.f, 45.f, 41.f, 39.f, 33.f, 30.f, 24.f, 5.0f }; Size textSize04( 80.f, 10.f ); - float positions04[] = { 2.f }; + float positions04[] = { 1.f }; struct ElideData data[] = { @@ -609,7 +628,7 @@ int UtcDaliTextViewModelElideText02(void) "Lorem ipsum dolor sit amet, aeque definiebas ea mei, posse iracundia ne cum.", textSize01, 5u, - 37u, + 36u, positions01 }, { @@ -617,7 +636,7 @@ int UtcDaliTextViewModelElideText02(void) "צעד על לשון המלצת לאחרונה, אם לכאן שנורו סרבול מדע, קרן דת שפות להפוך.", textSize02, 5u, - 49u, + 44u, positions02 }, { @@ -625,7 +644,7 @@ int UtcDaliTextViewModelElideText02(void) "عل النفط ديسمبر الإمداد بال, بين وترك شعار هو. لمّ من المبرمة النفط بالسيطرة, أم يتم تحرّك وبغطاء, عدم في لإعادة وإقامة رجوعهم.", textSize03, 5u, - 74u, + 66u, positions03 }, { @@ -651,3 +670,89 @@ int UtcDaliTextViewModelElideText02(void) tet_result(TET_PASS); END_TEST; } + +int UtcDaliTextViewModelGetFontRuns(void) +{ + tet_infoline(" UtcDaliTextViewModelGetFontRuns"); + ToolkitTestApplication application; + + // 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); + + fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf"); + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + // Tests the rendering controller has been created. + TypesetterPtr typesetter = Typesetter::New(controller->GetTextModel()); + DALI_TEST_CHECK(typesetter); + + // Tests the view model has been created. + ViewModel* model = typesetter->GetViewModel(); + DALI_TEST_CHECK(NULL != model); + + // Configures the text controller similarly to the text-editor. + ConfigureTextEditor(controller); + + // Sets a text and relais-out. + controller->SetMarkupProcessorEnabled(true); + controller->SetText("Hello HelloHello"); + controller->Relayout(CONTROL_SIZE); + + const Vector& validFonts = model->GetFontRuns(); + + // The font-runs should be equal to number of segments have different fonts. + DALI_TEST_EQUALS(validFonts.Count(), 3u, TEST_LOCATION); + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextViewModelGetFontDescriptionRuns(void) +{ + tet_infoline(" UtcDaliTextViewModelGetFontDescriptionRuns"); + ToolkitTestApplication application; + + // 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); + + fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf"); + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + // Tests the rendering controller has been created. + TypesetterPtr typesetter = Typesetter::New(controller->GetTextModel()); + DALI_TEST_CHECK(typesetter); + + // Tests the view model has been created. + ViewModel* model = typesetter->GetViewModel(); + DALI_TEST_CHECK(NULL != model); + + // Configures the text controller similarly to the text-editor. + ConfigureTextEditor(controller); + + // Sets a text and relais-out. + controller->SetMarkupProcessorEnabled(true); + controller->SetText("Hello HelloHello"); + controller->Relayout(CONTROL_SIZE); + + const Vector& validFonts = model->GetFontDescriptionRuns(); + + // The font-description-runs should be equal number of the used fonts. + DALI_TEST_EQUALS(validFonts.Count(), 2u, TEST_LOCATION); + + tet_result(TET_PASS); + END_TEST; +} \ No newline at end of file