2 * Copyright (c) 2021 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/text-controller.h>
29 #include <dali-toolkit/internal/text/text-control-interface.h>
30 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
31 #include <dali-toolkit/internal/text/text-controller-impl.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 // Select the whole text.
479 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
480 DALI_TEST_CHECK( button );
482 button.DoAction( "buttonClick", attributes );
484 // Call relayout to process the input events.
485 controller->Relayout( CONTROL_SIZE );
488 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
489 DALI_TEST_CHECK( button );
491 button.DoAction( "buttonClick", attributes );
493 // Force to update the model.
494 controller->GetNaturalSize();
496 controller->GetText( text );
497 DALI_TEST_CHECK( text.empty() );
500 controller->SetText( "Hello world" );
502 // Select the whole text.
503 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
504 DALI_TEST_CHECK( button );
506 button.DoAction( "buttonClick", attributes );
508 // Call relayout to process the input events.
509 controller->Relayout( CONTROL_SIZE );
511 // Copy to the clipboard.
512 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) );
513 DALI_TEST_CHECK( button );
515 button.DoAction( "buttonClick", attributes );
517 // Call relayout to process the input events.
518 controller->Relayout( CONTROL_SIZE );
521 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
522 DALI_TEST_CHECK( button );
524 button.DoAction( "buttonClick", attributes );
526 // Force to update the model.
527 controller->GetNaturalSize();
529 controller->GetText( text );
530 DALI_TEST_CHECK( text.empty() );
532 ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get();
533 clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback );
536 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) );
537 DALI_TEST_CHECK( button );
539 button.DoAction( "buttonClick", attributes );
541 // Call relayout to process the input events.
542 controller->Relayout( CONTROL_SIZE );
544 DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION );
546 // Show the clipboard.
547 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) );
548 DALI_TEST_CHECK( button );
550 button.DoAction( "buttonClick", attributes );
552 tet_result(TET_PASS);
556 int UtcDaliTextControllerGetInputShadowProperty(void)
558 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
559 ToolkitTestApplication application;
561 // Creates a text controller.
562 ControllerPtr controller = Controller::New();
564 DALI_TEST_CHECK( controller );
566 const std::string& shadowProperties = controller->GetInputShadowProperties();
568 DALI_TEST_CHECK( shadowProperties.empty() );
570 tet_result(TET_PASS);
574 int UtcDaliTextControllerGetInputUnderlineProperty(void)
576 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
577 ToolkitTestApplication application;
579 // Creates a text controller.
580 ControllerPtr controller = Controller::New();
582 DALI_TEST_CHECK( controller );
584 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
586 DALI_TEST_CHECK( underlineProperties.empty() );
588 tet_result(TET_PASS);
592 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
594 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
595 ToolkitTestApplication application;
597 // Creates a text controller.
598 ControllerPtr controller = Controller::New();
600 DALI_TEST_CHECK( controller );
602 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
604 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
606 // Enable multi-line.
607 controller->SetMultiLineEnabled( true );
609 // Enable text scrolling.
610 controller->SetAutoScrollEnabled( true );
612 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
614 // Disable multi-line.
615 controller->SetMultiLineEnabled( false );
617 // Enable text scrolling.
618 controller->SetAutoScrollEnabled( true );
620 // Should be ebabled now.
621 DALI_TEST_CHECK( controller->IsAutoScrollEnabled() );
623 tet_result(TET_PASS);
627 int UtcDaliTextControllerSetGetCheckProperty(void)
629 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
630 ToolkitTestApplication application;
632 // Creates a text controller.
633 ControllerPtr controller = Controller::New();
635 DALI_TEST_CHECK( controller );
637 // Enable the text input.
638 // Creates a decorator.
639 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
641 InputMethodContext inputMethodContext = InputMethodContext::New();
642 // Enables the text input.
643 controller->EnableTextInput( decorator, inputMethodContext );
645 DALI_TEST_CHECK( !controller->IsInputModePassword() );
647 // Set the text input to password.
648 controller->SetInputModePassword( true );
650 DALI_TEST_CHECK( controller->IsInputModePassword() );
652 // Unset the text input to password.
653 controller->SetInputModePassword( false );
655 DALI_TEST_CHECK( !controller->IsInputModePassword() );
657 tet_result(TET_PASS);
661 int UtcDaliTextControllerSetGetTapLongPressAction(void)
663 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
664 ToolkitTestApplication application;
666 // Creates a text controller.
667 ControllerPtr controller = Controller::New();
669 DALI_TEST_CHECK( controller );
671 // Test first with no decorator.
673 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
674 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
675 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
677 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
678 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
679 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
681 // Add a decorator and re-test.
683 // Creates a decorator.
684 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
686 InputMethodContext inputMethodContext = InputMethodContext::New();
687 // Enables the text input.
688 controller->EnableTextInput( decorator, inputMethodContext );
690 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
691 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
692 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
694 DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP
695 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
696 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION );
701 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
703 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
704 ToolkitTestApplication application;
706 const Size size( application.GetScene().GetSize() );
709 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
712 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
714 // Creates a text controller.
715 ControllerPtr controller = Controller::New();
717 ConfigureTextLabel(controller);
719 // single line, line spacing = 0px
721 const float EXPECTED_SPACING = 0.0f;
722 const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f);
723 const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 20.0f, 0.0f );
725 controller->SetText(textSingle);
726 controller->Relayout(size);
727 controller->SetMultiLineEnabled( false );
729 Vector3 naturalSize = controller->GetNaturalSize();
730 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
731 float lineSpacing0 = controller->GetDefaultLineSpacing();
733 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
734 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
735 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
738 // single line, line spacing = 20px
740 const float EXPECTED_SPACING = 20.0f;
741 const Vector2 EXPECTED_LAYOUT_SIZE( 360.0f, 19.0f );
742 const Vector3 EXPECTED_NATURAL_SIZE( 360.0f, 40.0f, 0.0f );
744 controller->SetText(textSingle);
745 controller->Relayout(size);
746 controller->SetDefaultLineSpacing( 20 );
747 controller->SetMultiLineEnabled( false );
749 Vector3 naturalSize = controller->GetNaturalSize();
750 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
751 float lineSpacing0 = controller->GetDefaultLineSpacing();
753 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
754 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
755 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
758 // multi-line, line spacing = 0px
760 const float EXPECTED_SPACING = 0.0f;
761 const Vector2 EXPECTED_LAYOUT_SIZE( 350.0f, 39.0f );
762 const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 58.0f, 0.0f );
764 controller->SetText(textMulti);
765 controller->Relayout(size);
766 controller->SetMultiLineEnabled( true );
767 controller->SetDefaultLineSpacing( 0 );
769 Vector3 naturalSize = controller->GetNaturalSize();
770 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
771 float lineSpacing0 = controller->GetDefaultLineSpacing();
773 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
774 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
775 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
778 // multi-line, line spacing = 20px
780 const float EXPECTED_SPACING = 20.0f;
781 const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 57.0f );
782 const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 118.0f, 0.0f );
784 controller->SetText(textMulti);
785 controller->Relayout(size);
786 controller->SetMultiLineEnabled( true );
787 controller->SetDefaultLineSpacing( 20 );
789 Vector3 naturalSize = controller->GetNaturalSize();
790 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
791 float lineSpacing0 = controller->GetDefaultLineSpacing();
793 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
794 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
795 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
798 // multi-line, line spacing = 30px
800 const float EXPECTED_SPACING = 30.0f;
801 const Vector2 EXPECTED_LAYOUT_SIZE( 124.0f, 117.0f );
802 const Vector3 EXPECTED_NATURAL_SIZE( 124.0f, 148.0f, 0.0f );
804 controller->SetText(textMulti);
805 controller->Relayout(size);
806 controller->SetMultiLineEnabled( true );
807 controller->SetDefaultLineSpacing( 30 );
809 Vector3 naturalSize = controller->GetNaturalSize();
810 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
811 float lineSpacing0 = controller->GetDefaultLineSpacing();
813 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
814 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
815 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
823 int UtcDaliTextControllerCheckBufferIndices(void)
825 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
826 ToolkitTestApplication application;
828 // Creates a text controller.
829 ControllerPtr controller = Controller::New();
831 ConfigureTextLabel(controller);
834 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
835 controller->SetText(text);
837 // Get the implementation of the text controller
838 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
840 // Tweak some parameters to make the indices to access the text buffer invalid
841 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
842 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
843 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
844 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
846 // Perform a relayout
847 const Size size( application.GetScene().GetSize() );
848 controller->Relayout(size);
850 tet_result(TET_PASS);
855 int UtcDaliTextControllerCheckInputColorChanged(void)
857 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
858 ToolkitTestApplication application;
860 // Creates a text controller.
861 ControllerPtr controller = Controller::New();
863 ConfigureTextLabel(controller);
865 // Enable the text input.
866 // Creates a decorator.
867 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
869 InputMethodContext inputMethodContext = InputMethodContext::New();
870 // Enables the text input.
871 controller->EnableTextInput( decorator, inputMethodContext );
874 const std::string text("Hello World!");
875 controller->SetText(text);
877 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
878 controller->SetInputColor( inputColor );
880 // Get the implementation of the text controller
881 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
884 mImpl.mOperationsPending = Controller::NO_OPERATION;
886 // simulate a key event.
887 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
889 // change the input color
890 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
891 controller->SetInputColor( newInputColor );
893 // Check if relayout is requested or not when event state is INACTIVE.
894 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
895 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
897 // Perform a relayout
898 const Size size( application.GetScene().GetSize() );
899 controller->Relayout(size);
901 tet_result(TET_PASS);
906 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
908 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
909 ToolkitTestApplication application;
911 // Creates a text controller.
912 ControllerPtr controller = Controller::New();
914 ConfigureTextLabel(controller);
916 // Enable the text input.
917 // Creates a decorator.
918 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
920 InputMethodContext inputMethodContext = InputMethodContext::New();
921 // Enables the text input.
922 controller->EnableTextInput( decorator, inputMethodContext );
924 // Set the text and font family
925 const std::string text("Hello World!");
926 controller->SetText(text);
927 controller->SetInputFontFamily("SamsungOneUI_200");
929 // Get the implementation of the text controller
930 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
933 mImpl.mOperationsPending = Controller::NO_OPERATION;
935 // simulate a key event.
936 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
938 // change the input font family
939 controller->SetInputFontFamily("SamsungOneUI_300");
941 // Check if relayout is requested or not when event state is INACTIVE.
942 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
943 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
946 // Perform a relayout
947 const Size size( application.GetScene().GetSize() );
948 controller->Relayout(size);
950 tet_result(TET_PASS);
955 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
957 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
958 ToolkitTestApplication application;
960 // Creates a text controller.
961 ControllerPtr controller = Controller::New();
963 ConfigureTextLabel(controller);
965 // Enable the text input.
966 // Creates a decorator.
967 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
969 InputMethodContext inputMethodContext = InputMethodContext::New();
970 // Enables the text input.
971 controller->EnableTextInput( decorator, inputMethodContext );
974 const std::string text("Hello World!");
975 controller->SetText(text);
976 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
978 // Get the implementation of the text controller
979 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
982 mImpl.mOperationsPending = Controller::NO_OPERATION;
984 // simulate a key event.
985 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
987 // change the input font weight
988 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
990 // Check if relayout is requested or not when event state is INACTIVE.
991 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
992 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
995 // Perform a relayout
996 const Size size( application.GetScene().GetSize() );
997 controller->Relayout(size);
999 tet_result(TET_PASS);
1004 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
1006 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
1007 ToolkitTestApplication application;
1009 // Creates a text controller.
1010 ControllerPtr controller = Controller::New();
1012 ConfigureTextLabel(controller);
1014 // Enable the text input.
1015 // Creates a decorator.
1016 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1018 InputMethodContext inputMethodContext = InputMethodContext::New();
1019 // Enables the text input.
1020 controller->EnableTextInput( decorator, inputMethodContext );
1023 const std::string text("Hello World!");
1024 controller->SetText(text);
1025 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
1027 // Get the implementation of the text controller
1028 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1031 mImpl.mOperationsPending = Controller::NO_OPERATION;
1033 // simulate a key event.
1034 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1036 // change the input font width
1037 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
1039 // Check if relayout is requested or not when event state is INACTIVE.
1040 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1041 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1044 // Perform a relayout
1045 const Size size( application.GetScene().GetSize() );
1046 controller->Relayout(size);
1048 tet_result(TET_PASS);
1053 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
1055 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
1056 ToolkitTestApplication application;
1058 // Creates a text controller.
1059 ControllerPtr controller = Controller::New();
1061 ConfigureTextLabel(controller);
1063 // Enable the text input.
1064 // Creates a decorator.
1065 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1067 InputMethodContext inputMethodContext = InputMethodContext::New();
1068 // Enables the text input.
1069 controller->EnableTextInput( decorator, inputMethodContext );
1072 const std::string text("Hello World!");
1073 controller->SetText(text);
1074 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
1076 // Get the implementation of the text controller
1077 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1080 mImpl.mOperationsPending = Controller::NO_OPERATION;
1082 // simulate a key event.
1083 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1085 // change the input font slant
1086 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
1088 // Check if relayout is requested or not when event state is INACTIVE.
1089 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1090 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1093 // Perform a relayout
1094 const Size size( application.GetScene().GetSize() );
1095 controller->Relayout(size);
1097 tet_result(TET_PASS);
1102 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
1104 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
1105 ToolkitTestApplication application;
1107 // Creates a text controller.
1108 ControllerPtr controller = Controller::New();
1110 ConfigureTextLabel(controller);
1112 // Enable the text input.
1113 // Creates a decorator.
1114 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1116 InputMethodContext inputMethodContext = InputMethodContext::New();
1117 // Enables the text input.
1118 controller->EnableTextInput( decorator, inputMethodContext );
1121 const std::string text("Hello World!");
1122 controller->SetText(text);
1123 controller->SetInputFontPointSize( 1.0f );
1125 // Get the implementation of the text controller
1126 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1129 mImpl.mOperationsPending = Controller::NO_OPERATION;
1131 // simulate a key event.
1132 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1134 // change the input font point size
1135 controller->SetInputFontPointSize( 1.2f );
1137 // Check if relayout is requested or not when event state is INACTIVE.
1138 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1139 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1142 // Perform a relayout
1143 const Size size( application.GetScene().GetSize() );
1144 controller->Relayout(size);
1146 tet_result(TET_PASS);
1151 int UtcDaliTextControllerSelectEvent(void)
1153 tet_infoline(" UtcDaliTextControllerSelectEvent");
1154 ToolkitTestApplication application;
1156 // Creates a text controller.
1157 ControllerPtr controller = Controller::New();
1159 // Configures the text controller similarly to the text-field.
1160 ConfigureTextField( controller );
1163 const std::string text("Hello World!");
1164 controller->SetText( text );
1166 // Select the whole text.
1167 controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE );
1169 // Perform a relayout
1170 const Size size( application.GetScene().GetSize() );
1171 controller->Relayout(size);
1173 // Get the implementation of the text controller
1174 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1176 // Check if the whole text is selected or not.
1177 std::string retrieved_text;
1178 mImpl.RetrieveSelection( retrieved_text, false );
1179 DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION );
1181 // Select the whole text.
1182 controller->SelectEvent( 0.f, 0.f, SelectionType::ALL );
1184 // Perform a relayout
1185 controller->Relayout( size );
1187 mImpl.RetrieveSelection( retrieved_text, false );
1188 DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION );
1194 int UtcDaliTextControllerRemoveTextChangeEventData(void)
1196 tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData");
1197 ToolkitTestApplication application;
1199 // Creates a text controller.
1200 ControllerPtr controller = Controller::New();
1202 ConfigureTextField( controller );
1205 const std::string text( "Hello World!" );
1206 controller->SetText( text );
1207 controller->SetInputFontPointSize( 1.0f );
1209 // Get the implementation of the text controller
1210 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1212 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1214 // Send DELETE_SURROUNDING event
1215 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
1216 InputMethodContext inputMethodContext = InputMethodContext::New();
1217 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1219 // Force to update the model.
1220 controller->GetNaturalSize();
1222 // Simulate a key event to delete text
1223 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1225 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1227 // Perform a relayout
1228 const Size size( application.GetScene().GetSize() );
1229 controller->Relayout( size );
1231 tet_result(TET_PASS);
1236 int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void)
1238 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated");
1239 ToolkitTestApplication application;
1241 // Creates a text controller.
1242 ControllerPtr controller = Controller::New();
1244 ConfigureTextField(controller);
1247 const std::string text("Hello World!");
1248 controller->SetText( text );
1249 controller->SetInputFontPointSize( 1.0f );
1250 controller->KeyboardFocusGainEvent();
1252 application.SendNotification();
1253 application.Render();
1255 // Perform a relayout
1256 const Size size( application.GetScene().GetSize() );
1257 controller->Relayout(size);
1259 // simulate a key event.
1260 controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::DOWN ) );
1262 // change the input font point size
1263 controller->SetInputFontPointSize( 20.f );
1265 application.SendNotification();
1266 application.Render();
1268 // Perform a relayout
1269 controller->Relayout(size);
1271 tet_result(TET_PASS);
1276 int UtcDaliTextControllerDeleteSurroundings(void)
1278 tet_infoline(" UtcDaliTextControllerDeleteSurroundings");
1279 ToolkitTestApplication application;
1281 // Creates a text controller.
1282 ControllerPtr controller = Controller::New();
1284 ConfigureTextField( controller );
1286 // Get the implementation of the text controller
1287 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1289 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1291 InputMethodContext inputMethodContext = InputMethodContext::New();
1292 // Add some pre-edit text, such as Korean
1293 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3 );
1294 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1296 // Perform a relayout
1297 const Size size( application.GetScene().GetSize() );
1299 application.SendNotification();
1300 application.Render();
1302 controller->Relayout( size );
1304 // Simulate a key event to delete one text
1305 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1307 // Send DELETE_SURROUNDING event (Delete All text)
1308 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -2, 2 );
1309 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1311 application.SendNotification();
1312 application.Render();
1314 controller->Relayout( size );
1316 // simulate a key event to add text
1317 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1318 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1320 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1322 // Force to update the model.
1323 controller->GetNaturalSize();
1325 application.SendNotification();
1326 application.Render();
1328 controller->Relayout( size );
1330 tet_result(TET_PASS);