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);
867 controller->SetText(text);
870 controller->SetDefaultFontSize(10.f, Controller::POINT_SIZE);
872 // Tweak some parameters to make the indices to access the text buffer invalid
873 mImpl.mTextUpdateInfo.Clear();
875 // Perform a relayout
876 controller->GetHeightForWidth(size.width / 2.f);
877 controller->Relayout(size);
879 tet_result(TET_PASS);
884 int UtcDaliTextControllerCheckInputColorChanged(void)
886 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
887 ToolkitTestApplication application;
889 // Creates a text controller.
890 ControllerPtr controller = Controller::New();
892 ConfigureTextLabel(controller);
894 // Enable the text input.
895 // Creates a decorator.
896 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
898 InputMethodContext inputMethodContext = InputMethodContext::New();
899 // Enables the text input.
900 controller->EnableTextInput( decorator, inputMethodContext );
903 const std::string text("Hello World!");
904 controller->SetText(text);
906 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
907 controller->SetInputColor( inputColor );
909 // Get the implementation of the text controller
910 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
913 mImpl.mOperationsPending = Controller::NO_OPERATION;
915 // simulate a key event.
916 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
918 // change the input color
919 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
920 controller->SetInputColor( newInputColor );
922 // Check if relayout is requested or not when event state is INACTIVE.
923 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
924 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
926 // Perform a relayout
927 const Size size( application.GetScene().GetSize() );
928 controller->Relayout(size);
930 tet_result(TET_PASS);
935 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
937 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
938 ToolkitTestApplication application;
940 // Creates a text controller.
941 ControllerPtr controller = Controller::New();
943 ConfigureTextLabel(controller);
945 // Enable the text input.
946 // Creates a decorator.
947 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
949 InputMethodContext inputMethodContext = InputMethodContext::New();
950 // Enables the text input.
951 controller->EnableTextInput( decorator, inputMethodContext );
953 // Set the text and font family
954 const std::string text("Hello World!");
955 controller->SetText(text);
956 controller->SetInputFontFamily("SamsungOneUI_200");
958 // Get the implementation of the text controller
959 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
962 mImpl.mOperationsPending = Controller::NO_OPERATION;
964 // simulate a key event.
965 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
967 // change the input font family
968 controller->SetInputFontFamily("SamsungOneUI_300");
970 // Check if relayout is requested or not when event state is INACTIVE.
971 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
972 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
975 // Perform a relayout
976 const Size size( application.GetScene().GetSize() );
977 controller->Relayout(size);
979 tet_result(TET_PASS);
984 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
986 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
987 ToolkitTestApplication application;
989 // Creates a text controller.
990 ControllerPtr controller = Controller::New();
992 ConfigureTextLabel(controller);
994 // Enable the text input.
995 // Creates a decorator.
996 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
998 InputMethodContext inputMethodContext = InputMethodContext::New();
999 // Enables the text input.
1000 controller->EnableTextInput( decorator, inputMethodContext );
1003 const std::string text("Hello World!");
1004 controller->SetText(text);
1005 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
1007 // Get the implementation of the text controller
1008 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1011 mImpl.mOperationsPending = Controller::NO_OPERATION;
1013 // simulate a key event.
1014 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1016 // change the input font weight
1017 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
1019 // Check if relayout is requested or not when event state is INACTIVE.
1020 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1021 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1024 // Perform a relayout
1025 const Size size( application.GetScene().GetSize() );
1026 controller->Relayout(size);
1028 tet_result(TET_PASS);
1033 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
1035 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
1036 ToolkitTestApplication application;
1038 // Creates a text controller.
1039 ControllerPtr controller = Controller::New();
1041 ConfigureTextLabel(controller);
1043 // Enable the text input.
1044 // Creates a decorator.
1045 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1047 InputMethodContext inputMethodContext = InputMethodContext::New();
1048 // Enables the text input.
1049 controller->EnableTextInput( decorator, inputMethodContext );
1052 const std::string text("Hello World!");
1053 controller->SetText(text);
1054 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
1056 // Get the implementation of the text controller
1057 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1060 mImpl.mOperationsPending = Controller::NO_OPERATION;
1062 // simulate a key event.
1063 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1065 // change the input font width
1066 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
1068 // Check if relayout is requested or not when event state is INACTIVE.
1069 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1070 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1073 // Perform a relayout
1074 const Size size( application.GetScene().GetSize() );
1075 controller->Relayout(size);
1077 tet_result(TET_PASS);
1082 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
1084 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
1085 ToolkitTestApplication application;
1087 // Creates a text controller.
1088 ControllerPtr controller = Controller::New();
1090 ConfigureTextLabel(controller);
1092 // Enable the text input.
1093 // Creates a decorator.
1094 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1096 InputMethodContext inputMethodContext = InputMethodContext::New();
1097 // Enables the text input.
1098 controller->EnableTextInput( decorator, inputMethodContext );
1101 const std::string text("Hello World!");
1102 controller->SetText(text);
1103 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
1105 // Get the implementation of the text controller
1106 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1109 mImpl.mOperationsPending = Controller::NO_OPERATION;
1111 // simulate a key event.
1112 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1114 // change the input font slant
1115 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
1117 // Check if relayout is requested or not when event state is INACTIVE.
1118 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1119 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1122 // Perform a relayout
1123 const Size size( application.GetScene().GetSize() );
1124 controller->Relayout(size);
1126 tet_result(TET_PASS);
1131 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
1133 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
1134 ToolkitTestApplication application;
1136 // Creates a text controller.
1137 ControllerPtr controller = Controller::New();
1139 ConfigureTextLabel(controller);
1141 // Enable the text input.
1142 // Creates a decorator.
1143 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
1145 InputMethodContext inputMethodContext = InputMethodContext::New();
1146 // Enables the text input.
1147 controller->EnableTextInput( decorator, inputMethodContext );
1150 const std::string text("Hello World!");
1151 controller->SetText(text);
1152 controller->SetInputFontPointSize( 1.0f );
1154 // Get the implementation of the text controller
1155 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1158 mImpl.mOperationsPending = Controller::NO_OPERATION;
1160 // simulate a key event.
1161 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1163 // change the input font point size
1164 controller->SetInputFontPointSize( 1.2f );
1166 // Check if relayout is requested or not when event state is INACTIVE.
1167 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1168 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
1171 // Perform a relayout
1172 const Size size( application.GetScene().GetSize() );
1173 controller->Relayout(size);
1176 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN ) );
1178 tet_result(TET_PASS);
1183 int UtcDaliTextControllerSelectEvent(void)
1185 tet_infoline(" UtcDaliTextControllerSelectEvent");
1186 ToolkitTestApplication application;
1188 // Creates a text controller.
1189 ControllerPtr controller = Controller::New();
1191 // Configures the text controller similarly to the text-field.
1192 ConfigureTextField( controller );
1195 const std::string text("Hello World!");
1196 controller->SetText( text );
1198 // Select the whole text.
1199 controller->SelectEvent( 0.f, 0.f, SelectionType::INTERACTIVE );
1201 // Perform a relayout
1202 const Size size( application.GetScene().GetSize() );
1203 controller->Relayout(size);
1205 // Get the implementation of the text controller
1206 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1208 // Check if the whole text is selected or not.
1209 std::string retrieved_text;
1210 mImpl.RetrieveSelection( retrieved_text, false );
1211 DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION );
1213 // Select the whole text.
1214 controller->SelectEvent( 0.f, 0.f, SelectionType::ALL );
1216 // Perform a relayout
1217 controller->Relayout( size );
1219 mImpl.RetrieveSelection( retrieved_text, false );
1220 DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION );
1226 int UtcDaliTextControllerRemoveTextChangeEventData(void)
1228 tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData");
1229 ToolkitTestApplication application;
1231 // Creates a text controller.
1232 ControllerPtr controller = Controller::New();
1234 ConfigureTextField( controller );
1237 const std::string text( "Hello World!" );
1238 controller->SetText( text );
1239 controller->SetInputFontPointSize( 1.0f );
1241 // Get the implementation of the text controller
1242 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1244 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1246 // Send DELETE_SURROUNDING event
1247 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
1248 InputMethodContext inputMethodContext = InputMethodContext::New();
1249 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1251 // Force to update the model.
1252 controller->GetNaturalSize();
1254 // Simulate a key event to delete text
1255 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1257 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1259 // Perform a relayout
1260 const Size size( application.GetScene().GetSize() );
1261 controller->Relayout( size );
1263 tet_result(TET_PASS);
1268 int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void)
1270 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated");
1271 ToolkitTestApplication application;
1273 // Creates a text controller.
1274 ControllerPtr controller = Controller::New();
1276 ConfigureTextField(controller);
1279 const std::string text("Hello World!");
1280 controller->SetText( text );
1281 controller->SetInputFontPointSize( 1.0f );
1282 controller->KeyboardFocusGainEvent();
1284 application.SendNotification();
1285 application.Render();
1287 // Perform a relayout
1288 const Size size( application.GetScene().GetSize() );
1289 controller->Relayout(size);
1291 // simulate a key event.
1292 controller->KeyEvent( GenerateKey( "a", "a", 38, 0, 0, Dali::KeyEvent::DOWN ) );
1294 // change the input font point size
1295 controller->SetInputFontPointSize( 20.f );
1297 application.SendNotification();
1298 application.Render();
1300 // Perform a relayout
1301 controller->Relayout(size);
1303 tet_result(TET_PASS);
1308 int UtcDaliTextControllerDeleteSurroundings(void)
1310 tet_infoline(" UtcDaliTextControllerDeleteSurroundings");
1311 ToolkitTestApplication application;
1313 // Creates a text controller.
1314 ControllerPtr controller = Controller::New();
1316 ConfigureTextField( controller );
1318 // Get the implementation of the text controller
1319 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1321 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
1323 InputMethodContext inputMethodContext = InputMethodContext::New();
1324 // Add some pre-edit text, such as Korean
1325 InputMethodContext::EventData imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3 );
1326 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1328 // Perform a relayout
1329 const Size size( application.GetScene().GetSize() );
1331 application.SendNotification();
1332 application.Render();
1334 controller->Relayout( size );
1336 // Simulate a key event to delete one text
1337 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN ) );
1339 // Send DELETE_SURROUNDING event (Delete All text)
1340 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -2, 2 );
1341 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
1343 application.SendNotification();
1344 application.Render();
1346 controller->Relayout( size );
1348 // simulate a key event to add text
1349 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1350 controller->KeyEvent( GenerateKey( "ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN ) );
1352 DALI_TEST_EQUALS( EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION );
1354 // Force to update the model.
1355 controller->GetNaturalSize();
1357 application.SendNotification();
1358 application.Render();
1360 controller->Relayout( size );
1362 tet_result(TET_PASS);