2 * Copyright (c) 2023 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 <dali-toolkit/internal/controls/text-controls/text-field-impl.h>
26 #include <dali-toolkit/internal/text/controller/text-controller-impl.h>
27 #include <dali-toolkit/internal/text/controller/text-controller.h>
28 #include <dali-toolkit/internal/text/text-control-interface.h>
29 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
30 #include <dali/devel-api/events/key-event-devel.h>
31 #include <toolkit-text-utils.h>
34 using namespace Toolkit;
39 const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option.
40 const char* const OPTION_CUT("optionCut"); // "Cut" popup option.
41 const char* const OPTION_COPY("optionCopy"); // "Copy" popup option.
42 const char* const OPTION_PASTE("optionPaste"); // "Paste" popup option.
43 const char* const OPTION_CLIPBOARD("optionClipboard"); // "Clipboard" popup option.
45 const Size CONTROL_SIZE(300.f, 60.f);
47 // Generate a KeyEvent to send to Core.
48 Dali::KeyEvent GenerateKey(const std::string& keyName,
49 const std::string& keyString,
52 unsigned long timeStamp,
53 const Dali::KeyEvent::State& keyState)
55 return DevelKeyEvent::New(keyName, "", keyString, keyCode, keyModifier, timeStamp, keyState, "", "", Device::Class::NONE, Device::Subclass::NONE);
60 int UtcDaliTextController(void)
62 tet_infoline(" UtcDaliTextController");
63 ToolkitTestApplication application;
65 // Creates a text controller.
66 ControllerPtr controller = Controller::New();
67 DALI_TEST_CHECK(controller);
73 int UtcDaliTextControllerSetGetScrollEnabled(void)
75 tet_infoline(" UtcDaliTextControllerSetGetScrollEnabled");
76 ToolkitTestApplication application;
78 // Creates a text controller.
79 ControllerPtr controller = Controller::New();
80 DALI_TEST_CHECK(controller);
82 // Configures the text controller similarly to the text-editor.
83 ConfigureTextEditor(controller);
85 DALI_TEST_CHECK(!controller->IsHorizontalScrollEnabled());
86 DALI_TEST_CHECK(controller->IsVerticalScrollEnabled());
88 // Configures the text controller similarly to the text-field.
89 ConfigureTextField(controller);
91 DALI_TEST_CHECK(controller->IsHorizontalScrollEnabled());
92 DALI_TEST_CHECK(!controller->IsVerticalScrollEnabled());
94 // Configures the text controller similarly to the text-label.
95 ConfigureTextLabel(controller);
97 DALI_TEST_CHECK(!controller->IsHorizontalScrollEnabled());
98 DALI_TEST_CHECK(!controller->IsVerticalScrollEnabled());
100 tet_result(TET_PASS);
104 int UtcDaliTextControllerSetIsTextElide(void)
106 tet_infoline(" UtcDaliTextControllerSetIsTextElide");
107 ToolkitTestApplication application;
109 // Creates a text controller.
110 ControllerPtr controller = Controller::New();
111 DALI_TEST_CHECK(controller);
113 // Configures the text controller similarly to the text-editor.
114 ConfigureTextEditor(controller);
115 DALI_TEST_EQUALS(false, controller->IsTextElideEnabled(), TEST_LOCATION);
117 controller->SetTextElideEnabled(true);
118 DALI_TEST_EQUALS(true, controller->IsTextElideEnabled(), TEST_LOCATION);
120 // Configures the text controller similarly to the text-field.
121 ConfigureTextField(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-label.
128 ConfigureTextLabel(controller);
129 DALI_TEST_EQUALS(true, controller->IsTextElideEnabled(), TEST_LOCATION);
131 controller->SetTextElideEnabled(false);
132 DALI_TEST_EQUALS(false, controller->IsTextElideEnabled(), TEST_LOCATION);
134 tet_result(TET_PASS);
138 int UtcDaliTextControllerEnableCursorBlinking(void)
140 tet_infoline(" UtcDaliTextControllerEnableCursorBlinking");
141 ToolkitTestApplication application;
143 // Creates a text controller.
144 ControllerPtr controller = Controller::New();
145 DALI_TEST_CHECK(controller);
147 // There is no text input enabled.
148 DALI_TEST_CHECK(!controller->GetEnableCursorBlink());
150 // Enable the text input.
151 // Creates a decorator.
152 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
154 InputMethodContext inputMethodContext = InputMethodContext::New();
155 // Enables the text input.
156 controller->EnableTextInput(decorator, inputMethodContext);
158 // Enables the cursor blink.
159 controller->SetEnableCursorBlink(true);
161 DALI_TEST_CHECK(controller->GetEnableCursorBlink());
163 // Disables the cursor blink.
164 controller->SetEnableCursorBlink(false);
166 DALI_TEST_CHECK(!controller->GetEnableCursorBlink());
168 tet_result(TET_PASS);
172 int UtcDaliTextControllerImfEvent(void)
174 tet_infoline(" UtcDaliTextController");
175 ToolkitTestApplication application;
177 // Creates a text controller.
178 ControllerPtr controller = Controller::New();
181 InputMethodContext::EventData imfEvent;
183 DALI_TEST_CHECK(controller);
185 // Enable the text input.
186 // Creates a decorator.
187 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
190 InputMethodContext inputMethodContext = InputMethodContext::New();
191 // Enables the text input.
192 controller->EnableTextInput(decorator, inputMethodContext);
194 // Set the placeholder text.
195 controller->SetPlaceholderText(Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali");
198 imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0);
199 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
202 imfEvent = InputMethodContext::EventData(InputMethodContext::VOID, "", 0, 0);
203 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
205 controller->GetText(text);
206 DALI_TEST_CHECK(text.empty());
207 DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION); // We should ignore Placeholder text here
209 imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello ", 0, 6);
210 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
211 controller->GetNaturalSize();
213 // Check 'Delete All' key which means the input panel send a big range
214 imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -100, 100);
215 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
216 controller->GetNaturalSize();
218 controller->GetText(text);
219 DALI_TEST_EQUALS("", text, TEST_LOCATION);
220 DALI_TEST_EQUALS(0u, controller->GetNumberOfCharacters(), TEST_LOCATION);
222 // Send COMMIT event.
223 imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello ", 0, 6);
224 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
226 // Force to update the model.
227 controller->GetNaturalSize();
229 controller->GetText(text);
230 DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION);
231 DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION);
233 // Send PRE_EDIT event
234 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
235 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
237 // Force to update the model.
238 controller->GetNaturalSize();
240 controller->GetText(text);
241 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
242 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
244 // Send DELETE_SURROUNDING event
245 imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -1, 1);
246 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
248 // Force to update the model.
249 controller->GetNaturalSize();
251 controller->GetText(text);
252 DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION);
253 DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION);
256 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::UNDERLINE);
258 // Send PRE_EDIT event
259 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "wo", 6, 2);
260 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
262 // Force to update the model.
263 controller->GetNaturalSize();
265 controller->GetText(text);
266 DALI_TEST_EQUALS("Hello wo", text, TEST_LOCATION);
267 DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION);
269 // Send GET_SURROUNDING event
270 imfEvent = InputMethodContext::EventData(InputMethodContext::GET_SURROUNDING, "", 0, 0);
271 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
273 controller->GetText(text);
274 DALI_TEST_EQUALS("Hello wo", text, TEST_LOCATION);
275 DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), 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);
283 DALI_TEST_EQUALS(8u, controller->GetNumberOfCharacters(), TEST_LOCATION);
285 tet_result(TET_PASS);
289 int UtcDaliTextControllerImfPreeditStyle(void)
291 tet_infoline(" UtcDaliTextControllerImfPreeditStyle");
292 ToolkitTestApplication application;
294 // Creates a text controller.
295 ControllerPtr controller = Controller::New();
298 InputMethodContext::EventData imfEvent;
300 DALI_TEST_CHECK(controller);
302 // Configures the text controller similarly to the text-field.
303 ConfigureTextField(controller);
305 InputMethodContext inputMethodContext = InputMethodContext::New();
307 // Send COMMIT event.
308 imfEvent = InputMethodContext::EventData(InputMethodContext::COMMIT, "Hello ", 0, 6);
309 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
311 // Force to update the model.
312 controller->GetNaturalSize();
314 controller->GetText(text);
315 DALI_TEST_EQUALS("Hello ", text, TEST_LOCATION);
316 DALI_TEST_EQUALS(6u, controller->GetNumberOfCharacters(), TEST_LOCATION);
318 // Send PRE_EDIT event
319 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
320 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
321 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::NONE);
322 controller->GetNaturalSize();
324 controller->GetText(text);
325 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
326 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
328 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
329 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
331 // Set the preedit style as REVERSE
332 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE);
333 controller->GetNaturalSize();
335 controller->GetText(text);
336 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
337 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
339 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
340 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
342 // Set the preedit style as HIGHLIGHT
343 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::HIGHLIGHT);
344 controller->GetNaturalSize();
346 controller->GetText(text);
347 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
348 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
350 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
351 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
353 // Set the preedit style as CUSTOM_PLATFORM_STYLE_1
354 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_1);
355 controller->GetNaturalSize();
357 controller->GetText(text);
358 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
359 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
361 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
362 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
364 // Set the preedit style as CUSTOM_PLATFORM_STYLE_2
365 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_2);
366 controller->GetNaturalSize();
368 controller->GetText(text);
369 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
370 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
372 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
373 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
375 // Set the preedit style as CUSTOM_PLATFORM_STYLE_3
376 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_3);
377 controller->GetNaturalSize();
379 controller->GetText(text);
380 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
381 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
383 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "w", 6, 1);
384 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
386 // Set the preedit style as CUSTOM_PLATFORM_STYLE_4
387 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::CUSTOM_PLATFORM_STYLE_4);
388 controller->GetNaturalSize();
390 controller->GetText(text);
391 DALI_TEST_EQUALS("Hello w", text, TEST_LOCATION);
392 DALI_TEST_EQUALS(7u, controller->GetNumberOfCharacters(), TEST_LOCATION);
394 tet_result(TET_PASS);
398 int UtcDaliTextControllerImfPreeditStyleReverse(void)
400 tet_infoline(" UtcDaliTextControllerImfPreeditStyleReverse");
401 ToolkitTestApplication application;
403 // Creates a text controller.
404 ControllerPtr controller = Controller::New();
407 InputMethodContext::EventData imfEvent;
409 DALI_TEST_CHECK(controller);
411 // Configures the text controller similarly to the text-field.
412 ConfigureTextField(controller);
414 InputMethodContext inputMethodContext = InputMethodContext::New();
416 // Send PRE_EDIT event
417 imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "Reverse", 0, 7);
418 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
420 // For coverage, mEditableControlInterface is required.
421 // Creates a temporary text-field to use mEditableControlInterface.
422 TextField field = TextField::New();
423 Toolkit::Internal::TextField& fieldImpl = GetImpl(field);
424 ControllerPtr fieldController = fieldImpl.GetTextController();
425 Controller::Impl& fieldControllerImpl = Controller::Impl::GetImplementation(*fieldController.Get());
426 Controller::Impl& controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
428 // For coverage, mEditableControlInterface is required.
429 controllerImpl.mEditableControlInterface = fieldControllerImpl.mEditableControlInterface;
431 // Set the preedit style as REVERSE
432 inputMethodContext.SetPreeditStyle(InputMethodContext::PreeditStyle::REVERSE);
433 controller->GetNaturalSize();
435 controller->GetText(text);
436 DALI_TEST_EQUALS("Reverse", text, TEST_LOCATION);
438 tet_result(TET_PASS);
442 int UtcDaliTextControllerTextPopupButtonTouched(void)
444 tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
445 ToolkitTestApplication application;
447 // Creates a text controller.
448 ControllerPtr controller = Controller::New();
450 DALI_TEST_CHECK(controller);
454 Property::Map attributes;
456 // Enable the text input.
457 // Creates a decorator.
458 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
461 InputMethodContext inputMethodContext = InputMethodContext::New();
462 // Enables the text input.
463 controller->EnableTextInput(decorator, inputMethodContext);
465 // Creates the text's popup.
466 TextSelectionPopupCallbackInterface& callbackInterface = *controller;
467 TextSelectionPopup textPopup = TextSelectionPopup::New(&callbackInterface);
469 Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>(TextSelectionPopup::CUT |
470 TextSelectionPopup::COPY |
471 TextSelectionPopup::PASTE |
472 TextSelectionPopup::SELECT |
473 TextSelectionPopup::SELECT_ALL |
474 TextSelectionPopup::CLIPBOARD);
476 textPopup.EnableButtons(buttonsToEnable);
477 application.GetScene().Add(textPopup);
478 textPopup.ShowPopup();
481 application.SendNotification();
482 application.Render();
485 controller->SetText("Hello world");
487 // When the TextSelectionPopup is active, the controller has focus.
488 controller->KeyboardFocusGainEvent();
490 // Select the whole text.
491 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_SELECT_ALL));
492 DALI_TEST_CHECK(button);
494 button.DoAction("buttonClick", attributes);
496 // Call relayout to process the input events.
497 controller->Relayout(CONTROL_SIZE);
500 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CUT));
501 DALI_TEST_CHECK(button);
503 button.DoAction("buttonClick", attributes);
505 // Force to update the model.
506 controller->GetNaturalSize();
508 controller->GetText(text);
509 DALI_TEST_CHECK(text.empty());
512 controller->SetText("Hello world");
514 // Select the whole text.
515 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_SELECT_ALL));
516 DALI_TEST_CHECK(button);
518 button.DoAction("buttonClick", attributes);
520 // Call relayout to process the input events.
521 controller->Relayout(CONTROL_SIZE);
523 // Copy to the clipboard.
524 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_COPY));
525 DALI_TEST_CHECK(button);
527 button.DoAction("buttonClick", attributes);
529 // Call relayout to process the input events.
530 controller->Relayout(CONTROL_SIZE);
533 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CUT));
534 DALI_TEST_CHECK(button);
536 button.DoAction("buttonClick", attributes);
538 // Force to update the model.
539 controller->GetNaturalSize();
541 controller->GetText(text);
542 DALI_TEST_CHECK(text.empty());
545 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_PASTE));
546 DALI_TEST_CHECK(button);
548 button.DoAction("buttonClick", attributes);
550 // Call relayout to process the input events.
551 controller->Relayout(CONTROL_SIZE);
552 controller->GetText(text);
554 DALI_TEST_EQUALS("Hello world", text.c_str(), TEST_LOCATION);
556 // Show the clipboard.
557 button = PushButton::DownCast(textPopup.FindChildByName(OPTION_CLIPBOARD));
558 DALI_TEST_CHECK(button);
560 button.DoAction("buttonClick", attributes);
562 tet_result(TET_PASS);
566 int UtcDaliTextControllerGetInputShadowProperty(void)
568 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
569 ToolkitTestApplication application;
571 // Creates a text controller.
572 ControllerPtr controller = Controller::New();
574 DALI_TEST_CHECK(controller);
576 const std::string& shadowProperties = controller->GetInputShadowProperties();
578 DALI_TEST_CHECK(shadowProperties.empty());
580 tet_result(TET_PASS);
584 int UtcDaliTextControllerGetInputUnderlineProperty(void)
586 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
587 ToolkitTestApplication application;
589 // Creates a text controller.
590 ControllerPtr controller = Controller::New();
592 DALI_TEST_CHECK(controller);
594 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
596 DALI_TEST_CHECK(underlineProperties.empty());
598 tet_result(TET_PASS);
602 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
604 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
605 ToolkitTestApplication application;
607 // Creates a text controller.
608 ControllerPtr controller = Controller::New();
610 DALI_TEST_CHECK(controller);
612 DALI_TEST_CHECK(!controller->IsAutoScrollEnabled());
614 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
616 // Enable multi-line.
617 controller->SetMultiLineEnabled(true);
619 // Enable text scrolling.
620 controller->SetAutoScrollEnabled(true);
622 DALI_TEST_CHECK(!controller->IsAutoScrollEnabled());
624 // Disable multi-line.
625 controller->SetMultiLineEnabled(false);
627 // Enable text scrolling.
628 controller->SetAutoScrollEnabled(true);
630 // Should be ebabled now.
631 DALI_TEST_CHECK(controller->IsAutoScrollEnabled());
633 tet_result(TET_PASS);
637 int UtcDaliTextControllerSetGetCheckProperty(void)
639 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
640 ToolkitTestApplication application;
642 // Creates a text controller.
643 ControllerPtr controller = Controller::New();
645 DALI_TEST_CHECK(controller);
647 // Enable the text input.
648 // Creates a decorator.
649 Text::DecoratorPtr decorator = Text::Decorator::New(*controller, *controller);
651 InputMethodContext inputMethodContext = InputMethodContext::New();
652 // Enables the text input.
653 controller->EnableTextInput(decorator, inputMethodContext);
655 DALI_TEST_CHECK(!controller->IsInputModePassword());
657 // Set the text input to password.
658 controller->SetInputModePassword(true);
660 DALI_TEST_CHECK(controller->IsInputModePassword());
662 // Unset the text input to password.
663 controller->SetInputModePassword(false);
665 DALI_TEST_CHECK(!controller->IsInputModePassword());
667 tet_result(TET_PASS);
671 int UtcDaliTextControllerSetGetTapLongPressAction(void)
673 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
674 ToolkitTestApplication application;
676 // Creates a text controller.
677 ControllerPtr controller = Controller::New();
679 DALI_TEST_CHECK(controller);
681 // Test first with no decorator.
683 DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION);
684 controller->SetNoTextDoubleTapAction(Controller::NoTextTap::HIGHLIGHT);
685 DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION);
687 DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION);
688 controller->SetNoTextLongPressAction(Controller::NoTextTap::HIGHLIGHT);
689 DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION);
691 // Add a decorator and re-test.
693 // Creates a decorator.
694 Text::DecoratorPtr decorator = Text::Decorator::New(*controller, *controller);
696 InputMethodContext inputMethodContext = InputMethodContext::New();
697 // Enables the text input.
698 controller->EnableTextInput(decorator, inputMethodContext);
700 DALI_TEST_EQUALS(Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION);
701 controller->SetNoTextDoubleTapAction(Controller::NoTextTap::HIGHLIGHT);
702 DALI_TEST_EQUALS(Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION);
704 DALI_TEST_EQUALS(Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION); // The default is SHOW_SELECTION_POPUP
705 controller->SetNoTextLongPressAction(Controller::NoTextTap::HIGHLIGHT);
706 DALI_TEST_EQUALS(Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION);
711 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
713 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
714 ToolkitTestApplication application;
716 const Size size(application.GetScene().GetSize());
719 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
722 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
724 // Creates a text controller.
725 ControllerPtr controller = Controller::New();
727 ConfigureTextLabel(controller);
729 // single line, line spacing = 0px
731 const float EXPECTED_SPACING = 0.0f;
732 const Vector2 EXPECTED_LAYOUT_SIZE(350.0f, 19.0f);
733 const Vector3 EXPECTED_NATURAL_SIZE(350.0f, 20.0f, 0.0f);
735 controller->SetText(textSingle);
736 controller->Relayout(size);
737 controller->SetMultiLineEnabled(false);
739 Vector3 naturalSize = controller->GetNaturalSize();
740 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
741 float lineSpacing0 = controller->GetDefaultLineSpacing();
743 DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION);
744 DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION);
745 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION);
748 // single line, line spacing = 20px
750 const float EXPECTED_SPACING = 20.0f;
751 const Vector2 EXPECTED_LAYOUT_SIZE(350.0f, 19.0f);
752 const Vector3 EXPECTED_NATURAL_SIZE(350.0f, 40.0f, 0.0f);
754 controller->SetText(textSingle);
755 controller->Relayout(size);
756 controller->SetDefaultLineSpacing(20);
757 controller->SetMultiLineEnabled(false);
759 Vector3 naturalSize = controller->GetNaturalSize();
760 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
761 float lineSpacing0 = controller->GetDefaultLineSpacing();
763 DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION);
764 DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION);
765 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION);
768 // multi-line, line spacing = 0px
770 const float EXPECTED_SPACING = 0.0f;
771 const Vector2 EXPECTED_LAYOUT_SIZE(340.0f, 39.0f);
772 const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 58.0f, 0.0f);
774 controller->SetText(textMulti);
775 controller->Relayout(size);
776 controller->SetMultiLineEnabled(true);
777 controller->SetDefaultLineSpacing(0);
779 Vector3 naturalSize = controller->GetNaturalSize();
780 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
781 float lineSpacing0 = controller->GetDefaultLineSpacing();
783 DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION);
784 DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION);
785 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION);
788 // multi-line, line spacing = 20px
790 const float EXPECTED_SPACING = 20.0f;
791 const Vector2 EXPECTED_LAYOUT_SIZE(121.0f, 57.0f);
792 const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 118.0f, 0.0f);
794 controller->SetText(textMulti);
795 controller->Relayout(size);
796 controller->SetMultiLineEnabled(true);
797 controller->SetDefaultLineSpacing(20);
799 Vector3 naturalSize = controller->GetNaturalSize();
800 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
801 float lineSpacing0 = controller->GetDefaultLineSpacing();
803 DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION);
804 DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION);
805 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION);
808 // multi-line, line spacing = 30px
810 const float EXPECTED_SPACING = 30.0f;
811 const Vector2 EXPECTED_LAYOUT_SIZE(121.0f, 117.0f);
812 const Vector3 EXPECTED_NATURAL_SIZE(122.0f, 148.0f, 0.0f);
814 controller->SetText(textMulti);
815 controller->Relayout(size);
816 controller->SetMultiLineEnabled(true);
817 controller->SetDefaultLineSpacing(30);
819 Vector3 naturalSize = controller->GetNaturalSize();
820 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
821 float lineSpacing0 = controller->GetDefaultLineSpacing();
823 DALI_TEST_EQUALS(EXPECTED_SPACING, lineSpacing0, TEST_LOCATION);
824 DALI_TEST_EQUALS(EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION);
825 DALI_TEST_EQUALS(EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION);
831 int UtcDaliTextControllerCheckBufferIndices(void)
833 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
834 ToolkitTestApplication application;
836 // Creates a text controller.
837 ControllerPtr controller = Controller::New();
839 ConfigureTextLabel(controller);
842 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
843 controller->SetText(text);
845 // Get the implementation of the text controller
846 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
848 // Tweak some parameters to make the indices to access the text buffer invalid
849 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
850 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
851 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
852 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
854 // Perform a relayout
855 const Size size(application.GetScene().GetSize());
856 controller->Relayout(size);
859 const std::string emptyText("");
860 controller->SetText(emptyText);
862 // Tweak some parameters to make the indices to access the text buffer invalid
863 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = 10u;
864 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
865 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
866 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
868 // Perform a relayout
869 controller->Relayout(size);
872 controller->SetText(text);
875 controller->SetDefaultFontSize(10.f, Controller::POINT_SIZE);
877 // Tweak some parameters to make the indices to access the text buffer invalid
878 mImpl.mTextUpdateInfo.Clear();
880 // Perform a relayout
881 controller->GetHeightForWidth(size.width / 2.f);
882 controller->Relayout(size);
884 tet_result(TET_PASS);
889 int UtcDaliTextControllerCheckInputColorChanged(void)
891 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
892 ToolkitTestApplication application;
894 // Creates a text controller.
895 ControllerPtr controller = Controller::New();
897 ConfigureTextLabel(controller);
899 // Enable the text input.
900 // Creates a decorator.
901 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
903 InputMethodContext inputMethodContext = InputMethodContext::New();
904 // Enables the text input.
905 controller->EnableTextInput(decorator, inputMethodContext);
908 const std::string text("Hello World!");
909 controller->SetText(text);
911 const Vector4 inputColor(0.0f, 0.0f, 0.0f, 1.0f);
912 controller->SetInputColor(inputColor);
914 // Get the implementation of the text controller
915 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
918 mImpl.mOperationsPending = Controller::NO_OPERATION;
920 // simulate a key event.
921 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
923 // change the input color
924 const Vector4 newInputColor(1.0f, 0.0f, 0.0f, 1.0f);
925 controller->SetInputColor(newInputColor);
927 // Check if relayout is requested or not when event state is INACTIVE.
928 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
929 DALI_TEST_EQUALS(Controller::COLOR, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::COLOR), TEST_LOCATION);
931 // Perform a relayout
932 const Size size(application.GetScene().GetSize());
933 controller->Relayout(size);
935 tet_result(TET_PASS);
940 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
942 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
943 ToolkitTestApplication application;
945 // Creates a text controller.
946 ControllerPtr controller = Controller::New();
948 ConfigureTextLabel(controller);
950 // Enable the text input.
951 // Creates a decorator.
952 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
954 InputMethodContext inputMethodContext = InputMethodContext::New();
955 // Enables the text input.
956 controller->EnableTextInput(decorator, inputMethodContext);
958 // Set the text and font family
959 const std::string text("Hello World!");
960 controller->SetText(text);
961 controller->SetInputFontFamily("SamsungOneUI_200");
963 // Get the implementation of the text controller
964 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
967 mImpl.mOperationsPending = Controller::NO_OPERATION;
969 // simulate a key event.
970 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
972 // change the input font family
973 controller->SetInputFontFamily("SamsungOneUI_300");
975 // Check if relayout is requested or not when event state is INACTIVE.
976 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
977 DALI_TEST_EQUALS(Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::VALIDATE_FONTS), TEST_LOCATION);
979 // Perform a relayout
980 const Size size(application.GetScene().GetSize());
981 controller->Relayout(size);
983 tet_result(TET_PASS);
988 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
990 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
991 ToolkitTestApplication application;
993 // Creates a text controller.
994 ControllerPtr controller = Controller::New();
996 ConfigureTextLabel(controller);
998 // Enable the text input.
999 // Creates a decorator.
1000 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
1002 InputMethodContext inputMethodContext = InputMethodContext::New();
1003 // Enables the text input.
1004 controller->EnableTextInput(decorator, inputMethodContext);
1007 const std::string text("Hello World!");
1008 controller->SetText(text);
1009 controller->SetInputFontWeight(TextAbstraction::FontWeight::NORMAL);
1011 // Get the implementation of the text controller
1012 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1015 mImpl.mOperationsPending = Controller::NO_OPERATION;
1017 // simulate a key event.
1018 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
1020 // change the input font weight
1021 controller->SetInputFontWeight(TextAbstraction::FontWeight::BOLD);
1023 // Check if relayout is requested or not when event state is INACTIVE.
1024 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1025 DALI_TEST_EQUALS(Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::VALIDATE_FONTS), TEST_LOCATION);
1027 // Perform a relayout
1028 const Size size(application.GetScene().GetSize());
1029 controller->Relayout(size);
1031 tet_result(TET_PASS);
1036 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
1038 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
1039 ToolkitTestApplication application;
1041 // Creates a text controller.
1042 ControllerPtr controller = Controller::New();
1044 ConfigureTextLabel(controller);
1046 // Enable the text input.
1047 // Creates a decorator.
1048 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
1050 InputMethodContext inputMethodContext = InputMethodContext::New();
1051 // Enables the text input.
1052 controller->EnableTextInput(decorator, inputMethodContext);
1055 const std::string text("Hello World!");
1056 controller->SetText(text);
1057 controller->SetInputFontWidth(TextAbstraction::FontWidth::NORMAL);
1059 // Get the implementation of the text controller
1060 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1063 mImpl.mOperationsPending = Controller::NO_OPERATION;
1065 // simulate a key event.
1066 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
1068 // change the input font width
1069 controller->SetInputFontWidth(TextAbstraction::FontWidth::EXPANDED);
1071 // Check if relayout is requested or not when event state is INACTIVE.
1072 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1073 DALI_TEST_EQUALS(Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::VALIDATE_FONTS), TEST_LOCATION);
1075 // Perform a relayout
1076 const Size size(application.GetScene().GetSize());
1077 controller->Relayout(size);
1079 tet_result(TET_PASS);
1084 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
1086 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
1087 ToolkitTestApplication application;
1089 // Creates a text controller.
1090 ControllerPtr controller = Controller::New();
1092 ConfigureTextLabel(controller);
1094 // Enable the text input.
1095 // Creates a decorator.
1096 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
1098 InputMethodContext inputMethodContext = InputMethodContext::New();
1099 // Enables the text input.
1100 controller->EnableTextInput(decorator, inputMethodContext);
1103 const std::string text("Hello World!");
1104 controller->SetText(text);
1105 controller->SetInputFontSlant(TextAbstraction::FontSlant::NORMAL);
1107 // Get the implementation of the text controller
1108 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1111 mImpl.mOperationsPending = Controller::NO_OPERATION;
1113 // simulate a key event.
1114 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
1116 // change the input font slant
1117 controller->SetInputFontSlant(TextAbstraction::FontSlant::ROMAN);
1119 // Check if relayout is requested or not when event state is INACTIVE.
1120 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1121 DALI_TEST_EQUALS(Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::VALIDATE_FONTS), TEST_LOCATION);
1123 // Perform a relayout
1124 const Size size(application.GetScene().GetSize());
1125 controller->Relayout(size);
1127 tet_result(TET_PASS);
1132 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
1134 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
1135 ToolkitTestApplication application;
1137 // Creates a text controller.
1138 ControllerPtr controller = Controller::New();
1140 ConfigureTextLabel(controller);
1142 // Enable the text input.
1143 // Creates a decorator.
1144 Text::DecoratorPtr decorator = Text::Decorator::New(*controller,
1146 InputMethodContext inputMethodContext = InputMethodContext::New();
1147 // Enables the text input.
1148 controller->EnableTextInput(decorator, inputMethodContext);
1151 const std::string text("Hello World!");
1152 controller->SetText(text);
1153 controller->SetInputFontPointSize(1.0f);
1155 // Get the implementation of the text controller
1156 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1159 mImpl.mOperationsPending = Controller::NO_OPERATION;
1161 // simulate a key event.
1162 controller->KeyEvent(GenerateKey("", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::DOWN));
1164 // change the input font point size
1165 controller->SetInputFontPointSize(1.2f);
1167 // Check if relayout is requested or not when event state is INACTIVE.
1168 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1169 DALI_TEST_EQUALS(Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>(mImpl.mOperationsPending & Controller::VALIDATE_FONTS), TEST_LOCATION);
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);
1225 int UtcDaliTextControllerRemoveTextChangeEventData(void)
1227 tet_infoline(" UtcDaliTextControllerRemoveTextChangeEventData");
1228 ToolkitTestApplication application;
1230 // Creates a text controller.
1231 ControllerPtr controller = Controller::New();
1233 ConfigureTextField(controller);
1236 const std::string text("Hello World!");
1237 controller->SetText(text);
1238 controller->SetInputFontPointSize(1.0f);
1240 // Get the implementation of the text controller
1241 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1243 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1245 // Send DELETE_SURROUNDING event
1246 InputMethodContext::EventData imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -1, 1);
1247 InputMethodContext inputMethodContext = InputMethodContext::New();
1248 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
1250 // Force to update the model.
1251 controller->GetNaturalSize();
1253 // Simulate a key event to delete text
1254 controller->KeyEvent(GenerateKey("", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN));
1256 DALI_TEST_EQUALS(EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION);
1258 // Perform a relayout
1259 const Size size(application.GetScene().GetSize());
1260 controller->Relayout(size);
1262 tet_result(TET_PASS);
1267 int UtcDaliTextControllerCheckInputFontPointSizeUpdated(void)
1269 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeUpdated");
1270 ToolkitTestApplication application;
1272 // Creates a text controller.
1273 ControllerPtr controller = Controller::New();
1275 ConfigureTextField(controller);
1278 const std::string text("Hello World!");
1279 controller->SetText(text);
1280 controller->SetInputFontPointSize(1.0f);
1281 controller->KeyboardFocusGainEvent();
1283 application.SendNotification();
1284 application.Render();
1286 // Perform a relayout
1287 const Size size(application.GetScene().GetSize());
1288 controller->Relayout(size);
1290 // simulate a key event.
1291 controller->KeyEvent(GenerateKey("a", "a", 38, 0, 0, Dali::KeyEvent::DOWN));
1293 // change the input font point size
1294 controller->SetInputFontPointSize(20.f);
1296 application.SendNotification();
1297 application.Render();
1299 // Perform a relayout
1300 controller->Relayout(size);
1302 tet_result(TET_PASS);
1307 int UtcDaliTextControllerDeleteSurroundings(void)
1309 tet_infoline(" UtcDaliTextControllerDeleteSurroundings");
1310 ToolkitTestApplication application;
1312 // Creates a text controller.
1313 ControllerPtr controller = Controller::New();
1315 ConfigureTextField(controller);
1317 // Get the implementation of the text controller
1318 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1320 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1322 InputMethodContext inputMethodContext = InputMethodContext::New();
1323 // Add some pre-edit text, such as Korean
1324 InputMethodContext::EventData imfEvent = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "ㅂㅂㅂ", 0, 3);
1325 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
1327 // Perform a relayout
1328 const Size size(application.GetScene().GetSize());
1330 application.SendNotification();
1331 application.Render();
1333 controller->Relayout(size);
1335 // Simulate a key event to delete one text
1336 controller->KeyEvent(GenerateKey("", "", DALI_KEY_BACKSPACE, 0, 0, Dali::KeyEvent::DOWN));
1338 // Send DELETE_SURROUNDING event (Delete All text)
1339 imfEvent = InputMethodContext::EventData(InputMethodContext::DELETE_SURROUNDING, "", -2, 2);
1340 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent);
1342 application.SendNotification();
1343 application.Render();
1345 controller->Relayout(size);
1347 // simulate a key event to add text
1348 controller->KeyEvent(GenerateKey("ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN));
1349 controller->KeyEvent(GenerateKey("ㅇ", "ㅇ", 238, 0, 0, Dali::KeyEvent::DOWN));
1351 DALI_TEST_EQUALS(EventData::EDITING, mImpl.mEventData->mState, TEST_LOCATION);
1353 // Force to update the model.
1354 controller->GetNaturalSize();
1356 application.SendNotification();
1357 application.Render();
1359 controller->Relayout(size);
1361 tet_result(TET_PASS);
1366 int UtcDaliTextControllerMultipleInsert(void)
1368 tet_infoline(" UtcDaliTextControllerMultipleInsert");
1369 ToolkitTestApplication application;
1371 // Creates a text controller.
1372 ControllerPtr controller = Controller::New();
1374 ConfigureTextField(controller);
1376 // Get the implementation of the text controller
1377 Controller::Impl& mImpl = Controller::Impl::GetImplementation(*controller.Get());
1379 DALI_TEST_EQUALS(EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION);
1381 InputMethodContext inputMethodContext = InputMethodContext::New();
1383 // When maid thread is busy, multiple event might be executed.
1384 InputMethodContext::EventData imfEvent1 = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "A", 0, 1);
1385 InputMethodContext::EventData imfEvent2 = InputMethodContext::EventData(InputMethodContext::PRE_EDIT, "AAAAA", 0, 5);
1386 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent1);
1387 controller->OnInputMethodContextEvent(inputMethodContext, imfEvent2);
1389 // Perform a relayout
1390 const Size size(application.GetScene().GetSize());
1392 application.SendNotification();
1393 application.Render();
1395 controller->Relayout(size);
1398 controller->GetText(text);
1400 DALI_TEST_EQUALS("AAAAA", text, TEST_LOCATION);
1402 tet_result(TET_PASS);