2 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #include <dali-toolkit-test-suite-utils.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <toolkit-text-utils.h>
26 #include <dali/devel-api/events/key-event-devel.h>
27 #include <dali-toolkit/internal/controls/text-controls/text-field-impl.h>
28 #include <dali-toolkit/internal/text/controller/text-controller.h>
29 #include <dali-toolkit/internal/text/controller/text-controller-impl.h>
30 #include <dali-toolkit/internal/text/text-control-interface.h>
31 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
34 using namespace Toolkit;
40 const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option.
41 const char* const OPTION_CUT("optionCut"); // "Cut" popup option.
42 const char* const OPTION_COPY("optionCopy"); // "Copy" popup option.
43 const char* const OPTION_PASTE("optionPaste"); // "Paste" popup option.
44 const char* const OPTION_CLIPBOARD("optionClipboard"); // "Clipboard" popup option.
46 const Size CONTROL_SIZE( 300.f, 60.f );
48 std::string gClipboardText;
49 void ContentSelectedCallback( ClipboardEventNotifier& notifier )
51 gClipboardText = notifier.GetContent();
54 // Generate a KeyEvent to send to Core.
55 Dali::KeyEvent GenerateKey( const std::string& keyName,
56 const std::string& keyString,
59 unsigned long timeStamp,
60 const Dali::KeyEvent::State& keyState )
62 return DevelKeyEvent::New( keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE );
67 int UtcDaliTextController(void)
69 tet_infoline(" UtcDaliTextController");
70 ToolkitTestApplication application;
72 // Creates a text controller.
73 ControllerPtr controller = Controller::New();
74 DALI_TEST_CHECK( controller );
80 int UtcDaliTextControllerSetGetScrollEnabled(void)
82 tet_infoline(" UtcDaliTextControllerSetGetScrollEnabled");
83 ToolkitTestApplication application;
85 // Creates a text controller.
86 ControllerPtr controller = Controller::New();
87 DALI_TEST_CHECK( controller );
89 // Configures the text controller similarly to the text-editor.
90 ConfigureTextEditor( controller );
92 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
93 DALI_TEST_CHECK( controller->IsVerticalScrollEnabled() );
95 // Configures the text controller similarly to the text-field.
96 ConfigureTextField( controller );
98 DALI_TEST_CHECK( controller->IsHorizontalScrollEnabled() );
99 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
101 // Configures the text controller similarly to the text-label.
102 ConfigureTextLabel( controller );
104 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
105 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
107 tet_result(TET_PASS);
111 int UtcDaliTextControllerSetIsTextElide(void)
113 tet_infoline(" UtcDaliTextControllerSetIsTextElide");
114 ToolkitTestApplication application;
116 // Creates a text controller.
117 ControllerPtr controller = Controller::New();
118 DALI_TEST_CHECK( controller );
120 // Configures the text controller similarly to the text-editor.
121 ConfigureTextEditor( controller );
122 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
124 controller->SetTextElideEnabled( true );
125 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
127 // Configures the text controller similarly to the text-field.
128 ConfigureTextField( controller );
129 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
131 controller->SetTextElideEnabled( true );
132 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
134 // Configures the text controller similarly to the text-label.
135 ConfigureTextLabel( controller );
136 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
138 controller->SetTextElideEnabled( false );
139 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
141 tet_result(TET_PASS);
145 int UtcDaliTextControllerEnableCursorBlinking(void)
147 tet_infoline(" UtcDaliTextControllerEnableCursorBlinking");
148 ToolkitTestApplication application;
150 // Creates a text controller.
151 ControllerPtr controller = Controller::New();
152 DALI_TEST_CHECK( controller );
154 // There is no text input enabled.
155 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
157 // Enable the text input.
158 // Creates a decorator.
159 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
161 InputMethodContext inputMethodContext = InputMethodContext::New();
162 // Enables the text input.
163 controller->EnableTextInput( decorator, inputMethodContext );
165 // Enables the cursor blink.
166 controller->SetEnableCursorBlink( true );
168 DALI_TEST_CHECK( controller->GetEnableCursorBlink() );
170 // Disables the cursor blink.
171 controller->SetEnableCursorBlink( false );
173 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
175 tet_result(TET_PASS);
179 int UtcDaliTextControllerImfEvent(void)
181 tet_infoline(" UtcDaliTextController");
182 ToolkitTestApplication application;
184 // Creates a text controller.
185 ControllerPtr controller = Controller::New();
188 InputMethodContext::EventData imfEvent;
190 DALI_TEST_CHECK( controller );
192 // Enable the text input.
193 // Creates a decorator.
194 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
197 InputMethodContext inputMethodContext = InputMethodContext::New();
198 // Enables the text input.
199 controller->EnableTextInput( decorator, inputMethodContext );
201 // Set the placeholder text.
202 controller->SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali" );
205 imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 );
206 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
209 imfEvent = InputMethodContext::EventData( InputMethodContext::VOID, "", 0, 0 );
210 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
212 controller->GetText( text );
213 DALI_TEST_CHECK( text.empty() );
215 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
216 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
217 controller->GetNaturalSize();
219 // Check 'Delete All' key which means the input panel send a big range
220 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -100, 100 );
221 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
222 controller->GetNaturalSize();
224 controller->GetText( text );
225 DALI_TEST_EQUALS( "", text, TEST_LOCATION );
227 // Send COMMIT event.
228 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
229 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
231 // Force to update the model.
232 controller->GetNaturalSize();
234 controller->GetText( text );
235 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
237 // Send PRE_EDIT event
238 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
239 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
241 // Force to update the model.
242 controller->GetNaturalSize();
244 controller->GetText( text );
245 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
247 // Send DELETE_SURROUNDING event
248 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
249 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
251 // Force to update the model.
252 controller->GetNaturalSize();
254 controller->GetText( text );
255 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
258 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::UNDERLINE );
260 // Send PRE_EDIT event
261 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "wo", 6, 2 );
262 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
264 // Force to update the model.
265 controller->GetNaturalSize();
267 controller->GetText( text );
268 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
270 // Send GET_SURROUNDING event
271 imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 );
272 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
274 controller->GetText( text );
275 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
277 // Send PRIVATE_COMMAND event
278 imfEvent = InputMethodContext::EventData( InputMethodContext::PRIVATE_COMMAND, "", 0, 0 );
279 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
281 controller->GetText( text );
282 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
284 tet_result(TET_PASS);
288 int UtcDaliTextControllerImfPreeditStyle(void)
290 tet_infoline(" UtcDaliTextControllerImfPreeditStyle");
291 ToolkitTestApplication application;
293 // Creates a text controller.
294 ControllerPtr controller = Controller::New();
297 InputMethodContext::EventData imfEvent;
299 DALI_TEST_CHECK( controller );
301 // Configures the text controller similarly to the text-field.
302 ConfigureTextField( controller );
304 InputMethodContext inputMethodContext = InputMethodContext::New();
306 // Send COMMIT event.
307 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
308 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
310 // Force to update the model.
311 controller->GetNaturalSize();
313 controller->GetText( text );
314 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
316 // Send PRE_EDIT event
317 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
318 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
319 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::NONE );
320 controller->GetNaturalSize();
322 controller->GetText( text );
323 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
325 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
326 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
328 // Set the preedit style as REVERSE
329 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::REVERSE );
330 controller->GetNaturalSize();
332 controller->GetText( text );
333 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
335 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
336 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
338 // Set the preedit style as HIGHLIGHT
339 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::HIGHLIGHT );
340 controller->GetNaturalSize();
342 controller->GetText( text );
343 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
345 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
346 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
348 // Set the preedit style as CUSTOM_PLATFORM_STYLE_1
349 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_1 );
350 controller->GetNaturalSize();
352 controller->GetText( text );
353 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
355 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
356 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
358 // Set the preedit style as CUSTOM_PLATFORM_STYLE_2
359 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_2 );
360 controller->GetNaturalSize();
362 controller->GetText( text );
363 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
365 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
366 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
368 // Set the preedit style as CUSTOM_PLATFORM_STYLE_3
369 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_3 );
370 controller->GetNaturalSize();
372 controller->GetText( text );
373 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
375 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
376 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
378 // Set the preedit style as CUSTOM_PLATFORM_STYLE_4
379 inputMethodContext.SetPreeditStyle( InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_4 );
380 controller->GetNaturalSize();
382 controller->GetText( text );
383 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
385 tet_result(TET_PASS);
389 int UtcDaliTextControllerImfPreeditStyleReverse(void)
391 tet_infoline(" UtcDaliTextControllerImfPreeditStyleReverse");
392 ToolkitTestApplication application;
394 // Creates a text controller.
395 ControllerPtr controller = Controller::New();
398 InputMethodContext::EventData imfEvent;
400 DALI_TEST_CHECK(controller);
402 // Configures the text controller similarly to the text-field.
403 ConfigureTextField(controller);
405 InputMethodContext inputMethodContext = InputMethodContext::New();
407 // Send PRE_EDIT event
408 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "Reverse", 0, 7);
409 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
411 // For coverage, mEditableControlInterface is required.
412 // Creates a temporary text-field to use mEditableControlInterface.
413 TextField field = TextField::New();
414 Toolkit::Internal::TextField& fieldImpl = GetImpl(field);
415 ControllerPtr fieldController = fieldImpl.GetTextController();
416 Controller::Impl& fieldControllerImpl = Controller::Impl::GetImplementation(*fieldController.Get());
417 Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
419 // For coverage, mEditableControlInterface is required.
420 controllerImpl.mEditableControlInterface = fieldControllerImpl.mEditableControlInterface;
422 // Set the preedit style as REVERSE
423 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE);
424 controller->GetNaturalSize();
426 controller->GetText(text);
427 DALI_TEST_EQUALS("Reverse", text, TEST_LOCATION);
429 tet_result(TET_PASS);
433 int UtcDaliTextControllerTextPopupButtonTouched(void)
435 tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
436 ToolkitTestApplication application;
438 // Creates a text controller.
439 ControllerPtr controller = Controller::New();
441 DALI_TEST_CHECK( controller );
445 Property::Map attributes;
447 // Enable the text input.
448 // Creates a decorator.
449 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
452 InputMethodContext inputMethodContext = InputMethodContext::New();
453 // Enables the text input.
454 controller->EnableTextInput( decorator, inputMethodContext );
456 // Creates the text's popup.
457 TextSelectionPopupCallbackInterface& callbackInterface = *controller;
458 TextSelectionPopup textPopup = TextSelectionPopup::New( &callbackInterface );
460 Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>( TextSelectionPopup::CUT |
461 TextSelectionPopup::COPY |
462 TextSelectionPopup::PASTE |
463 TextSelectionPopup::SELECT |
464 TextSelectionPopup::SELECT_ALL |
465 TextSelectionPopup::CLIPBOARD );
467 textPopup.EnableButtons( buttonsToEnable );
468 application.GetScene().Add( textPopup );
469 textPopup.ShowPopup();
472 application.SendNotification();
473 application.Render();
476 controller->SetText( "Hello world" );
478 // When the TextSelectionPopup is active, the controller has focus.
479 controller->KeyboardFocusGainEvent();
481 // Select the whole text.
482 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
483 DALI_TEST_CHECK( button );
485 button.DoAction( "buttonClick", attributes );
487 // Call relayout to process the input events.
488 controller->Relayout( CONTROL_SIZE );
491 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
492 DALI_TEST_CHECK( button );
494 button.DoAction( "buttonClick", attributes );
496 // Force to update the model.
497 controller->GetNaturalSize();
499 controller->GetText( text );
500 DALI_TEST_CHECK( text.empty() );
503 controller->SetText( "Hello world" );
505 // Select the whole text.
506 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
507 DALI_TEST_CHECK( button );
509 button.DoAction( "buttonClick", attributes );
511 // Call relayout to process the input events.
512 controller->Relayout( CONTROL_SIZE );
514 // Copy to the clipboard.
515 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) );
516 DALI_TEST_CHECK( button );
518 button.DoAction( "buttonClick", attributes );
520 // Call relayout to process the input events.
521 controller->Relayout( CONTROL_SIZE );
524 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
525 DALI_TEST_CHECK( button );
527 button.DoAction( "buttonClick", attributes );
529 // Force to update the model.
530 controller->GetNaturalSize();
532 controller->GetText( text );
533 DALI_TEST_CHECK( text.empty() );
535 ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get();
536 clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback );
539 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) );
540 DALI_TEST_CHECK( button );
542 button.DoAction( "buttonClick", attributes );
544 // Call relayout to process the input events.
545 controller->Relayout( CONTROL_SIZE );
547 DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION );
549 // Show the clipboard.
550 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) );
551 DALI_TEST_CHECK( button );
553 button.DoAction( "buttonClick", attributes );
555 tet_result(TET_PASS);
559 int UtcDaliTextControllerGetInputShadowProperty(void)
561 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
562 ToolkitTestApplication application;
564 // Creates a text controller.
565 ControllerPtr controller = Controller::New();
567 DALI_TEST_CHECK( controller );
569 const std::string& shadowProperties = controller->GetInputShadowProperties();
571 DALI_TEST_CHECK( shadowProperties.empty() );
573 tet_result(TET_PASS);
577 int UtcDaliTextControllerGetInputUnderlineProperty(void)
579 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
580 ToolkitTestApplication application;
582 // Creates a text controller.
583 ControllerPtr controller = Controller::New();
585 DALI_TEST_CHECK( controller );
587 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
589 DALI_TEST_CHECK( underlineProperties.empty() );
591 tet_result(TET_PASS);
595 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
597 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
598 ToolkitTestApplication application;
600 // Creates a text controller.
601 ControllerPtr controller = Controller::New();
603 DALI_TEST_CHECK( controller );
605 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
607 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
609 // Enable multi-line.
610 controller->SetMultiLineEnabled( true );
612 // Enable text scrolling.
613 controller->SetAutoScrollEnabled( true );
615 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
617 // Disable multi-line.
618 controller->SetMultiLineEnabled( false );
620 // Enable text scrolling.
621 controller->SetAutoScrollEnabled( true );
623 // Should be ebabled now.
624 DALI_TEST_CHECK( controller->IsAutoScrollEnabled() );
626 tet_result(TET_PASS);
630 int UtcDaliTextControllerSetGetCheckProperty(void)
632 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
633 ToolkitTestApplication application;
635 // Creates a text controller.
636 ControllerPtr controller = Controller::New();
638 DALI_TEST_CHECK( controller );
640 // Enable the text input.
641 // Creates a decorator.
642 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
644 InputMethodContext inputMethodContext = InputMethodContext::New();
645 // Enables the text input.
646 controller->EnableTextInput( decorator, inputMethodContext );
648 DALI_TEST_CHECK( !controller->IsInputModePassword() );
650 // Set the text input to password.
651 controller->SetInputModePassword( true );
653 DALI_TEST_CHECK( controller->IsInputModePassword() );
655 // Unset the text input to password.
656 controller->SetInputModePassword( false );
658 DALI_TEST_CHECK( !controller->IsInputModePassword() );
660 tet_result(TET_PASS);
664 int UtcDaliTextControllerSetGetTapLongPressAction(void)
666 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
667 ToolkitTestApplication application;
669 // Creates a text controller.
670 ControllerPtr controller = Controller::New();
672 DALI_TEST_CHECK( controller );
674 // Test first with no decorator.
676 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
677 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
678 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
680 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
681 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
682 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
684 // Add a decorator and re-test.
686 // Creates a decorator.
687 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
689 InputMethodContext inputMethodContext = InputMethodContext::New();
690 // Enables the text input.
691 controller->EnableTextInput( decorator, inputMethodContext );
693 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
694 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
695 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
697 DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP
698 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
699 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION );
704 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
706 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
707 ToolkitTestApplication application;
709 const Size size( application.GetScene().GetSize() );
712 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
715 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
717 // Creates a text controller.
718 ControllerPtr controller = Controller::New();
720 ConfigureTextLabel(controller);
722 // single line, line spacing = 0px
724 const float EXPECTED_SPACING = 0.0f;
725 const Vector2 EXPECTED_LAYOUT_SIZE( 349.0f, 19.0f);
726 const Vector3 EXPECTED_NATURAL_SIZE( 350.0f, 20.0f, 0.0f );
728 controller->SetText(textSingle);
729 controller->Relayout(size);
730 controller->SetMultiLineEnabled( false );
732 Vector3 naturalSize = controller->GetNaturalSize();
733 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
734 float lineSpacing0 = controller->GetDefaultLineSpacing();
736 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
737 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
738 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
741 // single line, line spacing = 20px
743 const float EXPECTED_SPACING = 20.0f;
744 const Vector2 EXPECTED_LAYOUT_SIZE( 349.0f, 19.0f );
745 const Vector3 EXPECTED_NATURAL_SIZE( 350.0f, 40.0f, 0.0f );
747 controller->SetText(textSingle);
748 controller->Relayout(size);
749 controller->SetDefaultLineSpacing( 20 );
750 controller->SetMultiLineEnabled( false );
752 Vector3 naturalSize = controller->GetNaturalSize();
753 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
754 float lineSpacing0 = controller->GetDefaultLineSpacing();
756 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
757 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
758 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
761 // multi-line, line spacing = 0px
763 const float EXPECTED_SPACING = 0.0f;
764 const Vector2 EXPECTED_LAYOUT_SIZE( 339.0f, 39.0f );
765 const Vector3 EXPECTED_NATURAL_SIZE( 122.0f, 58.0f, 0.0f );
767 controller->SetText(textMulti);
768 controller->Relayout(size);
769 controller->SetMultiLineEnabled( true );
770 controller->SetDefaultLineSpacing( 0 );
772 Vector3 naturalSize = controller->GetNaturalSize();
773 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
774 float lineSpacing0 = controller->GetDefaultLineSpacing();
776 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
777 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
778 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
781 // multi-line, line spacing = 20px
783 const float EXPECTED_SPACING = 20.0f;
784 const Vector2 EXPECTED_LAYOUT_SIZE( 121.0f, 57.0f );
785 const Vector3 EXPECTED_NATURAL_SIZE( 122.0f, 118.0f, 0.0f );
787 controller->SetText(textMulti);
788 controller->Relayout(size);
789 controller->SetMultiLineEnabled( true );
790 controller->SetDefaultLineSpacing( 20 );
792 Vector3 naturalSize = controller->GetNaturalSize();
793 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
794 float lineSpacing0 = controller->GetDefaultLineSpacing();
796 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
797 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
798 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
801 // multi-line, line spacing = 30px
803 const float EXPECTED_SPACING = 30.0f;
804 const Vector2 EXPECTED_LAYOUT_SIZE( 121.0f, 117.0f );
805 const Vector3 EXPECTED_NATURAL_SIZE( 122.0f, 148.0f, 0.0f );
807 controller->SetText(textMulti);
808 controller->Relayout(size);
809 controller->SetMultiLineEnabled( true );
810 controller->SetDefaultLineSpacing( 30 );
812 Vector3 naturalSize = controller->GetNaturalSize();
813 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
814 float lineSpacing0 = controller->GetDefaultLineSpacing();
816 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
817 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
818 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
826 int UtcDaliTextControllerCheckBufferIndices(void)
828 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
829 ToolkitTestApplication application;
831 // Creates a text controller.
832 ControllerPtr controller = Controller::New();
834 ConfigureTextLabel(controller);
837 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
838 controller->SetText(text);
840 // Get the implementation of the text controller
841 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
843 // Tweak some parameters to make the indices to access the text buffer invalid
844 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
845 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
846 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
847 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
849 // Perform a relayout
850 const Size size( application.GetScene().GetSize() );
851 controller->Relayout(size);
853 tet_result(TET_PASS);
858 int UtcDaliTextControllerCheckInputColorChanged(void)
860 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
861 ToolkitTestApplication application;
863 // Creates a text controller.
864 ControllerPtr controller = Controller::New();
866 ConfigureTextLabel(controller);
868 // Enable the text input.
869 // Creates a decorator.
870 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
872 InputMethodContext inputMethodContext = InputMethodContext::New();
873 // Enables the text input.
874 controller->EnableTextInput( decorator, inputMethodContext );
877 const std::string text("Hello World!");
878 controller->SetText(text);
880 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
881 controller->SetInputColor( inputColor );
883 // Get the implementation of the text controller
884 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
887 mImpl.mOperationsPending = Controller::NO_OPERATION;
889 // simulate a key event.
890 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
892 // change the input color
893 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
894 controller->SetInputColor( newInputColor );
896 // Check if relayout is requested or not when event state is INACTIVE.
897 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
898 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
900 // Perform a relayout
901 const Size size( application.GetScene().GetSize() );
902 controller->Relayout(size);
904 tet_result(TET_PASS);
909 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
911 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
912 ToolkitTestApplication application;
914 // Creates a text controller.
915 ControllerPtr controller = Controller::New();
917 ConfigureTextLabel(controller);
919 // Enable the text input.
920 // Creates a decorator.
921 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
923 InputMethodContext inputMethodContext = InputMethodContext::New();
924 // Enables the text input.
925 controller->EnableTextInput( decorator, inputMethodContext );
927 // Set the text and font family
928 const std::string text("Hello World!");
929 controller->SetText(text);
930 controller->SetInputFontFamily("SamsungOneUI_200");
932 // Get the implementation of the text controller
933 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
936 mImpl.mOperationsPending = Controller::NO_OPERATION;
938 // simulate a key event.
939 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
941 // change the input font family
942 controller->SetInputFontFamily("SamsungOneUI_300");
944 // Check if relayout is requested or not when event state is INACTIVE.
945 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
946 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
949 // Perform a relayout
950 const Size size( application.GetScene().GetSize() );
951 controller->Relayout(size);
953 tet_result(TET_PASS);
958 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
960 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
961 ToolkitTestApplication application;
963 // Creates a text controller.
964 ControllerPtr controller = Controller::New();
966 ConfigureTextLabel(controller);
968 // Enable the text input.
969 // Creates a decorator.
970 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
972 InputMethodContext inputMethodContext = InputMethodContext::New();
973 // Enables the text input.
974 controller->EnableTextInput( decorator, inputMethodContext );
977 const std::string text("Hello World!");
978 controller->SetText(text);
979 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
981 // Get the implementation of the text controller
982 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
985 mImpl.mOperationsPending = Controller::NO_OPERATION;
987 // simulate a key event.
988 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
990 // change the input font weight
991 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
993 // Check if relayout is requested or not when event state is INACTIVE.
994 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
995 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
998 // Perform a relayout
999 const Size size( application.GetScene().GetSize() );
1000 controller->Relayout(size);
1002 tet_result(TET_PASS);
1007 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
1009 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
1010 ToolkitTestApplication application;
1012 // Creates a text controller.
1013 ControllerPtr controller = Controller::New();
1015 ConfigureTextLabel(controller);
1017 // Enable the text input.
1018 // Creates a decorator.
1019 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1021 InputMethodContext inputMethodContext = InputMethodContext::New();
1022 // Enables the text input.
1023 controller->EnableTextInput( decorator, inputMethodContext );
1026 const std::string text("Hello World!");
1027 controller->SetText(text);
1028 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
1030 // Get the implementation of the text controller
1031 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1034 mImpl.mOperationsPending = Controller::NO_OPERATION;
1036 // simulate a key event.
1037 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1039 // change the input font width
1040 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
1042 // Check if relayout is requested or not when event state is INACTIVE.
1043 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1044 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1047 // Perform a relayout
1048 const Size size( application.GetScene().GetSize() );
1049 controller->Relayout(size);
1051 tet_result(TET_PASS);
1056 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
1058 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
1059 ToolkitTestApplication application;
1061 // Creates a text controller.
1062 ControllerPtr controller = Controller::New();
1064 ConfigureTextLabel(controller);
1066 // Enable the text input.
1067 // Creates a decorator.
1068 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1070 InputMethodContext inputMethodContext = InputMethodContext::New();
1071 // Enables the text input.
1072 controller->EnableTextInput( decorator, inputMethodContext );
1075 const std::string text("Hello World!");
1076 controller->SetText(text);
1077 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
1079 // Get the implementation of the text controller
1080 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1083 mImpl.mOperationsPending = Controller::NO_OPERATION;
1085 // simulate a key event.
1086 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1088 // change the input font slant
1089 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
1091 // Check if relayout is requested or not when event state is INACTIVE.
1092 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1093 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1096 // Perform a relayout
1097 const Size size( application.GetScene().GetSize() );
1098 controller->Relayout(size);
1100 tet_result(TET_PASS);
1105 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
1107 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
1108 ToolkitTestApplication application;
1110 // Creates a text controller.
1111 ControllerPtr controller = Controller::New();
1113 ConfigureTextLabel(controller);
1115 // Enable the text input.
1116 // Creates a decorator.
1117 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1119 InputMethodContext inputMethodContext = InputMethodContext::New();
1120 // Enables the text input.
1121 controller->EnableTextInput( decorator, inputMethodContext );
1124 const std::string text("Hello World!");
1125 controller->SetText(text);
1126 controller->SetInputFontPointSize( 1.0f );
1128 // Get the implementation of the text controller
1129 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1132 mImpl.mOperationsPending = Controller::NO_OPERATION;
1134 // simulate a key event.
1135 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1137 // change the input font point size
1138 controller->SetInputFontPointSize( 1.2f );
1140 // Check if relayout is requested or not when event state is INACTIVE.
1141 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1142 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1145 // Perform a relayout
1146 const Size size( application.GetScene().GetSize() );
1147 controller->Relayout(size);
1150 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1152 tet_result(TET_PASS);
1157 int UtcDaliTextControllerSelectEvent(void)
1159 tet_infoline(" UtcDaliTextControllerSelectEvent");
1160 ToolkitTestApplication application;
1162 // Creates a text controller.
1163 ControllerPtr controller = Controller::New();
1165 // Configures the text controller similarly to the text-field.
1166 ConfigureTextField( controller );
1169 const std::string text("Hello World!");
1170 controller->SetText( text );
1172 // Select the whole text.
1173 controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE );
1175 // Perform a relayout
1176 const Size size( application.GetScene().GetSize() );
1177 controller->Relayout(size);
1179 // Get the implementation of the text controller
1180 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1182 // Check if the whole text is selected or not.
1183 std::string retrieved_text;
1184 mImpl.RetrieveSelection( retrieved_text, false );
1185 DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION );
1187 // Select the whole text.
1188 controller->SelectEvent( 0.f, 0.f, SelectionType::ALL );
1190 // Perform a relayout
1191 controller->Relayout( size );
1193 mImpl.RetrieveSelection( retrieved_text, false );
1194 DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION );
1200 int UtcDaliTextControllerRemoveTextChangeEventData(void)
1202 tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData");
1203 ToolkitTestApplication application;
1205 // Creates a text controller.
1206 ControllerPtr controller = Controller::New();
1208 ConfigureTextField( controller );
1211 const std::string text( "Hello World!" );
1212 controller->SetText( text );
1213 controller->SetInputFontPointSize( 1.0f );
1215 // Get the implementation of the text controller
1216 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1218 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1220 // Send DELETE_SURROUNDING event
1221 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
1222 InputMethodContext inputMethodContext = InputMethodContext::New();
1223 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1225 // Force to update the model.
1226 controller->GetNaturalSize();
1228 // Simulate a key event to delete text
1229 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1231 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1233 // Perform a relayout
1234 const Size size( application.GetScene().GetSize() );
1235 controller->Relayout( size );
1237 tet_result(TET_PASS);
1242 int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void)
1244 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated");
1245 ToolkitTestApplication application;
1247 // Creates a text controller.
1248 ControllerPtr controller = Controller::New();
1250 ConfigureTextField(controller);
1253 const std::string text("Hello World!");
1254 controller->SetText( text );
1255 controller->SetInputFontPointSize( 1.0f );
1256 controller->KeyboardFocusGainEvent();
1258 application.SendNotification();
1259 application.Render();
1261 // Perform a relayout
1262 const Size size( application.GetScene().GetSize() );
1263 controller->Relayout(size);
1265 // simulate a key event.
1266 controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::DOWN ) );
1268 // change the input font point size
1269 controller->SetInputFontPointSize( 20.f );
1271 application.SendNotification();
1272 application.Render();
1274 // Perform a relayout
1275 controller->Relayout(size);
1277 tet_result(TET_PASS);
1282 int UtcDaliTextControllerDeleteSurroundings(void)
1284 tet_infoline(" UtcDaliTextControllerDeleteSurroundings");
1285 ToolkitTestApplication application;
1287 // Creates a text controller.
1288 ControllerPtr controller = Controller::New();
1290 ConfigureTextField( controller );
1292 // Get the implementation of the text controller
1293 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1295 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1297 InputMethodContext inputMethodContext = InputMethodContext::New();
1298 // Add some pre-edit text, such as Korean
1299 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3 );
1300 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1302 // Perform a relayout
1303 const Size size( application.GetScene().GetSize() );
1305 application.SendNotification();
1306 application.Render();
1308 controller->Relayout( size );
1310 // Simulate a key event to delete one text
1311 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1313 // Send DELETE_SURROUNDING event (Delete All text)
1314 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -2, 2 );
1315 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1317 application.SendNotification();
1318 application.Render();
1320 controller->Relayout( size );
1322 // simulate a key event to add text
1323 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1324 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1326 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1328 // Force to update the model.
1329 controller->GetNaturalSize();
1331 application.SendNotification();
1332 application.Render();
1334 controller->Relayout( size );
1336 tet_result(TET_PASS);