Changes after TouchData renamed to TouchEvent
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-TextEditor.cpp
old mode 100755 (executable)
new mode 100644 (file)
index f03a330..a7b87d4
@@ -101,6 +101,7 @@ const char* const PROPERTY_NAME_PLACEHOLDER                          = "placehol
 const char* const PROPERTY_NAME_ENABLE_SHIFT_SELECTION               = "enableShiftSelection";
 const char* const PROPERTY_NAME_ENABLE_GRAB_HANDLE                   = "enableGrabHandle";
 const char* const PROPERTY_NAME_MATCH_SYSTEM_LANGUAGE_DIRECTION      = "matchSystemLanguageDirection";
+const char* const PROPERTY_NAME_MAX_LENGTH                           = "maxLength";
 
 
 const Vector4 PLACEHOLDER_TEXT_COLOR( 0.8f, 0.8f, 0.8f, 0.8f );
@@ -122,11 +123,14 @@ const int KEY_SHIFT_MODIFIER = 257;
 const int KEY_CONTROL_MODIFIER = 258;
 
 const char* HANDLE_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insertpoint-icon.png";
+const char* HANDLE_LEFT_SELECTION_FILE_NAME = TEST_RESOURCE_DIR "/selection_handle_drop_left.png";
+const char* HANDLE_RIGHT_SELECTION_FILE_NAME = TEST_RESOURCE_DIR "/selection_handle_drop_right.png";
 
 const std::string DEFAULT_DEVICE_NAME("hwKeyboard");
 
 static bool gTextChangedCallBackCalled;
 static bool gInputStyleChangedCallbackCalled;
+static bool gMaxCharactersCallBackCalled;
 static Dali::Toolkit::TextEditor::InputStyle::Mask gInputStyleMask;
 
 struct CallbackFunctor
@@ -158,6 +162,13 @@ static void TestInputStyleChangedCallback( TextEditor control, TextEditor::Input
   gInputStyleMask = mask;
 }
 
+static void TestMaxLengthReachedCallback( TextEditor control )
+{
+  tet_infoline(" TestMaxLengthReachedCallback");
+
+  gMaxCharactersCallBackCalled = true;
+}
+
 // Generate a KeyEvent to send to Core.
 Integration::KeyEvent GenerateKey( const std::string& keyName,
                                    const std::string& logicalKey,
@@ -360,6 +371,23 @@ int UtcDaliToolkitTextEditorCopyConstructorP(void)
   END_TEST;
 }
 
+int UtcDaliTextEditorMoveConstructor(void)
+{
+  ToolkitTestApplication application;
+
+  TextEditor textEditor = TextEditor::New();
+  textEditor.SetProperty( TextEditor::Property::TEXT, "Test" );
+  DALI_TEST_CHECK( textEditor.GetProperty<std::string>( TextEditor::Property::TEXT ) == "Test" );
+
+  TextEditor moved = std::move( textEditor );
+  DALI_TEST_CHECK( moved );
+  DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION );
+  DALI_TEST_CHECK( moved.GetProperty<std::string>( TextEditor::Property::TEXT ) == "Test" );
+  DALI_TEST_CHECK( !textEditor );
+
+  END_TEST;
+}
+
 int UtcDaliToolkitTextEditorAssignmentOperatorP(void)
 {
   ToolkitTestApplication application;
@@ -373,6 +401,24 @@ int UtcDaliToolkitTextEditorAssignmentOperatorP(void)
   END_TEST;
 }
 
+int UtcDaliTextEditorMoveAssignment(void)
+{
+  ToolkitTestApplication application;
+
+  TextEditor textEditor = TextEditor::New();
+  textEditor.SetProperty( TextEditor::Property::TEXT, "Test" );
+  DALI_TEST_CHECK( textEditor.GetProperty<std::string>( TextEditor::Property::TEXT ) == "Test" );
+
+  TextEditor moved;
+  moved = std::move( textEditor );
+  DALI_TEST_CHECK( moved );
+  DALI_TEST_EQUALS( 1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION );
+  DALI_TEST_CHECK( moved.GetProperty<std::string>( TextEditor::Property::TEXT ) == "Test" );
+  DALI_TEST_CHECK( !textEditor );
+
+  END_TEST;
+}
+
 int UtcDaliTextEditorNewP(void)
 {
   ToolkitTestApplication application;
@@ -446,6 +492,7 @@ int UtcDaliTextEditorGetPropertyP(void)
   DALI_TEST_CHECK( editor.GetPropertyIndex( PROPERTY_NAME_ENABLE_SHIFT_SELECTION ) == DevelTextEditor::Property::ENABLE_SHIFT_SELECTION );
   DALI_TEST_CHECK( editor.GetPropertyIndex( PROPERTY_NAME_ENABLE_GRAB_HANDLE ) == DevelTextEditor::Property::ENABLE_GRAB_HANDLE );
   DALI_TEST_CHECK( editor.GetPropertyIndex( PROPERTY_NAME_MATCH_SYSTEM_LANGUAGE_DIRECTION ) == DevelTextEditor::Property::MATCH_SYSTEM_LANGUAGE_DIRECTION );
+  DALI_TEST_CHECK( editor.GetPropertyIndex( PROPERTY_NAME_MAX_LENGTH ) == DevelTextEditor::Property::MAX_LENGTH );
 
   END_TEST;
 }
