X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit-internal%2Futc-Dali-Text-Controller.cpp;h=b079ce32ae1c5f6cb6ffbca372390c1e2690c83f;hb=HEAD;hp=b92f0903697a4d09957b6c7fe0c3a0e914c8644e;hpb=ee431c9e2b342243f9e0e2b6bafca7505d321457;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git 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 b92f090..774cce1 100644 --- 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) 2016 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,10 +22,13 @@ #include #include -#include -#include +#include +#include +#include #include #include +#include +#include using namespace Dali; using namespace Toolkit; @@ -33,20 +36,23 @@ using namespace Text; namespace { - -const char* const OPTION_SELECT_WORD("option-select_word"); // "Select Word" 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 ) +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); + +// 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) { - gClipboardText = notifier.GetContent(); + return DevelKeyEvent::New(keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE); } } // namespace @@ -58,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; @@ -71,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; @@ -102,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; @@ -136,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 ); + 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; @@ -171,75 +177,263 @@ int UtcDaliTextControllerImfEvent(void) // Creates a text controller. ControllerPtr controller = Controller::New(); - std::string text; - ImfManager::ImfEventData imfEvent; + 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 ); + controller->EnableTextInput(decorator, inputMethodContext); - // Creates an ImfManager. - ImfManager imfManager = ImfManager::Get(); + // Set the placeholder text. + controller->SetPlaceholderText(Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali"); + + // For coverage. + imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); // Send VOID event. - imfEvent = ImfManager::ImfEventData( ImfManager::VOID, "", 0, 0 ); - controller->OnImfEvent( imfManager, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::VOID, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); + + controller->GetText(text); + DALI_TEST_CHECK(text.empty()); + DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION); // We should ignore Placeholder text here - controller->GetText( text ); - DALI_TEST_CHECK( text.empty() ); + 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); + controller->GetNaturalSize(); + + controller->GetText(text); + DALI_TEST_EQUALS("", text, TEST_LOCATION); + DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION); // Send COMMIT event. - imfEvent = ImfManager::ImfEventData( ImfManager::COMMIT, "Hello ", 0, 6 ); - controller->OnImfEvent( imfManager, 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 PREEDIT event - imfEvent = ImfManager::ImfEventData( ImfManager::PREEDIT, "w", 6, 1 ); - controller->OnImfEvent( imfManager, imfEvent ); + // Send PRE_EDIT event + 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 DELETESURROUNDING event - imfEvent = ImfManager::ImfEventData( ImfManager::DELETESURROUNDING, "", -1, 1 ); - controller->OnImfEvent( imfManager, imfEvent ); + // Send DELETE_SURROUNDING event + 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); + + // Send PRE_EDIT event + 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); + DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION); + + // Send GET_SURROUNDING event + imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); + + 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); + + 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; +} + +int UtcDaliTextControllerImfPreeditStyle(void) +{ + tet_infoline(" UtcDaliTextControllerImfPreeditStyle"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + std::string text; + InputMethodContext::EventData imfEvent; - // Send PREEDIT event - imfEvent = ImfManager::ImfEventData( ImfManager::PREEDIT, "wo", 6, 2 ); - controller->OnImfEvent( imfManager, 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 wo", 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); + controller->GetNaturalSize(); + + 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); + + // Set the preedit style as REVERSE + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE); + controller->GetNaturalSize(); + + 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); + + // Set the preedit style as HIGHLIGHT + inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::HIGHLIGHT); + controller->GetNaturalSize(); + + 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); + + // 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); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION); - // Send GETSURROUNDING event - imfEvent = ImfManager::ImfEventData( ImfManager::GETSURROUNDING, "", 0, 0 ); - controller->OnImfEvent( imfManager, imfEvent ); + imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1); + controller->OnInputMethodContextEvent(inputMethodContext, imfEvent); - controller->GetText( text ); - DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION ); + // 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); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), 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); + DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), 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); + 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; @@ -253,33 +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 ); + 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 ); - Stage::GetCurrent().Add( textPopup ); + textPopup.EnableButtons(buttonsToEnable); + application.GetScene().Add(textPopup); textPopup.ShowPopup(); // Render and notify @@ -287,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; @@ -375,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; @@ -393,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; @@ -411,29 +607,799 @@ 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; +} + +int UtcDaliTextControllerSetGetCheckProperty(void) +{ + tet_infoline(" UtcDaliTextControllerSetGetCheckProperty"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + DALI_TEST_CHECK(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); + + DALI_TEST_CHECK(!controller->IsInputModePassword()); + + // Set the text input to password. + controller->SetInputModePassword(true); + + DALI_TEST_CHECK(controller->IsInputModePassword()); + + // Unset the text input to password. + controller->SetInputModePassword(false); + + DALI_TEST_CHECK(!controller->IsInputModePassword()); + + tet_result(TET_PASS); + END_TEST; +} + +int UtcDaliTextControllerSetGetTapLongPressAction(void) +{ + tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + 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->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); + + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + 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::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; +} + +int UtcDaliTextControllerSetGetLineSpacingProperty(void) +{ + tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty"); + ToolkitTestApplication application; + + const Size size(application.GetScene().GetSize()); + + // single line text + const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog"); + + // multi-line text + const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog"); + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // single line, line spacing = 0px + { + 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); + + Vector3 naturalSize = controller->GetNaturalSize(); + Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); + 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); + } + + // single line, line spacing = 20px + { + 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); + + Vector3 naturalSize = controller->GetNaturalSize(); + Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); + 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); + } + + // multi-line, line spacing = 0px + { + 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); + + Vector3 naturalSize = controller->GetNaturalSize(); + Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); + 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); + } + + // multi-line, line spacing = 20px + { + 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); + + Vector3 naturalSize = controller->GetNaturalSize(); + Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); + 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); + } + + // multi-line, line spacing = 30px + { + 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); + + Vector3 naturalSize = controller->GetNaturalSize(); + Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize(); + 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); + } + + END_TEST; +} + +int UtcDaliTextControllerCheckBufferIndices(void) +{ + tet_infoline(" UtcDaliTextControllerCheckBufferIndices"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Set the text + const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog"); + controller->SetText(text); + + // Get the implementation of the text controller + 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 = 10u; + mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u; + mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u; + 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 + controller->GetHeightForWidth(size.width / 2.f); + 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); + + // For coverage + controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN)); 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; +} + +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; }