Support the strikethrough and its attribute in span tag
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-TextEditor-internal.cpp
1 /*
2  * Copyright (c) 2022 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 #include <stdlib.h>
19 #include <iostream>
20
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <dali-toolkit/dali-toolkit.h>
23
24 #include <dali-toolkit/internal/controls/text-controls/text-editor-impl.h>
25 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
26 #include <dali-toolkit/internal/text/text-controller-impl.h>
27 #include <dali-toolkit/internal/text/text-controller.h>
28
29 using namespace Dali;
30 using namespace Toolkit;
31 using namespace Text;
32
33 int UtcDaliTextEditorSelectText(void)
34 {
35   ToolkitTestApplication application;
36   tet_infoline("UtcDaliTextEditorSelectText");
37
38   // Create a text editor
39   TextEditor textEditor = TextEditor::New();
40   textEditor.SetProperty(Actor::Property::SIZE, Vector2(400.f, 60.f));
41   textEditor.SetProperty(TextEditor::Property::TEXT, "Hello World");
42
43   // Add the text editor to the stage
44   application.GetScene().Add(textEditor);
45
46   application.SendNotification();
47   application.Render();
48
49   Toolkit::Internal::TextEditor& textEditorImpl = GetImpl(textEditor);
50
51   application.SendNotification();
52   application.Render();
53
54   // Highlight the whole text
55   textEditorImpl.SelectWholeText();
56
57   application.SendNotification();
58   application.Render();
59
60   std::string selectedText = textEditorImpl.GetSelectedText();
61   DALI_TEST_CHECK(selectedText == "Hello World");
62
63   // Select None
64   textEditorImpl.SelectNone();
65
66   application.SendNotification();
67   application.Render();
68
69   selectedText = textEditorImpl.GetSelectedText();
70   DALI_TEST_CHECK(selectedText == "");
71
72   END_TEST;
73 }
74
75 int UtcDaliTextEditorMarkupUnderline(void)
76 {
77   ToolkitTestApplication application;
78   tet_infoline(" UtcDaliTextEditorMarkupUnderline ");
79
80   TextEditor textEditor = TextEditor::New();
81
82   application.GetScene().Add(textEditor);
83
84   textEditor.SetProperty(TextEditor::Property::TEXT, "<u>ABC</u>EF<u>GH</u>");
85   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
86
87   application.SendNotification();
88   application.Render();
89
90   uint32_t expectedNumberOfUnderlineRuns = 2u;
91
92   Toolkit::Internal::TextEditor& textEditorImpl        = GetImpl(textEditor);
93   const Text::Length             numberOfUnderlineRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns();
94
95   DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION);
96
97   Vector<UnderlinedGlyphRun> underlineRuns;
98   underlineRuns.Resize(numberOfUnderlineRuns);
99   textEditorImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns);
100
101   //ABC are underlined
102   DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION);
103   DALI_TEST_EQUALS(underlineRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION);
104
105   //GH are underlined
106   DALI_TEST_EQUALS(underlineRuns[1u].glyphRun.glyphIndex, 5u, TEST_LOCATION);
107   DALI_TEST_EQUALS(underlineRuns[1u].glyphRun.numberOfGlyphs, 2u, TEST_LOCATION);
108
109   END_TEST;
110 }
111
112 int UtcDaliTextEditorMarkupUnderlineAttributes(void)
113 {
114   ToolkitTestApplication application;
115   tet_infoline(" UtcDaliTextEditorMarkupUnderlineAttributes ");
116
117   TextEditor textEditor = TextEditor::New();
118
119   application.GetScene().Add(textEditor);
120
121   std::string testText =
122     "start<u>ABC1</u>then"
123     "<u type='solid'>ABC2</u>then"
124     "<u type='dashed'>ABC3</u>then"
125     "<u type='double'>ABC4</u>then"
126     "<u color='green'>ABC5</u>then"
127     "<u height='5.0f'>ABC6</u>then"
128     "<u type='dashed' dash-gap='3.0f'>ABC7</u>then"
129     "<u type='dashed' dash-width='4.0f'>ABC8</u>then"
130     "<u color='blue' type='dashed' height='4.0f' dash-gap='2.0f' dash-width='3.0f'>ABC9</u>end";
131
132   textEditor.SetProperty(TextEditor::Property::TEXT, testText);
133   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
134
135   application.SendNotification();
136   application.Render();
137
138   const uint32_t expectedNumberOfUnderlineRuns = 9u;
139
140   Toolkit::Internal::TextEditor& textEditorImpl        = GetImpl(textEditor);
141   const Text::Length             numberOfUnderlineRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns();
142
143   DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION);
144
145   Vector<UnderlinedGlyphRun> underlineRuns;
146   underlineRuns.Resize(numberOfUnderlineRuns);
147   textEditorImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns);
148
149   struct DataOfCase
150   {
151     std::string              title;
152     GlyphIndex               glyphIndex;
153     Length                   numberOfGlyphs;
154     UnderlineStyleProperties properties;
155   };
156   DataOfCase data[] =
157     {
158       //<u>ABC1</u>
159       {"<u>ABC1</u>",
160        5u,
161        4u,
162        {
163          Text::Underline::SOLID,
164          Color::BLACK,
165          0u,
166          1u,
167          2u,
168          false,
169          false,
170          false,
171          false,
172          false,
173        }},
174
175       //<u type='solid'>ABC2</u>
176       {"<u type='solid'>ABC2</u>",
177        13u,
178        4u,
179        {
180          Text::Underline::SOLID,
181          Color::BLACK,
182          0u,
183          1u,
184          2u,
185          true,
186          false,
187          false,
188          false,
189          false,
190        }},
191
192       //<u type='dashed'>ABC3</u>
193       {"<u type='dashed'>ABC3</u>",
194        21u,
195        4u,
196        {
197          Text::Underline::DASHED,
198          Color::BLACK,
199          0u,
200          1u,
201          2u,
202          true,
203          false,
204          false,
205          false,
206          false,
207        }},
208
209       //<u type='double'>ABC4</u>
210       {"<u type='double'>ABC4</u>",
211        29u,
212        4u,
213        {
214          Text::Underline::DOUBLE,
215          Color::BLACK,
216          0u,
217          1u,
218          2u,
219          true,
220          false,
221          false,
222          false,
223          false,
224        }},
225
226       //<u color='green'>ABC5</u>
227       {"<u color='green'>ABC5</u>",
228        37u,
229        4u,
230        {
231          Text::Underline::SOLID,
232          Color::GREEN,
233          0u,
234          1u,
235          2u,
236          false,
237          true,
238          false,
239          false,
240          false,
241        }},
242
243       //<u height='5.0f'>ABC6</u>
244       {"<u height='5.0f'>ABC6</u>",
245        45u,
246        4u,
247        {
248          Text::Underline::SOLID,
249          Color::BLACK,
250          5u,
251          1u,
252          2u,
253          false,
254          false,
255          true,
256          false,
257          false,
258        }},
259
260       //<u type='dashed' dash-gap='3.0f'>ABC7</u>
261       {"<u type='dashed' dash-gap='3.0f'>ABC7</u>",
262        53u,
263        4u,
264        {
265          Text::Underline::DASHED,
266          Color::BLACK,
267          0u,
268          3u,
269          2u,
270          true,
271          false,
272          false,
273          true,
274          false,
275        }},
276
277       //<u type='dashed' dash-width='4.0f'>ABC8</u>
278       {"<u type='dashed' dash-width='4.0f'>ABC8</u>",
279        61u,
280        4u,
281        {
282          Text::Underline::DASHED,
283          Color::BLACK,
284          0u,
285          1u,
286          4u,
287          true,
288          false,
289          false,
290          false,
291          true,
292        }},
293
294       //<u color='blue' type='dashed' height='4.0f' dash-gap='2.0f' dash-width='3.0f'>
295       {"<u color='blue' type='dashed' height='4.0f' dash-gap='2.0f' dash-width='3.0f'>",
296        69u,
297        4u,
298        {
299          Text::Underline::DASHED,
300          Color::BLUE,
301          4u,
302          2u,
303          3u,
304          true,
305          true,
306          true,
307          true,
308          true,
309        }},
310
311     };
312
313   for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++)
314   {
315     tet_infoline(data[i].title.c_str());
316     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION);
317     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION);
318     DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties);
319   }
320
321   END_TEST;
322 }
323
324 int UtcDaliTextEditorMarkupSpanUnderline(void)
325 {
326   ToolkitTestApplication application;
327   tet_infoline(" UtcDaliTextEditorMarkupSpanUnderline ");
328
329   TextEditor textEditor = TextEditor::New();
330
331   application.GetScene().Add(textEditor);
332
333   std::string testText =
334     "start<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red'>ABC1</span>then"
335     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='solid'>ABC2</span>then"
336     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed'>ABC3</span>then"
337     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='double'>ABC4</span>then"
338     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-color='green'>ABC5</span>then"
339     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-height='5.0f'>ABC6</span>then"
340     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed' u-dash-gap='3.0f'>ABC7</span>then"
341     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed' u-dash-width='4.0f'>ABC8</span>then"
342     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-color='blue' u-type='dashed' u-height='4.0f' u-dash-gap='2.0f' u-dash-width='3.0f'>ABC9</span>end";
343
344   textEditor.SetProperty(TextEditor::Property::TEXT, testText);
345   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
346
347   application.SendNotification();
348   application.Render();
349
350   const uint32_t expectedNumberOfUnderlineRuns = 8u;
351
352   Toolkit::Internal::TextEditor& textEditorImpl        = GetImpl(textEditor);
353   const Text::Length             numberOfUnderlineRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns();
354
355   DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION);
356
357   Vector<UnderlinedGlyphRun> underlineRuns;
358   underlineRuns.Resize(numberOfUnderlineRuns);
359   textEditorImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns);
360
361   struct DataOfCase
362   {
363     std::string              title;
364     GlyphIndex               glyphIndex;
365     Length                   numberOfGlyphs;
366     UnderlineStyleProperties properties;
367   };
368   DataOfCase data[] =
369     {
370       //<u type='solid'>ABC2</u>
371       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='solid'>ABC2</span>",
372        13u,
373        4u,
374        {
375          Text::Underline::SOLID,
376          Color::BLACK,
377          0u,
378          1u,
379          2u,
380          true,
381          false,
382          false,
383          false,
384          false,
385        }},
386
387       //<u type='dashed'>ABC3</u>
388       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed'>ABC3</span>",
389        21u,
390        4u,
391        {
392          Text::Underline::DASHED,
393          Color::BLACK,
394          0u,
395          1u,
396          2u,
397          true,
398          false,
399          false,
400          false,
401          false,
402        }},
403
404       //<u type='double'>ABC4</u>
405       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='double'>ABC4</span>",
406        29u,
407        4u,
408        {
409          Text::Underline::DOUBLE,
410          Color::BLACK,
411          0u,
412          1u,
413          2u,
414          true,
415          false,
416          false,
417          false,
418          false,
419        }},
420
421       //<u color='green'>ABC5</u>
422       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-color='green'>ABC5</span>",
423        37u,
424        4u,
425        {
426          Text::Underline::SOLID,
427          Color::GREEN,
428          0u,
429          1u,
430          2u,
431          false,
432          true,
433          false,
434          false,
435          false,
436        }},
437
438       //<u height='5.0f'>ABC6</u>
439       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-height='5.0f'>ABC6</span>",
440        45u,
441        4u,
442        {
443          Text::Underline::SOLID,
444          Color::BLACK,
445          5u,
446          1u,
447          2u,
448          false,
449          false,
450          true,
451          false,
452          false,
453        }},
454
455       //<u type='dashed' dash-gap='3.0f'>ABC7</u>
456       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed' u-dash-gap='3.0f'>ABC7</span>",
457        53u,
458        4u,
459        {
460          Text::Underline::DASHED,
461          Color::BLACK,
462          0u,
463          3u,
464          2u,
465          true,
466          false,
467          false,
468          true,
469          false,
470        }},
471
472       //<u type='dashed' dash-width='4.0f'>ABC8</u>
473       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-type='dashed' u-dash-width='4.0f'>ABC8</span>",
474        61u,
475        4u,
476        {
477          Text::Underline::DASHED,
478          Color::BLACK,
479          0u,
480          1u,
481          4u,
482          true,
483          false,
484          false,
485          false,
486          true,
487        }},
488
489       //<u color='blue' type='dashed' height='4.0f' dash-gap='2.0f' dash-width='3.0f'>
490       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' u-color='blue' u-type='dashed' u-height='4.0f' u-dash-gap='2.0f' u-dash-width='3.0f'>ABC9</span>",
491        69u,
492        4u,
493        {
494          Text::Underline::DASHED,
495          Color::BLUE,
496          4u,
497          2u,
498          3u,
499          true,
500          true,
501          true,
502          true,
503          true,
504        }},
505
506     };
507
508   for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++)
509   {
510     tet_infoline(data[i].title.c_str());
511     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION);
512     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION);
513     DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties);
514   }
515
516   END_TEST;
517 }
518
519 int UtcDaliTextEditorMarkupNestedUnderlineTags(void)
520 {
521   ToolkitTestApplication application;
522   tet_infoline(" UtcDaliTextEditorMarkupNestedUnderlineTags ");
523
524   TextEditor textEditor = TextEditor::New();
525
526   application.GetScene().Add(textEditor);
527
528   std::string testText = "start<u height='5.0f' color='green' >AB<u color='blue' >XYZ</u>CDE</u>end";
529
530   textEditor.SetProperty(TextEditor::Property::TEXT, testText);
531   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
532
533   application.SendNotification();
534   application.Render();
535
536   const uint32_t expectedNumberOfUnderlineRuns = 2u;
537
538   Toolkit::Internal::TextEditor& textEditorImpl        = GetImpl(textEditor);
539   const Text::Length             numberOfUnderlineRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfUnderlineRuns();
540
541   DALI_TEST_EQUALS(numberOfUnderlineRuns, expectedNumberOfUnderlineRuns, TEST_LOCATION);
542
543   Vector<UnderlinedGlyphRun> underlineRuns;
544   underlineRuns.Resize(numberOfUnderlineRuns);
545   textEditorImpl.GetTextController()->GetTextModel()->GetUnderlineRuns(underlineRuns.Begin(), 0u, numberOfUnderlineRuns);
546
547   struct DataOfCase
548   {
549     std::string              title;
550     GlyphIndex               glyphIndex;
551     Length                   numberOfGlyphs;
552     UnderlineStyleProperties properties;
553   };
554   DataOfCase data[] =
555     {
556       //Outter
557       {"<u height='5.0f' color='green' >AB<u color='blue' >XYZ</u>CDE</u>",
558        5u,
559        8u,
560        {
561          Text::Underline::SOLID,
562          Color::GREEN,
563          5u,
564          1u,
565          2u,
566          false,
567          true,
568          true,
569          false,
570          false,
571        }},
572
573       //Inner
574       {"<u color='blue' >XYZ</u>",
575        7u,
576        3u,
577        {
578          Text::Underline::SOLID,
579          Color::BLUE,
580          5u,
581          1u,
582          2u,
583          false,
584          true,
585          true,
586          false,
587          false,
588        }},
589
590     };
591
592   for(uint32_t i = 0; i < expectedNumberOfUnderlineRuns; i++)
593   {
594     tet_infoline(data[i].title.c_str());
595     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION);
596     DALI_TEST_EQUALS(underlineRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION);
597     DALI_TEST_CHECK(data[i].properties == underlineRuns[i].properties);
598   }
599
600   END_TEST;
601 }
602
603 int UtcDaliTextEditorMarkupSpanStrikethrough(void)
604 {
605   ToolkitTestApplication application;
606   tet_infoline(" UtcDaliTextEditorMarkupSpanStrikethrough ");
607
608   TextEditor textEditor = TextEditor::New();
609
610   application.GetScene().Add(textEditor);
611
612   std::string testText =
613     "start<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red'>ABC1</span>then"
614     "<span s-color='blue'>ABC2</span>then"
615     "<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' s-color='green'>ABC3</span>end";
616
617   textEditor.SetProperty(TextEditor::Property::TEXT, testText);
618   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
619
620   application.SendNotification();
621   application.Render();
622
623   const uint32_t expectedNumberOfStrikethroughRuns = 2u;
624
625   Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
626   const Text::Length             numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
627
628   DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughRuns, TEST_LOCATION);
629
630   Vector<StrikethroughGlyphRun> strikethroughRuns;
631   strikethroughRuns.Resize(numberOfStrikethroughRuns);
632   textEditorImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns);
633
634   struct DataOfCase
635   {
636     std::string                  title;
637     GlyphIndex                   glyphIndex;
638     Length                       numberOfGlyphs;
639     StrikethroughStyleProperties properties;
640   };
641   DataOfCase data[] =
642     {
643
644       {"<span s-color='blue'>ABC2</span>then",
645        13u,
646        4u,
647        {Color::BLUE,
648         0u,
649         true,
650         false}},
651
652       {"<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red' s-color='green'>ABC3</span>",
653        21u,
654        4u,
655        {Color::GREEN,
656         0u,
657         true,
658         false}},
659
660     };
661
662   for(uint32_t i = 0; i < expectedNumberOfStrikethroughRuns; i++)
663   {
664     tet_infoline(data[i].title.c_str());
665     DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.glyphIndex, data[i].glyphIndex, TEST_LOCATION);
666     DALI_TEST_EQUALS(strikethroughRuns[i].glyphRun.numberOfGlyphs, data[i].numberOfGlyphs, TEST_LOCATION);
667     DALI_TEST_CHECK(data[i].properties == strikethroughRuns[i].properties);
668   }
669
670   END_TEST;
671 }
672
673 int UtcDaliTextEditorFontPointSizeLargerThanAtlas(void)
674 {
675   ToolkitTestApplication application;
676   tet_infoline(" UtcDaliTextEditorFontPointSizeLargerThanAtlas ");
677
678   // Create a text editor
679   TextEditor textEditor = TextEditor::New();
680   //Set size to avoid automatic eliding
681   textEditor.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025));
682   //Set very large font-size using point-size
683   textEditor.SetProperty(TextEditor::Property::POINT_SIZE, 1000);
684   //Specify font-family
685   textEditor.SetProperty(TextEditor::Property::FONT_FAMILY, "DejaVu Sans");
686   //Set text to check if appear or not
687   textEditor.SetProperty(TextEditor::Property::TEXT, "A");
688
689   application.GetScene().Add(textEditor);
690
691   application.SendNotification();
692   application.Render();
693
694   //Check if Glyph is added to AtlasGlyphManger or not
695   int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount;
696   DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION);
697
698   END_TEST;
699 }
700
701 int UtcDaliTextEditorFontPointSizeLargerThanAtlasPlaceholderCase(void)
702 {
703   ToolkitTestApplication application;
704   tet_infoline(" UtcDaliTextEditorFontPointSizeLargerThanAtlasPlaceholderCase ");
705
706   //Set Map of placeholder: text, font-family and point-size
707   Property::Map placeholderMapSet;
708   placeholderMapSet["text"]       = "A";
709   placeholderMapSet["fontFamily"] = "DejaVu Sans";
710   placeholderMapSet["pixelSize"]  = 1000.0f;
711
712   // Create a text editor
713   TextEditor textEditor = TextEditor::New();
714   //Set size to avoid automatic eliding
715   textEditor.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025));
716   //Set placeholder
717   textEditor.SetProperty(TextEditor::Property::PLACEHOLDER, placeholderMapSet);
718
719   application.GetScene().Add(textEditor);
720
721   application.SendNotification();
722   application.Render();
723
724   //Check if Glyph is added to AtlasGlyphManger or not
725   int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount;
726   DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION);
727
728   END_TEST;
729 }
730
731 int UtcDaliTextEditorBackgroundTag(void)
732 {
733   ToolkitTestApplication application;
734   tet_infoline("UtcDaliTextEditorBackgroundTag\n");
735
736   TextEditor editor = TextEditor::New();
737   DALI_TEST_CHECK(editor);
738
739   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
740   editor.SetProperty(TextEditor::Property::TEXT, "H<background color='red'>e</background> Worl<background color='yellow'>d</background>");
741   application.GetScene().Add(editor);
742   application.SendNotification();
743   application.Render();
744
745   Toolkit::Internal::TextEditor& editorImpl                   = GetImpl(editor);
746   const ColorIndex* const        backgroundColorIndicesBuffer = editorImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices();
747
748   DALI_TEST_CHECK(backgroundColorIndicesBuffer);
749
750   //default color
751   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION);
752
753   //red color
754   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION);
755
756   //yellow color
757   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION);
758
759   END_TEST;
760 }
761
762 int UtcDaliTextEditorSpanBackgroundTag(void)
763 {
764   ToolkitTestApplication application;
765   tet_infoline("UtcDaliTextEditorSpanBackgroundTag\n");
766
767   TextEditor editor = TextEditor::New();
768   DALI_TEST_CHECK(editor);
769
770   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
771   editor.SetProperty(TextEditor::Property::TEXT, "H<span background-color='red'>e</span> Worl<span background-color='yellow'>d</span>");
772   application.GetScene().Add(editor);
773   application.SendNotification();
774   application.Render();
775
776   Toolkit::Internal::TextEditor& editorImpl                   = GetImpl(editor);
777   const ColorIndex* const        backgroundColorIndicesBuffer = editorImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices();
778
779   DALI_TEST_CHECK(backgroundColorIndicesBuffer);
780
781   //default color
782   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION);
783
784   //red color
785   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION);
786
787   //yellow color
788   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION);
789
790   END_TEST;
791 }
792
793 int UtcDaliTextEditorTextWithSpan(void)
794 {
795   ToolkitTestApplication application;
796   tet_infoline("UtcDaliTextEditorTextWithSpan\n");
797
798   TextEditor editor = TextEditor::New();
799   DALI_TEST_CHECK(editor);
800
801   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
802   editor.SetProperty(TextEditor::Property::TEXT, "Hello Span");
803   application.GetScene().Add(editor);
804
805   application.SendNotification();
806   application.Render();
807
808   Vector3 originalSize = editor.GetNaturalSize();
809   editor.SetProperty(TextEditor::Property::TEXT, "H<span font-size='45' font-family='DejaVu Sans' font-width='condensed' font-slant='italic' text-color='red'>ello</span> Span");
810
811   application.SendNotification();
812   application.Render();
813
814   Vector3 spanSize = editor.GetNaturalSize();
815
816   DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION);
817
818   Toolkit::Internal::TextEditor& editorImpl          = GetImpl(editor);
819   const ColorIndex* const        colorIndicesBuffer1 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices();
820
821   DALI_TEST_CHECK(colorIndicesBuffer1);
822
823   //default color
824   DALI_TEST_EQUALS(colorIndicesBuffer1[0], 0u, TEST_LOCATION);
825
826   //span color
827   DALI_TEST_EQUALS(colorIndicesBuffer1[1], 1u, TEST_LOCATION);
828
829   //default color
830   DALI_TEST_EQUALS(colorIndicesBuffer1[6], 0u, TEST_LOCATION);
831
832   editor.SetProperty(TextEditor::Property::TEXT, "<span font-size='45'>H</span>ello <span text-color='red'>S</span>pan");
833
834   application.SendNotification();
835   application.Render();
836
837   const ColorIndex* const colorIndicesBuffer2 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices();
838
839   DALI_TEST_CHECK(colorIndicesBuffer2);
840
841   //default color
842   DALI_TEST_EQUALS(colorIndicesBuffer2[0], 0u, TEST_LOCATION);
843
844   //default color
845   DALI_TEST_EQUALS(colorIndicesBuffer2[1], 0u, TEST_LOCATION);
846
847   //span color
848   DALI_TEST_EQUALS(colorIndicesBuffer2[6], 1u, TEST_LOCATION);
849
850   //default color
851   DALI_TEST_EQUALS(colorIndicesBuffer2[7], 0u, TEST_LOCATION);
852
853   END_TEST;
854 }
855
856 int UtcDaliTextEditorControlBackgroundColor(void)
857 {
858   ToolkitTestApplication application;
859   tet_infoline(" UtcDaliTextEditorControlBackgroundColor\n");
860
861   TextEditor editor = TextEditor::New();
862   DALI_TEST_CHECK(editor);
863
864   Vector4 backgroundColor;
865
866   editor.SetProperty(TextEditor::Property::TEXT, "Background Color");
867   application.GetScene().Add(editor);
868   application.SendNotification();
869   application.Render();
870
871   Toolkit::Internal::TextEditor& editorImpl     = GetImpl(editor);
872   ControllerPtr                  controller     = editorImpl.GetTextController();
873   Controller::Impl&              controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
874
875   // Default color is transparent
876   controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
877   DALI_TEST_EQUALS(backgroundColor, Color::TRANSPARENT, TEST_LOCATION);
878
879   // Set background color to red
880   editor.SetBackgroundColor(Color::RED);
881   application.SendNotification();
882   application.Render();
883
884   // Should be red
885   controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
886   DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION);
887
888   END_TEST;
889 }
890
891 int UtcDaliTextEditorTextPositionWithMinLineAndBigFont(void)
892 {
893   ToolkitTestApplication application;
894   tet_infoline(" UtcDaliTextEditorTextPositionWithMinLine ");
895
896   TextEditor textEditor = TextEditor::New();
897
898   textEditor.SetProperty(TextEditor::Property::TEXT, "<span font-size='45'>H</span>\ni");
899   textEditor.SetProperty(DevelTextEditor::Property::MIN_LINE_SIZE, 50);
900   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
901
902   application.GetScene().Add(textEditor);
903
904   application.SendNotification();
905   application.Render();
906
907   Toolkit::Internal::TextEditor& textEditorImpl = GetImpl(textEditor);
908   Text::ViewInterface&           view           = textEditorImpl.GetTextController()->GetView();
909
910   Length numberOfGlyphs = view.GetNumberOfGlyphs();
911
912   DALI_TEST_EQUALS(numberOfGlyphs, 3u, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
913
914   Vector<GlyphInfo> glyphs;
915   glyphs.Resize(numberOfGlyphs);
916
917   Vector<Vector2> positions;
918   positions.Resize(numberOfGlyphs);
919
920   float alignmentOffset = 0u;
921   numberOfGlyphs        = view.GetGlyphs(glyphs.Begin(),
922                                   positions.Begin(),
923                                   alignmentOffset,
924                                   0u,
925                                   numberOfGlyphs);
926
927   DALI_TEST_EQUALS(positions[2].y, 165.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
928
929   END_TEST;
930 }
931
932 int UtcDaliTextEditorMarkupStrikethrough(void)
933 {
934   ToolkitTestApplication application;
935   tet_infoline(" UtcDaliTextEditorMarkupStrikethrough ");
936
937   TextEditor textEditor = TextEditor::New();
938
939   application.GetScene().Add(textEditor);
940
941   textEditor.SetProperty(TextEditor::Property::TEXT, "<s>ABC</s>EF<s color='red'>GH</s>");
942   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
943
944   application.SendNotification();
945   application.Render();
946
947   uint32_t expectedNumberOfStrikethroughGlyphs = 2u;
948
949   Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
950   const Text::Length             numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
951
952   DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
953
954   Vector<StrikethroughGlyphRun> strikethroughRuns;
955   strikethroughRuns.Resize(numberOfStrikethroughRuns);
956   textEditorImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns);
957
958   //ABC have strikethrough
959   DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION);
960   DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION);
961   DALI_TEST_CHECK(!strikethroughRuns[0u].properties.colorDefined);
962
963   //GH have strikethrough
964   DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.glyphIndex, 5u, TEST_LOCATION);
965   DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.numberOfGlyphs, 2u, TEST_LOCATION);
966   DALI_TEST_CHECK(strikethroughRuns[1u].properties.colorDefined);
967
968   END_TEST;
969 }
970
971 int UtcDaliTextEditorMarkupStrikethroughNoEndTag(void)
972 {
973   ToolkitTestApplication application;
974   tet_infoline(" UtcDaliTextEditorMarkupStrikethroughNoEndTag ");
975
976   TextEditor textEditor = TextEditor::New();
977
978   application.GetScene().Add(textEditor);
979
980   textEditor.SetProperty(TextEditor::Property::TEXT, "<s>ABC");
981   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
982
983   application.SendNotification();
984   application.Render();
985
986   uint32_t expectedNumberOfStrikethroughGlyphs = 0u;
987
988   Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
989   Text::Length                   numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
990
991   DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
992
993   END_TEST;
994 }
995
996 int UtcDaliTextEditorMarkupParagraphTag(void)
997
998 {
999   ToolkitTestApplication application;
1000   tet_infoline(" UtcDaliTextEditorMarkupParagraphTag ");
1001
1002   TextEditor textEditor = TextEditor::New();
1003   application.GetScene().Add(textEditor);
1004
1005   textEditor.SetProperty(TextEditor::Property::TEXT, "text one <p>Paragraph two</p> text three <p>Paragraph four</p> text five");
1006   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1007
1008   application.SendNotification();
1009   application.Render();
1010
1011   uint32_t expectedNumberOfBoundedParagraphRuns = 2u;
1012
1013   Toolkit::Internal::TextEditor& textEditorImpl               = GetImpl(textEditor);
1014   const Text::Length             numberOfBoundedParagraphRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns();
1015   DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION);
1016
1017   const Vector<BoundedParagraphRun>& boundedParagraphRuns = textEditorImpl.GetTextController()->GetTextModel()->GetBoundedParagraphRuns();
1018
1019   //<p>Paragraph two</p>
1020   DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.characterIndex, 10u, TEST_LOCATION);
1021   DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.numberOfCharacters, 14u, TEST_LOCATION);
1022
1023   //<p>Paragraph four</p>
1024   DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.characterIndex, 37u, TEST_LOCATION);
1025   DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.numberOfCharacters, 15u, TEST_LOCATION);
1026
1027   END_TEST;
1028 }
1029
1030 int UtcDaliTextEditorMarkupParagraphTagAlignAttribute(void)
1031 {
1032   ToolkitTestApplication application;
1033   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute ");
1034
1035   // Apply alignment for each type on property level on three paragraphs and in-between text.
1036   // Apply align in markup on the three paragraphs (each one a type).
1037   // Using the same text to gain similar results from both the property level and the markup.
1038   // Compare line alignment between the property level and the markup.
1039
1040   std::string textAlignOnPropertyLevel = "text outside<p>Paragraph end</p>text outside<p>Paragraph center</p>text outside<p>Paragraph begin</p><p>Paragraph property alignment</p>";
1041   std::string textAlignInMarkup        = "text outside<p align='end'>Paragraph end</p>text outside<p align='center'>Paragraph center</p>text outside<p align='begin' >Paragraph begin</p><p>Paragraph property alignment</p>";
1042
1043   //Set size to avoid automatic eliding
1044   Vector2 controllerSize = Vector2(1025, 1025);
1045
1046   TextEditor textEditorBeginAlign  = TextEditor::New();
1047   TextEditor textEditorCenterAlign = TextEditor::New();
1048   TextEditor textEditorEndAlign    = TextEditor::New();
1049   TextEditor textEditorMultiAlign  = TextEditor::New();
1050
1051   application.GetScene().Add(textEditorBeginAlign);
1052   application.GetScene().Add(textEditorCenterAlign);
1053   application.GetScene().Add(textEditorEndAlign);
1054   application.GetScene().Add(textEditorMultiAlign);
1055
1056   textEditorBeginAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
1057   textEditorBeginAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1058   textEditorBeginAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1059   textEditorBeginAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::BEGIN);
1060   textEditorBeginAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1061
1062   textEditorCenterAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
1063   textEditorCenterAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1064   textEditorCenterAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1065   textEditorCenterAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER);
1066   textEditorCenterAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1067
1068   textEditorEndAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
1069   textEditorEndAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1070   textEditorEndAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1071   textEditorEndAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::END);
1072   textEditorEndAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1073
1074   textEditorMultiAlign.SetProperty(TextEditor::Property::TEXT, textAlignInMarkup);
1075   textEditorMultiAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1076   textEditorMultiAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1077   textEditorMultiAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER);
1078   textEditorMultiAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1079
1080   application.SendNotification();
1081   application.Render();
1082
1083   uint32_t expectedNumberOfBoundedParagraphRuns = 4u;
1084   uint32_t expectedNumberOfLines                = 7u;
1085
1086   Toolkit::Internal::TextEditor& textEditorMultiAlignImpl  = GetImpl(textEditorMultiAlign);
1087   Toolkit::Internal::TextEditor& textEditorBeginAlignImpl  = GetImpl(textEditorBeginAlign);
1088   Toolkit::Internal::TextEditor& textEditorCenterAlignImpl = GetImpl(textEditorCenterAlign);
1089   Toolkit::Internal::TextEditor& textEditorEndAlignImpl    = GetImpl(textEditorEndAlign);
1090
1091   const Text::Length numberOfBoundedParagraphRuns = textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns();
1092   DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION);
1093
1094   DALI_TEST_EQUALS(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1095   DALI_TEST_CHECK(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines());
1096
1097   DALI_TEST_EQUALS(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1098   DALI_TEST_CHECK(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetLines());
1099
1100   DALI_TEST_EQUALS(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1101   DALI_TEST_CHECK(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines());
1102
1103   DALI_TEST_EQUALS(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1104   DALI_TEST_CHECK(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetLines());
1105
1106   const uint32_t LINE_INDEX_ALIGN_END    = 1u;
1107   const uint32_t LINE_INDEX_ALIGN_CENTER = 3u;
1108   const uint32_t LINE_INDEX_ALIGN_BEGIN  = 5u;
1109   const uint32_t LINE_INDEX_OUTSIDE_1    = 0u;
1110   const uint32_t LINE_INDEX_OUTSIDE_2    = 2u;
1111   const uint32_t LINE_INDEX_OUTSIDE_3    = 4u;
1112   const uint32_t LINE_INDEX_PARAGRAPH    = 6u;
1113
1114   //<p align='end'>Paragraph end</p>
1115   const LineRun& lineEndFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END);
1116   const LineRun& lineEndFromEndAlign   = *(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END);
1117   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='end'>Paragraph end</p>");
1118   DALI_TEST_EQUALS(lineEndFromMultiAlign.alignmentOffset, lineEndFromEndAlign.alignmentOffset, TEST_LOCATION);
1119   DALI_TEST_EQUALS(lineEndFromMultiAlign.width, lineEndFromEndAlign.width, TEST_LOCATION);
1120
1121   //<p align='center'>Paragraph center</p>
1122   const LineRun& lineCenterFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER);
1123   const LineRun& lineEndFromCenterAlign   = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER);
1124   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='center'>Paragraph center</p>");
1125   DALI_TEST_EQUALS(lineCenterFromMultiAlign.alignmentOffset, lineEndFromCenterAlign.alignmentOffset, TEST_LOCATION);
1126   DALI_TEST_EQUALS(lineCenterFromMultiAlign.width, lineEndFromCenterAlign.width, TEST_LOCATION);
1127
1128   //<p align='begin' >Paragraph begin</p>
1129   const LineRun& lineBeginFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN);
1130   const LineRun& lineEndFromBeginAlign   = *(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN);
1131   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='begin' >Paragraph begin</p>");
1132   DALI_TEST_EQUALS(lineBeginFromMultiAlign.alignmentOffset, lineEndFromBeginAlign.alignmentOffset, TEST_LOCATION);
1133   DALI_TEST_EQUALS(lineBeginFromMultiAlign.width, lineEndFromBeginAlign.width, TEST_LOCATION);
1134
1135   //text outside
1136   const LineRun& lineOutsideOneFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1);
1137   const LineRun& lineOutsideOneFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1);
1138   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside one");
1139   DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.alignmentOffset, lineOutsideOneFromCenterAlign.alignmentOffset, TEST_LOCATION);
1140   DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.width, lineOutsideOneFromCenterAlign.width, TEST_LOCATION);
1141
1142   const LineRun& lineOutsideTwoFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2);
1143   const LineRun& lineOutsideTwoFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2);
1144   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside two");
1145   DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.alignmentOffset, lineOutsideTwoFromCenterAlign.alignmentOffset, TEST_LOCATION);
1146   DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.width, lineOutsideTwoFromCenterAlign.width, TEST_LOCATION);
1147
1148   const LineRun& lineOutsideThreeFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3);
1149   const LineRun& lineOutsideThreeFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3);
1150   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside three");
1151   DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.alignmentOffset, lineOutsideThreeFromCenterAlign.alignmentOffset, TEST_LOCATION);
1152   DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.width, lineOutsideThreeFromCenterAlign.width, TEST_LOCATION);
1153
1154   const LineRun& lineParagraphFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH);
1155   const LineRun& lineParagraphFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH);
1156   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p>Paragraph property alignment</p>");
1157   DALI_TEST_EQUALS(lineParagraphFromMultiAlign.alignmentOffset, lineParagraphFromCenterAlign.alignmentOffset, TEST_LOCATION);
1158   DALI_TEST_EQUALS(lineParagraphFromMultiAlign.width, lineParagraphFromCenterAlign.width, TEST_LOCATION);
1159
1160   END_TEST;
1161 }