[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Text-Controller.cpp
old mode 100755 (executable)
new mode 100644 (file)
index cbff44c..774cce1
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 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.
 
 #include <dali-toolkit-test-suite-utils.h>
 #include <dali-toolkit/dali-toolkit.h>
-#include <toolkit-text-utils.h>
-#include <dali/devel-api/events/key-event-devel.h>
 #include <dali-toolkit/internal/controls/text-controls/text-field-impl.h>
-#include <dali-toolkit/internal/text/controller/text-controller.h>
 #include <dali-toolkit/internal/text/controller/text-controller-impl.h>
+#include <dali-toolkit/internal/text/controller/text-controller.h>
 #include <dali-toolkit/internal/text/text-control-interface.h>
 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
+#include <dali/devel-api/events/key-event-devel.h>
+#include <toolkit-text-utils.h>
 
 using namespace Dali;
 using namespace Toolkit;
@@ -36,30 +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 DevelKeyEvent::New( keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE );
+  return DevelKeyEvent::New(keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE);
 }
 
 } // namespace
@@ -71,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;
@@ -84,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;
@@ -115,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;
@@ -149,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;
@@ -184,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;
@@ -293,94 +294,102 @@ 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;
@@ -394,7 +403,7 @@ int UtcDaliTextControllerImfPreeditStyleReverse(void)
   // Creates a text controller.
   ControllerPtr controller = Controller::New();
 
-  std::string text;
+  std::string                   text;
   InputMethodContext::EventData imfEvent;
 
   DALI_TEST_CHECK(controller);
@@ -410,11 +419,11 @@ int UtcDaliTextControllerImfPreeditStyleReverse(void)
 
   // 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());
+  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;
@@ -438,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<Toolkit::TextSelectionPopup::Buttons>( TextSelectionPopup::CUT        |
-                                                                                                            TextSelectionPopup::COPY       |
-                                                                                                            TextSelectionPopup::PASTE      |
-                                                                                                            TextSelectionPopup::SELECT     |
-                                                                                                            TextSelectionPopup::SELECT_ALL |
-                                                                                                            TextSelectionPopup::CLIPBOARD );
+  Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>(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
@@ -473,84 +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;
@@ -564,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;
@@ -582,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;
@@ -600,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;
@@ -635,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;
@@ -669,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;
 }
@@ -706,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");
@@ -721,106 +728,104 @@ int UtcDaliTextControllerSetGetLineSpacingProperty(void)
 
   // single line, line spacing = 0px
   {
-    const float EXPECTED_SPACING = 0.0f;
-    const Vector2 EXPECTED_LAYOUT_SIZE( 349.0f, 19.0f);
-    const Vector3 EXPECTED_NATURAL_SIZE( 350.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( 349.0f, 19.0f );
-    const Vector3 EXPECTED_NATURAL_SIZE( 350.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( 339.0f, 39.0f );
-    const Vector3 EXPECTED_NATURAL_SIZE( 122.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( 121.0f, 57.0f );
-    const Vector3 EXPECTED_NATURAL_SIZE( 122.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( 121.0f, 117.0f );
-    const Vector3 EXPECTED_NATURAL_SIZE( 122.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)
@@ -838,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.mNumberOfCharactersToAdd    = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
   mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
   mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
-  mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
+  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
-  const Size size( application.GetScene().GetSize() );
+  controller->GetHeightForWidth(size.width / 2.f);
   controller->Relayout(size);
 
   tet_result(TET_PASS);
@@ -867,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<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
+  DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
+  DALI_TEST_EQUALS(Controller::COLOR, static_cast<Controller::OperationsMask>(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);
@@ -918,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!");
@@ -930,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<Controller::OperationsMask>( 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<Controller::OperationsMask>(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);
@@ -967,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<Controller::OperationsMask>( 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<Controller::OperationsMask>(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);
@@ -1016,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<Controller::OperationsMask>( 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<Controller::OperationsMask>(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);
@@ -1065,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<Controller::OperationsMask>( 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<Controller::OperationsMask>(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);
@@ -1114,40 +1141,39 @@ 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<Controller::OperationsMask>( 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<Controller::OperationsMask>(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 ) );
+  controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
 
   tet_result(TET_PASS);
 
@@ -1163,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");
@@ -1205,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);
 
@@ -1251,22 +1276,22 @@ 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();
@@ -1287,43 +1312,43 @@ int UtcDaliTextControllerDeleteSurroundings(void)
   // Creates a text controller.
   ControllerPtr controller = Controller::New();
 
-  ConfigureTextField( controller );
+  ConfigureTextField(controller);
 
   // 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);
 
   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 );
+  InputMethodContext::EventData imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3);
+  controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
 
   // Perform a relayout
-  const Size size( application.GetScene().GetSize() );
+  const Size size(application.GetScene().GetSize());
 
   application.SendNotification();
   application.Render();
 
-  controller->Relayout( size );
+  controller->Relayout(size);
 
   // Simulate a key event to delete one text
-  controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
+  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 );
+  imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -2, 2);
+  controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
 
   application.SendNotification();
   application.Render();
 
-  controller->Relayout( size );
+  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 ) );
+  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 );
+  DALI_TEST_EQUALS(EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION);
 
   // Force to update the model.
   controller->GetNaturalSize();
@@ -1331,7 +1356,48 @@ int UtcDaliTextControllerDeleteSurroundings(void)
   application.SendNotification();
   application.Render();
 
-  controller->Relayout( size );
+  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);