2 * Copyright (c) 2017 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_WORD("option-select_word"); // "Select Word" popup option.
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();
55 int UtcDaliTextController(void)
57 tet_infoline(" UtcDaliTextController");
58 ToolkitTestApplication application;
60 // Creates a text controller.
61 ControllerPtr controller = Controller::New();
62 DALI_TEST_CHECK( controller );
68 int UtcDaliTextControllerSetGetScrollEnabled(void)
70 tet_infoline(" UtcDaliTextControllerSetGetScrollEnabled");
71 ToolkitTestApplication application;
73 // Creates a text controller.
74 ControllerPtr controller = Controller::New();
75 DALI_TEST_CHECK( controller );
77 // Configures the text controller similarly to the text-editor.
78 ConfigureTextEditor( controller );
80 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
81 DALI_TEST_CHECK( controller->IsVerticalScrollEnabled() );
83 // Configures the text controller similarly to the text-field.
84 ConfigureTextField( controller );
86 DALI_TEST_CHECK( controller->IsHorizontalScrollEnabled() );
87 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
89 // Configures the text controller similarly to the text-label.
90 ConfigureTextLabel( controller );
92 DALI_TEST_CHECK( !controller->IsHorizontalScrollEnabled() );
93 DALI_TEST_CHECK( !controller->IsVerticalScrollEnabled() );
99 int UtcDaliTextControllerSetIsTextElide(void)
101 tet_infoline(" UtcDaliTextControllerSetIsTextElide");
102 ToolkitTestApplication application;
104 // Creates a text controller.
105 ControllerPtr controller = Controller::New();
106 DALI_TEST_CHECK( controller );
108 // Configures the text controller similarly to the text-editor.
109 ConfigureTextEditor( controller );
110 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
112 controller->SetTextElideEnabled( true );
113 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
115 // Configures the text controller similarly to the text-field.
116 ConfigureTextField( controller );
117 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
119 controller->SetTextElideEnabled( true );
120 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
122 // Configures the text controller similarly to the text-label.
123 ConfigureTextLabel( controller );
124 DALI_TEST_EQUALS( true, controller->IsTextElideEnabled(), TEST_LOCATION );
126 controller->SetTextElideEnabled( false );
127 DALI_TEST_EQUALS( false, controller->IsTextElideEnabled(), TEST_LOCATION );
129 tet_result(TET_PASS);
133 int UtcDaliTextControllerEnableCursorBlinking(void)
135 tet_infoline(" UtcDaliTextControllerEnableCursorBlinking");
136 ToolkitTestApplication application;
138 // Creates a text controller.
139 ControllerPtr controller = Controller::New();
140 DALI_TEST_CHECK( controller );
142 // There is no text input enabled.
143 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
145 // Enable the text input.
146 // Creates a decorator.
147 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
150 // Enables the text input.
151 controller->EnableTextInput( decorator );
153 // Enables the cursor blink.
154 controller->SetEnableCursorBlink( true );
156 DALI_TEST_CHECK( controller->GetEnableCursorBlink() );
158 // Disables the cursor blink.
159 controller->SetEnableCursorBlink( false );
161 DALI_TEST_CHECK( !controller->GetEnableCursorBlink() );
163 tet_result(TET_PASS);
167 int UtcDaliTextControllerImfEvent(void)
169 tet_infoline(" UtcDaliTextController");
170 ToolkitTestApplication application;
172 // Creates a text controller.
173 ControllerPtr controller = Controller::New();
176 ImfManager::ImfEventData imfEvent;
178 DALI_TEST_CHECK( controller );
180 // Enable the text input.
181 // Creates a decorator.
182 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
185 // Enables the text input.
186 controller->EnableTextInput( decorator );
188 // Set the placeholder text.
189 controller->SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, "Hello Dali" );
191 // Creates an ImfManager.
192 ImfManager imfManager = ImfManager::Get();
195 imfEvent = ImfManager::ImfEventData( ImfManager::GETSURROUNDING, "", 0, 0 );
196 controller->OnImfEvent( imfManager, imfEvent );
199 imfEvent = ImfManager::ImfEventData( ImfManager::VOID, "", 0, 0 );
200 controller->OnImfEvent( imfManager, imfEvent );
202 controller->GetText( text );
203 DALI_TEST_CHECK( text.empty() );
205 imfEvent = ImfManager::ImfEventData( ImfManager::COMMIT, "Hello ", 0, 6 );
206 controller->OnImfEvent( imfManager, imfEvent );
207 controller->GetNaturalSize();
209 // Check 'Delete All' key which means the input panel send a big range
210 imfEvent = ImfManager::ImfEventData( ImfManager::DELETESURROUNDING, "", -100, 100 );
211 controller->OnImfEvent( imfManager, imfEvent );
212 controller->GetNaturalSize();
214 controller->GetText( text );
215 DALI_TEST_EQUALS( "", text, TEST_LOCATION );
217 // Send COMMIT event.
218 imfEvent = ImfManager::ImfEventData( ImfManager::COMMIT, "Hello ", 0, 6 );
219 controller->OnImfEvent( imfManager, imfEvent );
221 // Force to update the model.
222 controller->GetNaturalSize();
224 controller->GetText( text );
225 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
227 // Send PREEDIT event
228 imfEvent = ImfManager::ImfEventData( ImfManager::PREEDIT, "w", 6, 1 );
229 controller->OnImfEvent( imfManager, imfEvent );
231 // Force to update the model.
232 controller->GetNaturalSize();
234 controller->GetText( text );
235 DALI_TEST_EQUALS( "Hello w", text, TEST_LOCATION );
237 // Send DELETESURROUNDING event
238 imfEvent = ImfManager::ImfEventData( ImfManager::DELETESURROUNDING, "", -1, 1 );
239 controller->OnImfEvent( imfManager, imfEvent );
241 // Force to update the model.
242 controller->GetNaturalSize();
244 controller->GetText( text );
245 DALI_TEST_EQUALS( "Hello ", text, TEST_LOCATION );
247 // Send PREEDIT event
248 imfEvent = ImfManager::ImfEventData( ImfManager::PREEDIT, "wo", 6, 2 );
249 controller->OnImfEvent( imfManager, imfEvent );
251 // Force to update the model.
252 controller->GetNaturalSize();
254 controller->GetText( text );
255 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
257 // Send GETSURROUNDING event
258 imfEvent = ImfManager::ImfEventData( ImfManager::GETSURROUNDING, "", 0, 0 );
259 controller->OnImfEvent( imfManager, imfEvent );
261 controller->GetText( text );
262 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
264 // Send PRIVATECOMMAND event
265 imfEvent = ImfManager::ImfEventData( ImfManager::PRIVATECOMMAND, "", 0, 0 );
266 controller->OnImfEvent( imfManager, imfEvent );
268 controller->GetText( text );
269 DALI_TEST_EQUALS( "Hello wo", text, TEST_LOCATION );
271 tet_result(TET_PASS);
275 int UtcDaliTextControllerTextPopupButtonTouched(void)
277 tet_infoline(" UtcDaliTextControllerTextPopupButtonTouched");
278 ToolkitTestApplication application;
280 // Creates a text controller.
281 ControllerPtr controller = Controller::New();
283 DALI_TEST_CHECK( controller );
287 Property::Map attributes;
289 // Enable the text input.
290 // Creates a decorator.
291 Text::DecoratorPtr decorator = Text::Decorator::New( *controller,
294 // Enables the text input.
295 controller->EnableTextInput( decorator );
297 // Creates the text's popup.
298 TextSelectionPopupCallbackInterface& callbackInterface = *controller;
299 TextSelectionPopup textPopup = TextSelectionPopup::New( &callbackInterface );
301 Toolkit::TextSelectionPopup::Buttons buttonsToEnable = static_cast<Toolkit::TextSelectionPopup::Buttons>( TextSelectionPopup::CUT |
302 TextSelectionPopup::COPY |
303 TextSelectionPopup::PASTE |
304 TextSelectionPopup::SELECT |
305 TextSelectionPopup::SELECT_ALL |
306 TextSelectionPopup::CLIPBOARD );
308 textPopup.EnableButtons( buttonsToEnable );
309 Stage::GetCurrent().Add( textPopup );
310 textPopup.ShowPopup();
313 application.SendNotification();
314 application.Render();
317 controller->SetText( "Hello world" );
319 // Select the whole text.
320 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
321 DALI_TEST_CHECK( button );
323 button.DoAction( "buttonClick", attributes );
325 // Call relayout to process the input events.
326 controller->Relayout( CONTROL_SIZE );
329 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
330 DALI_TEST_CHECK( button );
332 button.DoAction( "buttonClick", attributes );
334 // Force to update the model.
335 controller->GetNaturalSize();
337 controller->GetText( text );
338 DALI_TEST_CHECK( text.empty() );
341 controller->SetText( "Hello world" );
343 // Select the whole text.
344 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_SELECT_ALL ) );
345 DALI_TEST_CHECK( button );
347 button.DoAction( "buttonClick", attributes );
349 // Call relayout to process the input events.
350 controller->Relayout( CONTROL_SIZE );
352 // Copy to the clipboard.
353 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_COPY ) );
354 DALI_TEST_CHECK( button );
356 button.DoAction( "buttonClick", attributes );
358 // Call relayout to process the input events.
359 controller->Relayout( CONTROL_SIZE );
362 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CUT ) );
363 DALI_TEST_CHECK( button );
365 button.DoAction( "buttonClick", attributes );
367 // Force to update the model.
368 controller->GetNaturalSize();
370 controller->GetText( text );
371 DALI_TEST_CHECK( text.empty() );
373 ClipboardEventNotifier clipboardEventNotifier = ClipboardEventNotifier::Get();
374 clipboardEventNotifier.ContentSelectedSignal().Connect( &ContentSelectedCallback );
377 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_PASTE ) );
378 DALI_TEST_CHECK( button );
380 button.DoAction( "buttonClick", attributes );
382 // Call relayout to process the input events.
383 controller->Relayout( CONTROL_SIZE );
385 DALI_TEST_EQUALS( "Hello world", gClipboardText, TEST_LOCATION );
387 // Show the clipboard.
388 button = PushButton::DownCast( textPopup.FindChildByName( OPTION_CLIPBOARD ) );
389 DALI_TEST_CHECK( button );
391 button.DoAction( "buttonClick", attributes );
393 tet_result(TET_PASS);
397 int UtcDaliTextControllerGetInputShadowProperty(void)
399 tet_infoline(" UtcDaliTextControllerGetInputShadowProperty");
400 ToolkitTestApplication application;
402 // Creates a text controller.
403 ControllerPtr controller = Controller::New();
405 DALI_TEST_CHECK( controller );
407 const std::string& shadowProperties = controller->GetInputShadowProperties();
409 DALI_TEST_CHECK( shadowProperties.empty() );
411 tet_result(TET_PASS);
415 int UtcDaliTextControllerGetInputUnderlineProperty(void)
417 tet_infoline(" UtcDaliTextControllerGetInputUnderlineProperty");
418 ToolkitTestApplication application;
420 // Creates a text controller.
421 ControllerPtr controller = Controller::New();
423 DALI_TEST_CHECK( controller );
425 const std::string& underlineProperties = controller->GetInputUnderlineProperties();
427 DALI_TEST_CHECK( underlineProperties.empty() );
429 tet_result(TET_PASS);
433 int UtcDaliTextControllerSetGetAutoScrollEnabled(void)
435 tet_infoline(" UtcDaliTextControllerSetGetAutoScrollEnabled");
436 ToolkitTestApplication application;
438 // Creates a text controller.
439 ControllerPtr controller = Controller::New();
441 DALI_TEST_CHECK( controller );
443 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
445 // The auto scrolling shouldn't be enabled if the multi-line is enabled.
447 // Enable multi-line.
448 controller->SetMultiLineEnabled( true );
450 // Enable text scrolling.
451 controller->SetAutoScrollEnabled( true );
453 DALI_TEST_CHECK( !controller->IsAutoScrollEnabled() );
455 // Disable multi-line.
456 controller->SetMultiLineEnabled( false );
458 // Enable text scrolling.
459 controller->SetAutoScrollEnabled( true );
461 // Should be ebabled now.
462 DALI_TEST_CHECK( controller->IsAutoScrollEnabled() );
464 tet_result(TET_PASS);
468 int UtcDaliTextControllerSetGetCheckProperty(void)
470 tet_infoline(" UtcDaliTextControllerSetGetCheckProperty");
471 ToolkitTestApplication application;
473 // Creates a text controller.
474 ControllerPtr controller = Controller::New();
476 DALI_TEST_CHECK( controller );
478 // Enable the text input.
479 // Creates a decorator.
480 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
482 // Enables the text input.
483 controller->EnableTextInput( decorator );
485 DALI_TEST_CHECK( !controller->IsInputModePassword() );
487 // Set the text input to password.
488 controller->SetInputModePassword( true );
490 DALI_TEST_CHECK( controller->IsInputModePassword() );
492 // Unset the text input to password.
493 controller->SetInputModePassword( false );
495 DALI_TEST_CHECK( !controller->IsInputModePassword() );
497 tet_result(TET_PASS);
501 int UtcDaliTextControllerSetGetTapLongPressAction(void)
503 tet_infoline(" UtcDaliTextControllerSetGetTapLongPressAction");
504 ToolkitTestApplication application;
506 // Creates a text controller.
507 ControllerPtr controller = Controller::New();
509 DALI_TEST_CHECK( controller );
511 // Test first with no decorator.
513 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
514 controller->SetNoTextDoubleTapAction( Controller::NoTextTap::HIGHLIGHT );
515 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
517 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
518 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
519 DALI_TEST_EQUALS( Controller::NoTextTap::NO_ACTION, controller->GetNoTextLongPressAction(), TEST_LOCATION );
521 // Add a decorator and re-test.
523 // Creates a decorator.
524 Text::DecoratorPtr decorator = Text::Decorator::New( *controller, *controller );
526 // Enables the text input.
527 controller->EnableTextInput( 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::HIGHLIGHT, controller->GetNoTextDoubleTapAction(), TEST_LOCATION );
533 DALI_TEST_EQUALS( Controller::NoTextTap::SHOW_SELECTION_POPUP, controller->GetNoTextLongPressAction(), TEST_LOCATION ); // The default is SHOW_SELECTION_POPUP
534 controller->SetNoTextLongPressAction( Controller::NoTextTap::HIGHLIGHT );
535 DALI_TEST_EQUALS( Controller::NoTextTap::HIGHLIGHT, controller->GetNoTextLongPressAction(), TEST_LOCATION );
540 int UtcDaliTextControllerSetGetLineSpacingProperty(void)
542 tet_infoline(" UtcDaliTextControllerSetGetLineSpacingProperty");
543 ToolkitTestApplication application;
545 const Size size( Dali::Stage::GetCurrent().GetSize() );
548 const std::string textSingle("A Quick Brown Fox Jumps Over The Lazy Dog");
551 const std::string textMulti("A Quick Brown\nFox Jumps Over\nThe Lazy Dog");
553 // Creates a text controller.
554 ControllerPtr controller = Controller::New();
556 ConfigureTextLabel(controller);
558 // single line, line spacing = 0px
560 const float EXPECTED_SPACING = 0.0f;
561 const Vector2 EXPECTED_LAYOUT_SIZE( 326.0f, 19.0f);
562 const Vector3 EXPECTED_NATURAL_SIZE( 326.0f, 20.0f, 0.0f );
564 controller->SetText(textSingle);
565 controller->Relayout(size);
566 controller->SetMultiLineEnabled( false );
568 Vector3 naturalSize = controller->GetNaturalSize();
569 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
570 float lineSpacing0 = controller->GetDefaultLineSpacing();
572 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
573 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
574 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
577 // single line, line spacing = 20px
579 const float EXPECTED_SPACING = 20.0f;
580 const Vector2 EXPECTED_LAYOUT_SIZE( 326.0f, 19.0f );
581 const Vector3 EXPECTED_NATURAL_SIZE( 326.0f, 40.0f, 0.0f );
583 controller->SetText(textSingle);
584 controller->Relayout(size);
585 controller->SetDefaultLineSpacing( 20 );
586 controller->SetMultiLineEnabled( false );
588 Vector3 naturalSize = controller->GetNaturalSize();
589 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
590 float lineSpacing0 = controller->GetDefaultLineSpacing();
592 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
593 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
594 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
597 // multi-line, line spacing = 0px
599 const float EXPECTED_SPACING = 0.0f;
600 const Vector2 EXPECTED_LAYOUT_SIZE( 318.0f, 39.0f );
601 const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 58.0f, 0.0f );
603 controller->SetText(textMulti);
604 controller->Relayout(size);
605 controller->SetMultiLineEnabled( true );
606 controller->SetDefaultLineSpacing( 0 );
608 Vector3 naturalSize = controller->GetNaturalSize();
609 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
610 float lineSpacing0 = controller->GetDefaultLineSpacing();
612 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
613 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
614 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
617 // multi-line, line spacing = 20px
619 const float EXPECTED_SPACING = 20.0f;
620 const Vector2 EXPECTED_LAYOUT_SIZE( 115.0f, 57.0f );
621 const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 118.0f, 0.0f );
623 controller->SetText(textMulti);
624 controller->Relayout(size);
625 controller->SetMultiLineEnabled( true );
626 controller->SetDefaultLineSpacing( 20 );
628 Vector3 naturalSize = controller->GetNaturalSize();
629 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
630 float lineSpacing0 = controller->GetDefaultLineSpacing();
632 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
633 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
634 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
637 // multi-line, line spacing = 30px
639 const float EXPECTED_SPACING = 30.0f;
640 const Vector2 EXPECTED_LAYOUT_SIZE( 115.0f, 117.0f );
641 const Vector3 EXPECTED_NATURAL_SIZE( 116.0f, 148.0f, 0.0f );
643 controller->SetText(textMulti);
644 controller->Relayout(size);
645 controller->SetMultiLineEnabled( true );
646 controller->SetDefaultLineSpacing( 30 );
648 Vector3 naturalSize = controller->GetNaturalSize();
649 Vector2 layoutSize = controller->GetTextModel()->GetLayoutSize();
650 float lineSpacing0 = controller->GetDefaultLineSpacing();
652 DALI_TEST_EQUALS( EXPECTED_SPACING, lineSpacing0, TEST_LOCATION );
653 DALI_TEST_EQUALS( EXPECTED_LAYOUT_SIZE, layoutSize, TEST_LOCATION );
654 DALI_TEST_EQUALS( EXPECTED_NATURAL_SIZE, naturalSize, TEST_LOCATION );
662 int UtcDaliTextControllerCheckBufferIndices(void)
664 tet_infoline(" UtcDaliTextControllerCheckBufferIndices");
665 ToolkitTestApplication application;
667 // Creates a text controller.
668 ControllerPtr controller = Controller::New();
670 ConfigureTextLabel(controller);
673 const std::string text("A Quick Brown Fox Jumps Over The Lazy Dog");
674 controller->SetText(text);
676 // Get the implementation of the text controller
677 Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() );
679 // Tweak some parameters to make the indices to access the text buffer invalid
680 mImpl.mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl.mModel->mLogicalModel->mText.Count() * 10u;
681 mImpl.mTextUpdateInfo.mNumberOfCharactersToRemove = 0u;
682 mImpl.mTextUpdateInfo.mPreviousNumberOfCharacters = 0u;
683 mImpl.mOperationsPending = Controller::ALL_OPERATIONS;
685 // Perform a relayout
686 const Size size( Dali::Stage::GetCurrent().GetSize() );
687 controller->Relayout(size);
689 tet_result(TET_PASS);