2 * Copyright (c) 2019 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-toolkit/internal/controls/text-controls/text-field-impl.h>
27 #include <dali-toolkit/internal/text/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-toolkit/internal/text/text-controller-impl.h>
33 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 std::string gClipboardText;
48 void ContentSelectedCallback( ClipboardEventNotifier& notifier )
50 gClipboardText = notifier.GetContent();
53 // Generate a KeyEvent to send to Core.
54 Dali::KeyEvent GenerateKey( const std::string& keyName,
55 const std::string& keyString,
58 unsigned long timeStamp,
59 const Dali::KeyEvent::State& keyState )
61 return Dali::KeyEvent( keyName,
71 int UtcDaliTextController(void)
73 tet_infoline(" UtcDaliTextController");
74 ToolkitTestApplication application;
76 // Creates a text controller.
77 ControllerPtr controller = Controller::New();
78 DALI_TEST_CHECK( controller );
84 int UtcDaliTextControllerSetGetScrollEnabled(void)
86 tet_infoline(" UtcDaliTextControllerSetGetScrollEnabled");
87 ToolkitTestApplication application;
89 // Creates a text controller.
90 ControllerPtr controller = Controller::New();
91 DALI_TEST_CHECK( controller );
93 // Configures the text controller similarly to the text-editor.
94 ConfigureTextEditor( controller );
96 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
97 DALI_TEST_CHECK( controller->IsVerticalScrollEnabled() );
99 // Configures the text controller similarly to the text-field.
100 ConfigureTextField( controller );
102 DALI_TEST_CHECK( controller->IsHorizontalScrollEnabled() );
103 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
105 // Configures the text controller similarly to the text-label.
106 ConfigureTextLabel( controller );
108 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
109 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
111 tet_result(TET_PASS);
115 int UtcDaliTextControllerSetIsTextElide(void)
117 tet_infoline(" UtcDaliTextControllerSetIsTextElide");
118 ToolkitTestApplication application;
120 // Creates a text controller.
121 ControllerPtr controller = Controller::New();
122 DALI_TEST_CHECK( controller );
124 // Configures the text controller similarly to the text-editor.
125 ConfigureTextEditor( controller );
126 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
128 controller->SetTextElideEnabled( true );
129 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
131 // Configures the text controller similarly to the text-field.
132 ConfigureTextField( controller );
133 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
135 controller->SetTextElideEnabled( true );
136 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
138 // Configures the text controller similarly to the text-label.
139 ConfigureTextLabel( controller );
140 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
142 controller->SetTextElideEnabled( false );
143 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
145 tet_result(TET_PASS);
149 int UtcDaliTextControllerEnableCursorBlinking(void)
151 tet_infoline(" UtcDaliTextControllerEnableCursorBlinking");
152 ToolkitTestApplication application;
154 // Creates a text controller.
155 ControllerPtr controller = Controller::New();
156 DALI_TEST_CHECK( controller );
158 // There is no text input enabled.
159 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
161 // Enable the text input.
162 // Creates a decorator.
163 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
165 InputMethodContext inputMethodContext = InputMethodContext::New();
166 // Enables the text input.
167 controller->EnableTextInput( decorator, inputMethodContext );
169 // Enables the cursor blink.
170 controller->SetEnableCursorBlink( true );
172 DALI_TEST_CHECK( controller->GetEnableCursorBlink() );
174 // Disables the cursor blink.
175 controller->SetEnableCursorBlink( false );
177 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
179 tet_result(TET_PASS);
183 int UtcDaliTextControllerImfEvent(void)
185 tet_infoline(" UtcDaliTextController");
186 ToolkitTestApplication application;
188 // Creates a text controller.
189 ControllerPtr controller = Controller::New();
192 InputMethodContext::EventData imfEvent;
194 DALI_TEST_CHECK( controller );
196 // Enable the text input.
197 // Creates a decorator.
198 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
201 InputMethodContext inputMethodContext = InputMethodContext::New();
202 // Enables the text input.
203 controller->EnableTextInput( decorator, inputMethodContext );
205 // Set the placeholder text.
206 controller->SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali" );
209 imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 );
210 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
213 imfEvent = InputMethodContext::EventData( InputMethodContext::VOID, "", 0, 0 );
214 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
216 controller->GetText( text );
217 DALI_TEST_CHECK( text.empty() );
219 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
220 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
221 controller->GetNaturalSize();
223 // Check 'Delete All' key which means the input panel send a big range
224 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -100, 100 );
225 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
226 controller->GetNaturalSize();
228 controller->GetText( text );
229 DALI_TEST_EQUALS( "", text, TEST_LOCATION );
231 // Send COMMIT event.
232 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
233 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
235 // Force to update the model.
236 controller->GetNaturalSize();
238 controller->GetText( text );
239 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
241 // Send PRE_EDIT event
242 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
243 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
245 // Force to update the model.
246 controller->GetNaturalSize();
248 controller->GetText( text );
249 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
251 // Send DELETE_SURROUNDING event
252 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
253 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
255 // Force to update the model.
256 controller->GetNaturalSize();
258 controller->GetText( text );
259 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
261 // Send PRE_EDIT event
262 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "wo", 6, 2 );
263 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
265 // Force to update the model.
266 controller->GetNaturalSize();
268 controller->GetText( text );
269 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
271 // Send GET_SURROUNDING event
272 imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 );
273 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
275 controller->GetText( text );
276 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
278 // Send PRIVATE_COMMAND event
279 imfEvent = InputMethodContext::EventData( InputMethodContext::PRIVATE_COMMAND, "", 0, 0 );
280 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
282 controller->GetText( text );
283 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
285 tet_result(TET_PASS);
289 int UtcDaliTextControllerTextPopupButtonTouched(void)
291 tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
292 ToolkitTestApplication application;
294 // Creates a text controller.
295 ControllerPtr controller = Controller::New();
297 DALI_TEST_CHECK( controller );
301 Property::Map attributes;
303 // Enable the text input.
304 // Creates a decorator.
305 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
308 InputMethodContext inputMethodContext = InputMethodContext::New();
309 // Enables the text input.
310 controller->EnableTextInput( decorator, inputMethodContext );
312 // Creates the text's popup.
313 TextSelectionPopupCallbackInterface& callbackInterface = *controller;
314 TextSelectionPopup textPopup = TextSelectionPopup::New( &callbackInterface );
316 Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>( TextSelectionPopup::CUT |
317 TextSelectionPopup::COPY |
318 TextSelectionPopup::PASTE |
319 TextSelectionPopup::SELECT |
320 TextSelectionPopup::SELECT_ALL |
321 TextSelectionPopup::CLIPBOARD );
323 textPopup.EnableButtons( buttonsToEnable );
324 Stage::GetCurrent().Add( textPopup );
325 textPopup.ShowPopup();
328 application.SendNotification();
329 application.Render();
332 controller->SetText( "Hello world" );
334 // Select the whole text.
335 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
336 DALI_TEST_CHECK( button );
338 button.DoAction( "buttonClick", attributes );
340 // Call relayout to process the input events.
341 controller->Relayout( CONTROL_SIZE );
344 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
345 DALI_TEST_CHECK( button );
347 button.DoAction( "buttonClick", attributes );
349 // Force to update the model.
350 controller->GetNaturalSize();
352 controller->GetText( text );
353 DALI_TEST_CHECK( text.empty() );
356 controller->SetText( "Hello world" );
358 // Select the whole text.
359 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
360 DALI_TEST_CHECK( button );
362 button.DoAction( "buttonClick", attributes );
364 // Call relayout to process the input events.
365 controller->Relayout( CONTROL_SIZE );
367 // Copy to the clipboard.
368 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) );
369 DALI_TEST_CHECK( button );
371 button.DoAction( "buttonClick", attributes );
373 // Call relayout to process the input events.
374 controller->Relayout( CONTROL_SIZE );
377 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
378 DALI_TEST_CHECK( button );
380 button.DoAction( "buttonClick", attributes );
382 // Force to update the model.
383 controller->GetNaturalSize();
385 controller->GetText( text );
386 DALI_TEST_CHECK( text.empty() );
388 ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get();
389 clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback );
392 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) );
393 DALI_TEST_CHECK( button );
395 button.DoAction( "buttonClick", attributes );
397 // Call relayout to process the input events.
398 controller->Relayout( CONTROL_SIZE );
400 DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION );
402 // Show the clipboard.
403 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) );
404 DALI_TEST_CHECK( button );
406 button.DoAction( "buttonClick", attributes );
408 tet_result(TET_PASS);
412 int UtcDaliTextControllerGetInputShadowProperty(void)
414 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
415 ToolkitTestApplication application;
417 // Creates a text controller.
418 ControllerPtr controller = Controller::New();
420 DALI_TEST_CHECK( controller );
422 const std::string& shadowProperties = controller->GetInputShadowProperties();
424 DALI_TEST_CHECK( shadowProperties.empty() );
426 tet_result(TET_PASS);
430 int UtcDaliTextControllerGetInputUnderlineProperty(void)
432 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
433 ToolkitTestApplication application;
435 // Creates a text controller.
436 ControllerPtr controller = Controller::New();
438 DALI_TEST_CHECK( controller );
440 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
442 DALI_TEST_CHECK( underlineProperties.empty() );
444 tet_result(TET_PASS);
448 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
450 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
451 ToolkitTestApplication application;
453 // Creates a text controller.
454 ControllerPtr controller = Controller::New();
456 DALI_TEST_CHECK( controller );
458 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
460 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
462 // Enable multi-line.
463 controller->SetMultiLineEnabled( true );
465 // Enable text scrolling.
466 controller->SetAutoScrollEnabled( true );
468 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
470 // Disable multi-line.
471 controller->SetMultiLineEnabled( false );
473 // Enable text scrolling.
474 controller->SetAutoScrollEnabled( true );
476 // Should be ebabled now.
477 DALI_TEST_CHECK( controller->IsAutoScrollEnabled() );
479 tet_result(TET_PASS);
483 int UtcDaliTextControllerSetGetCheckProperty(void)
485 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
486 ToolkitTestApplication application;
488 // Creates a text controller.
489 ControllerPtr controller = Controller::New();
491 DALI_TEST_CHECK( controller );
493 // Enable the text input.
494 // Creates a decorator.
495 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
497 InputMethodContext inputMethodContext = InputMethodContext::New();
498 // Enables the text input.
499 controller->EnableTextInput( decorator, inputMethodContext );
501 DALI_TEST_CHECK( !controller->IsInputModePassword() );
503 // Set the text input to password.
504 controller->SetInputModePassword( true );
506 DALI_TEST_CHECK( controller->IsInputModePassword() );
508 // Unset the text input to password.
509 controller->SetInputModePassword( false );
511 DALI_TEST_CHECK( !controller->IsInputModePassword() );
513 tet_result(TET_PASS);
517 int UtcDaliTextControllerSetGetTapLongPressAction(void)
519 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
520 ToolkitTestApplication application;
522 // Creates a text controller.
523 ControllerPtr controller = Controller::New();
525 DALI_TEST_CHECK( controller );
527 // Test first with no decorator.
529 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
530 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
531 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
533 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
534 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
535 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
537 // Add a decorator and re-test.
539 // Creates a decorator.
540 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
542 InputMethodContext inputMethodContext = InputMethodContext::New();
543 // Enables the text input.
544 controller->EnableTextInput( decorator, inputMethodContext );
546 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
547 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
548 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
550 DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP
551 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
552 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION );
557 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
559 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
560 ToolkitTestApplication application;
562 const Size size( Dali::Stage::GetCurrent().GetSize() );
565 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
568 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
570 // Creates a text controller.
571 ControllerPtr controller = Controller::New();
573 ConfigureTextLabel(controller);
575 // single line, line spacing = 0px
577 const float EXPECTED_SPACING = 0.0f;
578 const Vector2 EXPECTED_LAYOUT_SIZE( 342.0f, 19.0f);
579 const Vector3 EXPECTED_NATURAL_SIZE( 342.0f, 20.0f, 0.0f );
581 controller->SetText(textSingle);
582 controller->Relayout(size);
583 controller->SetMultiLineEnabled( false );
585 Vector3 naturalSize = controller->GetNaturalSize();
586 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
587 float lineSpacing0 = controller->GetDefaultLineSpacing();
589 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
590 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
591 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
594 // single line, line spacing = 20px
596 const float EXPECTED_SPACING = 20.0f;
597 const Vector2 EXPECTED_LAYOUT_SIZE( 342.0f, 19.0f );
598 const Vector3 EXPECTED_NATURAL_SIZE( 342.0f, 40.0f, 0.0f );
600 controller->SetText(textSingle);
601 controller->Relayout(size);
602 controller->SetDefaultLineSpacing( 20 );
603 controller->SetMultiLineEnabled( false );
605 Vector3 naturalSize = controller->GetNaturalSize();
606 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
607 float lineSpacing0 = controller->GetDefaultLineSpacing();
609 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
610 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
611 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
614 // multi-line, line spacing = 0px
616 const float EXPECTED_SPACING = 0.0f;
617 const Vector2 EXPECTED_LAYOUT_SIZE( 332.0f, 39.0f );
618 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 58.0f, 0.0f );
620 controller->SetText(textMulti);
621 controller->Relayout(size);
622 controller->SetMultiLineEnabled( true );
623 controller->SetDefaultLineSpacing( 0 );
625 Vector3 naturalSize = controller->GetNaturalSize();
626 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
627 float lineSpacing0 = controller->GetDefaultLineSpacing();
629 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
630 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
631 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
634 // multi-line, line spacing = 20px
636 const float EXPECTED_SPACING = 20.0f;
637 const Vector2 EXPECTED_LAYOUT_SIZE( 118.0f, 57.0f );
638 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 118.0f, 0.0f );
640 controller->SetText(textMulti);
641 controller->Relayout(size);
642 controller->SetMultiLineEnabled( true );
643 controller->SetDefaultLineSpacing( 20 );
645 Vector3 naturalSize = controller->GetNaturalSize();
646 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
647 float lineSpacing0 = controller->GetDefaultLineSpacing();
649 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
650 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
651 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
654 // multi-line, line spacing = 30px
656 const float EXPECTED_SPACING = 30.0f;
657 const Vector2 EXPECTED_LAYOUT_SIZE( 118.0f, 117.0f );
658 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 148.0f, 0.0f );
660 controller->SetText(textMulti);
661 controller->Relayout(size);
662 controller->SetMultiLineEnabled( true );
663 controller->SetDefaultLineSpacing( 30 );
665 Vector3 naturalSize = controller->GetNaturalSize();
666 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
667 float lineSpacing0 = controller->GetDefaultLineSpacing();
669 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
670 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
671 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
679 int UtcDaliTextControllerCheckBufferIndices(void)
681 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
682 ToolkitTestApplication application;
684 // Creates a text controller.
685 ControllerPtr controller = Controller::New();
687 ConfigureTextLabel(controller);
690 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
691 controller->SetText(text);
693 // Get the implementation of the text controller
694 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
696 // Tweak some parameters to make the indices to access the text buffer invalid
697 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
698 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
699 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
700 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
702 // Perform a relayout
703 const Size size( Dali::Stage::GetCurrent().GetSize() );
704 controller->Relayout(size);
706 tet_result(TET_PASS);
711 int UtcDaliTextControllerCheckInputColorChanged(void)
713 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
714 ToolkitTestApplication application;
716 // Creates a text controller.
717 ControllerPtr controller = Controller::New();
719 ConfigureTextLabel(controller);
721 // Enable the text input.
722 // Creates a decorator.
723 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
725 InputMethodContext inputMethodContext = InputMethodContext::New();
726 // Enables the text input.
727 controller->EnableTextInput( decorator, inputMethodContext );
730 const std::string text("Hello World!");
731 controller->SetText(text);
733 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
734 controller->SetInputColor( inputColor );
736 // Get the implementation of the text controller
737 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
740 mImpl.mOperationsPending = Controller::NO_OPERATION;
742 // simulate a key event.
743 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
745 // change the input color
746 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
747 controller->SetInputColor( newInputColor );
749 // Check if relayout is requested or not when event state is INACTIVE.
750 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
751 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
753 // Perform a relayout
754 const Size size( Dali::Stage::GetCurrent().GetSize() );
755 controller->Relayout(size);
757 tet_result(TET_PASS);
762 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
764 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
765 ToolkitTestApplication application;
767 // Creates a text controller.
768 ControllerPtr controller = Controller::New();
770 ConfigureTextLabel(controller);
772 // Enable the text input.
773 // Creates a decorator.
774 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
776 InputMethodContext inputMethodContext = InputMethodContext::New();
777 // Enables the text input.
778 controller->EnableTextInput( decorator, inputMethodContext );
780 // Set the text and font family
781 const std::string text("Hello World!");
782 controller->SetText(text);
783 controller->SetInputFontFamily("SamsungOneUI_200");
785 // Get the implementation of the text controller
786 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
789 mImpl.mOperationsPending = Controller::NO_OPERATION;
791 // simulate a key event.
792 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
794 // change the input font family
795 controller->SetInputFontFamily("SamsungOneUI_300");
797 // Check if relayout is requested or not when event state is INACTIVE.
798 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
799 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
802 // Perform a relayout
803 const Size size( Dali::Stage::GetCurrent().GetSize() );
804 controller->Relayout(size);
806 tet_result(TET_PASS);
811 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
813 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
814 ToolkitTestApplication application;
816 // Creates a text controller.
817 ControllerPtr controller = Controller::New();
819 ConfigureTextLabel(controller);
821 // Enable the text input.
822 // Creates a decorator.
823 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
825 InputMethodContext inputMethodContext = InputMethodContext::New();
826 // Enables the text input.
827 controller->EnableTextInput( decorator, inputMethodContext );
830 const std::string text("Hello World!");
831 controller->SetText(text);
832 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
834 // Get the implementation of the text controller
835 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
838 mImpl.mOperationsPending = Controller::NO_OPERATION;
840 // simulate a key event.
841 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
843 // change the input font weight
844 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
846 // Check if relayout is requested or not when event state is INACTIVE.
847 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
848 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
851 // Perform a relayout
852 const Size size( Dali::Stage::GetCurrent().GetSize() );
853 controller->Relayout(size);
855 tet_result(TET_PASS);
860 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
862 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
863 ToolkitTestApplication application;
865 // Creates a text controller.
866 ControllerPtr controller = Controller::New();
868 ConfigureTextLabel(controller);
870 // Enable the text input.
871 // Creates a decorator.
872 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
874 InputMethodContext inputMethodContext = InputMethodContext::New();
875 // Enables the text input.
876 controller->EnableTextInput( decorator, inputMethodContext );
879 const std::string text("Hello World!");
880 controller->SetText(text);
881 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
883 // Get the implementation of the text controller
884 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
887 mImpl.mOperationsPending = Controller::NO_OPERATION;
889 // simulate a key event.
890 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
892 // change the input font width
893 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
895 // Check if relayout is requested or not when event state is INACTIVE.
896 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
897 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
900 // Perform a relayout
901 const Size size( Dali::Stage::GetCurrent().GetSize() );
902 controller->Relayout(size);
904 tet_result(TET_PASS);
909 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
911 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
912 ToolkitTestApplication application;
914 // Creates a text controller.
915 ControllerPtr controller = Controller::New();
917 ConfigureTextLabel(controller);
919 // Enable the text input.
920 // Creates a decorator.
921 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
923 InputMethodContext inputMethodContext = InputMethodContext::New();
924 // Enables the text input.
925 controller->EnableTextInput( decorator, inputMethodContext );
928 const std::string text("Hello World!");
929 controller->SetText(text);
930 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
932 // Get the implementation of the text controller
933 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
936 mImpl.mOperationsPending = Controller::NO_OPERATION;
938 // simulate a key event.
939 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
941 // change the input font slant
942 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
944 // Check if relayout is requested or not when event state is INACTIVE.
945 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
946 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
949 // Perform a relayout
950 const Size size( Dali::Stage::GetCurrent().GetSize() );
951 controller->Relayout(size);
953 tet_result(TET_PASS);
958 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
960 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
961 ToolkitTestApplication application;
963 // Creates a text controller.
964 ControllerPtr controller = Controller::New();
966 ConfigureTextLabel(controller);
968 // Enable the text input.
969 // Creates a decorator.
970 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
972 InputMethodContext inputMethodContext = InputMethodContext::New();
973 // Enables the text input.
974 controller->EnableTextInput( decorator, inputMethodContext );
977 const std::string text("Hello World!");
978 controller->SetText(text);
979 controller->SetInputFontPointSize( 1.0f );
981 // Get the implementation of the text controller
982 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
985 mImpl.mOperationsPending = Controller::NO_OPERATION;
987 // simulate a key event.
988 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
990 // change the input font point size
991 controller->SetInputFontPointSize( 1.2f );
993 // Check if relayout is requested or not when event state is INACTIVE.
994 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
995 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
998 // Perform a relayout
999 const Size size( Dali::Stage::GetCurrent().GetSize() );
1000 controller->Relayout(size);
1002 tet_result(TET_PASS);
1007 int UtcDaliTextControllerSelectEvent(void)
1009 tet_infoline(" UtcDaliTextControllerSelectEvent");
1010 ToolkitTestApplication application;
1012 // Creates a text controller.
1013 ControllerPtr controller = Controller::New();
1015 // Configures the text controller similarly to the text-field.
1016 ConfigureTextField( controller );
1019 const std::string text("Hello World!");
1020 controller->SetText( text );
1022 // Select the whole text.
1023 controller->SelectEvent( 0.f, 0.f, false );
1025 // Perform a relayout
1026 const Size size( Dali::Stage::GetCurrent().GetSize() );
1027 controller->Relayout(size);
1029 // Get the implementation of the text controller
1030 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
1032 // Check if the whole text is selected or not.
1033 std::string retrieved_text;
1034 mImpl.RetrieveSelection( retrieved_text, false );
1035 DALI_TEST_EQUALS( "Hello", retrieved_text, TEST_LOCATION );
1037 // Select the whole text.
1038 controller->SelectEvent( 0.f, 0.f, true );
1040 // Perform a relayout
1041 controller->Relayout( size );
1043 mImpl.RetrieveSelection( retrieved_text, false );
1044 DALI_TEST_EQUALS( text, retrieved_text, TEST_LOCATION );
1050 int UtcDaliTextControllerMaxLengthSetText(void)
1052 tet_infoline(" UtcDaliTextControllerMaxLengthSetText");
1053 ToolkitTestApplication application;
1055 // Creates a text controller.
1056 ControllerPtr controller = Controller::New();
1058 ConfigureTextLabel(controller);
1060 const Length MAX_TEXT_LENGTH = 1024u * 32u;
1062 // make over length world
1063 int maxLength = (1024u * 32u) + 10u;
1064 char world[maxLength];
1065 for( int i = 0; i < maxLength; i++ )
1071 std::string text(world);
1072 controller->SetText( text );
1074 // Perform a relayout
1075 const Size size( Dali::Stage::GetCurrent().GetSize() );
1076 controller->Relayout(size);
1078 // check text length
1079 controller->GetText( text );
1080 Length textSize = text.size();
1082 DALI_TEST_EQUALS( MAX_TEXT_LENGTH, textSize, TEST_LOCATION );