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-Text-Controller.cpp;h=c89a025e4fcf8b18a0ca02332e8045ce2a622ea0;hp=92be47935d5bdee6349d17f6874ec30d45921750;hb=2a7fa48bf8e3808822c354420b2cf273e9a493bd;hpb=fedd5ae8da46cd798f730fd07c942df853e055dd diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp index 92be479..c89a025 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include #include #include @@ -49,6 +51,17 @@ void ContentSelectedCallback( ClipboardEventNotifier& notifier ) gClipboardText = notifier.GetContent(); } +// Generate a KeyEvent to send to Core. +Dali::KeyEvent GenerateKey( const std::string& keyName, + const std::string& keyString, + int keyCode, + int keyModifier, + unsigned long timeStamp, + const Dali::KeyEvent::State& keyState ) +{ + return DevelKeyEvent::New( keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE ); +} + } // namespace int UtcDaliTextController(void) @@ -241,6 +254,9 @@ int UtcDaliTextControllerImfEvent(void) controller->GetText( text ); DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION ); + // for coverage + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::UNDERLINE ); + // Send PRE_EDIT event imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "wo", 6, 2 ); controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); @@ -269,6 +285,151 @@ int UtcDaliTextControllerImfEvent(void) END_TEST; } +int UtcDaliTextControllerImfPreeditStyle(void) +{ + tet_infoline(" UtcDaliTextControllerImfPreeditStyle"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + std::string text; + InputMethodContext::EventData imfEvent; + + DALI_TEST_CHECK( controller ); + + // Configures the text controller similarly to the text-field. + ConfigureTextField( controller ); + + InputMethodContext inputMethodContext = InputMethodContext::New(); + + // Send COMMIT event. + imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Force to update the model. + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION ); + + // Send PRE_EDIT event + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::NONE ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as REVERSE + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::REVERSE ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as HIGHLIGHT + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::HIGHLIGHT ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as CUSTOM_PLATFORM_STYLE_1 + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_1 ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as CUSTOM_PLATFORM_STYLE_2 + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_2 ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as CUSTOM_PLATFORM_STYLE_3 + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_3 ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Set the preedit style as CUSTOM_PLATFORM_STYLE_4 + inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_4 ); + controller->GetNaturalSize(); + + controller->GetText( text ); + DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextControllerImfPreeditStyleReverse(void) +{ + tet_infoline(" UtcDaliTextControllerImfPreeditStyleReverse"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + std::string text; + InputMethodContext::EventData imfEvent; + + DALI_TEST_CHECK(controller); + + // Configures the text controller similarly to the text-field. + ConfigureTextField(controller); + + InputMethodContext inputMethodContext = InputMethodContext::New(); + + // Send PRE_EDIT event + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "Reverse", 0, 7); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); + + // For coverage, mEditableControlInterface is required. + // Creates a temporary text-field to use mEditableControlInterface. + TextField field = TextField::New(); + Toolkit::Internal::TextField& fieldImpl = GetImpl(field); + ControllerPtr fieldController = fieldImpl.GetTextController(); + Controller::Impl& fieldControllerImpl = Controller::Impl::GetImplementation(*fieldController.Get()); + Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get()); + + // For coverage, mEditableControlInterface is required. + controllerImpl.mEditableControlInterface = fieldControllerImpl.mEditableControlInterface; + + // Set the preedit style as REVERSE + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE); + controller->GetNaturalSize(); + + controller->GetText(text); + DALI_TEST_EQUALS("Reverse", text, TEST_LOCATION); + + tet_result(TET_PASS); + END_TEST; +} + int UtcDaliTextControllerTextPopupButtonTouched(void) { tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched"); @@ -304,7 +465,7 @@ int UtcDaliTextControllerTextPopupButtonTouched(void) TextSelectionPopup::CLIPBOARD ); textPopup.EnableButtons( buttonsToEnable ); - Stage::GetCurrent().Add( textPopup ); + application.GetScene().Add( textPopup ); textPopup.ShowPopup(); // Render and notify @@ -314,6 +475,9 @@ int UtcDaliTextControllerTextPopupButtonTouched(void) // Sets some text. controller->SetText( "Hello world" ); + // When the TextSelectionPopup is active, the controller has focus. + controller->KeyboardFocusGainEvent(); + // Select the whole text. button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) ); DALI_TEST_CHECK( button ); @@ -542,7 +706,7 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty"); ToolkitTestApplication application; - const Size size( Dali::Stage::GetCurrent().GetSize() ); + const Size size( application.GetScene().GetSize() ); // single line text const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog"); @@ -558,8 +722,8 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // single line, line spacing = 0px { const float EXPECTED_SPACING = 0.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 326.0f, 19.0f); - const Vector3 EXPECTED_NATURAL_SIZE( 326.0f, 20.0f, 0.0f ); + const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f); + const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 20.0f, 0.0f ); controller->SetText(textSingle); controller->Relayout(size); @@ -577,8 +741,8 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // single line, line spacing = 20px { const float EXPECTED_SPACING = 20.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 326.0f, 19.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 326.0f, 40.0f, 0.0f ); + const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f ); + const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 40.0f, 0.0f ); controller->SetText(textSingle); controller->Relayout(size); @@ -597,8 +761,8 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // multi-line, line spacing = 0px { const float EXPECTED_SPACING = 0.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 318.0f, 39.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 58.0f, 0.0f ); + const Vector2 EXPECTED_LAYOUT_SIZE( 350.0f, 39.0f ); + const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 58.0f, 0.0f ); controller->SetText(textMulti); controller->Relayout(size); @@ -617,8 +781,8 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // multi-line, line spacing = 20px { const float EXPECTED_SPACING = 20.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 115.0f, 57.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 118.0f, 0.0f ); + const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 57.0f ); + const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 118.0f, 0.0f ); controller->SetText(textMulti); controller->Relayout(size); @@ -637,8 +801,8 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // multi-line, line spacing = 30px { const float EXPECTED_SPACING = 30.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 115.0f, 117.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 148.0f, 0.0f ); + const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 117.0f ); + const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 148.0f, 0.0f ); controller->SetText(textMulti); controller->Relayout(size); @@ -683,10 +847,490 @@ int UtcDaliTextControllerCheckBufferIndices(void) mImpl.mOperationsPending = Controller::ALL_OPERATIONS; // Perform a relayout - const Size size( Dali::Stage::GetCurrent().GetSize() ); + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputColorChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputColorChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + + const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f ); + controller->SetInputColor( inputColor ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input color + const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f ); + controller->SetInputColor( newInputColor ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::COLOR, static_cast( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontFamilyChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text and font family + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontFamily("SamsungOneUI_200"); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font family + controller->SetInputFontFamily("SamsungOneUI_300"); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontWeightChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font weight + controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontWidthChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font width + controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontSlantChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font slant + controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontPointSizeChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontPointSize( 1.0f ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font point size + controller->SetInputFontPointSize( 1.2f ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); controller->Relayout(size); tet_result(TET_PASS); END_TEST; } + +int UtcDaliTextControllerSelectEvent(void) +{ + tet_infoline(" UtcDaliTextControllerSelectEvent"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + // Configures the text controller similarly to the text-field. + ConfigureTextField( controller ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText( text ); + + // Select the whole text. + controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Check if the whole text is selected or not. + std::string retrieved_text; + mImpl.RetrieveSelection( retrieved_text, false ); + DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION ); + + // Select the whole text. + controller->SelectEvent( 0.f, 0.f, SelectionType::ALL ); + + // Perform a relayout + controller->Relayout( size ); + + mImpl.RetrieveSelection( retrieved_text, false ); + DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliTextControllerRemoveTextChangeEventData(void) +{ + tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextField( controller ); + + // Set the text + const std::string text( "Hello World!" ); + controller->SetText( text ); + controller->SetInputFontPointSize( 1.0f ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + + // Send DELETE_SURROUNDING event + InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Force to update the model. + controller->GetNaturalSize(); + + // Simulate a key event to delete text + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) ); + + DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout( size ); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextField(controller); + + // Set the text + const std::string text("Hello World!"); + controller->SetText( text ); + controller->SetInputFontPointSize( 1.0f ); + controller->KeyboardFocusGainEvent(); + + application.SendNotification(); + application.Render(); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + controller->Relayout(size); + + // simulate a key event. + controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::DOWN ) ); + + // change the input font point size + controller->SetInputFontPointSize( 20.f ); + + application.SendNotification(); + application.Render(); + + // Perform a relayout + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerDeleteSurroundings(void) +{ + tet_infoline(" UtcDaliTextControllerDeleteSurroundings"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextField( controller ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Add some pre-edit text, such as Korean + InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + // Perform a relayout + const Size size( application.GetScene().GetSize() ); + + application.SendNotification(); + application.Render(); + + controller->Relayout( size ); + + // Simulate a key event to delete one text + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) ); + + // Send DELETE_SURROUNDING event (Delete All text) + imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -2, 2 ); + controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + + application.SendNotification(); + application.Render(); + + controller->Relayout( size ); + + // simulate a key event to add text + controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) ); + controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) ); + + DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION ); + + // Force to update the model. + controller->GetNaturalSize(); + + application.SendNotification(); + application.Render(); + + controller->Relayout( size ); + + tet_result(TET_PASS); + + END_TEST; +}