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/text/text-controller.h>
27 #include <dali-toolkit/internal/text/text-control-interface.h>
28 #include <dali-toolkit/internal/text/text-editable-control-interface.h>
29 #include <dali-toolkit/internal/text/text-controller-impl.h>
32 using namespace Toolkit;
38 const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option.
39 const char* const OPTION_CUT("optionCut"); // "Cut" popup option.
40 const char* const OPTION_COPY("optionCopy"); // "Copy" popup option.
41 const char* const OPTION_PASTE("optionPaste"); // "Paste" popup option.
42 const char* const OPTION_CLIPBOARD("optionClipboard"); // "Clipboard" popup option.
44 const Size CONTROL_SIZE( 300.f, 60.f );
46 std::string gClipboardText;
47 void ContentSelectedCallback( ClipboardEventNotifier& notifier )
49 gClipboardText = notifier.GetContent();
52 // Generate a KeyEvent to send to Core.
53 Dali::KeyEvent GenerateKey( const std::string& keyName,
54 const std::string& keyString,
57 unsigned long timeStamp,
58 const Dali::KeyEvent::State& keyState )
60 return Dali::KeyEvent( keyName,
70 int UtcDaliTextController(void)
72 tet_infoline(" UtcDaliTextController");
73 ToolkitTestApplication application;
75 // Creates a text controller.
76 ControllerPtr controller = Controller::New();
77 DALI_TEST_CHECK( controller );
83 int UtcDaliTextControllerSetGetScrollEnabled(void)
85 tet_infoline(" UtcDaliTextControllerSetGetScrollEnabled");
86 ToolkitTestApplication application;
88 // Creates a text controller.
89 ControllerPtr controller = Controller::New();
90 DALI_TEST_CHECK( controller );
92 // Configures the text controller similarly to the text-editor.
93 ConfigureTextEditor( controller );
95 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
96 DALI_TEST_CHECK( controller->IsVerticalScrollEnabled() );
98 // Configures the text controller similarly to the text-field.
99 ConfigureTextField( controller );
101 DALI_TEST_CHECK( controller->IsHorizontalScrollEnabled() );
102 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
104 // Configures the text controller similarly to the text-label.
105 ConfigureTextLabel( controller );
107 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
108 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
110 tet_result(TET_PASS);
114 int UtcDaliTextControllerSetIsTextElide(void)
116 tet_infoline(" UtcDaliTextControllerSetIsTextElide");
117 ToolkitTestApplication application;
119 // Creates a text controller.
120 ControllerPtr controller = Controller::New();
121 DALI_TEST_CHECK( controller );
123 // Configures the text controller similarly to the text-editor.
124 ConfigureTextEditor( controller );
125 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
127 controller->SetTextElideEnabled( true );
128 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
130 // Configures the text controller similarly to the text-field.
131 ConfigureTextField( controller );
132 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
134 controller->SetTextElideEnabled( true );
135 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
137 // Configures the text controller similarly to the text-label.
138 ConfigureTextLabel( controller );
139 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
141 controller->SetTextElideEnabled( false );
142 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
144 tet_result(TET_PASS);
148 int UtcDaliTextControllerEnableCursorBlinking(void)
150 tet_infoline(" UtcDaliTextControllerEnableCursorBlinking");
151 ToolkitTestApplication application;
153 // Creates a text controller.
154 ControllerPtr controller = Controller::New();
155 DALI_TEST_CHECK( controller );
157 // There is no text input enabled.
158 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
160 // Enable the text input.
161 // Creates a decorator.
162 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
164 InputMethodContext inputMethodContext = InputMethodContext::New();
165 // Enables the text input.
166 controller->EnableTextInput( decorator, inputMethodContext );
168 // Enables the cursor blink.
169 controller->SetEnableCursorBlink( true );
171 DALI_TEST_CHECK( controller->GetEnableCursorBlink() );
173 // Disables the cursor blink.
174 controller->SetEnableCursorBlink( false );
176 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
178 tet_result(TET_PASS);
182 int UtcDaliTextControllerImfEvent(void)
184 tet_infoline(" UtcDaliTextController");
185 ToolkitTestApplication application;
187 // Creates a text controller.
188 ControllerPtr controller = Controller::New();
191 InputMethodContext::EventData imfEvent;
193 DALI_TEST_CHECK( controller );
195 // Enable the text input.
196 // Creates a decorator.
197 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
200 InputMethodContext inputMethodContext = InputMethodContext::New();
201 // Enables the text input.
202 controller->EnableTextInput( decorator, inputMethodContext );
204 // Set the placeholder text.
205 controller->SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali" );
208 imfEvent = InputMethodContext::EventData( InputMethodContext::GET_SURROUNDING, "", 0, 0 );
209 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
212 imfEvent = InputMethodContext::EventData( InputMethodContext::VOID, "", 0, 0 );
213 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
215 controller->GetText( text );
216 DALI_TEST_CHECK( text.empty() );
218 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
219 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
220 controller->GetNaturalSize();
222 // Check 'Delete All' key which means the input panel send a big range
223 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -100, 100 );
224 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
225 controller->GetNaturalSize();
227 controller->GetText( text );
228 DALI_TEST_EQUALS( "", text, TEST_LOCATION );
230 // Send COMMIT event.
231 imfEvent = InputMethodContext::EventData( InputMethodContext::COMMIT, "Hello ", 0, 6 );
232 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
234 // Force to update the model.
235 controller->GetNaturalSize();
237 controller->GetText( text );
238 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
240 // Send PRE_EDIT event
241 imfEvent = InputMethodContext::EventData( InputMethodContext::PRE_EDIT, "w", 6, 1 );
242 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
244 // Force to update the model.
245 controller->GetNaturalSize();
247 controller->GetText( text );
248 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
250 // Send DELETE_SURROUNDING event
251 imfEvent = InputMethodContext::EventData( InputMethodContext::DELETE_SURROUNDING, "", -1, 1 );
252 controller->OnInputMethodContextEvent( inputMethodContext, imfEvent );
254 // Force to update the model.
255 controller->GetNaturalSize();
257 controller->GetText( text );
258 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
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 UtcDaliTextControllerTextPopupButtonTouched(void)
290 tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
291 ToolkitTestApplication application;
293 // Creates a text controller.
294 ControllerPtr controller = Controller::New();
296 DALI_TEST_CHECK( controller );
300 Property::Map attributes;
302 // Enable the text input.
303 // Creates a decorator.
304 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
307 InputMethodContext inputMethodContext = InputMethodContext::New();
308 // Enables the text input.
309 controller->EnableTextInput( decorator, inputMethodContext );
311 // Creates the text's popup.
312 TextSelectionPopupCallbackInterface& callbackInterface = *controller;
313 TextSelectionPopup textPopup = TextSelectionPopup::New( &callbackInterface );
315 Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>( TextSelectionPopup::CUT |
316 TextSelectionPopup::COPY |
317 TextSelectionPopup::PASTE |
318 TextSelectionPopup::SELECT |
319 TextSelectionPopup::SELECT_ALL |
320 TextSelectionPopup::CLIPBOARD );
322 textPopup.EnableButtons( buttonsToEnable );
323 Stage::GetCurrent().Add( textPopup );
324 textPopup.ShowPopup();
327 application.SendNotification();
328 application.Render();
331 controller->SetText( "Hello world" );
333 // Select the whole text.
334 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
335 DALI_TEST_CHECK( button );
337 button.DoAction( "buttonClick", attributes );
339 // Call relayout to process the input events.
340 controller->Relayout( CONTROL_SIZE );
343 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
344 DALI_TEST_CHECK( button );
346 button.DoAction( "buttonClick", attributes );
348 // Force to update the model.
349 controller->GetNaturalSize();
351 controller->GetText( text );
352 DALI_TEST_CHECK( text.empty() );
355 controller->SetText( "Hello world" );
357 // Select the whole text.
358 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
359 DALI_TEST_CHECK( button );
361 button.DoAction( "buttonClick", attributes );
363 // Call relayout to process the input events.
364 controller->Relayout( CONTROL_SIZE );
366 // Copy to the clipboard.
367 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) );
368 DALI_TEST_CHECK( button );
370 button.DoAction( "buttonClick", attributes );
372 // Call relayout to process the input events.
373 controller->Relayout( CONTROL_SIZE );
376 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
377 DALI_TEST_CHECK( button );
379 button.DoAction( "buttonClick", attributes );
381 // Force to update the model.
382 controller->GetNaturalSize();
384 controller->GetText( text );
385 DALI_TEST_CHECK( text.empty() );
387 ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get();
388 clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback );
391 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) );
392 DALI_TEST_CHECK( button );
394 button.DoAction( "buttonClick", attributes );
396 // Call relayout to process the input events.
397 controller->Relayout( CONTROL_SIZE );
399 DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION );
401 // Show the clipboard.
402 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) );
403 DALI_TEST_CHECK( button );
405 button.DoAction( "buttonClick", attributes );
407 tet_result(TET_PASS);
411 int UtcDaliTextControllerGetInputShadowProperty(void)
413 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
414 ToolkitTestApplication application;
416 // Creates a text controller.
417 ControllerPtr controller = Controller::New();
419 DALI_TEST_CHECK( controller );
421 const std::string& shadowProperties = controller->GetInputShadowProperties();
423 DALI_TEST_CHECK( shadowProperties.empty() );
425 tet_result(TET_PASS);
429 int UtcDaliTextControllerGetInputUnderlineProperty(void)
431 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
432 ToolkitTestApplication application;
434 // Creates a text controller.
435 ControllerPtr controller = Controller::New();
437 DALI_TEST_CHECK( controller );
439 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
441 DALI_TEST_CHECK( underlineProperties.empty() );
443 tet_result(TET_PASS);
447 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
449 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
450 ToolkitTestApplication application;
452 // Creates a text controller.
453 ControllerPtr controller = Controller::New();
455 DALI_TEST_CHECK( controller );
457 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
459 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
461 // Enable multi-line.
462 controller->SetMultiLineEnabled( true );
464 // Enable text scrolling.
465 controller->SetAutoScrollEnabled( true );
467 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
469 // Disable multi-line.
470 controller->SetMultiLineEnabled( false );
472 // Enable text scrolling.
473 controller->SetAutoScrollEnabled( true );
475 // Should be ebabled now.
476 DALI_TEST_CHECK( controller->IsAutoScrollEnabled() );
478 tet_result(TET_PASS);
482 int UtcDaliTextControllerSetGetCheckProperty(void)
484 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
485 ToolkitTestApplication application;
487 // Creates a text controller.
488 ControllerPtr controller = Controller::New();
490 DALI_TEST_CHECK( controller );
492 // Enable the text input.
493 // Creates a decorator.
494 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
496 InputMethodContext inputMethodContext = InputMethodContext::New();
497 // Enables the text input.
498 controller->EnableTextInput( decorator, inputMethodContext );
500 DALI_TEST_CHECK( !controller->IsInputModePassword() );
502 // Set the text input to password.
503 controller->SetInputModePassword( true );
505 DALI_TEST_CHECK( controller->IsInputModePassword() );
507 // Unset the text input to password.
508 controller->SetInputModePassword( false );
510 DALI_TEST_CHECK( !controller->IsInputModePassword() );
512 tet_result(TET_PASS);
516 int UtcDaliTextControllerSetGetTapLongPressAction(void)
518 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
519 ToolkitTestApplication application;
521 // Creates a text controller.
522 ControllerPtr controller = Controller::New();
524 DALI_TEST_CHECK( controller );
526 // Test first with no decorator.
528 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
529 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
530 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
532 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
533 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
534 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
536 // Add a decorator and re-test.
538 // Creates a decorator.
539 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
541 InputMethodContext inputMethodContext = InputMethodContext::New();
542 // Enables the text input.
543 controller->EnableTextInput( decorator, inputMethodContext );
545 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
546 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
547 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
549 DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP
550 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
551 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION );
556 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
558 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
559 ToolkitTestApplication application;
561 const Size size( Dali::Stage::GetCurrent().GetSize() );
564 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
567 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
569 // Creates a text controller.
570 ControllerPtr controller = Controller::New();
572 ConfigureTextLabel(controller);
574 // single line, line spacing = 0px
576 const float EXPECTED_SPACING = 0.0f;
577 const Vector2 EXPECTED_LAYOUT_SIZE( 342.0f, 19.0f);
578 const Vector3 EXPECTED_NATURAL_SIZE( 342.0f, 20.0f, 0.0f );
580 controller->SetText(textSingle);
581 controller->Relayout(size);
582 controller->SetMultiLineEnabled( false );
584 Vector3 naturalSize = controller->GetNaturalSize();
585 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
586 float lineSpacing0 = controller->GetDefaultLineSpacing();
588 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
589 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
590 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
593 // single line, line spacing = 20px
595 const float EXPECTED_SPACING = 20.0f;
596 const Vector2 EXPECTED_LAYOUT_SIZE( 342.0f, 19.0f );
597 const Vector3 EXPECTED_NATURAL_SIZE( 342.0f, 40.0f, 0.0f );
599 controller->SetText(textSingle);
600 controller->Relayout(size);
601 controller->SetDefaultLineSpacing( 20 );
602 controller->SetMultiLineEnabled( false );
604 Vector3 naturalSize = controller->GetNaturalSize();
605 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
606 float lineSpacing0 = controller->GetDefaultLineSpacing();
608 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
609 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
610 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
613 // multi-line, line spacing = 0px
615 const float EXPECTED_SPACING = 0.0f;
616 const Vector2 EXPECTED_LAYOUT_SIZE( 332.0f, 39.0f );
617 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 58.0f, 0.0f );
619 controller->SetText(textMulti);
620 controller->Relayout(size);
621 controller->SetMultiLineEnabled( true );
622 controller->SetDefaultLineSpacing( 0 );
624 Vector3 naturalSize = controller->GetNaturalSize();
625 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
626 float lineSpacing0 = controller->GetDefaultLineSpacing();
628 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
629 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
630 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
633 // multi-line, line spacing = 20px
635 const float EXPECTED_SPACING = 20.0f;
636 const Vector2 EXPECTED_LAYOUT_SIZE( 118.0f, 57.0f );
637 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 118.0f, 0.0f );
639 controller->SetText(textMulti);
640 controller->Relayout(size);
641 controller->SetMultiLineEnabled( true );
642 controller->SetDefaultLineSpacing( 20 );
644 Vector3 naturalSize = controller->GetNaturalSize();
645 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
646 float lineSpacing0 = controller->GetDefaultLineSpacing();
648 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
649 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
650 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
653 // multi-line, line spacing = 30px
655 const float EXPECTED_SPACING = 30.0f;
656 const Vector2 EXPECTED_LAYOUT_SIZE( 118.0f, 117.0f );
657 const Vector3 EXPECTED_NATURAL_SIZE( 118.0f, 148.0f, 0.0f );
659 controller->SetText(textMulti);
660 controller->Relayout(size);
661 controller->SetMultiLineEnabled( true );
662 controller->SetDefaultLineSpacing( 30 );
664 Vector3 naturalSize = controller->GetNaturalSize();
665 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
666 float lineSpacing0 = controller->GetDefaultLineSpacing();
668 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
669 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
670 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
678 int UtcDaliTextControllerCheckBufferIndices(void)
680 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
681 ToolkitTestApplication application;
683 // Creates a text controller.
684 ControllerPtr controller = Controller::New();
686 ConfigureTextLabel(controller);
689 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
690 controller->SetText(text);
692 // Get the implementation of the text controller
693 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
695 // Tweak some parameters to make the indices to access the text buffer invalid
696 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
697 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
698 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
699 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
701 // Perform a relayout
702 const Size size( Dali::Stage::GetCurrent().GetSize() );
703 controller->Relayout(size);
705 tet_result(TET_PASS);
710 int UtcDaliTextControllerCheckInputColorChanged(void)
712 tet_infoline(" UtcDaliTextControllerCheckInputColorChanged");
713 ToolkitTestApplication application;
715 // Creates a text controller.
716 ControllerPtr controller = Controller::New();
718 ConfigureTextLabel(controller);
720 // Enable the text input.
721 // Creates a decorator.
722 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
724 InputMethodContext inputMethodContext = InputMethodContext::New();
725 // Enables the text input.
726 controller->EnableTextInput( decorator, inputMethodContext );
729 const std::string text("Hello World!");
730 controller->SetText(text);
732 const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f );
733 controller->SetInputColor( inputColor );
735 // Get the implementation of the text controller
736 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
739 mImpl.mOperationsPending = Controller::NO_OPERATION;
741 // simulate a key event.
742 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
744 // change the input color
745 const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f );
746 controller->SetInputColor( newInputColor );
748 // Check if relayout is requested or not when event state is INACTIVE.
749 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
750 DALI_TEST_EQUALS( Controller::COLOR, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION );
752 // Perform a relayout
753 const Size size( Dali::Stage::GetCurrent().GetSize() );
754 controller->Relayout(size);
756 tet_result(TET_PASS);
761 int UtcDaliTextControllerCheckInputFontFamilyChanged(void)
763 tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged");
764 ToolkitTestApplication application;
766 // Creates a text controller.
767 ControllerPtr controller = Controller::New();
769 ConfigureTextLabel(controller);
771 // Enable the text input.
772 // Creates a decorator.
773 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
775 InputMethodContext inputMethodContext = InputMethodContext::New();
776 // Enables the text input.
777 controller->EnableTextInput( decorator, inputMethodContext );
779 // Set the text and font family
780 const std::string text("Hello World!");
781 controller->SetText(text);
782 controller->SetInputFontFamily("SamsungOneUI_200");
784 // Get the implementation of the text controller
785 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
788 mImpl.mOperationsPending = Controller::NO_OPERATION;
790 // simulate a key event.
791 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
793 // change the input font family
794 controller->SetInputFontFamily("SamsungOneUI_300");
796 // Check if relayout is requested or not when event state is INACTIVE.
797 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
798 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
801 // Perform a relayout
802 const Size size( Dali::Stage::GetCurrent().GetSize() );
803 controller->Relayout(size);
805 tet_result(TET_PASS);
810 int UtcDaliTextControllerCheckInputFontWeightChanged(void)
812 tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged");
813 ToolkitTestApplication application;
815 // Creates a text controller.
816 ControllerPtr controller = Controller::New();
818 ConfigureTextLabel(controller);
820 // Enable the text input.
821 // Creates a decorator.
822 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
824 InputMethodContext inputMethodContext = InputMethodContext::New();
825 // Enables the text input.
826 controller->EnableTextInput( decorator, inputMethodContext );
829 const std::string text("Hello World!");
830 controller->SetText(text);
831 controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL );
833 // Get the implementation of the text controller
834 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
837 mImpl.mOperationsPending = Controller::NO_OPERATION;
839 // simulate a key event.
840 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
842 // change the input font weight
843 controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD );
845 // Check if relayout is requested or not when event state is INACTIVE.
846 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
847 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
850 // Perform a relayout
851 const Size size( Dali::Stage::GetCurrent().GetSize() );
852 controller->Relayout(size);
854 tet_result(TET_PASS);
859 int UtcDaliTextControllerCheckInputFontWidthChanged(void)
861 tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged");
862 ToolkitTestApplication application;
864 // Creates a text controller.
865 ControllerPtr controller = Controller::New();
867 ConfigureTextLabel(controller);
869 // Enable the text input.
870 // Creates a decorator.
871 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
873 InputMethodContext inputMethodContext = InputMethodContext::New();
874 // Enables the text input.
875 controller->EnableTextInput( decorator, inputMethodContext );
878 const std::string text("Hello World!");
879 controller->SetText(text);
880 controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL );
882 // Get the implementation of the text controller
883 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
886 mImpl.mOperationsPending = Controller::NO_OPERATION;
888 // simulate a key event.
889 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
891 // change the input font width
892 controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED );
894 // Check if relayout is requested or not when event state is INACTIVE.
895 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
896 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
899 // Perform a relayout
900 const Size size( Dali::Stage::GetCurrent().GetSize() );
901 controller->Relayout(size);
903 tet_result(TET_PASS);
908 int UtcDaliTextControllerCheckInputFontSlantChanged(void)
910 tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged");
911 ToolkitTestApplication application;
913 // Creates a text controller.
914 ControllerPtr controller = Controller::New();
916 ConfigureTextLabel(controller);
918 // Enable the text input.
919 // Creates a decorator.
920 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
922 InputMethodContext inputMethodContext = InputMethodContext::New();
923 // Enables the text input.
924 controller->EnableTextInput( decorator, inputMethodContext );
927 const std::string text("Hello World!");
928 controller->SetText(text);
929 controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL );
931 // Get the implementation of the text controller
932 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
935 mImpl.mOperationsPending = Controller::NO_OPERATION;
937 // simulate a key event.
938 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
940 // change the input font slant
941 controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN );
943 // Check if relayout is requested or not when event state is INACTIVE.
944 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
945 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
948 // Perform a relayout
949 const Size size( Dali::Stage::GetCurrent().GetSize() );
950 controller->Relayout(size);
952 tet_result(TET_PASS);
957 int UtcDaliTextControllerCheckInputFontPointSizeChanged(void)
959 tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged");
960 ToolkitTestApplication application;
962 // Creates a text controller.
963 ControllerPtr controller = Controller::New();
965 ConfigureTextLabel(controller);
967 // Enable the text input.
968 // Creates a decorator.
969 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
971 InputMethodContext inputMethodContext = InputMethodContext::New();
972 // Enables the text input.
973 controller->EnableTextInput( decorator, inputMethodContext );
976 const std::string text("Hello World!");
977 controller->SetText(text);
978 controller->SetInputFontPointSize( 1.0f );
980 // Get the implementation of the text controller
981 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
984 mImpl.mOperationsPending = Controller::NO_OPERATION;
986 // simulate a key event.
987 controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) );
989 // change the input font point size
990 controller->SetInputFontPointSize( 1.2f );
992 // Check if relayout is requested or not when event state is INACTIVE.
993 DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION );
994 DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast<Controller::OperationsMask>( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ),
997 // Perform a relayout
998 const Size size( Dali::Stage::GetCurrent().GetSize() );
999 controller->Relayout(size);
1001 tet_result(TET_PASS);