Merge "Set FullRelayoutNeeded after GetNaturalSize/GetHeightForWidth to avoid the...
authorBowon Ryu <bowon.ryu@samsung.com>
Wed, 15 Dec 2021 09:04:49 +0000 (09:04 +0000)
committerGerrit Code Review <gerrit@review>
Wed, 15 Dec 2021 09:04:49 +0000 (09:04 +0000)
1  2 
automated-tests/src/dali-toolkit/utc-Dali-TextEditor.cpp

@@@ -29,7 -29,6 +29,7 @@@
  #include <dali-toolkit/devel-api/controls/text-controls/text-editor-devel.h>
  #include <dali-toolkit/devel-api/text/rendering-backend.h>
  #include <dali-toolkit/devel-api/text/text-enumerations-devel.h>
 +#include "test-text-geometry-utils.h"
  
  using namespace Dali;
  using namespace Toolkit;
@@@ -4456,258 -4455,6 +4456,258 @@@ int utcDaliTextEditorCursorPositionChan
    END_TEST;
  }
  
 +int utcDaliTextEditorGeometryEllipsisStart(void)
 +{
 +  ToolkitTestApplication application;
 +  tet_infoline(" utcDaliTextEditorGeometryEllipsisStart");
 +
 +  TextEditor editor = TextEditor::New();
 +  DALI_TEST_CHECK( editor );
 +
 +  application.GetScene().Add( editor );
 +
 +  editor.SetProperty( TextEditor::Property::POINT_SIZE, 7.f );
 +  editor.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 50.f ) );
 +  editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
 +  editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
 +  editor.SetProperty( TextEditor::Property::ENABLE_MARKUP, true );
 +  editor.SetProperty( DevelTextEditor::Property::ENABLE_SCROLL_BAR, false );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS, true );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::START );
 +  editor.SetProperty( TextEditor::Property::TEXT, "line1 \nline2\nline 3\nline4" );
 +
 +  // Avoid a crash when core load gl resources.
 +  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 +
 +  // Render and notify
 +  application.SendNotification();
 +  application.Render();
 +
 +  unsigned int expectedCount = 2;
 +  unsigned int startIndex = 0;
 +  unsigned int endIndex = 24;
 +
 +  Vector<Vector2> positionsList = DevelTextEditor::GetTextPosition(editor, startIndex, endIndex);
 +  Vector<Vector2> sizeList = DevelTextEditor::GetTextSize(editor, startIndex, endIndex);
 +
 +  DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
 +  DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
 +
 +  Vector<Vector2> expectedSizes;
 +  Vector<Vector2> expectedPositions;
 +
 +  expectedPositions.PushBack(Vector2(37, 0));
 +  expectedSizes.PushBack(Vector2(20, 25));
 +
 +  expectedPositions.PushBack(Vector2(-1, 25));
 +  expectedSizes.PushBack(Vector2(52, 25));
 +
 +  TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
 +
 +  END_TEST;
 +}
 +
 +int utcDaliTextEditorGeometryEllipsisMiddle(void)
 +{
 +  ToolkitTestApplication application;
 +  tet_infoline(" utcDaliTextEditorGeometryEllipsisMiddle");
 +
 +  TextEditor editor = TextEditor::New();
 +  DALI_TEST_CHECK( editor );
 +
 +  application.GetScene().Add( editor );
 +
 +  editor.SetProperty( TextEditor::Property::POINT_SIZE, 7.f );
 +  editor.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 50.f ) );
 +  editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
 +  editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
 +  editor.SetProperty( TextEditor::Property::ENABLE_MARKUP, true );
 +  editor.SetProperty( DevelTextEditor::Property::ENABLE_SCROLL_BAR, false );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS, true );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::MIDDLE );
 +  editor.SetProperty( TextEditor::Property::TEXT, "line1 \nline2\nline 3\nline4" );
 +
 +  // Avoid a crash when core load gl resources.
 +  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 +
 +  // Render and notify
 +  application.SendNotification();
 +  application.Render();
 +
 +  unsigned int expectedCount = 2;
 +  unsigned int startIndex = 0;
 +  unsigned int endIndex = 24;
 +
 +  Vector<Vector2> positionsList = DevelTextEditor::GetTextPosition(editor, startIndex, endIndex);
 +  Vector<Vector2> sizeList = DevelTextEditor::GetTextSize(editor, startIndex, endIndex);
 +
 +  DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
 +  DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
 +
 +  Vector<Vector2> expectedSizes;
 +  Vector<Vector2> expectedPositions;
 +
 +  expectedPositions.PushBack(Vector2(-1, 0));
 +  expectedSizes.PushBack(Vector2(25, 25));
 +
 +  expectedPositions.PushBack(Vector2(-1, 25));
 +  expectedSizes.PushBack(Vector2(52, 25));
 +
 +  TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
 +
 +  END_TEST;
 +}
 +
 +int utcDaliTextEditorGeometryEllipsisEnd(void)
 +{
 +  ToolkitTestApplication application;
 +  tet_infoline(" utcDaliTextEditorGeometryEllipsisEnd");
 +
 +  TextEditor editor = TextEditor::New();
 +  DALI_TEST_CHECK( editor );
 +
 +  application.GetScene().Add( editor );
 +
 +  editor.SetProperty( TextEditor::Property::POINT_SIZE, 7.f );
 +  editor.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 50.f ) );
 +  editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
 +  editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
 +  editor.SetProperty( TextEditor::Property::ENABLE_MARKUP, true );
 +  editor.SetProperty( DevelTextEditor::Property::ENABLE_SCROLL_BAR, false );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS, true );
 +  editor.SetProperty( DevelTextEditor::Property::ELLIPSIS_POSITION, DevelText::EllipsisPosition::END );
 +  editor.SetProperty( TextEditor::Property::TEXT, "line1 \nline2\nline 3\nline4" );
 +
 +  // Avoid a crash when core load gl resources.
 +  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 +
 +  // Render and notify
 +  application.SendNotification();
 +  application.Render();
 +
 +  unsigned int expectedCount = 2;
 +  unsigned int startIndex = 0;
 +  unsigned int endIndex = 24;
 +
 +  Vector<Vector2> positionsList = DevelTextEditor::GetTextPosition(editor, startIndex, endIndex);
 +  Vector<Vector2> sizeList = DevelTextEditor::GetTextSize(editor, startIndex, endIndex);
 +
 +  DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
 +  DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
 +
 +  Vector<Vector2> expectedSizes;
 +  Vector<Vector2> expectedPositions;
 +
 +  expectedPositions.PushBack(Vector2(-1, 0));
 +  expectedSizes.PushBack(Vector2(59, 25));
 +
 +  expectedPositions.PushBack(Vector2(-1, 25));
 +  expectedSizes.PushBack(Vector2(25, 25));
 +
 +  TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
 +
 +  END_TEST;
 +}
 +
 +int utcDaliTextEditorGeometryRTL(void)
 +{
 +  ToolkitTestApplication application;
 +  tet_infoline(" utcDaliTextEditorGeometryRTL");
 +
 +  TextEditor editor = TextEditor::New();
 +  DALI_TEST_CHECK( editor );
 +
 +  application.GetScene().Add( editor );
 +
 +  editor.SetProperty( TextEditor::Property::POINT_SIZE, 7.f );
 +  editor.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 50.f ) );
 +  editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
 +  editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
 +  editor.SetProperty( TextEditor::Property::ENABLE_MARKUP, true );
 +  editor.SetProperty( TextEditor::Property::TEXT, "line1 \nline2\nline 3\nالاخيرالسطر" );
 +
 +  // Avoid a crash when core load gl resources.
 +  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 +
 +  // Render and notify
 +  application.SendNotification();
 +  application.Render();
 +
 +  unsigned int expectedCount = 4;
 +  unsigned int startIndex = 3;
 +  unsigned int endIndex = 24;
 +
 +  Vector<Vector2> positionsList = DevelTextEditor::GetTextPosition(editor, startIndex, endIndex);
 +  Vector<Vector2> sizeList = DevelTextEditor::GetTextSize(editor, startIndex, endIndex);
 +
 +  DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
 +  DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
 +
 +  Vector<Vector2> expectedSizes;
 +  Vector<Vector2> expectedPositions;
 +
 +  expectedPositions.PushBack(Vector2(24, 0));
 +  expectedSizes.PushBack(Vector2(33, 25));
 +
 +  expectedPositions.PushBack(Vector2(-1, 25));
 +  expectedSizes.PushBack(Vector2(52, 25));
 +
 +  expectedPositions.PushBack(Vector2(-1, 50));
 +  expectedSizes.PushBack(Vector2(59, 25));
 +
 +  expectedPositions.PushBack(Vector2(61, 75));
 +  expectedSizes.PushBack(Vector2(37, 25));
 +
 +  TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
 +
 +  END_TEST;
 +}
 +
 +int utcDaliTextEditorGeometryGlyphMiddle(void)
 +{
 +  ToolkitTestApplication application;
 +  tet_infoline(" utcDaliTextEditorGeometryGlyphMiddle");
 +
 +  TextEditor editor = TextEditor::New();
 +  DALI_TEST_CHECK( editor );
 +
 +  application.GetScene().Add( editor );
 +
 +  editor.SetProperty( TextEditor::Property::POINT_SIZE, 7.f );
 +  editor.SetProperty( Actor::Property::SIZE, Vector2( 150.f, 200.f ) );
 +  editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
 +  editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
 +  editor.SetProperty( TextEditor::Property::ENABLE_MARKUP, true );
 +  editor.SetProperty( TextEditor::Property::TEXT, "لا تحتوي على لا" );
 +
 +  // Avoid a crash when core load gl resources.
 +  application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 +
 +  // Render and notify
 +  application.SendNotification();
 +  application.Render();
 +
 +  unsigned int expectedCount = 1;
 +  unsigned int startIndex = 1;
 +  unsigned int endIndex = 13;
 +
 +  Vector<Vector2> positionsList = DevelTextEditor::GetTextPosition(editor, startIndex, endIndex);
 +  Vector<Vector2> sizeList = DevelTextEditor::GetTextSize(editor, startIndex, endIndex);
 +
 +  DALI_TEST_EQUALS(positionsList.Size(), expectedCount, TEST_LOCATION);
 +  DALI_TEST_EQUALS(sizeList.Size(), expectedCount, TEST_LOCATION);
 +
 +  Vector<Vector2> expectedSizes;
 +  Vector<Vector2> expectedPositions;
 +
 +  expectedPositions.PushBack(Vector2(6, 0));
 +  expectedSizes.PushBack(Vector2(124, 25));
 +
 +  TestTextGeometryUtils::CheckGeometryResult(positionsList, sizeList, expectedPositions, expectedSizes);
 +
 +  END_TEST;
 +}
 +
  int utcDaliTextEditorSelectionClearedSignal(void)
  {
    ToolkitTestApplication application;
    application.Render();
  
    // Move to second line of the text & Select some text in the right of the current cursor position
-   application.ProcessEvent( GenerateKey( "", "", "", DALI_KEY_CURSOR_DOWN, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) ); 
+   application.ProcessEvent( GenerateKey( "", "", "", DALI_KEY_CURSOR_DOWN, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
    application.ProcessEvent( GenerateKey( "", "", "", DALI_KEY_CURSOR_RIGHT, KEY_SHIFT_MODIFIER, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
  
    // remove selection
@@@ -4973,4 -4720,212 +4973,212 @@@ int utcDaliTextEditorSelectionChangedSi
    DALI_TEST_EQUALS(oldSelectionEnd, 23, TEST_LOCATION);
  
    END_TEST;
+ }
+ int utcDaliTextEditorInsertCharacterAfterInitWithResizePolicyNaturalSize(void)
+ {
+   //This is to test a crash when used Resize Policy equals USE_NATURAL_SIZE
+   //DaliException on vector: "Iterator not inside vector"
+   ToolkitTestApplication application;
+   tet_infoline(" utcDaliTextEditorInsertCharacterAfterInitWithResizePolicyNaturalSize");
+   TextEditor editor = TextEditor::New();
+   DALI_TEST_CHECK( editor );
+   application.GetScene().Add( editor );
+   // Avoid a crash when core load gl resources.
+   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+   //Set multilines text
+   editor.SetProperty(Dali::Toolkit::TextEditor::Property::TEXT, "Hello \n World");
+   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+   //Set ResizePolicy to NaturalSize
+   editor.SetProperty(Dali::Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE);
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   // Create a tap event to touch the text editor.
+   TestGenerateTap( application, 5.0f, 5.0f );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   // Set currsor and add character (in first line)
+   editor.SetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION, 5);
+   application.ProcessEvent( GenerateKey( "d", "", "d", KEY_D_CODE, 0, 0, Integration::KeyEvent::DOWN, "d", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+   application.ProcessEvent( GenerateKey( "d", "", "d", KEY_D_CODE, 0, 0, Integration::KeyEvent::UP, "d", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   //Check the changed text and cursor position
+   DALI_TEST_EQUALS( editor.GetProperty( TextEditor::Property::TEXT ).Get<std::string>(), "Hellod \n World", TEST_LOCATION );
+   DALI_TEST_EQUALS( editor.GetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION ).Get<int>(), 6, TEST_LOCATION );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   END_TEST;
+ }
+ int utcDaliTextEditorRemoveCharacterAfterInitWithResizePolicyNaturalSize(void)
+ {
+   //This is to test a crash when used Resize Policy equals USE_NATURAL_SIZE
+   //DaliException on vector: "Iterator not inside vector"
+   ToolkitTestApplication application;
+   tet_infoline(" utcDaliTextEditorRemoveCharacterAfterInitWithResizePolicyNaturalSize");
+   TextEditor editor = TextEditor::New();
+   DALI_TEST_CHECK( editor );
+   application.GetScene().Add( editor );
+   // Avoid a crash when core load gl resources.
+   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+   //Set multilines text
+   editor.SetProperty(Dali::Toolkit::TextEditor::Property::TEXT, "Hello \n World");
+   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+   //Set ResizePolicy to NaturalSize
+   editor.SetProperty(Dali::Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE);
+   // Set currsor
+   editor.SetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION, 5);
+   application.SendNotification();
+   application.Render();
+   // Set focus and remove character
+   editor.SetKeyInputFocus();
+   application.ProcessEvent( GenerateKey( "", "", "", DALI_KEY_BACKSPACE, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   //Check the changed text and cursor position
+   DALI_TEST_EQUALS( editor.GetProperty( TextEditor::Property::TEXT ).Get<std::string>(), "Hell \n World", TEST_LOCATION );
+   DALI_TEST_EQUALS( editor.GetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION ).Get<int>(), 4, TEST_LOCATION );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   END_TEST;
+ }
+ int utcDaliTextEditorCutSelectedTextAfterInitWithResizePolicyNaturalSize(void)
+ {
+   //This is to test a crash when used Resize Policy equals USE_NATURAL_SIZE
+   //DaliException on vector: "Iterator not inside vector"
+   ToolkitTestApplication application;
+   tet_infoline(" utcDaliTextEditorCutSelectedTextAfterInitWithResizePolicyNaturalSize");
+   TextEditor editor = TextEditor::New();
+   DALI_TEST_CHECK( editor );
+   application.GetScene().Add( editor );
+   // Avoid a crash when core load gl resources.
+   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+   //Set multilines text
+   editor.SetProperty(Dali::Toolkit::TextEditor::Property::TEXT, "Hello \n World");
+   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+   //Set ResizePolicy to NaturalSize
+   editor.SetProperty(Dali::Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE);
+   //Select text at initialization (before the first render)
+   DevelTextEditor::SelectText( editor ,3, 5 );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   //Cut text
+   application.ProcessEvent( GenerateKey( "", "", "", Dali::DevelKey::DALI_KEY_CONTROL_LEFT, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+   application.ProcessEvent( GenerateKey( "x", "x", "x", KEY_X_CODE, KEY_CONTROL_MODIFIER, 0, Integration::KeyEvent::DOWN, "x", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   //Check the changed text and cursor position
+   DALI_TEST_EQUALS( editor.GetProperty( TextEditor::Property::TEXT ).Get<std::string>(), "Hel \n World", TEST_LOCATION );
+   DALI_TEST_EQUALS( editor.GetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION ).Get<int>(), 3, TEST_LOCATION );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   END_TEST;
+ }
+ int utcDaliTextEditorDoubleEnterAfterInitWithResizePolicyNaturalSize(void)
+ {
+   //This is to test a crash when used Resize Policy equals USE_NATURAL_SIZE
+   //DaliException on vector: "Iterator not inside vector"
+   ToolkitTestApplication application;
+   tet_infoline(" utcDaliTextEditorDoubleEnterAfterInitWithResizePolicyNaturalSize");
+   TextEditor editor = TextEditor::New();
+   DALI_TEST_CHECK( editor );
+   application.GetScene().Add( editor );
+   // Avoid a crash when core load gl resources.
+   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
+   //Set multilines text
+   editor.SetProperty(Dali::Toolkit::TextEditor::Property::TEXT, "Hello \n World");
+   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+   //Set ResizePolicy to NaturalSize
+   editor.SetProperty(Dali::Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE);
+   // Set currsor
+   editor.SetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION, 5);
+   application.SendNotification();
+   application.Render();
+   // Set focus and double enter (new line)
+   editor.SetKeyInputFocus();
+   application.ProcessEvent(GenerateKey("Enter", "", "\n", 13, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE));
+   application.ProcessEvent(GenerateKey("Enter", "", "\n", 13, 0, 0, Integration::KeyEvent::DOWN, "", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE));
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   //Check the changed text and cursor position
+   DALI_TEST_EQUALS( editor.GetProperty( TextEditor::Property::TEXT ).Get<std::string>(), "Hello\n\n \n World", TEST_LOCATION );
+   DALI_TEST_EQUALS( editor.GetProperty( DevelTextEditor::Property::PRIMARY_CURSOR_POSITION ).Get<int>(), 7, TEST_LOCATION );
+   // Render and notify
+   application.SendNotification();
+   application.Render();
+   END_TEST;
  }