Support span tag: background
[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 UtcDaliTextEditorFontPointSizeLargerThanAtlas(void)
604 {
605   ToolkitTestApplication application;
606   tet_infoline(" UtcDaliTextEditorFontPointSizeLargerThanAtlas ");
607
608   // Create a text editor
609   TextEditor textEditor = TextEditor::New();
610   //Set size to avoid automatic eliding
611   textEditor.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025));
612   //Set very large font-size using point-size
613   textEditor.SetProperty(TextEditor::Property::POINT_SIZE, 1000);
614   //Specify font-family
615   textEditor.SetProperty(TextEditor::Property::FONT_FAMILY, "DejaVu Sans");
616   //Set text to check if appear or not
617   textEditor.SetProperty(TextEditor::Property::TEXT, "A");
618
619   application.GetScene().Add(textEditor);
620
621   application.SendNotification();
622   application.Render();
623
624   //Check if Glyph is added to AtlasGlyphManger or not
625   int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount;
626   DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION);
627
628   END_TEST;
629 }
630
631 int UtcDaliTextEditorFontPointSizeLargerThanAtlasPlaceholderCase(void)
632 {
633   ToolkitTestApplication application;
634   tet_infoline(" UtcDaliTextEditorFontPointSizeLargerThanAtlasPlaceholderCase ");
635
636   //Set Map of placeholder: text, font-family and point-size
637   Property::Map placeholderMapSet;
638   placeholderMapSet["text"]       = "A";
639   placeholderMapSet["fontFamily"] = "DejaVu Sans";
640   placeholderMapSet["pixelSize"]  = 1000.0f;
641
642   // Create a text editor
643   TextEditor textEditor = TextEditor::New();
644   //Set size to avoid automatic eliding
645   textEditor.SetProperty(Actor::Property::SIZE, Vector2(1025, 1025));
646   //Set placeholder
647   textEditor.SetProperty(TextEditor::Property::PLACEHOLDER, placeholderMapSet);
648
649   application.GetScene().Add(textEditor);
650
651   application.SendNotification();
652   application.Render();
653
654   //Check if Glyph is added to AtlasGlyphManger or not
655   int countAtlas = AtlasGlyphManager::Get().GetMetrics().mAtlasMetrics.mAtlasCount;
656   DALI_TEST_EQUALS(countAtlas, 1, TEST_LOCATION);
657
658   END_TEST;
659 }
660
661 int UtcDaliTextEditorBackgroundTag(void)
662 {
663   ToolkitTestApplication application;
664   tet_infoline("UtcDaliTextEditorBackgroundTag\n");
665
666   TextEditor editor = TextEditor::New();
667   DALI_TEST_CHECK(editor);
668
669   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
670   editor.SetProperty(TextEditor::Property::TEXT, "H<background color='red'>e</background> Worl<background color='yellow'>d</background>");
671   application.GetScene().Add(editor);
672   application.SendNotification();
673   application.Render();
674
675   Toolkit::Internal::TextEditor& editorImpl                   = GetImpl(editor);
676   const ColorIndex* const        backgroundColorIndicesBuffer = editorImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices();
677
678   DALI_TEST_CHECK(backgroundColorIndicesBuffer);
679
680   //default color
681   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION);
682
683   //red color
684   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION);
685
686   //yellow color
687   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION);
688
689   END_TEST;
690 }
691
692 int UtcDaliTextEditorSpanBackgroundTag(void)
693 {
694   ToolkitTestApplication application;
695   tet_infoline("UtcDaliTextEditorSpanBackgroundTag\n");
696
697   TextEditor editor = TextEditor::New();
698   DALI_TEST_CHECK(editor);
699
700   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
701   editor.SetProperty(TextEditor::Property::TEXT, "H<span background-color='red'>e</span> Worl<span background-color='yellow'>d</span>");
702   application.GetScene().Add(editor);
703   application.SendNotification();
704   application.Render();
705
706   Toolkit::Internal::TextEditor& editorImpl                   = GetImpl(editor);
707   const ColorIndex* const        backgroundColorIndicesBuffer = editorImpl.GetTextController()->GetTextModel()->GetBackgroundColorIndices();
708
709   DALI_TEST_CHECK(backgroundColorIndicesBuffer);
710
711   //default color
712   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[0], 0u, TEST_LOCATION);
713
714   //red color
715   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[1], 1u, TEST_LOCATION);
716
717   //yellow color
718   DALI_TEST_EQUALS(backgroundColorIndicesBuffer[7], 2u, TEST_LOCATION);
719
720   END_TEST;
721 }
722
723 int UtcDaliTextEditorTextWithSpan(void)
724 {
725   ToolkitTestApplication application;
726   tet_infoline("UtcDaliTextEditorTextWithSpan\n");
727
728   TextEditor editor = TextEditor::New();
729   DALI_TEST_CHECK(editor);
730
731   editor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
732   editor.SetProperty(TextEditor::Property::TEXT, "Hello Span");
733   application.GetScene().Add(editor);
734
735   application.SendNotification();
736   application.Render();
737
738   Vector3 originalSize = editor.GetNaturalSize();
739   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");
740
741   application.SendNotification();
742   application.Render();
743
744   Vector3 spanSize = editor.GetNaturalSize();
745
746   DALI_TEST_GREATER(spanSize.width, originalSize.width, TEST_LOCATION);
747
748   Toolkit::Internal::TextEditor& editorImpl          = GetImpl(editor);
749   const ColorIndex* const        colorIndicesBuffer1 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices();
750
751   DALI_TEST_CHECK(colorIndicesBuffer1);
752
753   //default color
754   DALI_TEST_EQUALS(colorIndicesBuffer1[0], 0u, TEST_LOCATION);
755
756   //span color
757   DALI_TEST_EQUALS(colorIndicesBuffer1[1], 1u, TEST_LOCATION);
758
759   //default color
760   DALI_TEST_EQUALS(colorIndicesBuffer1[6], 0u, TEST_LOCATION);
761
762   editor.SetProperty(TextEditor::Property::TEXT, "<span font-size='45'>H</span>ello <span text-color='red'>S</span>pan");
763
764   application.SendNotification();
765   application.Render();
766
767   const ColorIndex* const colorIndicesBuffer2 = editorImpl.GetTextController()->GetTextModel()->GetColorIndices();
768
769   DALI_TEST_CHECK(colorIndicesBuffer2);
770
771   //default color
772   DALI_TEST_EQUALS(colorIndicesBuffer2[0], 0u, TEST_LOCATION);
773
774   //default color
775   DALI_TEST_EQUALS(colorIndicesBuffer2[1], 0u, TEST_LOCATION);
776
777   //span color
778   DALI_TEST_EQUALS(colorIndicesBuffer2[6], 1u, TEST_LOCATION);
779
780   //default color
781   DALI_TEST_EQUALS(colorIndicesBuffer2[7], 0u, TEST_LOCATION);
782
783   END_TEST;
784 }
785
786 int UtcDaliTextEditorControlBackgroundColor(void)
787 {
788   ToolkitTestApplication application;
789   tet_infoline(" UtcDaliTextEditorControlBackgroundColor\n");
790
791   TextEditor editor = TextEditor::New();
792   DALI_TEST_CHECK(editor);
793
794   Vector4 backgroundColor;
795
796   editor.SetProperty(TextEditor::Property::TEXT, "Background Color");
797   application.GetScene().Add(editor);
798   application.SendNotification();
799   application.Render();
800
801   Toolkit::Internal::TextEditor& editorImpl     = GetImpl(editor);
802   ControllerPtr                  controller     = editorImpl.GetTextController();
803   Controller::Impl&              controllerImpl = Controller::Impl::GetImplementation(*controller.Get());
804
805   // Default color is transparent
806   controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
807   DALI_TEST_EQUALS(backgroundColor, Color::TRANSPARENT, TEST_LOCATION);
808
809   // Set background color to red
810   editor.SetBackgroundColor(Color::RED);
811   application.SendNotification();
812   application.Render();
813
814   // Should be red
815   controllerImpl.mEditableControlInterface->GetControlBackgroundColor(backgroundColor);
816   DALI_TEST_EQUALS(backgroundColor, Color::RED, TEST_LOCATION);
817
818   END_TEST;
819 }
820
821 int UtcDaliTextEditorTextPositionWithMinLineAndBigFont(void)
822 {
823   ToolkitTestApplication application;
824   tet_infoline(" UtcDaliTextEditorTextPositionWithMinLine ");
825
826   TextEditor textEditor = TextEditor::New();
827
828   textEditor.SetProperty(TextEditor::Property::TEXT, "<span font-size='45'>H</span>\ni");
829   textEditor.SetProperty(DevelTextEditor::Property::MIN_LINE_SIZE, 50);
830   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
831
832   application.GetScene().Add(textEditor);
833
834   application.SendNotification();
835   application.Render();
836
837   Toolkit::Internal::TextEditor& textEditorImpl = GetImpl(textEditor);
838   Text::ViewInterface&           view           = textEditorImpl.GetTextController()->GetView();
839
840   Length numberOfGlyphs = view.GetNumberOfGlyphs();
841
842   DALI_TEST_EQUALS(numberOfGlyphs, 3u, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
843
844   Vector<GlyphInfo> glyphs;
845   glyphs.Resize(numberOfGlyphs);
846
847   Vector<Vector2> positions;
848   positions.Resize(numberOfGlyphs);
849
850   float alignmentOffset = 0u;
851   numberOfGlyphs        = view.GetGlyphs(glyphs.Begin(),
852                                   positions.Begin(),
853                                   alignmentOffset,
854                                   0u,
855                                   numberOfGlyphs);
856
857   DALI_TEST_EQUALS(positions[2].y, 165.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
858
859   END_TEST;
860 }
861
862 int UtcDaliTextEditorMarkupStrikethrough(void)
863 {
864   ToolkitTestApplication application;
865   tet_infoline(" UtcDaliTextEditorMarkupStrikethrough ");
866
867   TextEditor textEditor = TextEditor::New();
868
869   application.GetScene().Add(textEditor);
870
871   textEditor.SetProperty(TextEditor::Property::TEXT, "<s>ABC</s>EF<s color='red'>GH</s>");
872   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
873
874   application.SendNotification();
875   application.Render();
876
877   uint32_t expectedNumberOfStrikethroughGlyphs = 2u;
878
879   Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
880   const Text::Length             numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
881
882   DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
883
884   Vector<StrikethroughGlyphRun> strikethroughRuns;
885   strikethroughRuns.Resize(numberOfStrikethroughRuns);
886   textEditorImpl.GetTextController()->GetTextModel()->GetStrikethroughRuns(strikethroughRuns.Begin(), 0u, numberOfStrikethroughRuns);
887
888   //ABC have strikethrough
889   DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.glyphIndex, 0u, TEST_LOCATION);
890   DALI_TEST_EQUALS(strikethroughRuns[0u].glyphRun.numberOfGlyphs, 3u, TEST_LOCATION);
891   DALI_TEST_CHECK(!strikethroughRuns[0u].isColorSet);
892
893   //GH have strikethrough
894   DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.glyphIndex, 5u, TEST_LOCATION);
895   DALI_TEST_EQUALS(strikethroughRuns[1u].glyphRun.numberOfGlyphs, 2u, TEST_LOCATION);
896   DALI_TEST_CHECK(strikethroughRuns[1u].isColorSet);
897
898   END_TEST;
899 }
900
901 int UtcDaliTextEditorMarkupStrikethroughNoEndTag(void)
902 {
903   ToolkitTestApplication application;
904   tet_infoline(" UtcDaliTextEditorMarkupStrikethroughNoEndTag ");
905
906   TextEditor textEditor = TextEditor::New();
907
908   application.GetScene().Add(textEditor);
909
910   textEditor.SetProperty(TextEditor::Property::TEXT, "<s>ABC");
911   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
912
913   application.SendNotification();
914   application.Render();
915
916   uint32_t expectedNumberOfStrikethroughGlyphs = 0u;
917
918   Toolkit::Internal::TextEditor& textEditorImpl            = GetImpl(textEditor);
919   Text::Length                   numberOfStrikethroughRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfStrikethroughRuns();
920
921   DALI_TEST_EQUALS(numberOfStrikethroughRuns, expectedNumberOfStrikethroughGlyphs, TEST_LOCATION);
922
923   END_TEST;
924 }
925
926 int UtcDaliTextEditorMarkupParagraphTag(void)
927
928 {
929   ToolkitTestApplication application;
930   tet_infoline(" UtcDaliTextEditorMarkupParagraphTag ");
931
932   TextEditor textEditor = TextEditor::New();
933   application.GetScene().Add(textEditor);
934
935   textEditor.SetProperty(TextEditor::Property::TEXT, "text one <p>Paragraph two</p> text three <p>Paragraph four</p> text five");
936   textEditor.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
937
938   application.SendNotification();
939   application.Render();
940
941   uint32_t expectedNumberOfBoundedParagraphRuns = 2u;
942
943   Toolkit::Internal::TextEditor& textEditorImpl               = GetImpl(textEditor);
944   const Text::Length             numberOfBoundedParagraphRuns = textEditorImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns();
945   DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION);
946
947   const Vector<BoundedParagraphRun>& boundedParagraphRuns = textEditorImpl.GetTextController()->GetTextModel()->GetBoundedParagraphRuns();
948
949   //<p>Paragraph two</p>
950   DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.characterIndex, 10u, TEST_LOCATION);
951   DALI_TEST_EQUALS(boundedParagraphRuns[0u].characterRun.numberOfCharacters, 14u, TEST_LOCATION);
952
953   //<p>Paragraph four</p>
954   DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.characterIndex, 37u, TEST_LOCATION);
955   DALI_TEST_EQUALS(boundedParagraphRuns[1u].characterRun.numberOfCharacters, 15u, TEST_LOCATION);
956
957   END_TEST;
958 }
959
960 int UtcDaliTextEditorMarkupParagraphTagAlignAttribute(void)
961 {
962   ToolkitTestApplication application;
963   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute ");
964
965   // Apply alignment for each type on property level on three paragraphs and in-between text.
966   // Apply align in markup on the three paragraphs (each one a type).
967   // Using the same text to gain similar results from both the property level and the markup.
968   // Compare line alignment between the property level and the markup.
969
970   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>";
971   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>";
972
973   //Set size to avoid automatic eliding
974   Vector2 controllerSize = Vector2(1025, 1025);
975
976   TextEditor textEditorBeginAlign  = TextEditor::New();
977   TextEditor textEditorCenterAlign = TextEditor::New();
978   TextEditor textEditorEndAlign    = TextEditor::New();
979   TextEditor textEditorMultiAlign  = TextEditor::New();
980
981   application.GetScene().Add(textEditorBeginAlign);
982   application.GetScene().Add(textEditorCenterAlign);
983   application.GetScene().Add(textEditorEndAlign);
984   application.GetScene().Add(textEditorMultiAlign);
985
986   textEditorBeginAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
987   textEditorBeginAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
988   textEditorBeginAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
989   textEditorBeginAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::BEGIN);
990   textEditorBeginAlign.SetProperty(Actor::Property::SIZE, controllerSize);
991
992   textEditorCenterAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
993   textEditorCenterAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
994   textEditorCenterAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
995   textEditorCenterAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER);
996   textEditorCenterAlign.SetProperty(Actor::Property::SIZE, controllerSize);
997
998   textEditorEndAlign.SetProperty(TextEditor::Property::TEXT, textAlignOnPropertyLevel);
999   textEditorEndAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1000   textEditorEndAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1001   textEditorEndAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::END);
1002   textEditorEndAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1003
1004   textEditorMultiAlign.SetProperty(TextEditor::Property::TEXT, textAlignInMarkup);
1005   textEditorMultiAlign.SetProperty(TextEditor ::Property::ENABLE_MARKUP, true);
1006   textEditorMultiAlign.SetProperty(DevelTextEditor::Property::ELLIPSIS, false);
1007   textEditorMultiAlign.SetProperty(TextEditor::Property::HORIZONTAL_ALIGNMENT, Dali::Toolkit::Text::HorizontalAlignment::CENTER);
1008   textEditorMultiAlign.SetProperty(Actor::Property::SIZE, controllerSize);
1009
1010   application.SendNotification();
1011   application.Render();
1012
1013   uint32_t expectedNumberOfBoundedParagraphRuns = 4u;
1014   uint32_t expectedNumberOfLines                = 7u;
1015
1016   Toolkit::Internal::TextEditor& textEditorMultiAlignImpl  = GetImpl(textEditorMultiAlign);
1017   Toolkit::Internal::TextEditor& textEditorBeginAlignImpl  = GetImpl(textEditorBeginAlign);
1018   Toolkit::Internal::TextEditor& textEditorCenterAlignImpl = GetImpl(textEditorCenterAlign);
1019   Toolkit::Internal::TextEditor& textEditorEndAlignImpl    = GetImpl(textEditorEndAlign);
1020
1021   const Text::Length numberOfBoundedParagraphRuns = textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfBoundedParagraphRuns();
1022   DALI_TEST_EQUALS(numberOfBoundedParagraphRuns, expectedNumberOfBoundedParagraphRuns, TEST_LOCATION);
1023
1024   DALI_TEST_EQUALS(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1025   DALI_TEST_CHECK(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines());
1026
1027   DALI_TEST_EQUALS(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1028   DALI_TEST_CHECK(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetLines());
1029
1030   DALI_TEST_EQUALS(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1031   DALI_TEST_CHECK(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines());
1032
1033   DALI_TEST_EQUALS(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetNumberOfLines(), expectedNumberOfLines, TEST_LOCATION);
1034   DALI_TEST_CHECK(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetLines());
1035
1036   const uint32_t LINE_INDEX_ALIGN_END    = 1u;
1037   const uint32_t LINE_INDEX_ALIGN_CENTER = 3u;
1038   const uint32_t LINE_INDEX_ALIGN_BEGIN  = 5u;
1039   const uint32_t LINE_INDEX_OUTSIDE_1    = 0u;
1040   const uint32_t LINE_INDEX_OUTSIDE_2    = 2u;
1041   const uint32_t LINE_INDEX_OUTSIDE_3    = 4u;
1042   const uint32_t LINE_INDEX_PARAGRAPH    = 6u;
1043
1044   //<p align='end'>Paragraph end</p>
1045   const LineRun& lineEndFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END);
1046   const LineRun& lineEndFromEndAlign   = *(textEditorEndAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_END);
1047   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='end'>Paragraph end</p>");
1048   DALI_TEST_EQUALS(lineEndFromMultiAlign.alignmentOffset, lineEndFromEndAlign.alignmentOffset, TEST_LOCATION);
1049   DALI_TEST_EQUALS(lineEndFromMultiAlign.width, lineEndFromEndAlign.width, TEST_LOCATION);
1050
1051   //<p align='center'>Paragraph center</p>
1052   const LineRun& lineCenterFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER);
1053   const LineRun& lineEndFromCenterAlign   = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_CENTER);
1054   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='center'>Paragraph center</p>");
1055   DALI_TEST_EQUALS(lineCenterFromMultiAlign.alignmentOffset, lineEndFromCenterAlign.alignmentOffset, TEST_LOCATION);
1056   DALI_TEST_EQUALS(lineCenterFromMultiAlign.width, lineEndFromCenterAlign.width, TEST_LOCATION);
1057
1058   //<p align='begin' >Paragraph begin</p>
1059   const LineRun& lineBeginFromMultiAlign = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN);
1060   const LineRun& lineEndFromBeginAlign   = *(textEditorBeginAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_ALIGN_BEGIN);
1061   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p align='begin' >Paragraph begin</p>");
1062   DALI_TEST_EQUALS(lineBeginFromMultiAlign.alignmentOffset, lineEndFromBeginAlign.alignmentOffset, TEST_LOCATION);
1063   DALI_TEST_EQUALS(lineBeginFromMultiAlign.width, lineEndFromBeginAlign.width, TEST_LOCATION);
1064
1065   //text outside
1066   const LineRun& lineOutsideOneFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1);
1067   const LineRun& lineOutsideOneFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_1);
1068   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside one");
1069   DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.alignmentOffset, lineOutsideOneFromCenterAlign.alignmentOffset, TEST_LOCATION);
1070   DALI_TEST_EQUALS(lineOutsideOneFromMultiAlign.width, lineOutsideOneFromCenterAlign.width, TEST_LOCATION);
1071
1072   const LineRun& lineOutsideTwoFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2);
1073   const LineRun& lineOutsideTwoFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_2);
1074   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside two");
1075   DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.alignmentOffset, lineOutsideTwoFromCenterAlign.alignmentOffset, TEST_LOCATION);
1076   DALI_TEST_EQUALS(lineOutsideTwoFromMultiAlign.width, lineOutsideTwoFromCenterAlign.width, TEST_LOCATION);
1077
1078   const LineRun& lineOutsideThreeFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3);
1079   const LineRun& lineOutsideThreeFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_OUTSIDE_3);
1080   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - text outside three");
1081   DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.alignmentOffset, lineOutsideThreeFromCenterAlign.alignmentOffset, TEST_LOCATION);
1082   DALI_TEST_EQUALS(lineOutsideThreeFromMultiAlign.width, lineOutsideThreeFromCenterAlign.width, TEST_LOCATION);
1083
1084   const LineRun& lineParagraphFromMultiAlign  = *(textEditorMultiAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH);
1085   const LineRun& lineParagraphFromCenterAlign = *(textEditorCenterAlignImpl.GetTextController()->GetTextModel()->GetLines() + LINE_INDEX_PARAGRAPH);
1086   tet_infoline(" UtcDaliTextEditorMarkupParagraphTagAlignAttribute - <p>Paragraph property alignment</p>");
1087   DALI_TEST_EQUALS(lineParagraphFromMultiAlign.alignmentOffset, lineParagraphFromCenterAlign.alignmentOffset, TEST_LOCATION);
1088   DALI_TEST_EQUALS(lineParagraphFromMultiAlign.width, lineParagraphFromCenterAlign.width, TEST_LOCATION);
1089
1090   END_TEST;
1091 }