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=b079ce32ae1c5f6cb6ffbca372390c1e2690c83f;hp=b1afd347fc2801bed3ce082f6b3bbdd6ea4c663a;hb=HEAD;hpb=946461ac1b49e996d9155c95130ec5aa1b08f77d 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 old mode 100755 new mode 100644 index b1afd34..774cce1 --- 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) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -22,12 +22,13 @@ #include #include -#include #include -#include +#include +#include #include #include -#include +#include +#include using namespace Dali; using namespace Toolkit; @@ -35,35 +36,23 @@ using namespace Text; namespace { +const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option. +const char* const OPTION_CUT("optionCut"); // "Cut" popup option. +const char* const OPTION_COPY("optionCopy"); // "Copy" popup option. +const char* const OPTION_PASTE("optionPaste"); // "Paste" popup option. +const char* const OPTION_CLIPBOARD("optionClipboard"); // "Clipboard" popup option. -const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option. -const char* const OPTION_CUT("optionCut"); // "Cut" popup option. -const char* const OPTION_COPY("optionCopy"); // "Copy" popup option. -const char* const OPTION_PASTE("optionPaste"); // "Paste" popup option. -const char* const OPTION_CLIPBOARD("optionClipboard"); // "Clipboard" popup option. - -const Size CONTROL_SIZE( 300.f, 60.f ); - -std::string gClipboardText; -void ContentSelectedCallback( ClipboardEventNotifier& notifier ) -{ - gClipboardText = notifier.GetContent(); -} +const Size CONTROL_SIZE(300.f, 60.f); // 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 ) +Dali::KeyEvent GenerateKey(const std::string& keyName, + const std::string& keyString, + int keyCode, + int keyModifier, + unsigned long timeStamp, + const Dali::KeyEvent::State& keyState) { - return Dali::KeyEvent( keyName, - keyString, - keyCode, - keyModifier, - timeStamp, - keyState ); + return DevelKeyEvent::New(keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE); } } // namespace @@ -75,7 +64,7 @@ int UtcDaliTextController(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); tet_result(TET_PASS); END_TEST; @@ -88,25 +77,25 @@ int UtcDaliTextControllerSetGetScrollEnabled(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Configures the text controller similarly to the text-editor. - ConfigureTextEditor( controller ); + ConfigureTextEditor(controller); - DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() ); - DALI_TEST_CHECK( controller->IsVerticalScrollEnabled() ); + DALI_TEST_CHECK(!controller->IsHorizontalScrollEnabled()); + DALI_TEST_CHECK(controller->IsVerticalScrollEnabled()); // Configures the text controller similarly to the text-field. - ConfigureTextField( controller ); + ConfigureTextField(controller); - DALI_TEST_CHECK( controller->IsHorizontalScrollEnabled() ); - DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() ); + DALI_TEST_CHECK(controller->IsHorizontalScrollEnabled()); + DALI_TEST_CHECK(!controller->IsVerticalScrollEnabled()); // Configures the text controller similarly to the text-label. - ConfigureTextLabel( controller ); + ConfigureTextLabel(controller); - DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() ); - DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() ); + DALI_TEST_CHECK(!controller->IsHorizontalScrollEnabled()); + DALI_TEST_CHECK(!controller->IsVerticalScrollEnabled()); tet_result(TET_PASS); END_TEST; @@ -119,28 +108,28 @@ int UtcDaliTextControllerSetIsTextElide(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Configures the text controller similarly to the text-editor. - ConfigureTextEditor( controller ); - DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION ); + ConfigureTextEditor(controller); + DALI_TEST_EQUALS(false, controller->IsTextElideEnabled(), TEST_LOCATION); - controller->SetTextElideEnabled( true ); - DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION ); + controller->SetTextElideEnabled(true); + DALI_TEST_EQUALS(true, controller->IsTextElideEnabled(), TEST_LOCATION); // Configures the text controller similarly to the text-field. - ConfigureTextField( controller ); - DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION ); + ConfigureTextField(controller); + DALI_TEST_EQUALS(false, controller->IsTextElideEnabled(), TEST_LOCATION); - controller->SetTextElideEnabled( true ); - DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION ); + controller->SetTextElideEnabled(true); + DALI_TEST_EQUALS(true, controller->IsTextElideEnabled(), TEST_LOCATION); // Configures the text controller similarly to the text-label. - ConfigureTextLabel( controller ); - DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION ); + ConfigureTextLabel(controller); + DALI_TEST_EQUALS(true, controller->IsTextElideEnabled(), TEST_LOCATION); - controller->SetTextElideEnabled( false ); - DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION ); + controller->SetTextElideEnabled(false); + DALI_TEST_EQUALS(false, controller->IsTextElideEnabled(), TEST_LOCATION); tet_result(TET_PASS); END_TEST; @@ -153,28 +142,28 @@ int UtcDaliTextControllerEnableCursorBlinking(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // There is no text input enabled. - DALI_TEST_CHECK( !controller->GetEnableCursorBlink() ); + DALI_TEST_CHECK(!controller->GetEnableCursorBlink()); // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Enables the cursor blink. - controller->SetEnableCursorBlink( true ); + controller->SetEnableCursorBlink(true); - DALI_TEST_CHECK( controller->GetEnableCursorBlink() ); + DALI_TEST_CHECK(controller->GetEnableCursorBlink()); // Disables the cursor blink. - controller->SetEnableCursorBlink( false ); + controller->SetEnableCursorBlink(false); - DALI_TEST_CHECK( !controller->GetEnableCursorBlink() ); + DALI_TEST_CHECK(!controller->GetEnableCursorBlink()); tet_result(TET_PASS); END_TEST; @@ -188,102 +177,110 @@ int UtcDaliTextControllerImfEvent(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - std::string text; + std::string text; InputMethodContext::EventData imfEvent; - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the placeholder text. - controller->SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali" ); + controller->SetPlaceholderText(Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali"); // For coverage. - imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Send VOID event. - imfEvent = InputMethodContext::EventData( InputMethodContext::VOID, "", 0, 0 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::VOID, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); - controller->GetText( text ); - DALI_TEST_CHECK( text.empty() ); + controller->GetText(text); + DALI_TEST_CHECK(text.empty()); + DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION); // We should ignore Placeholder text here - imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello ", 0, 6); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); controller->GetNaturalSize(); // Check 'Delete All' key which means the input panel send a big range - imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -100, 100 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -100, 100); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("", text, TEST_LOCATION); + DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send COMMIT event. - imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION); + DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send PRE_EDIT event - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Force to update the model. controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send DELETE_SURROUNDING event - imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -1, 1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Force to update the model. controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION); + DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION); // for coverage - inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::UNDERLINE ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::UNDERLINE); // Send PRE_EDIT event - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "wo", 6, 2 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "wo", 6, 2); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Force to update the model. controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello wo", text, TEST_LOCATION); + DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send GET_SURROUNDING event - imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello wo", text, TEST_LOCATION); + DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send PRIVATE_COMMAND event - imfEvent = InputMethodContext::EventData( InputMethodContext::PRIVATE_COMMAND, "", 0, 0 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRIVATE_COMMAND, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello wo", text, TEST_LOCATION); + DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION); tet_result(TET_PASS); END_TEST; @@ -297,94 +294,146 @@ int UtcDaliTextControllerImfPreeditStyle(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - std::string text; + std::string text; InputMethodContext::EventData imfEvent; - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Configures the text controller similarly to the text-field. - ConfigureTextField( controller ); + ConfigureTextField(controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Send COMMIT event. - imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION); + DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send PRE_EDIT event - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); - inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::NONE ); + 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 ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Set the preedit style as REVERSE - inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::REVERSE ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Set the preedit style as HIGHLIGHT - inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::HIGHLIGHT ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::HIGHLIGHT); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_1); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_2); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_3); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 ); - controller->OnInputMethodContextEvent( inputMethodContext, imfEvent ); + 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 ); + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_4); controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION ); + controller->GetText(text); + DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), 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; @@ -398,34 +447,34 @@ int UtcDaliTextControllerTextPopupButtonTouched(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); - std::string text; - PushButton button; + std::string text; + PushButton button; Property::Map attributes; // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Creates the text's popup. TextSelectionPopupCallbackInterface& callbackInterface = *controller; - TextSelectionPopup textPopup = TextSelectionPopup::New( &callbackInterface ); + TextSelectionPopup textPopup = TextSelectionPopup::New(&callbackInterface); - Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast( TextSelectionPopup::CUT | - TextSelectionPopup::COPY | - TextSelectionPopup::PASTE | - TextSelectionPopup::SELECT | - TextSelectionPopup::SELECT_ALL | - TextSelectionPopup::CLIPBOARD ); + Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast(TextSelectionPopup::CUT | + TextSelectionPopup::COPY | + TextSelectionPopup::PASTE | + TextSelectionPopup::SELECT | + TextSelectionPopup::SELECT_ALL | + TextSelectionPopup::CLIPBOARD); - textPopup.EnableButtons( buttonsToEnable ); - application.GetScene().Add( textPopup ); + textPopup.EnableButtons(buttonsToEnable); + application.GetScene().Add(textPopup); textPopup.ShowPopup(); // Render and notify @@ -433,81 +482,82 @@ int UtcDaliTextControllerTextPopupButtonTouched(void) application.Render(); // Sets some text. - controller->SetText( "Hello world" ); + 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 ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_SELECT_ALL)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Call relayout to process the input events. - controller->Relayout( CONTROL_SIZE ); + controller->Relayout(CONTROL_SIZE); // Cut the text. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CUT)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Force to update the model. controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_CHECK( text.empty() ); + controller->GetText(text); + DALI_TEST_CHECK(text.empty()); // Set text again. - controller->SetText( "Hello world" ); + controller->SetText("Hello world"); // Select the whole text. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_SELECT_ALL)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Call relayout to process the input events. - controller->Relayout( CONTROL_SIZE ); + controller->Relayout(CONTROL_SIZE); // Copy to the clipboard. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_COPY)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Call relayout to process the input events. - controller->Relayout( CONTROL_SIZE ); + controller->Relayout(CONTROL_SIZE); // Cut the text. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CUT)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Force to update the model. controller->GetNaturalSize(); - controller->GetText( text ); - DALI_TEST_CHECK( text.empty() ); - - ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get(); - clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback ); + controller->GetText(text); + DALI_TEST_CHECK(text.empty()); // Paste the text. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_PASTE)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); // Call relayout to process the input events. - controller->Relayout( CONTROL_SIZE ); + controller->Relayout(CONTROL_SIZE); + controller->GetText(text); - DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION ); + DALI_TEST_EQUALS("Hello world", text.c_str(), TEST_LOCATION); // Show the clipboard. - button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) ); - DALI_TEST_CHECK( button ); + button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CLIPBOARD)); + DALI_TEST_CHECK(button); - button.DoAction( "buttonClick", attributes ); + button.DoAction("buttonClick", attributes); tet_result(TET_PASS); END_TEST; @@ -521,11 +571,11 @@ int UtcDaliTextControllerGetInputShadowProperty(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); const std::string& shadowProperties = controller->GetInputShadowProperties(); - DALI_TEST_CHECK( shadowProperties.empty() ); + DALI_TEST_CHECK(shadowProperties.empty()); tet_result(TET_PASS); END_TEST; @@ -539,11 +589,11 @@ int UtcDaliTextControllerGetInputUnderlineProperty(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); const std::string& underlineProperties = controller->GetInputUnderlineProperties(); - DALI_TEST_CHECK( underlineProperties.empty() ); + DALI_TEST_CHECK(underlineProperties.empty()); tet_result(TET_PASS); END_TEST; @@ -557,28 +607,28 @@ int UtcDaliTextControllerSetGetAutoScrollEnabled(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); - DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() ); + DALI_TEST_CHECK(!controller->IsAutoScrollEnabled()); // The auto scrolling shouldn't be enabled if the multi-line is enabled. // Enable multi-line. - controller->SetMultiLineEnabled( true ); + controller->SetMultiLineEnabled(true); // Enable text scrolling. - controller->SetAutoScrollEnabled( true ); + controller->SetAutoScrollEnabled(true); - DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() ); + DALI_TEST_CHECK(!controller->IsAutoScrollEnabled()); // Disable multi-line. - controller->SetMultiLineEnabled( false ); + controller->SetMultiLineEnabled(false); // Enable text scrolling. - controller->SetAutoScrollEnabled( true ); + controller->SetAutoScrollEnabled(true); // Should be ebabled now. - DALI_TEST_CHECK( controller->IsAutoScrollEnabled() ); + DALI_TEST_CHECK(controller->IsAutoScrollEnabled()); tet_result(TET_PASS); END_TEST; @@ -592,27 +642,27 @@ int UtcDaliTextControllerSetGetCheckProperty(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); - DALI_TEST_CHECK( !controller->IsInputModePassword() ); + DALI_TEST_CHECK(!controller->IsInputModePassword()); // Set the text input to password. - controller->SetInputModePassword( true ); + controller->SetInputModePassword(true); - DALI_TEST_CHECK( controller->IsInputModePassword() ); + DALI_TEST_CHECK(controller->IsInputModePassword()); // Unset the text input to password. - controller->SetInputModePassword( false ); + controller->SetInputModePassword(false); - DALI_TEST_CHECK( !controller->IsInputModePassword() ); + DALI_TEST_CHECK(!controller->IsInputModePassword()); tet_result(TET_PASS); END_TEST; @@ -626,34 +676,34 @@ int UtcDaliTextControllerSetGetTapLongPressAction(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - DALI_TEST_CHECK( controller ); + DALI_TEST_CHECK(controller); // Test first with no decorator. - DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION ); - controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT ); - DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION ); + DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION); + controller->SetNoTextDoubleTapAction(Controller::NoTextTap::HIGHLIGHT); + DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION); - DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION ); - controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT ); - DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION ); + DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION); + controller->SetNoTextLongPressAction(Controller::NoTextTap::HIGHLIGHT); + DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION); // Add a decorator and re-test. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); - DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION ); - controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT ); - DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION ); + DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION); + controller->SetNoTextDoubleTapAction(Controller::NoTextTap::HIGHLIGHT); + DALI_TEST_EQUALS(Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION); - DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP - controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT ); - DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION ); + DALI_TEST_EQUALS(Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION); // The default is SHOW_SELECTION_POPUP + controller->SetNoTextLongPressAction(Controller::NoTextTap::HIGHLIGHT); + DALI_TEST_EQUALS(Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION); END_TEST; } @@ -663,7 +713,7 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty"); ToolkitTestApplication application; - const Size size( application.GetScene().GetSize() ); + const Size size(application.GetScene().GetSize()); // single line text const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog"); @@ -678,106 +728,104 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void) // single line, line spacing = 0px { - const float EXPECTED_SPACING = 0.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f); - const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 20.0f, 0.0f ); + const float EXPECTED_SPACING = 0.0f; + const Vector2 EXPECTED_LAYOUT_SIZE(350.0f, 19.0f); + const Vector3 EXPECTED_NATURAL_SIZE(350.0f, 20.0f, 0.0f); controller->SetText(textSingle); controller->Relayout(size); - controller->SetMultiLineEnabled( false ); + controller->SetMultiLineEnabled(false); Vector3 naturalSize = controller->GetNaturalSize(); Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); - float lineSpacing0 = controller->GetDefaultLineSpacing(); + float lineSpacing0 = controller->GetDefaultLineSpacing(); - DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION ); + DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION); } // single line, line spacing = 20px { - const float EXPECTED_SPACING = 20.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 40.0f, 0.0f ); + const float EXPECTED_SPACING = 20.0f; + const Vector2 EXPECTED_LAYOUT_SIZE(350.0f, 19.0f); + const Vector3 EXPECTED_NATURAL_SIZE(350.0f, 40.0f, 0.0f); controller->SetText(textSingle); controller->Relayout(size); - controller->SetDefaultLineSpacing( 20 ); - controller->SetMultiLineEnabled( false ); + controller->SetDefaultLineSpacing(20); + controller->SetMultiLineEnabled(false); Vector3 naturalSize = controller->GetNaturalSize(); Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); - float lineSpacing0 = controller->GetDefaultLineSpacing(); + float lineSpacing0 = controller->GetDefaultLineSpacing(); - DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION ); + DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION); } // multi-line, line spacing = 0px { - const float EXPECTED_SPACING = 0.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 350.0f, 39.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 58.0f, 0.0f ); + const float EXPECTED_SPACING = 0.0f; + const Vector2 EXPECTED_LAYOUT_SIZE(340.0f, 39.0f); + const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 58.0f, 0.0f); controller->SetText(textMulti); controller->Relayout(size); - controller->SetMultiLineEnabled( true ); - controller->SetDefaultLineSpacing( 0 ); + controller->SetMultiLineEnabled(true); + controller->SetDefaultLineSpacing(0); Vector3 naturalSize = controller->GetNaturalSize(); Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); - float lineSpacing0 = controller->GetDefaultLineSpacing(); + float lineSpacing0 = controller->GetDefaultLineSpacing(); - DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION ); + DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION); } // multi-line, line spacing = 20px { - const float EXPECTED_SPACING = 20.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 57.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 118.0f, 0.0f ); + const float EXPECTED_SPACING = 20.0f; + const Vector2 EXPECTED_LAYOUT_SIZE(121.0f, 57.0f); + const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 118.0f, 0.0f); controller->SetText(textMulti); controller->Relayout(size); - controller->SetMultiLineEnabled( true ); - controller->SetDefaultLineSpacing( 20 ); + controller->SetMultiLineEnabled(true); + controller->SetDefaultLineSpacing(20); Vector3 naturalSize = controller->GetNaturalSize(); Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); - float lineSpacing0 = controller->GetDefaultLineSpacing(); + float lineSpacing0 = controller->GetDefaultLineSpacing(); - DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION ); + DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION); } // multi-line, line spacing = 30px { - const float EXPECTED_SPACING = 30.0f; - const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 117.0f ); - const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 148.0f, 0.0f ); + const float EXPECTED_SPACING = 30.0f; + const Vector2 EXPECTED_LAYOUT_SIZE(121.0f, 117.0f); + const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 148.0f, 0.0f); controller->SetText(textMulti); controller->Relayout(size); - controller->SetMultiLineEnabled( true ); - controller->SetDefaultLineSpacing( 30 ); + controller->SetMultiLineEnabled(true); + controller->SetDefaultLineSpacing(30); Vector3 naturalSize = controller->GetNaturalSize(); Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); - float lineSpacing0 = controller->GetDefaultLineSpacing(); + float lineSpacing0 = controller->GetDefaultLineSpacing(); - DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION ); - DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION ); + DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION); + DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION); } - END_TEST; - } int UtcDaliTextControllerCheckBufferIndices(void) @@ -795,16 +843,42 @@ int UtcDaliTextControllerCheckBufferIndices(void) controller->SetText(text); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get()); + + // Tweak some parameters to make the indices to access the text buffer invalid + mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u; + mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u; + mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u; + mImpl.mOperationsPending = Controller::ALL_OPERATIONS; + + // Perform a relayout + const Size size(application.GetScene().GetSize()); + controller->Relayout(size); + + // Set the text + const std::string emptyText(""); + controller->SetText(emptyText); // Tweak some parameters to make the indices to access the text buffer invalid - mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u; + mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = 10u; mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u; mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u; - mImpl.mOperationsPending = Controller::ALL_OPERATIONS; + mImpl.mOperationsPending = Controller::ALL_OPERATIONS; + + // Perform a relayout + controller->Relayout(size); + + // Set the text + controller->SetText(text); + + // Set the text size + controller->SetDefaultFontSize(10.f, Controller::POINT_SIZE); + + // Tweak some parameters to make the indices to access the text buffer invalid + mImpl.mTextUpdateInfo.Clear(); // Perform a relayout - const Size size( application.GetScene().GetSize() ); + controller->GetHeightForWidth(size.width / 2.f); controller->Relayout(size); tet_result(TET_PASS); @@ -824,38 +898,38 @@ int UtcDaliTextControllerCheckInputColorChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + 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 ); + 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() ); + 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 ) ); + 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 ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); tet_result(TET_PASS); @@ -875,11 +949,11 @@ int UtcDaliTextControllerCheckInputFontFamilyChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the text and font family const std::string text("Hello World!"); @@ -887,24 +961,23 @@ int UtcDaliTextControllerCheckInputFontFamilyChanged(void) controller->SetInputFontFamily("SamsungOneUI_200"); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ) ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); tet_result(TET_PASS); @@ -924,36 +997,35 @@ int UtcDaliTextControllerCheckInputFontWeightChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the text const std::string text("Hello World!"); controller->SetText(text); - controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL ); + controller->SetInputFontWeight(TextAbstraction::FontWeight::NORMAL); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ) ); + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); // change the input font weight - controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); tet_result(TET_PASS); @@ -973,36 +1045,35 @@ int UtcDaliTextControllerCheckInputFontWidthChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the text const std::string text("Hello World!"); controller->SetText(text); - controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL ); + controller->SetInputFontWidth(TextAbstraction::FontWidth::NORMAL); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ) ); + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); // change the input font width - controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); tet_result(TET_PASS); @@ -1022,36 +1093,35 @@ int UtcDaliTextControllerCheckInputFontSlantChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the text const std::string text("Hello World!"); controller->SetText(text); - controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL ); + controller->SetInputFontSlant(TextAbstraction::FontSlant::NORMAL); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ) ); + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); // change the input font slant - controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); tet_result(TET_PASS); @@ -1071,38 +1141,40 @@ int UtcDaliTextControllerCheckInputFontPointSizeChanged(void) // Enable the text input. // Creates a decorator. - Text::DecoratorPtr decorator = Text::Decorator::New( *controller, - *controller ); + Text::DecoratorPtr decorator = Text::Decorator::New(*controller, + *controller); InputMethodContext inputMethodContext = InputMethodContext::New(); // Enables the text input. - controller->EnableTextInput( decorator, inputMethodContext ); + controller->EnableTextInput(decorator, inputMethodContext); // Set the text const std::string text("Hello World!"); controller->SetText(text); - controller->SetInputFontPointSize( 1.0f ); + controller->SetInputFontPointSize(1.0f); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ) ); + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); // change the input font point size - controller->SetInputFontPointSize( 1.2f ); + 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 ); + 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() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); + // For coverage + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); + tet_result(TET_PASS); END_TEST; @@ -1117,40 +1189,39 @@ int UtcDaliTextControllerSelectEvent(void) ControllerPtr controller = Controller::New(); // Configures the text controller similarly to the text-field. - ConfigureTextField( controller ); + ConfigureTextField(controller); // Set the text const std::string text("Hello World!"); - controller->SetText( text ); + controller->SetText(text); // Select the whole text. - controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE ); + controller->SelectEvent(0.f, 0.f, SelectionType::INTERACTIVE); // Perform a relayout - const Size size( application.GetScene().GetSize() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); // Get the implementation of the text controller - Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + 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 ); + 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 ); + controller->SelectEvent(0.f, 0.f, SelectionType::ALL); // Perform a relayout - controller->Relayout( size ); + controller->Relayout(size); - mImpl.RetrieveSelection( retrieved_text, false ); - DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION ); + mImpl.RetrieveSelection(retrieved_text, false); + DALI_TEST_EQUALS(text, retrieved_text, TEST_LOCATION); END_TEST; } - int UtcDaliTextControllerRemoveTextChangeEventData(void) { tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData"); @@ -1159,34 +1230,34 @@ int UtcDaliTextControllerRemoveTextChangeEventData(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - ConfigureTextField( controller ); + ConfigureTextField(controller); // Set the text - const std::string text( "Hello World!" ); - controller->SetText( text ); - controller->SetInputFontPointSize( 1.0f ); + 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() ); + Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get()); - DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + 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 ); + 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 ) ); + controller->KeyEvent(GenerateKey("", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN)); - DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS(EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION); // Perform a relayout - const Size size( application.GetScene().GetSize() ); - controller->Relayout( size ); + const Size size(application.GetScene().GetSize()); + controller->Relayout(size); tet_result(TET_PASS); @@ -1205,29 +1276,129 @@ int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void) // Set the text const std::string text("Hello World!"); - controller->SetText( text ); - controller->SetInputFontPointSize( 1.0f ); + controller->SetText(text); + controller->SetInputFontPointSize(1.0f); controller->KeyboardFocusGainEvent(); application.SendNotification(); application.Render(); // Perform a relayout - const Size size( application.GetScene().GetSize() ); + const Size size(application.GetScene().GetSize()); controller->Relayout(size); // simulate a key event. - controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::Down ) ); + controller->KeyEvent(GenerateKey("a", "a", 38, 0, 0, Dali::KeyEvent::DOWN)); // change the input font point size - controller->SetInputFontPointSize( 20.f ); + 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; +} + +int UtcDaliTextControllerMultipleInsert(void) +{ + tet_infoline(" UtcDaliTextControllerMultipleInsert"); + 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(); + + // When maid thread is busy, multiple event might be executed. + InputMethodContext::EventData imfEvent1 = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "A", 0, 1); + InputMethodContext::EventData imfEvent2 = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "AAAAA", 0, 5); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent2); + // Perform a relayout + const Size size(application.GetScene().GetSize()); + + application.SendNotification(); + application.Render(); + controller->Relayout(size); + std::string text; + controller->GetText(text); + + DALI_TEST_EQUALS("AAAAA", text, TEST_LOCATION); + tet_result(TET_PASS); END_TEST;