@@ -475,7 +522,7 @@ int UtcDaliTextEditorSetPropertyP(void)
   tet_infoline(" UtcDaliToolkitTextEditorSetPropertyP");
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   // Note - we can't check the defaults since the stylesheets are platform-specific
 
@@ -876,7 +923,7 @@ int utcDaliTextEditorAtlasRenderP(void)
 
   application.GetGlAbstraction().SetCheckFramebufferStatusResult( GL_FRAMEBUFFER_COMPLETE );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   try
   {
@@ -900,7 +947,7 @@ int utcDaliTextEditorTextChangedP(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   // connect to the text changed signal.
   ConnectionTracker* testTracker = new ConnectionTracker();
@@ -963,7 +1010,7 @@ int utcDaliTextEditorInputStyleChanged01(void)
   bool inputStyleChangedSignal = false;
   editor.ConnectSignal( testTracker, "inputStyleChanged",   CallbackFunctor(&inputStyleChangedSignal) );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   // Render and notify
   application.SendNotification();
@@ -1177,7 +1224,7 @@ int utcDaliTextEditorInputStyleChanged02(void)
   bool inputStyleChangedSignal = false;
   editor.ConnectSignal( testTracker, "inputStyleChanged",   CallbackFunctor(&inputStyleChangedSignal) );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   // Render and notify
   application.SendNotification();
@@ -1399,7 +1446,7 @@ int utcDaliTextEditorEvent01(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
@@ -1446,7 +1493,7 @@ int utcDaliTextEditorEvent01(void)
   editor2.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 100.f ) );
   editor2.SetProperty( Actor::Property::POSITION, Vector2( 100.f, 100.f ));
 
-  Stage::GetCurrent().Add( editor2 );
+  application.GetScene().Add( editor2 );
 
   // Render and notify
   application.SendNotification();
@@ -1484,7 +1531,7 @@ int utcDaliTextEditorEvent02(void)
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
@@ -1618,7 +1665,7 @@ int utcDaliTextEditorEvent03(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "This is a long text for the size of the text-editor." );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -1711,7 +1758,7 @@ int utcDaliTextEditorEvent04(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "Hello\nworl" );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -1800,7 +1847,7 @@ int utcDaliTextEditorEvent05(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "Hello\nworl" );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -1882,7 +1929,7 @@ int utcDaliTextEditorEvent06(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "Hello\nworld\nHello world" );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -1972,7 +2019,7 @@ int utcDaliTextEditorEvent07(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "Hello\nworld\nHello world" );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -2116,7 +2163,7 @@ int utcDaliTextEditorEvent08(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "DALi" );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
@@ -2310,22 +2357,17 @@ int utcDaliTextEditorHandles(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::TEXT, "This is a long text for the size of the text-editor." );
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
   editor.SetProperty( TextEditor::Property::GRAB_HANDLE_IMAGE, HANDLE_IMAGE_FILE_NAME );
   editor.SetProperty( TextEditor::Property::SMOOTH_SCROLL, true );
 
-  Property::Map imagePropertyMap;
-  imagePropertyMap["type"] = "BufferImage";
-  imagePropertyMap["width"] = 40;
-  imagePropertyMap["height"] = 40;
-
-  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_IMAGE_LEFT, imagePropertyMap );
-  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_IMAGE_RIGHT, imagePropertyMap );
-  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT, imagePropertyMap );
-  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT, imagePropertyMap );
+  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_IMAGE_LEFT, Property::Map{ {"filename", HANDLE_LEFT_SELECTION_FILE_NAME } } );
+  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_IMAGE_RIGHT, Property::Map{ {"filename", HANDLE_LEFT_SELECTION_FILE_NAME } } );
+  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_PRESSED_IMAGE_LEFT, Property::Map{ {"filename", HANDLE_RIGHT_SELECTION_FILE_NAME } } );
+  editor.SetProperty( TextEditor::Property::SELECTION_HANDLE_PRESSED_IMAGE_RIGHT, Property::Map{ {"filename", HANDLE_RIGHT_SELECTION_FILE_NAME } } );
 
   editor.SetProperty( Actor::Property::SIZE, Vector2( 30.f, 500.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
@@ -2429,7 +2471,7 @@ int utcDaliTextEditorUnderPropertyStringP(void)
 
   std::string underlineSettings1( "{\"enable\":\"true\",\"color\":\"red\",\"height\":\"1\"}" );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::UNDERLINE, underlineSettings1 );
   DALI_TEST_EQUALS( editor.GetProperty<std::string>( TextEditor::Property::UNDERLINE ), underlineSettings1, TEST_LOCATION );
@@ -2473,7 +2515,7 @@ int utcDaliTextEditorShadowPropertyStringP(void)
 
   std::string shadowSettings( "{\"color\":\"green\",\"offset\":\"2 2\",\"blurRadius\":\"0\"}" );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::SHADOW, "{\"color\":\"green\",\"offset\":\"2 2\",\"blurRadius\":\"0\"}" );
 
