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);
854 const std::string emptyText("");
855 controller->SetText(emptyText);
857 // Tweak some parameters to make the indices to access the text buffer invalid
858 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = 10u;
859 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
860 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
861 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
863 // Perform a relayout
864 controller->Relayout(size);
866 tet_result(TET_PASS);
871 int UtcDaliTextControllerCheckInputColorChanged(void)
873 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
874 ToolkitTestApplication application;
876 // Creates a text controller.
877 ControllerPtr controller = Controller::New();
879 ConfigureTextLabel(controller);
881 // Enable the text input.
882 // Creates a decorator.
883 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
885 InputMethodContext inputMethodContext = InputMethodContext::New();
886 // Enables the text input.
887 controller->EnableTextInput( decorator, inputMethodContext );
890 const std::string text("Hello World!");
891 controller->SetText(text);
893 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
894 controller->SetInputColor( inputColor );
896 // Get the implementation of the text controller
897 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
900 mImpl.mOperationsPending = Controller::NO_OPERATION;
902 // simulate a key event.
903 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
905 // change the input color
906 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
907 controller->SetInputColor( newInputColor );
909 // Check if relayout is requested or not when event state is INACTIVE.
910 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
911 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
913 // Perform a relayout
914 const Size size( application.GetScene().GetSize() );
915 controller->Relayout(size);
917 tet_result(TET_PASS);
922 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
924 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
925 ToolkitTestApplication application;
927 // Creates a text controller.
928 ControllerPtr controller = Controller::New();
930 ConfigureTextLabel(controller);
932 // Enable the text input.
933 // Creates a decorator.
934 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
936 InputMethodContext inputMethodContext = InputMethodContext::New();
937 // Enables the text input.
938 controller->EnableTextInput( decorator, inputMethodContext );
940 // Set the text and font family
941 const std::string text("Hello World!");
942 controller->SetText(text);
943 controller->SetInputFontFamily("SamsungOneUI_200");
945 // Get the implementation of the text controller
946 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
949 mImpl.mOperationsPending = Controller::NO_OPERATION;
951 // simulate a key event.
952 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
954 // change the input font family
955 controller->SetInputFontFamily("SamsungOneUI_300");
957 // Check if relayout is requested or not when event state is INACTIVE.
958 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
959 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
962 // Perform a relayout
963 const Size size( application.GetScene().GetSize() );
964 controller->Relayout(size);
966 tet_result(TET_PASS);
971 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
973 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
974 ToolkitTestApplication application;
976 // Creates a text controller.
977 ControllerPtr controller = Controller::New();
979 ConfigureTextLabel(controller);
981 // Enable the text input.
982 // Creates a decorator.
983 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
985 InputMethodContext inputMethodContext = InputMethodContext::New();
986 // Enables the text input.
987 controller->EnableTextInput( decorator, inputMethodContext );
990 const std::string text("Hello World!");
991 controller->SetText(text);
992 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
994 // Get the implementation of the text controller
995 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
998 mImpl.mOperationsPending = Controller::NO_OPERATION;
1000 // simulate a key event.
1001 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1003 // change the input font weight
1004 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
1006 // Check if relayout is requested or not when event state is INACTIVE.
1007 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1008 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1011 // Perform a relayout
1012 const Size size( application.GetScene().GetSize() );
1013 controller->Relayout(size);
1015 tet_result(TET_PASS);
1020 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
1022 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
1023 ToolkitTestApplication application;
1025 // Creates a text controller.
1026 ControllerPtr controller = Controller::New();
1028 ConfigureTextLabel(controller);
1030 // Enable the text input.
1031 // Creates a decorator.
1032 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1034 InputMethodContext inputMethodContext = InputMethodContext::New();
1035 // Enables the text input.
1036 controller->EnableTextInput( decorator, inputMethodContext );
1039 const std::string text("Hello World!");
1040 controller->SetText(text);
1041 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
1043 // Get the implementation of the text controller
1044 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1047 mImpl.mOperationsPending = Controller::NO_OPERATION;
1049 // simulate a key event.
1050 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1052 // change the input font width
1053 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
1055 // Check if relayout is requested or not when event state is INACTIVE.
1056 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1057 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1060 // Perform a relayout
1061 const Size size( application.GetScene().GetSize() );
1062 controller->Relayout(size);
1064 tet_result(TET_PASS);
1069 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
1071 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
1072 ToolkitTestApplication application;
1074 // Creates a text controller.
1075 ControllerPtr controller = Controller::New();
1077 ConfigureTextLabel(controller);
1079 // Enable the text input.
1080 // Creates a decorator.
1081 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1083 InputMethodContext inputMethodContext = InputMethodContext::New();
1084 // Enables the text input.
1085 controller->EnableTextInput( decorator, inputMethodContext );
1088 const std::string text("Hello World!");
1089 controller->SetText(text);
1090 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
1092 // Get the implementation of the text controller
1093 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1096 mImpl.mOperationsPending = Controller::NO_OPERATION;
1098 // simulate a key event.
1099 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1101 // change the input font slant
1102 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
1104 // Check if relayout is requested or not when event state is INACTIVE.
1105 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1106 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1109 // Perform a relayout
1110 const Size size( application.GetScene().GetSize() );
1111 controller->Relayout(size);
1113 tet_result(TET_PASS);
1118 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
1120 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
1121 ToolkitTestApplication application;
1123 // Creates a text controller.
1124 ControllerPtr controller = Controller::New();
1126 ConfigureTextLabel(controller);
1128 // Enable the text input.
1129 // Creates a decorator.
1130 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1132 InputMethodContext inputMethodContext = InputMethodContext::New();
1133 // Enables the text input.
1134 controller->EnableTextInput( decorator, inputMethodContext );
1137 const std::string text("Hello World!");
1138 controller->SetText(text);
1139 controller->SetInputFontPointSize( 1.0f );
1141 // Get the implementation of the text controller
1142 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1145 mImpl.mOperationsPending = Controller::NO_OPERATION;
1147 // simulate a key event.
1148 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1150 // change the input font point size
1151 controller->SetInputFontPointSize( 1.2f );
1153 // Check if relayout is requested or not when event state is INACTIVE.
1154 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1155 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1158 // Perform a relayout
1159 const Size size( application.GetScene().GetSize() );
1160 controller->Relayout(size);
1163 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1165 tet_result(TET_PASS);
1170 int UtcDaliTextControllerSelectEvent(void)
1172 tet_infoline(" UtcDaliTextControllerSelectEvent");
1173 ToolkitTestApplication application;
1175 // Creates a text controller.
1176 ControllerPtr controller = Controller::New();
1178 // Configures the text controller similarly to the text-field.
1179 ConfigureTextField( controller );
1182 const std::string text("Hello World!");
1183 controller->SetText( text );
1185 // Select the whole text.
1186 controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE );
1188 // Perform a relayout
1189 const Size size( application.GetScene().GetSize() );
1190 controller->Relayout(size);
1192 // Get the implementation of the text controller
1193 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1195 // Check if the whole text is selected or not.
1196 std::string retrieved_text;
1197 mImpl.RetrieveSelection( retrieved_text, false );
1198 DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION );
1200 // Select the whole text.
1201 controller->SelectEvent( 0.f, 0.f, SelectionType::ALL );
1203 // Perform a relayout
1204 controller->Relayout( size );
1206 mImpl.RetrieveSelection( retrieved_text, false );
1207 DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION );
1213 int UtcDaliTextControllerRemoveTextChangeEventData(void)
1215 tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData");
1216 ToolkitTestApplication application;
1218 // Creates a text controller.
1219 ControllerPtr controller = Controller::New();
1221 ConfigureTextField( controller );
1224 const std::string text( "Hello World!" );
1225 controller->SetText( text );
1226 controller->SetInputFontPointSize( 1.0f );
1228 // Get the implementation of the text controller
1229 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1231 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1233 // Send DELETE_SURROUNDING event
1234 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
1235 InputMethodContext inputMethodContext = InputMethodContext::New();
1236 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1238 // Force to update the model.
1239 controller->GetNaturalSize();
1241 // Simulate a key event to delete text
1242 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1244 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1246 // Perform a relayout
1247 const Size size( application.GetScene().GetSize() );
1248 controller->Relayout( size );
1250 tet_result(TET_PASS);
1255 int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void)
1257 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated");
1258 ToolkitTestApplication application;
1260 // Creates a text controller.
1261 ControllerPtr controller = Controller::New();
1263 ConfigureTextField(controller);
1266 const std::string text("Hello World!");
1267 controller->SetText( text );
1268 controller->SetInputFontPointSize( 1.0f );
1269 controller->KeyboardFocusGainEvent();
1271 application.SendNotification();
1272 application.Render();
1274 // Perform a relayout
1275 const Size size( application.GetScene().GetSize() );
1276 controller->Relayout(size);
1278 // simulate a key event.
1279 controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::DOWN ) );
1281 // change the input font point size
1282 controller->SetInputFontPointSize( 20.f );
1284 application.SendNotification();
1285 application.Render();
1287 // Perform a relayout
1288 controller->Relayout(size);
1290 tet_result(TET_PASS);
1295 int UtcDaliTextControllerDeleteSurroundings(void)
1297 tet_infoline(" UtcDaliTextControllerDeleteSurroundings");
1298 ToolkitTestApplication application;
1300 // Creates a text controller.
1301 ControllerPtr controller = Controller::New();
1303 ConfigureTextField( controller );
1305 // Get the implementation of the text controller
1306 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1308 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1310 InputMethodContext inputMethodContext = InputMethodContext::New();
1311 // Add some pre-edit text, such as Korean
1312 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3 );
1313 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1315 // Perform a relayout
1316 const Size size( application.GetScene().GetSize() );
1318 application.SendNotification();
1319 application.Render();
1321 controller->Relayout( size );
1323 // Simulate a key event to delete one text
1324 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1326 // Send DELETE_SURROUNDING event (Delete All text)
1327 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -2, 2 );
1328 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1330 application.SendNotification();
1331 application.Render();
1333 controller->Relayout( size );
1335 // simulate a key event to add text
1336 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1337 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1339 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1341 // Force to update the model.
1342 controller->GetNaturalSize();
1344 application.SendNotification();
1345 application.Render();
1347 controller->Relayout( size );
1349 tet_result(TET_PASS);