Fix GetTextBoundingRectangle size issue
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Accessibility-Text.cpp
1 /**
2  * Copyright (c) 2017 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // Need to override adaptor classes for toolkit test harness, so include
19 // test harness headers before dali headers.
20 #include <dali-toolkit-test-suite-utils.h>
21
22 #include <dali.h>
23 #include <dali-toolkit/dali-toolkit.h>
24
25 #include <dali/devel-api/adaptor-framework/accessibility.h>
26 #include <dali/devel-api/atspi-interfaces/accessible.h>
27 #include <dali/devel-api/atspi-interfaces/text.h>
28 #include <dali-toolkit/internal/controls/text-controls/text-field-impl.h>
29 #include <dali-toolkit/internal/controls/text-controls/text-editor-impl.h>
30
31 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
32
33 void utc_dali_toolkit_accessibility_text_startup(void)
34 {
35   test_return_value = TET_UNDEF;
36   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
37 }
38
39 void utc_dali_toolkit_accessibility_text_cleanup(void)
40 {
41   test_return_value = TET_PASS;
42 }
43
44 int utcDaliAccessibilityTextEditorGetName(void)
45 {
46   ToolkitTestApplication application;
47
48   auto editor = Dali::Toolkit::TextEditor::New();
49   DALI_TEST_EQUALS( editor.GetProperty<std::string>(Actor::Property::NAME), "", TEST_LOCATION );
50   editor.SetProperty(Actor::Property::NAME, "editor");
51   DALI_TEST_EQUALS( editor.GetProperty<std::string>(Actor::Property::NAME), "editor", TEST_LOCATION );
52
53   END_TEST;
54 }
55
56 int utcDaliAccessibilityTextEditorGetText(void)
57 {
58   ToolkitTestApplication application;
59
60   auto editor = Dali::Toolkit::TextEditor::New();
61   auto q = Dali::Accessibility::Accessible::Get( editor );
62   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
63   DALI_TEST_CHECK( x );
64   if( x )
65   {
66     DALI_TEST_EQUALS( x->GetText( 0, 0 ), "", TEST_LOCATION );
67     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" );
68     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION );
69   }
70
71   END_TEST;
72 }
73
74 int utcDaliAccessibilityTextEditorGetCharacterCount(void)
75 {
76   ToolkitTestApplication application;
77
78   auto editor = Dali::Toolkit::TextEditor::New();
79   auto q = Dali::Accessibility::Accessible::Get( editor );
80   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
81   DALI_TEST_CHECK( x );
82   if( x )
83   {
84     DALI_TEST_EQUALS( x->GetCharacterCount(), 0, TEST_LOCATION );
85     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "editor" );
86     DALI_TEST_EQUALS( x->GetCharacterCount(), 6, TEST_LOCATION );
87   }
88
89   END_TEST;
90 }
91
92 int utcDaliAccessibilityTextEditorGetTextAtOffset(void)
93 {
94   ToolkitTestApplication application;
95
96   auto editor = Dali::Toolkit::TextEditor::New();
97   auto q = Dali::Accessibility::Accessible::Get( editor );
98   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
99   DALI_TEST_CHECK( x );
100   if( x )
101   {
102     auto range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
103     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
104     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
105     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
106
107     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text editor test sentence" );
108     range = x->GetTextAtOffset( 5, Dali::Accessibility::TextBoundary::CHARACTER );
109     DALI_TEST_EQUALS( range.content, "e", TEST_LOCATION );
110     DALI_TEST_EQUALS( range.startOffset, 5, TEST_LOCATION );
111     DALI_TEST_EQUALS( range.endOffset, 6, TEST_LOCATION );
112
113     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
114     range = x->GetTextAtOffset( 3, Dali::Accessibility::TextBoundary::WORD );
115     DALI_TEST_EQUALS( range.content, "sentence", TEST_LOCATION );
116     DALI_TEST_EQUALS( range.startOffset, 28, TEST_LOCATION );
117     DALI_TEST_EQUALS( range.endOffset, 36, TEST_LOCATION );
118
119     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
120     range = x->GetTextAtOffset( 4, Dali::Accessibility::TextBoundary::WORD );
121     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
122     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
123     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
124
125     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
126     range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
127     DALI_TEST_EQUALS( range.content, "text    \n", TEST_LOCATION );
128     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
129     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
130
131     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
132     range = x->GetTextAtOffset( 6, Dali::Accessibility::TextBoundary::LINE );
133     DALI_TEST_EQUALS( range.content, " editor  \n", TEST_LOCATION );
134     DALI_TEST_EQUALS( range.startOffset, 14, TEST_LOCATION );
135     DALI_TEST_EQUALS( range.endOffset, 24, TEST_LOCATION );
136
137     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
138     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
139     DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION );
140     DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION );
141     DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION );
142   }
143
144   END_TEST;
145 }
146
147 int utcDaliAccessibilityTextEditorGetSetRangeOfSelection(void)
148 {
149   ToolkitTestApplication application;
150
151   auto editor = Dali::Toolkit::TextEditor::New();
152   auto q = Dali::Accessibility::Accessible::Get( editor );
153   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
154   DALI_TEST_CHECK( x );
155   if( x )
156   {
157     auto range = x->GetRangeOfSelection( 0 );
158     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
159     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
160     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
161
162     x->SetRangeOfSelection( 0, 4, 9 );
163     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" );
164     range = x->GetRangeOfSelection( 0 );
165
166     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
167     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
168     DALI_TEST_EQUALS( range.content, "plary", TEST_LOCATION );
169   }
170
171   END_TEST;
172 }
173
174 int utcDaliAccessibilityTextEditorRemoveSelection(void)
175 {
176   ToolkitTestApplication application;
177
178   auto editor = Dali::Toolkit::TextEditor::New();
179   auto q = Dali::Accessibility::Accessible::Get( editor );
180   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
181   DALI_TEST_CHECK( x );
182   if( x )
183   {
184     auto range = x->GetRangeOfSelection( 0 );
185     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
186     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
187
188     x->SetRangeOfSelection( 0, 4, 9 );
189     range = x->GetRangeOfSelection( 0 );
190     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
191     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
192
193     x->RemoveSelection( 0 );
194     range = x->GetRangeOfSelection( 0 );
195     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
196     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
197   }
198
199   END_TEST;
200 }
201
202 int utcDaliAccessibilityTextEditorGetRangeExtents(void)
203 {
204   ToolkitTestApplication application;
205
206   auto editor = Dali::Toolkit::TextEditor::New();
207   auto q     = Dali::Accessibility::Accessible::Get( editor );
208   auto x     = dynamic_cast< Dali::Accessibility::Text* >( q );
209   DALI_TEST_CHECK( x );
210
211   if( x )
212   {
213     auto rangeExtents = x->GetRangeExtents( 0, 0, Dali::Accessibility::CoordinateType::WINDOW );
214     DALI_TEST_EQUALS( (int)rangeExtents.x, 0, TEST_LOCATION );
215     DALI_TEST_EQUALS( (int)rangeExtents.y, 0, TEST_LOCATION );
216     DALI_TEST_EQUALS( (int)rangeExtents.width, 0, TEST_LOCATION );
217     DALI_TEST_EQUALS( (int)rangeExtents.height, 0, TEST_LOCATION );
218
219     application.GetScene().Add( editor );
220
221     editor.SetProperty( Toolkit::TextEditor::Property::POINT_SIZE, 7.f );
222     editor.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
223     editor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
224     editor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
225     editor.SetProperty( Toolkit::TextEditor::Property::TEXT, "text editor test sentence" );
226
227     // Avoid a crash when core load gl resources.
228     application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
229
230     // Render and notify
231     application.SendNotification();
232     application.Render();
233
234     auto characterCount = x->GetCharacterCount();
235     rangeExtents        = x->GetRangeExtents( 0, characterCount, Dali::Accessibility::CoordinateType::WINDOW );
236
237     DALI_TEST_EQUALS((int)rangeExtents.x >= 0, true, TEST_LOCATION);
238     DALI_TEST_EQUALS((int)rangeExtents.y >= 0, true, TEST_LOCATION);
239     DALI_TEST_EQUALS((int)rangeExtents.width <= 200, true, TEST_LOCATION);
240     DALI_TEST_EQUALS((int)rangeExtents.height <= 200, true, TEST_LOCATION);
241   }
242
243   END_TEST;
244 }
245
246 int utcDaliAccessibilityTextFieldGetName(void)
247 {
248   ToolkitTestApplication application;
249
250   auto field = Toolkit::TextField::New();
251   DALI_TEST_EQUALS( field.GetProperty<std::string>(Actor::Property::NAME), "", TEST_LOCATION );
252   field.SetProperty(Actor::Property::NAME, "field");
253   DALI_TEST_EQUALS( field.GetProperty<std::string>(Actor::Property::NAME), "field", TEST_LOCATION );
254
255   END_TEST;
256 }
257
258 int utcDaliAccessibilityTextFieldGetText(void)
259 {
260   ToolkitTestApplication application;
261
262   auto field = Dali::Toolkit::TextField::New();
263   auto q = Dali::Accessibility::Accessible::Get( field );
264   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
265   DALI_TEST_CHECK( x );
266   if( x )
267   {
268     DALI_TEST_EQUALS( x->GetText( 0, 0 ), "", TEST_LOCATION );
269     field.SetProperty( Toolkit::TextField::Property::TEXT, "exemplary_text" );
270     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION );
271
272     Dali::Property::Map hiddenInputSettings;
273     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
274
275     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
276
277     DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION );
278     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "*********", TEST_LOCATION );
279
280     hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23;
281     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
282
283     DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION );
284     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "#########", TEST_LOCATION );
285   }
286
287   END_TEST;
288 }
289
290 int utcDaliAccessibilityTextFieldGetCharacterCount(void)
291 {
292   ToolkitTestApplication application;
293
294   auto field = Dali::Toolkit::TextField::New();
295   auto q = Dali::Accessibility::Accessible::Get( field );
296   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
297   DALI_TEST_CHECK( x );
298   if( x )
299   {
300     DALI_TEST_EQUALS( x->GetCharacterCount(), 0, TEST_LOCATION );
301     field.SetProperty( Toolkit::TextField::Property::TEXT, "field" );
302     DALI_TEST_EQUALS( x->GetCharacterCount(), 5, TEST_LOCATION );
303   }
304
305   END_TEST;
306 }
307
308 int utcDaliAccessibilityTextFieldGetTextAtOffset(void)
309 {
310   ToolkitTestApplication application;
311
312   auto field = Dali::Toolkit::TextField::New();
313   auto q = Dali::Accessibility::Accessible::Get( field );
314   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
315   DALI_TEST_CHECK( x );
316   if( x )
317   {
318     auto range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
319     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
320     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
321     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
322
323     field.SetProperty( Toolkit::TextField::Property::TEXT, "text editor test sentence" );
324     range = x->GetTextAtOffset( 5, Dali::Accessibility::TextBoundary::CHARACTER );
325     DALI_TEST_EQUALS( range.content, "e", TEST_LOCATION );
326     DALI_TEST_EQUALS( range.startOffset, 5, TEST_LOCATION );
327     DALI_TEST_EQUALS( range.endOffset, 6, TEST_LOCATION );
328
329     field.SetProperty( Toolkit::TextField::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
330     range = x->GetTextAtOffset( 3, Dali::Accessibility::TextBoundary::WORD );
331     DALI_TEST_EQUALS( range.content, "sentence", TEST_LOCATION );
332     DALI_TEST_EQUALS( range.startOffset, 28, TEST_LOCATION );
333     DALI_TEST_EQUALS( range.endOffset, 36, TEST_LOCATION );
334
335     field.SetProperty( Toolkit::TextField::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
336     range = x->GetTextAtOffset( 4, Dali::Accessibility::TextBoundary::WORD );
337     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
338     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
339     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
340
341     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
342     range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
343     DALI_TEST_EQUALS( range.content, "text    \n", TEST_LOCATION );
344     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
345     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
346
347     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
348     range = x->GetTextAtOffset( 6, Dali::Accessibility::TextBoundary::LINE );
349     DALI_TEST_EQUALS( range.content, " editor  \n", TEST_LOCATION );
350     DALI_TEST_EQUALS( range.startOffset, 14, TEST_LOCATION );
351     DALI_TEST_EQUALS( range.endOffset, 24, TEST_LOCATION );
352
353     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
354     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
355     DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION );
356     DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION );
357     DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION );
358
359     Dali::Property::Map hiddenInputSettings;
360     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
361     hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23;
362     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
363     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
364     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
365     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
366     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
367
368   }
369
370   END_TEST;
371 }
372
373 int utcDaliAccessibilityTextFieldGetSetRangeOfSelection(void)
374 {
375   ToolkitTestApplication application;
376
377   auto field = Dali::Toolkit::TextField::New();
378   auto q = Dali::Accessibility::Accessible::Get( field );
379   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
380   DALI_TEST_CHECK( x );
381   if( x )
382   {
383     auto range = x->GetRangeOfSelection( 0 );
384     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
385     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
386     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
387
388     x->SetRangeOfSelection( 0, 4, 9 );
389     field.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" );
390     range = x->GetRangeOfSelection( 0 );
391
392     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
393     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
394     DALI_TEST_EQUALS( range.content, "plary", TEST_LOCATION );
395
396     Dali::Property::Map hiddenInputSettings;
397     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
398     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
399
400     range = x->GetRangeOfSelection( 0 );
401     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
402     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
403     DALI_TEST_EQUALS( range.content, "*****", TEST_LOCATION );
404   }
405
406   END_TEST;
407 }
408
409 int utcDaliAccessibilityTextFieldRemoveSelection(void)
410 {
411   ToolkitTestApplication application;
412
413   auto field = Dali::Toolkit::TextField::New();
414   auto q = Dali::Accessibility::Accessible::Get( field );
415   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
416   DALI_TEST_CHECK( x );
417   if( x )
418   {
419     auto range = x->GetRangeOfSelection( 0 );
420     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
421     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
422
423     x->SetRangeOfSelection( 0, 4, 9 );
424     range = x->GetRangeOfSelection( 0 );
425     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
426     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
427
428     x->RemoveSelection( 0 );
429     range = x->GetRangeOfSelection( 0 );
430     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
431     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
432   }
433
434   END_TEST;
435 }
436
437 int utcDaliAccessibilityTextFieldGetRangeExtents(void)
438 {
439   ToolkitTestApplication application;
440
441   auto field = Dali::Toolkit::TextField::New();
442   auto q     = Dali::Accessibility::Accessible::Get( field );
443   auto x     = dynamic_cast< Dali::Accessibility::Text* >( q );
444   DALI_TEST_CHECK( x );
445
446   if( x )
447   {
448     auto rangeExtents = x->GetRangeExtents( 0, 0, Dali::Accessibility::CoordinateType::WINDOW );
449     DALI_TEST_EQUALS( (int)rangeExtents.x, 0, TEST_LOCATION );
450     DALI_TEST_EQUALS( (int)rangeExtents.y, 0, TEST_LOCATION );
451     DALI_TEST_EQUALS( (int)rangeExtents.width, 0, TEST_LOCATION );
452     DALI_TEST_EQUALS( (int)rangeExtents.height, 0, TEST_LOCATION );
453
454     application.GetScene().Add( field );
455
456     field.SetProperty( Toolkit::TextField::Property::POINT_SIZE, 7.f );
457     field.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
458     field.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
459     field.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
460     field.SetProperty( Toolkit::TextField::Property::TEXT, "text field test sentence" );
461
462     // Avoid a crash when core load gl resources.
463     application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
464
465     // Render and notify
466     application.SendNotification();
467     application.Render();
468
469     auto characterCount = x->GetCharacterCount();
470     rangeExtents        = x->GetRangeExtents( 0, characterCount, Dali::Accessibility::CoordinateType::WINDOW );
471
472     DALI_TEST_EQUALS((int)rangeExtents.x >= 0, true, TEST_LOCATION);
473     DALI_TEST_EQUALS((int)rangeExtents.y >= 0, true, TEST_LOCATION);
474     DALI_TEST_EQUALS((int)rangeExtents.width <= 200, true, TEST_LOCATION);
475     DALI_TEST_EQUALS((int)rangeExtents.height <= 200, true, TEST_LOCATION);
476   }
477
478   END_TEST;
479 }
480
481 int utcDaliAccessibilityTextLabelGetName(void)
482 {
483   ToolkitTestApplication application;
484
485   auto label = Toolkit::TextLabel::New();
486   DALI_TEST_EQUALS( label.GetProperty<std::string>(Actor::Property::NAME), "", TEST_LOCATION );
487   label.SetProperty(Actor::Property::NAME, "label");
488   DALI_TEST_EQUALS( label.GetProperty<std::string>(Actor::Property::NAME), "label", TEST_LOCATION );
489
490   END_TEST;
491 }
492
493 int utcDaliAccessibilityTextLabelGetText(void)
494 {
495   ToolkitTestApplication application;
496
497   auto label = Dali::Toolkit::TextLabel::New();
498   auto q = Dali::Accessibility::Accessible::Get( label );
499   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
500   DALI_TEST_CHECK( x );
501   if( x )
502   {
503     DALI_TEST_EQUALS( x->GetText( 0, 0 ), "", TEST_LOCATION );
504     label.SetProperty( Toolkit::TextField::Property::TEXT, "exemplary_text" );
505     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION );
506   }
507
508   END_TEST;
509 }
510
511 int utcDaliAccessibilityTextLabelGetCharacterCount(void)
512 {
513   ToolkitTestApplication application;
514
515   auto label = Dali::Toolkit::TextLabel::New();
516   auto q = Dali::Accessibility::Accessible::Get( label );
517   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
518   DALI_TEST_CHECK( x );
519   if( x )
520   {
521     DALI_TEST_EQUALS( x->GetCharacterCount(), 0, TEST_LOCATION );
522     label.SetProperty( Toolkit::TextField::Property::TEXT, "field" );
523     DALI_TEST_EQUALS( x->GetCharacterCount(), 5, TEST_LOCATION );
524   }
525
526   END_TEST;
527 }
528
529 int utcDaliAccessibilityTextLabelGetTextAtOffset(void)
530 {
531   ToolkitTestApplication application;
532
533   auto label = Dali::Toolkit::TextLabel::New();
534   auto q = Dali::Accessibility::Accessible::Get( label );
535   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
536   DALI_TEST_CHECK( x );
537   if( x )
538   {
539     auto range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
540     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
541     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
542     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
543
544     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text editor test sentence" );
545     range = x->GetTextAtOffset( 5, Dali::Accessibility::TextBoundary::CHARACTER );
546     DALI_TEST_EQUALS( range.content, "e", TEST_LOCATION );
547     DALI_TEST_EQUALS( range.startOffset, 5, TEST_LOCATION );
548     DALI_TEST_EQUALS( range.endOffset, 6, TEST_LOCATION );
549
550     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
551     range = x->GetTextAtOffset( 3, Dali::Accessibility::TextBoundary::WORD );
552     DALI_TEST_EQUALS( range.content, "sentence", TEST_LOCATION );
553     DALI_TEST_EQUALS( range.startOffset, 28, TEST_LOCATION );
554     DALI_TEST_EQUALS( range.endOffset, 36, TEST_LOCATION );
555
556     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
557     range = x->GetTextAtOffset( 4, Dali::Accessibility::TextBoundary::WORD );
558     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
559     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
560     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
561
562     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
563     range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
564     DALI_TEST_EQUALS( range.content, "text    \n", TEST_LOCATION );
565     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
566     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
567
568     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
569     range = x->GetTextAtOffset( 6, Dali::Accessibility::TextBoundary::LINE );
570     DALI_TEST_EQUALS( range.content, " editor  \n", TEST_LOCATION );
571     DALI_TEST_EQUALS( range.startOffset, 14, TEST_LOCATION );
572     DALI_TEST_EQUALS( range.endOffset, 24, TEST_LOCATION );
573
574     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
575     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
576     DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION );
577     DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION );
578     DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION );
579   }
580
581   END_TEST;
582 }
583
584 int utcDaliAccessibilityTextLabelRemoveSelection( void )
585 {
586   ToolkitTestApplication application;
587
588   auto label = Dali::Toolkit::TextLabel::New();
589   auto q = Dali::Accessibility::Accessible::Get( label );
590   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
591   DALI_TEST_CHECK( x );
592   if( x )
593   {
594     auto range = x->GetRangeOfSelection( 0 );
595     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
596     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
597
598     x->SetRangeOfSelection( 0, 4, 9 );
599     range = x->GetRangeOfSelection( 0 );
600     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
601     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
602
603     x->RemoveSelection( 0 );
604     range = x->GetRangeOfSelection( 0 );
605     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
606     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
607   }
608
609   END_TEST;
610 }
611
612 int utcDaliAccessibilityTextLabelGetRangeExtents(void)
613 {
614   ToolkitTestApplication application;
615
616   auto label = Dali::Toolkit::TextLabel::New();
617   auto q     = Dali::Accessibility::Accessible::Get( label );
618   auto x     = dynamic_cast< Dali::Accessibility::Text* >( q );
619   DALI_TEST_CHECK( x );
620
621   if( x )
622   {
623     auto rangeExtents = x->GetRangeExtents( 0, 0, Dali::Accessibility::CoordinateType::WINDOW );
624     DALI_TEST_EQUALS( (int)rangeExtents.x, 0, TEST_LOCATION );
625     DALI_TEST_EQUALS( (int)rangeExtents.y, 0, TEST_LOCATION );
626     DALI_TEST_EQUALS( (int)rangeExtents.width, 0, TEST_LOCATION );
627     DALI_TEST_EQUALS( (int)rangeExtents.height, 0, TEST_LOCATION );
628
629     application.GetScene().Add( label );
630
631     label.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, 7.f );
632     label.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
633     label.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
634     label.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
635     label.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
636     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text label\n test sentence" );
637
638     // Avoid a crash when core load gl resources.
639     application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
640
641     // Render and notify
642     application.SendNotification();
643     application.Render();
644
645     auto characterCount = x->GetCharacterCount();
646     rangeExtents        = x->GetRangeExtents( 0, characterCount, Dali::Accessibility::CoordinateType::WINDOW );
647
648     DALI_TEST_EQUALS((int)rangeExtents.x >= 0, true, TEST_LOCATION);
649     DALI_TEST_EQUALS((int)rangeExtents.y >= 0, true, TEST_LOCATION);
650     DALI_TEST_EQUALS((int)rangeExtents.width <= 200, true, TEST_LOCATION);
651     DALI_TEST_EQUALS((int)rangeExtents.height <= 200, true, TEST_LOCATION);
652   }
653
654   END_TEST;
655 }