Sync UTC with text shape method.
[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     Vector<Vector2> positionList = Toolkit::DevelTextEditor::GetTextPosition(editor, 0, characterCount);
238     Vector<Vector2> sizeList     = Toolkit::DevelTextEditor::GetTextSize(editor, 0, characterCount);
239
240     DALI_TEST_EQUALS(positionList.Size() == sizeList.Size(), true, TEST_LOCATION);
241
242     unsigned int sizeListSize = sizeList.Size();
243     for(unsigned int i = 0; i < sizeListSize; i++)
244     {
245       DALI_TEST_EQUALS((int)positionList[i].x >= rangeExtents.x, true, TEST_LOCATION);
246       DALI_TEST_EQUALS((int)positionList[i].y >= rangeExtents.y, true, TEST_LOCATION);
247       DALI_TEST_EQUALS((int)sizeList[i].x <= rangeExtents.width, true, TEST_LOCATION);
248       DALI_TEST_EQUALS((int)sizeList[i].y <= rangeExtents.height, true, TEST_LOCATION);
249     }
250   }
251
252   END_TEST;
253 }
254
255 int utcDaliAccessibilityTextFieldGetName(void)
256 {
257   ToolkitTestApplication application;
258
259   auto field = Toolkit::TextField::New();
260   DALI_TEST_EQUALS( field.GetProperty<std::string>(Actor::Property::NAME), "", TEST_LOCATION );
261   field.SetProperty(Actor::Property::NAME, "field");
262   DALI_TEST_EQUALS( field.GetProperty<std::string>(Actor::Property::NAME), "field", TEST_LOCATION );
263
264   END_TEST;
265 }
266
267 int utcDaliAccessibilityTextFieldGetText(void)
268 {
269   ToolkitTestApplication application;
270
271   auto field = Dali::Toolkit::TextField::New();
272   auto q = Dali::Accessibility::Accessible::Get( field );
273   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
274   DALI_TEST_CHECK( x );
275   if( x )
276   {
277     DALI_TEST_EQUALS( x->GetText( 0, 0 ), "", TEST_LOCATION );
278     field.SetProperty( Toolkit::TextField::Property::TEXT, "exemplary_text" );
279     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION );
280
281     Dali::Property::Map hiddenInputSettings;
282     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
283
284     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
285
286     DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION );
287     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "*********", TEST_LOCATION );
288
289     hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23;
290     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
291
292     DALI_TEST_EQUALS( x->GetName(), "", TEST_LOCATION );
293     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "#########", TEST_LOCATION );
294   }
295
296   END_TEST;
297 }
298
299 int utcDaliAccessibilityTextFieldGetCharacterCount(void)
300 {
301   ToolkitTestApplication application;
302
303   auto field = Dali::Toolkit::TextField::New();
304   auto q = Dali::Accessibility::Accessible::Get( field );
305   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
306   DALI_TEST_CHECK( x );
307   if( x )
308   {
309     DALI_TEST_EQUALS( x->GetCharacterCount(), 0, TEST_LOCATION );
310     field.SetProperty( Toolkit::TextField::Property::TEXT, "field" );
311     DALI_TEST_EQUALS( x->GetCharacterCount(), 5, TEST_LOCATION );
312   }
313
314   END_TEST;
315 }
316
317 int utcDaliAccessibilityTextFieldGetTextAtOffset(void)
318 {
319   ToolkitTestApplication application;
320
321   auto field = Dali::Toolkit::TextField::New();
322   auto q = Dali::Accessibility::Accessible::Get( field );
323   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
324   DALI_TEST_CHECK( x );
325   if( x )
326   {
327     auto range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
328     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
329     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
330     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
331
332     field.SetProperty( Toolkit::TextField::Property::TEXT, "text editor test sentence" );
333     range = x->GetTextAtOffset( 5, Dali::Accessibility::TextBoundary::CHARACTER );
334     DALI_TEST_EQUALS( range.content, "e", TEST_LOCATION );
335     DALI_TEST_EQUALS( range.startOffset, 5, TEST_LOCATION );
336     DALI_TEST_EQUALS( range.endOffset, 6, TEST_LOCATION );
337
338     field.SetProperty( Toolkit::TextField::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
339     range = x->GetTextAtOffset( 3, Dali::Accessibility::TextBoundary::WORD );
340     DALI_TEST_EQUALS( range.content, "sentence", TEST_LOCATION );
341     DALI_TEST_EQUALS( range.startOffset, 28, TEST_LOCATION );
342     DALI_TEST_EQUALS( range.endOffset, 36, TEST_LOCATION );
343
344     field.SetProperty( Toolkit::TextField::Property::TEXT, "text \n\n\n\n\n\n editor  \n\n test sentence" );
345     range = x->GetTextAtOffset( 4, Dali::Accessibility::TextBoundary::WORD );
346     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
347     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
348     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
349
350     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
351     range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
352     DALI_TEST_EQUALS( range.content, "text    \n", TEST_LOCATION );
353     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
354     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
355
356     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
357     range = x->GetTextAtOffset( 6, Dali::Accessibility::TextBoundary::LINE );
358     DALI_TEST_EQUALS( range.content, " editor  \n", TEST_LOCATION );
359     DALI_TEST_EQUALS( range.startOffset, 14, TEST_LOCATION );
360     DALI_TEST_EQUALS( range.endOffset, 24, TEST_LOCATION );
361
362     field.SetProperty( Toolkit::TextField::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
363     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
364     DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION );
365     DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION );
366     DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION );
367
368     Dali::Property::Map hiddenInputSettings;
369     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
370     hiddenInputSettings[ Toolkit::HiddenInput::Property::SUBSTITUTE_CHARACTER ] = 0x23;
371     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
372     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
373     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
374     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
375     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
376
377   }
378
379   END_TEST;
380 }
381
382 int utcDaliAccessibilityTextFieldGetSetRangeOfSelection(void)
383 {
384   ToolkitTestApplication application;
385
386   auto field = Dali::Toolkit::TextField::New();
387   auto q = Dali::Accessibility::Accessible::Get( field );
388   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
389   DALI_TEST_CHECK( x );
390   if( x )
391   {
392     auto range = x->GetRangeOfSelection( 0 );
393     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
394     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
395     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
396
397     x->SetRangeOfSelection( 0, 4, 9 );
398     field.SetProperty( Toolkit::TextEditor::Property::TEXT, "exemplary_text" );
399     range = x->GetRangeOfSelection( 0 );
400
401     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
402     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
403     DALI_TEST_EQUALS( range.content, "plary", TEST_LOCATION );
404
405     Dali::Property::Map hiddenInputSettings;
406     hiddenInputSettings[ Toolkit::HiddenInput::Property::MODE ] = Toolkit::HiddenInput::Mode::HIDE_ALL;
407     field.SetProperty( Toolkit::TextField::Property::HIDDEN_INPUT_SETTINGS, hiddenInputSettings );
408
409     range = x->GetRangeOfSelection( 0 );
410     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
411     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
412     DALI_TEST_EQUALS( range.content, "*****", TEST_LOCATION );
413   }
414
415   END_TEST;
416 }
417
418 int utcDaliAccessibilityTextFieldRemoveSelection(void)
419 {
420   ToolkitTestApplication application;
421
422   auto field = Dali::Toolkit::TextField::New();
423   auto q = Dali::Accessibility::Accessible::Get( field );
424   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
425   DALI_TEST_CHECK( x );
426   if( x )
427   {
428     auto range = x->GetRangeOfSelection( 0 );
429     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
430     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
431
432     x->SetRangeOfSelection( 0, 4, 9 );
433     range = x->GetRangeOfSelection( 0 );
434     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
435     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
436
437     x->RemoveSelection( 0 );
438     range = x->GetRangeOfSelection( 0 );
439     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
440     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
441   }
442
443   END_TEST;
444 }
445
446 int utcDaliAccessibilityTextFieldGetRangeExtents(void)
447 {
448   ToolkitTestApplication application;
449
450   auto field = Dali::Toolkit::TextField::New();
451   auto q     = Dali::Accessibility::Accessible::Get( field );
452   auto x     = dynamic_cast< Dali::Accessibility::Text* >( q );
453   DALI_TEST_CHECK( x );
454
455   if( x )
456   {
457     auto rangeExtents = x->GetRangeExtents( 0, 0, Dali::Accessibility::CoordinateType::WINDOW );
458     DALI_TEST_EQUALS( (int)rangeExtents.x, 0, TEST_LOCATION );
459     DALI_TEST_EQUALS( (int)rangeExtents.y, 0, TEST_LOCATION );
460     DALI_TEST_EQUALS( (int)rangeExtents.width, 0, TEST_LOCATION );
461     DALI_TEST_EQUALS( (int)rangeExtents.height, 0, TEST_LOCATION );
462
463     application.GetScene().Add( field );
464
465     field.SetProperty( Toolkit::TextField::Property::POINT_SIZE, 7.f );
466     field.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
467     field.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
468     field.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
469     field.SetProperty( Toolkit::TextField::Property::TEXT, "text field test sentence" );
470
471     // Avoid a crash when core load gl resources.
472     application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
473
474     // Render and notify
475     application.SendNotification();
476     application.Render();
477
478     auto characterCount = x->GetCharacterCount();
479     rangeExtents        = x->GetRangeExtents( 0, characterCount, Dali::Accessibility::CoordinateType::WINDOW );
480
481     Vector<Vector2> positionList = Toolkit::DevelTextField::GetTextPosition(field, 0, characterCount);
482     Vector<Vector2> sizeList     = Toolkit::DevelTextField::GetTextSize(field, 0, characterCount);
483
484     DALI_TEST_EQUALS(positionList.Size() == sizeList.Size(), true, TEST_LOCATION);
485
486     unsigned int sizeListSize = sizeList.Size();
487     for(unsigned int i = 0; i < sizeListSize; i++)
488     {
489       DALI_TEST_EQUALS((int)positionList[i].x >= rangeExtents.x, true, TEST_LOCATION);
490       DALI_TEST_EQUALS((int)positionList[i].y >= rangeExtents.y, true, TEST_LOCATION);
491       DALI_TEST_EQUALS((int)sizeList[i].x <= rangeExtents.width, true, TEST_LOCATION);
492       DALI_TEST_EQUALS((int)sizeList[i].y <= rangeExtents.height, true, TEST_LOCATION);
493     }
494   }
495
496   END_TEST;
497 }
498
499 int utcDaliAccessibilityTextLabelGetName(void)
500 {
501   ToolkitTestApplication application;
502
503   auto label = Toolkit::TextLabel::New();
504   DALI_TEST_EQUALS( label.GetProperty<std::string>(Actor::Property::NAME), "", TEST_LOCATION );
505   label.SetProperty(Actor::Property::NAME, "label");
506   DALI_TEST_EQUALS( label.GetProperty<std::string>(Actor::Property::NAME), "label", TEST_LOCATION );
507
508   END_TEST;
509 }
510
511 int utcDaliAccessibilityTextLabelGetText(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->GetText( 0, 0 ), "", TEST_LOCATION );
522     label.SetProperty( Toolkit::TextField::Property::TEXT, "exemplary_text" );
523     DALI_TEST_EQUALS( x->GetText( 0, 9 ), "exemplary", TEST_LOCATION );
524   }
525
526   END_TEST;
527 }
528
529 int utcDaliAccessibilityTextLabelGetCharacterCount(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     DALI_TEST_EQUALS( x->GetCharacterCount(), 0, TEST_LOCATION );
540     label.SetProperty( Toolkit::TextField::Property::TEXT, "field" );
541     DALI_TEST_EQUALS( x->GetCharacterCount(), 5, TEST_LOCATION );
542   }
543
544   END_TEST;
545 }
546
547 int utcDaliAccessibilityTextLabelGetTextAtOffset(void)
548 {
549   ToolkitTestApplication application;
550
551   auto label = Dali::Toolkit::TextLabel::New();
552   auto q = Dali::Accessibility::Accessible::Get( label );
553   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
554   DALI_TEST_CHECK( x );
555   if( x )
556   {
557     auto range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
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 editor test sentence" );
563     range = x->GetTextAtOffset( 5, Dali::Accessibility::TextBoundary::CHARACTER );
564     DALI_TEST_EQUALS( range.content, "e", TEST_LOCATION );
565     DALI_TEST_EQUALS( range.startOffset, 5, TEST_LOCATION );
566     DALI_TEST_EQUALS( range.endOffset, 6, 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( 3, Dali::Accessibility::TextBoundary::WORD );
570     DALI_TEST_EQUALS( range.content, "sentence", TEST_LOCATION );
571     DALI_TEST_EQUALS( range.startOffset, 28, TEST_LOCATION );
572     DALI_TEST_EQUALS( range.endOffset, 36, 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( 4, Dali::Accessibility::TextBoundary::WORD );
576     DALI_TEST_EQUALS( range.content, "", TEST_LOCATION );
577     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
578     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
579
580     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
581     range = x->GetTextAtOffset( 0, Dali::Accessibility::TextBoundary::LINE );
582     DALI_TEST_EQUALS( range.content, "text    \n", TEST_LOCATION );
583     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
584     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
585
586     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
587     range = x->GetTextAtOffset( 6, Dali::Accessibility::TextBoundary::LINE );
588     DALI_TEST_EQUALS( range.content, " editor  \n", TEST_LOCATION );
589     DALI_TEST_EQUALS( range.startOffset, 14, TEST_LOCATION );
590     DALI_TEST_EQUALS( range.endOffset, 24, TEST_LOCATION );
591
592     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text    \n\n\n\n\n\n editor  \n\n test sentence" );
593     range = x->GetTextAtOffset( 8, Dali::Accessibility::TextBoundary::LINE );
594     DALI_TEST_EQUALS( range.content, " test sentence", TEST_LOCATION );
595     DALI_TEST_EQUALS( range.startOffset, 25, TEST_LOCATION );
596     DALI_TEST_EQUALS( range.endOffset, 39, TEST_LOCATION );
597   }
598
599   END_TEST;
600 }
601
602 int utcDaliAccessibilityTextLabelRemoveSelection( void )
603 {
604   ToolkitTestApplication application;
605
606   auto label = Dali::Toolkit::TextLabel::New();
607   auto q = Dali::Accessibility::Accessible::Get( label );
608   auto x = dynamic_cast< Dali::Accessibility::Text* >( q );
609   DALI_TEST_CHECK( x );
610   if( x )
611   {
612     auto range = x->GetRangeOfSelection( 0 );
613     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
614     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
615
616     x->SetRangeOfSelection( 0, 4, 9 );
617     range = x->GetRangeOfSelection( 0 );
618     DALI_TEST_EQUALS( range.startOffset, 4, TEST_LOCATION );
619     DALI_TEST_EQUALS( range.endOffset, 9, TEST_LOCATION );
620
621     x->RemoveSelection( 0 );
622     range = x->GetRangeOfSelection( 0 );
623     DALI_TEST_EQUALS( range.startOffset, 0, TEST_LOCATION );
624     DALI_TEST_EQUALS( range.endOffset, 0, TEST_LOCATION );
625   }
626
627   END_TEST;
628 }
629
630 int utcDaliAccessibilityTextLabelGetRangeExtents(void)
631 {
632   ToolkitTestApplication application;
633
634   auto label = Dali::Toolkit::TextLabel::New();
635   auto q     = Dali::Accessibility::Accessible::Get( label );
636   auto x     = dynamic_cast< Dali::Accessibility::Text* >( q );
637   DALI_TEST_CHECK( x );
638
639   if( x )
640   {
641     auto rangeExtents = x->GetRangeExtents( 0, 0, Dali::Accessibility::CoordinateType::WINDOW );
642     DALI_TEST_EQUALS( (int)rangeExtents.x, 0, TEST_LOCATION );
643     DALI_TEST_EQUALS( (int)rangeExtents.y, 0, TEST_LOCATION );
644     DALI_TEST_EQUALS( (int)rangeExtents.width, 0, TEST_LOCATION );
645     DALI_TEST_EQUALS( (int)rangeExtents.height, 0, TEST_LOCATION );
646
647     application.GetScene().Add( label );
648
649     label.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, 7.f );
650     label.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
651     label.SetProperty( Actor::Property::SIZE, Vector2(200.f, 200.f) );
652     label.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
653     label.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
654     label.SetProperty( Toolkit::TextLabel::Property::TEXT, "text label\n test sentence" );
655
656     // Avoid a crash when core load gl resources.
657     application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
658
659     // Render and notify
660     application.SendNotification();
661     application.Render();
662
663     auto characterCount = x->GetCharacterCount();
664     rangeExtents        = x->GetRangeExtents( 0, characterCount, Dali::Accessibility::CoordinateType::WINDOW );
665
666     Vector<Vector2> positionList = Toolkit::DevelTextLabel::GetTextPosition(label, 0, characterCount);
667     Vector<Vector2> sizeList     = Toolkit::DevelTextLabel::GetTextSize(label, 0, characterCount);
668
669     DALI_TEST_EQUALS(positionList.Size() == sizeList.Size(), true, TEST_LOCATION);
670
671     unsigned int sizeListSize = sizeList.Size();
672     for(unsigned int i = 0; i < sizeListSize; i++)
673     {
674       DALI_TEST_EQUALS((int)positionList[i].x >= rangeExtents.x, true, TEST_LOCATION);
675       DALI_TEST_EQUALS((int)positionList[i].y >= rangeExtents.y, true, TEST_LOCATION);
676       DALI_TEST_EQUALS((int)sizeList[i].x <= rangeExtents.width, true, TEST_LOCATION);
677       DALI_TEST_EQUALS((int)sizeList[i].y <= rangeExtents.height, true, TEST_LOCATION);
678     }
679   }
680
681   END_TEST;
682 }