@@ -2495,7 +2537,7 @@ int utcDaliTextEditorFontStylePropertyStringP(void)
 
   std::string fontStyleSettings( "{\"weight\":\"bold\",\"width\":\"condensed\",\"slant\":\"italic\"}" );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::FONT_STYLE, "{\"weight\":\"bold\",\"width\":\"condensed\",\"slant\":\"italic\"}" );
 
@@ -2521,7 +2563,7 @@ int utcDaliTextEditorGetPropertyLinecountP(void)
   editor.SetProperty( TextEditor::Property::TEXT,
                        "TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST ");
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 100.f ) );
   lineCount =  editor.GetProperty<int>( TextEditor::Property::LINE_COUNT );
@@ -2543,7 +2585,7 @@ int utcDaliTextEditorScrollStateChangedSignalTest(void)
   TextEditor editor = TextEditor::New();
   DALI_TEST_CHECK( editor );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::POINT_SIZE, 10.f );
   editor.SetProperty( Actor::Property::SIZE, Vector2( 50.f, 50.f ) );
@@ -2586,7 +2628,7 @@ int UtcDaliToolkitTextEditorTextWrapMode(void)
   editor.SetProperty( Actor::Property::SIZE, Vector2( 150.0f, 300.f ) );
   editor.SetProperty( TextEditor::Property::TEXT, "Hello world Hello world" );
 
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   editor.SetProperty( TextEditor::Property::LINE_WRAP_MODE, "WORD" );
   DALI_TEST_EQUALS( editor.GetProperty< int >( TextEditor::Property::LINE_WRAP_MODE ), static_cast< int >( Text::LineWrap::WORD ), TEST_LOCATION );
@@ -2637,7 +2679,7 @@ int UtcDaliTextEditorSetPaddingProperty(void)
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   application.SendNotification();
   application.Render();
@@ -2670,7 +2712,7 @@ int UtcDaliTextEditorEnableShiftSelectionProperty(void)
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   application.SendNotification();
   application.Render();
@@ -2698,7 +2740,7 @@ int UtcDaliTextEditorEnableGrabHandleProperty(void)
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   application.SendNotification();
   application.Render();
@@ -2726,7 +2768,7 @@ int UtcDaliTextEditorMatchSystemLanguageDirectionProperty(void)
   editor.SetProperty( Actor::Property::SIZE, Vector2( 300.f, 50.f ) );
   editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
   editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
-  Stage::GetCurrent().Add( editor );
+  application.GetScene().Add( editor );
 
   application.SendNotification();
   application.Render();
@@ -2754,3 +2796,36 @@ int UtcDaliTextEditorGetInputMethodContext(void)
 
   END_TEST;
 }
+
+int utcDaliTextEditorMaxCharactersReached(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("utcDaliTextEditorMaxCharactersReached");
+
+  TextEditor editor = TextEditor::New();
+  DALI_TEST_CHECK( editor );
+
+  application.GetScene().Add( editor );
+
+  const int maxNumberOfCharacters = 1;
+  editor.SetProperty( DevelTextEditor::Property::MAX_LENGTH, maxNumberOfCharacters );
+  DALI_TEST_EQUALS( editor.GetProperty<int>( DevelTextEditor::Property::MAX_LENGTH ), maxNumberOfCharacters, TEST_LOCATION );
+
+  editor.SetKeyInputFocus();
+
+  // connect to the text changed signal.
+  ConnectionTracker* testTracker = new ConnectionTracker();
+  DevelTextEditor::MaxLengthReachedSignal( editor ).Connect(&TestMaxLengthReachedCallback);
+  bool maxLengthReachedSignal = false;
+  editor.ConnectSignal( testTracker, "maxLengthReached", CallbackFunctor(&maxLengthReachedSignal) );
+
+  gMaxCharactersCallBackCalled = false;
+
+  application.ProcessEvent( GenerateKey( "a", "", "a", KEY_A_CODE, 0, 0, Integration::KeyEvent::Down, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+  application.ProcessEvent( GenerateKey( "a", "", "a", KEY_A_CODE, 0, 0, Integration::KeyEvent::Down, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE ) );
+
+  DALI_TEST_CHECK( gMaxCharactersCallBackCalled );
+  DALI_TEST_CHECK( maxLengthReachedSignal );
+
+  END_TEST;
+}