All tests now output results to xml files
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Text-Circular.cpp
1 /*
2  * Copyright (c) 2020 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 <iostream>
19 #include <fstream>
20 #include <stdlib.h>
21 #include <unistd.h>
22
23 #include <dali-toolkit-test-suite-utils.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <toolkit-text-utils.h>
26
27 // EXTERNAL INCLUDES
28 #include <dali-toolkit/devel-api/text/bitmap-font.h>
29 #include <dali/devel-api/text-abstraction/bitmap-font.h>
30 #include <dali-toolkit/devel-api/text/text-utils-devel.h>
31 #include <devel-api/adaptor-framework/image-loading.h>
32
33
34
35 using namespace std;
36 using namespace Dali;
37 using namespace Toolkit;
38 using namespace Text;
39
40 namespace
41 {
42 const std::string TEST_IMAGE_FILE_NAME1 =  TEST_RESOURCE_DIR  "/application-icon-20.png";
43 const std::string TEST_IMAGE_FILE_NAME2 =  TEST_RESOURCE_DIR  "/application-icon-26.png";
44
45 const std::vector<std::string> embeddedItems = { TEST_IMAGE_FILE_NAME2, TEST_IMAGE_FILE_NAME2, TEST_IMAGE_FILE_NAME2, TEST_IMAGE_FILE_NAME2, TEST_IMAGE_FILE_NAME2 };
46
47 struct CircularTextData
48 {
49   std::string                      description;
50   std::string                      text;
51   DevelText::RendererParameters&   textParameters;
52   const std::vector<std::string>&  embeddedItems;
53   bool                             blend:1;
54 };
55
56
57 bool CircularRenderTest( const CircularTextData& data )
58 {
59   bool ret = true;
60
61   Dali::Vector<Dali::Toolkit::DevelText::EmbeddedItemInfo> embeddedItemLayout;
62
63   Devel::PixelBuffer pixelBuffer = Toolkit::DevelText::Render( data.textParameters, embeddedItemLayout );
64
65    const int dstWidth = static_cast<int>( pixelBuffer.GetWidth() );
66    const int dstHeight = static_cast<int>( pixelBuffer.GetHeight() );
67
68    unsigned int index = 0u;
69    for( const auto& itemLayout : embeddedItemLayout )
70    {
71      int width = static_cast<int>( itemLayout.size.width );
72      int height = static_cast<int>( itemLayout.size.height );
73      int x = static_cast<int>( itemLayout.position.x );
74      int y = static_cast<int>( itemLayout.position.y );
75
76      Dali::Devel::PixelBuffer itemPixelBuffer = Dali::LoadImageFromFile( data.embeddedItems[index++] );
77      itemPixelBuffer.Resize( width, height );
78      itemPixelBuffer.Rotate( itemLayout.angle );
79
80      width = static_cast<int>( itemPixelBuffer.GetWidth() );
81      height = static_cast<int>( itemPixelBuffer.GetHeight() );
82
83      Dali::Pixel::Format itemPixelFormat = itemPixelBuffer.GetPixelFormat();
84
85      // Check if the item is out of the buffer.
86      if( ( x + width < 0 ) ||
87          ( x > dstWidth ) ||
88          ( y < 0 ) ||
89          ( y - height > dstHeight ) )
90      {
91        // The embedded item is completely out of the buffer.
92        continue;
93      }
94
95      // Crop if it exceeds the boundaries of the destination buffer.
96      int layoutX = 0;
97      int layoutY = 0;
98      int cropX = 0;
99      int cropY = 0;
100      int newWidth = width;
101      int newHeight = height;
102
103      bool crop = false;
104
105      if( 0 > x )
106      {
107        newWidth += x;
108        cropX = std::abs( x );
109        crop = true;
110      }
111      else
112      {
113        layoutX = x;
114      }
115
116      if( cropX + newWidth > dstWidth )
117      {
118        crop = true;
119        newWidth -= ( ( cropX + newWidth ) - dstWidth );
120      }
121
122      layoutY = y;
123      if( 0.f > layoutY )
124      {
125        newHeight += layoutY;
126        cropY = std::abs(layoutY);
127        crop = true;
128      }
129
130      if( cropY + newHeight > dstHeight )
131      {
132        crop = true;
133        newHeight -= ( ( cropY + newHeight ) - dstHeight );
134      }
135
136      uint16_t uiCropX = static_cast<uint16_t>(cropX);
137      uint16_t uiCropY = static_cast<uint16_t>(cropY);
138      uint16_t uiNewWidth = static_cast<uint16_t>(newWidth);
139      uint16_t uiNewHeight = static_cast<uint16_t>(newHeight);
140
141      if( crop )
142      {
143        itemPixelBuffer.Crop( uiCropX, uiCropY, uiNewWidth, uiNewHeight );
144      }
145
146      // Blend the item pixel buffer with the text's color according its blending mode.
147      if( Dali::TextAbstraction::ColorBlendingMode::MULTIPLY == itemLayout.colorBlendingMode )
148      {
149        Dali::Devel::PixelBuffer buffer = Dali::Devel::PixelBuffer::New( uiNewWidth,
150                                                                         uiNewHeight,
151                                                                         itemPixelFormat );
152
153        unsigned char* bufferPtr = buffer.GetBuffer();
154        const unsigned char* itemBufferPtr = itemPixelBuffer.GetBuffer();
155        const unsigned int bytesPerPixel = Dali::Pixel::GetBytesPerPixel(itemPixelFormat);
156        const unsigned int size = uiNewWidth * uiNewHeight * bytesPerPixel;
157
158        for (unsigned int i = 0u; i < size; i += bytesPerPixel)
159        {
160          *(bufferPtr + 0u) = static_cast<unsigned char>( static_cast<float>( *(itemBufferPtr + 0u) ) * data.textParameters.textColor.r );
161          *(bufferPtr + 1u) = static_cast<unsigned char>( static_cast<float>( *(itemBufferPtr + 1u) ) * data.textParameters.textColor.g );
162          *(bufferPtr + 2u) = static_cast<unsigned char>( static_cast<float>( *(itemBufferPtr + 2u) ) * data.textParameters.textColor.b );
163          *(bufferPtr + 3u) = static_cast<unsigned char>( static_cast<float>( *(itemBufferPtr + 3u) ) * data.textParameters.textColor.a );
164
165          itemBufferPtr += bytesPerPixel;
166          bufferPtr += bytesPerPixel;
167        }
168
169        itemPixelBuffer = buffer;
170      }
171
172      Dali::Toolkit::DevelText::UpdateBuffer(itemPixelBuffer, pixelBuffer, layoutX, layoutY, data.blend);
173    }
174
175   return  ret;
176 }
177
178 } // namespace
179
180 int UtcDaliTextCircularBitmapFont(void)
181 {
182   ToolkitTestApplication application;
183   tet_infoline(" UtcDaliTextCircularBitmapFont");
184
185   Dali::Toolkit::DevelText::BitmapFontDescription description;
186   Dali::Toolkit::DevelText::Glyph glyph;
187   glyph.url = "BitmapFontUrl";
188   glyph.utf8[0u] = 0u;
189   glyph.utf8[1u] = 0u;
190   glyph.utf8[2u] = 0u;
191   glyph.utf8[3u] = 0u;
192   glyph.ascender = 1.f;
193   glyph.descender = 1.f;
194   description.glyphs.push_back( glyph );
195
196   TextAbstraction::BitmapFont bitmapFont;
197   Dali::Toolkit::DevelText::CreateBitmapFont( description, bitmapFont );
198
199   for( const auto& bitmapGlyph : bitmapFont.glyphs )
200   {
201     if( glyph.url != bitmapGlyph.url )
202     {
203       std::cout << "  different output string : " << bitmapGlyph.url << ", expected : " << glyph.url << " " << std::endl;
204       tet_result(TET_FAIL);
205     }
206   }
207
208   tet_result(TET_PASS);
209   END_TEST;
210 }
211
212 int UtcDaliTextCircularShadowText(void)
213 {
214   ToolkitTestApplication application;
215   tet_infoline(" UtcDaliTextCircularShadowText");
216
217   Dali::Toolkit::DevelText::ShadowParameters shadowParameters;
218   Devel::PixelBuffer outPixelBuffer;
219   shadowParameters.input = Devel::PixelBuffer::New( 100, 100, Pixel::RGBA8888 );
220   shadowParameters.textColor = Color::BLACK;
221   shadowParameters.color =  Color::BLACK;
222   shadowParameters.offset.x = 10u;
223   shadowParameters.offset.y = 10u;
224   shadowParameters.blendShadow = true;
225   outPixelBuffer = Dali::Toolkit::DevelText::CreateShadow( shadowParameters );
226   DALI_TEST_CHECK( outPixelBuffer );
227   DALI_TEST_EQUALS( outPixelBuffer.GetPixelFormat(), Pixel::RGBA8888, TEST_LOCATION  );
228
229   shadowParameters.blendShadow = false;
230   outPixelBuffer = Dali::Toolkit::DevelText::CreateShadow( shadowParameters );
231   DALI_TEST_CHECK( outPixelBuffer );
232   DALI_TEST_EQUALS( outPixelBuffer.GetPixelFormat(), Pixel::RGBA8888, TEST_LOCATION  );
233
234   shadowParameters.input = Devel::PixelBuffer::New( 100, 100, Pixel::A8 );
235   outPixelBuffer = Dali::Toolkit::DevelText::CreateShadow( shadowParameters );
236   DALI_TEST_CHECK( outPixelBuffer );
237   DALI_TEST_EQUALS( outPixelBuffer.GetPixelFormat(), Pixel::RGBA8888, TEST_LOCATION  );
238
239   tet_result(TET_PASS);
240   END_TEST;
241 }
242
243 int UtcDaliTextCircularPixelBufferText(void)
244 {
245   ToolkitTestApplication application;
246   tet_infoline(" UtcDaliTextCircularPixelBufferText");
247
248   Devel::PixelBuffer pixbuf = Devel::PixelBuffer::New( 10, 10, Pixel::A8 );
249   Vector4 color;
250   Devel::PixelBuffer pixelBufferRgba = Dali::Toolkit::DevelText::ConvertToRgba8888( pixbuf, color, true );
251   pixelBufferRgba = Dali::Toolkit::DevelText::ConvertToRgba8888( pixbuf, color, false );
252   DALI_TEST_CHECK( pixelBufferRgba );
253   DALI_TEST_EQUALS( pixelBufferRgba.GetPixelFormat(), Pixel::RGBA8888, TEST_LOCATION  );
254
255   pixbuf = Devel::PixelBuffer::New( 10, 10, Pixel::RGBA8888 );
256   pixelBufferRgba = Dali::Toolkit::DevelText::ConvertToRgba8888( pixbuf, color, false );
257   DALI_TEST_CHECK( pixelBufferRgba );
258   DALI_TEST_EQUALS( pixelBufferRgba.GetPixelFormat(), Pixel::RGBA8888, TEST_LOCATION  );
259
260   tet_result(TET_PASS);
261   END_TEST;
262 }
263
264 int UtcDaliTextCircularNoText(void)
265 {
266   ToolkitTestApplication application;
267   tet_infoline(" UtcDaliTextCircularNoText");
268
269   Dali::Toolkit::DevelText::RendererParameters textParameters;
270   textParameters.text = "";
271   textParameters.fontSize = 25.f;
272   textParameters.textWidth = 360u;
273   textParameters.textHeight = 360u;
274
275   CircularTextData data =
276   {
277       "No text",
278       "",
279       textParameters,
280       embeddedItems,
281       true
282   };
283
284   if( !CircularRenderTest( data ) )
285   {
286     tet_result(TET_FAIL);
287   }
288
289   textParameters.text = "<item 'width'=26 'height'=26/>";
290   textParameters.markupEnabled = true;
291   if( !CircularRenderTest( data ) )
292   {
293     tet_result(TET_FAIL);
294   }
295
296   tet_result(TET_PASS);
297   END_TEST;
298 }
299
300 int UtcDaliTextCircularIncrementAngle(void)
301 {
302
303   ToolkitTestApplication application;
304   tet_infoline(" UtcDaliTextCircularIncrementAngle");
305
306   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
307   const std::string image2 = "<item 'width'=26 'height'=26/>";
308
309   Dali::Toolkit::DevelText::RendererParameters textParameters;
310   textParameters.text = "Hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
311   textParameters.horizontalAlignment = "center";
312   textParameters.verticalAlignment = "center";
313   textParameters.circularAlignment = "center";
314   textParameters.fontFamily = "SamsungUI";
315   textParameters.fontWeight = "";
316   textParameters.fontWidth = "";
317   textParameters.fontSlant = "";
318   textParameters.layout = "circular";
319   textParameters.textColor = Color::BLACK;
320   textParameters.fontSize = 25.f;
321   textParameters.textWidth = 360u;
322   textParameters.textHeight = 360u;
323   textParameters.radius = 180u;
324   textParameters.beginAngle = 15.f;
325   textParameters.incrementAngle = 0.f;
326   textParameters.ellipsisEnabled = true;
327   textParameters.markupEnabled = true;
328
329
330   CircularTextData data =
331   {
332       "IncrementAngle",
333       "",
334       textParameters,
335       embeddedItems,
336       true
337   };
338
339   if( !CircularRenderTest( data ) )
340   {
341     tet_result(TET_FAIL);
342   }
343
344   tet_result(TET_PASS);
345   END_TEST;
346 }
347
348
349
350 int UtcDaliTextCircularMarkup(void)
351 {
352   ToolkitTestApplication application;
353   tet_infoline(" UtcDaliTextCircularMarkup");
354
355   Dali::Toolkit::DevelText::RendererParameters textParameters;
356   textParameters.text = "Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World";
357   textParameters.horizontalAlignment = "center";
358   textParameters.verticalAlignment = "center";
359   textParameters.circularAlignment = "center";
360   textParameters.fontFamily = "SamsungUI";
361   textParameters.fontWeight = "";
362   textParameters.fontWidth = "";
363   textParameters.fontSlant = "";
364   textParameters.layout = "circular";
365   textParameters.textColor = Color::BLACK;
366   textParameters.fontSize = 25.f;
367   textParameters.textWidth = 360u;
368   textParameters.textHeight = 360u;
369   textParameters.radius = 180u;
370   textParameters.beginAngle = 15.f;
371   textParameters.incrementAngle = 360.f;
372   textParameters.ellipsisEnabled = true;
373   textParameters.markupEnabled = false;
374
375   CircularTextData data =
376   {
377       "Markup",
378       "",
379       textParameters,
380       embeddedItems,
381       true
382   };
383
384   if( !CircularRenderTest( data ) )
385   {
386     tet_result(TET_FAIL);
387   }
388
389   tet_result(TET_PASS);
390   END_TEST;
391 }
392
393 int UtcDaliTextCircularFont(void)
394 {
395   ToolkitTestApplication application;
396   tet_infoline(" UtcDaliTextCircularFont");
397
398   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
399   const std::string image2 = "<item 'width'=26 'height'=26/>";
400
401   Dali::Toolkit::DevelText::RendererParameters textParameters;
402   textParameters.text = "Hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
403   textParameters.horizontalAlignment = "center";
404   textParameters.verticalAlignment = "center";
405   textParameters.circularAlignment = "center";
406   textParameters.fontFamily = "SamsungUI";
407   textParameters.fontWeight = "thin";
408   textParameters.fontWidth = "condensed";
409   textParameters.fontSlant = "normal";
410   textParameters.layout = "circular";
411   textParameters.textColor = Color::BLACK;
412   textParameters.fontSize = 25.f;
413   textParameters.textWidth = 360u;
414   textParameters.textHeight = 360u;
415   textParameters.radius = 180u;
416   textParameters.beginAngle = 15.f;
417   textParameters.incrementAngle = 360.f;
418   textParameters.ellipsisEnabled = true;
419   textParameters.markupEnabled = true;
420
421   CircularTextData data =
422   {
423       "Font",
424       "",
425       textParameters,
426       embeddedItems,
427       true
428   };
429
430   if( !CircularRenderTest( data ) )
431   {
432     tet_result(TET_FAIL);
433   }
434
435   tet_result(TET_PASS);
436   END_TEST;
437 }
438
439 int UtcDaliTextCircularAlignment(void)
440 {
441
442   ToolkitTestApplication application;
443   tet_infoline(" UtcDaliTextCircularAlignment");
444
445   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
446   const std::string image2 = "<item 'width'=26 'height'=26/>";
447
448   Dali::Toolkit::DevelText::RendererParameters textParameters;
449   textParameters.text = "Hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
450   textParameters.horizontalAlignment = "center";
451   textParameters.verticalAlignment = "center";
452   textParameters.circularAlignment = "center";
453   textParameters.fontFamily = "SamsungUI";
454   textParameters.fontWeight = "";
455   textParameters.fontWidth = "";
456   textParameters.fontSlant = "";
457   textParameters.layout = "circular";
458   textParameters.textColor = Color::BLACK;
459   textParameters.fontSize = 25.f;
460   textParameters.textWidth = 360u;
461   textParameters.textHeight = 360u;
462   textParameters.radius = 180u;
463   textParameters.beginAngle = 15.f;
464   textParameters.incrementAngle = 360.f;
465   textParameters.ellipsisEnabled = true;
466   textParameters.markupEnabled = true;
467
468   CircularTextData data =
469   {
470       "Alignment",
471       "",
472       textParameters,
473       embeddedItems,
474       true
475   };
476
477   if( !CircularRenderTest( data ) )
478   {
479     tet_result(TET_FAIL);
480   }
481
482   textParameters.horizontalAlignment = "begin";
483   textParameters.verticalAlignment = "top";
484   textParameters.circularAlignment = "begin";
485
486   if( !CircularRenderTest( data ) )
487   {
488     tet_result(TET_FAIL);
489   }
490
491   textParameters.horizontalAlignment = "end";
492   textParameters.verticalAlignment = "bottom";
493   textParameters.circularAlignment = "end";
494
495   if( !CircularRenderTest( data ) )
496   {
497     tet_result(TET_FAIL);
498   }
499
500   tet_result(TET_PASS);
501   END_TEST;
502 }
503
504 int UtcDaliTextCircularRTL(void)
505 {
506   ToolkitTestApplication application;
507   tet_infoline(" UtcDaliTextCircularRTL");
508
509   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
510   const std::string image2 = "<item 'width'=26 'height'=26/>";
511
512   Dali::Toolkit::DevelText::RendererParameters textParameters;
513   textParameters.text = "مرحبا بالعالم" + image1 + " hello world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
514   textParameters.horizontalAlignment = "center";
515   textParameters.verticalAlignment = "center";
516   textParameters.circularAlignment = "center";
517   textParameters.fontFamily = "SamsungUI";
518   textParameters.fontWeight = "";
519   textParameters.fontWidth = "";
520   textParameters.fontSlant = "";
521   textParameters.layout = "circular";
522   textParameters.textColor = Color::BLACK;
523   textParameters.fontSize = 25.f;
524   textParameters.textWidth = 360u;
525   textParameters.textHeight = 360u;
526   textParameters.radius = 180u;
527   textParameters.beginAngle = 15.f;
528   textParameters.incrementAngle = 360.f;
529   textParameters.ellipsisEnabled = true;
530   textParameters.markupEnabled = true;
531
532   CircularTextData data =
533   {
534       "RTL",
535       "",
536       textParameters,
537       embeddedItems,
538       true
539   };
540
541   if( !CircularRenderTest( data ) )
542   {
543     tet_result(TET_FAIL);
544   }
545
546   textParameters.circularAlignment = "begin";
547   if( !CircularRenderTest( data ) )
548   {
549     tet_result(TET_FAIL);
550   }
551
552   textParameters.circularAlignment = "end";
553   if( !CircularRenderTest( data ) )
554   {
555     tet_result(TET_FAIL);
556   }
557
558   textParameters.text = "שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم שלום עולם مرحبا بالعالم";
559   textParameters.layout = "singleLine";
560   textParameters.horizontalAlignment = "end";
561   textParameters.fontSize = 90.f;
562   if( !CircularRenderTest( data ) )
563   {
564     tet_result(TET_FAIL);
565   }
566
567   tet_result(TET_PASS);
568   END_TEST;
569 }
570
571 int UtcDaliTextCircularN(void)
572 {
573
574   ToolkitTestApplication application;
575   tet_infoline(" UtcDaliTextCircularN");
576
577   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
578   const std::string image2 = "<item 'width'=26 'height'=26/>";
579
580   Dali::Toolkit::DevelText::RendererParameters textParameters;
581   textParameters.text = "hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
582   textParameters.horizontalAlignment = "center";
583   textParameters.verticalAlignment = "center";
584   textParameters.circularAlignment = "center";
585   textParameters.fontFamily = "SamsungUI";
586   textParameters.fontWeight = "";
587   textParameters.fontWidth = "";
588   textParameters.fontSlant = "";
589   textParameters.layout = "singleLine";
590   textParameters.textColor = Color::BLACK;
591   textParameters.fontSize = 25.f;
592   textParameters.textWidth = 360u;
593   textParameters.textHeight = 360u;
594   textParameters.radius = 180u;
595   textParameters.beginAngle = 15.f;
596   textParameters.incrementAngle = 360.f;
597   textParameters.ellipsisEnabled = true;
598   textParameters.markupEnabled = true;
599
600   CircularTextData data =
601   {
602       "singleLine",
603       "",
604       textParameters,
605       embeddedItems,
606       true
607   };
608
609   if( !CircularRenderTest( data ) )
610   {
611     tet_result(TET_FAIL);
612   }
613
614   textParameters.verticalAlignment = "top";
615   if( !CircularRenderTest( data ) )
616   {
617     tet_result(TET_FAIL);
618   }
619
620   textParameters.verticalAlignment = "bottom";
621   if( !CircularRenderTest( data ) )
622   {
623     tet_result(TET_FAIL);
624   }
625
626   textParameters.textWidth = 90u;
627   if( !CircularRenderTest( data ) )
628   {
629     tet_result(TET_FAIL);
630   }
631
632   tet_result(TET_PASS);
633   END_TEST;
634 }
635
636 int UtcDaliTextCircularBlend(void)
637 {
638   tet_infoline(" UtcDaliTextCircularN");
639
640   ToolkitTestApplication application;
641   auto scene = application.GetScene();
642   scene.SetBackgroundColor( Color::WHITE );
643   scene.SetBackgroundColor( Vector4( 0.04f, 0.345f, 0.392f, 1.0f ) );
644
645
646   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
647   const std::string image2 = "<item 'width'=26 'height'=26/>";
648
649   Dali::Toolkit::DevelText::RendererParameters textParameters;
650   textParameters.text = "hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
651   textParameters.horizontalAlignment = "center";
652   textParameters.verticalAlignment = "center";
653   textParameters.circularAlignment = "center";
654   textParameters.fontFamily = "SamsungUI";
655   textParameters.fontWeight = "";
656   textParameters.fontWidth = "";
657   textParameters.fontSlant = "";
658   textParameters.layout = "circular";
659   textParameters.textColor = Color::BLACK;
660   textParameters.fontSize = 25.f;
661   textParameters.textWidth = 360u;
662   textParameters.textHeight = 360u;
663   textParameters.radius = 180u;
664   textParameters.beginAngle = 15.f;
665   textParameters.incrementAngle = 360.f;
666   textParameters.ellipsisEnabled = true;
667   textParameters.markupEnabled = true;
668
669   CircularTextData data =
670   {
671       "blend",
672       "",
673       textParameters,
674       embeddedItems,
675       false
676   };
677
678   if( !CircularRenderTest( data ) )
679   {
680     tet_result(TET_FAIL);
681   }
682
683   tet_result(TET_PASS);
684   END_TEST;
685 }
686
687 int UtcDaliTextCircularEllipsis(void)
688 {
689   tet_infoline(" UtcDaliTextCircularEllipsis");
690
691   ToolkitTestApplication application;
692
693   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
694   const std::string image2 = "<item 'width'=26 'height'=26/>";
695
696   Dali::Toolkit::DevelText::RendererParameters textParameters;
697   textParameters.text = "hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
698   textParameters.horizontalAlignment = "center";
699   textParameters.verticalAlignment = "center";
700   textParameters.circularAlignment = "center";
701   textParameters.fontFamily = "SamsungUI";
702   textParameters.fontWeight = "";
703   textParameters.fontWidth = "";
704   textParameters.fontSlant = "";
705   textParameters.layout = "circular";
706   textParameters.textColor = Color::BLACK;
707   textParameters.fontSize = 25.f;
708   textParameters.textWidth = 360u;
709   textParameters.textHeight = 360u;
710   textParameters.radius = 180u;
711   textParameters.beginAngle = 15.f;
712   textParameters.incrementAngle = 360.f;
713   textParameters.ellipsisEnabled = false;
714   textParameters.markupEnabled = true;
715
716   CircularTextData data =
717   {
718       "ellipsis",
719       "",
720       textParameters,
721       embeddedItems,
722       true
723   };
724
725   if( !CircularRenderTest( data ) )
726   {
727     tet_result(TET_FAIL);
728   }
729
730   textParameters.layout = "singleLine";
731   textParameters.textHeight = 50u;
732   textParameters.ellipsisEnabled = true;
733
734   if( !CircularRenderTest( data ) )
735   {
736     tet_result(TET_FAIL);
737   }
738
739   tet_result(TET_PASS);
740   END_TEST;
741 }
742
743 int UtcDaliTextCircularEmoji(void)
744 {
745   tet_infoline(" UtcDaliTextCircularEmoji");
746
747   ToolkitTestApplication application;
748
749   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
750   const std::string image2 = "<item 'width'=26 'height'=26/>";
751
752   Dali::Toolkit::DevelText::RendererParameters textParameters;
753   textParameters.text = "<font family='BreezeColorEmoji' size='60'>\xF0\x9F\x98\x81 \xF0\x9F\x98\x82 \xF0\x9F\x98\x83 \xF0\x9F\x98\x84</font>";
754   textParameters.horizontalAlignment = "center";
755   textParameters.verticalAlignment = "center";
756   textParameters.circularAlignment = "center";
757   textParameters.fontFamily = "SamsungUI";
758   textParameters.fontWeight = "";
759   textParameters.fontWidth = "";
760   textParameters.fontSlant = "";
761   textParameters.layout = "circular";
762   textParameters.textColor = Color::BLACK;
763   textParameters.fontSize = 25.f;
764   textParameters.textWidth = 360u;
765   textParameters.textHeight = 360u;
766   textParameters.radius = 180u;
767   textParameters.beginAngle = 15.f;
768   textParameters.incrementAngle = 360.f;
769   textParameters.ellipsisEnabled = true;
770   textParameters.markupEnabled = true;
771
772   CircularTextData data =
773   {
774       "Emoji",
775       "",
776       textParameters,
777       embeddedItems,
778       true
779   };
780
781   if( !CircularRenderTest( data ) )
782   {
783     tet_result(TET_FAIL);
784   }
785
786   tet_result(TET_PASS);
787   END_TEST;
788 }
789
790 int UtcDaliTextUpdateBufferFormatCheck(void)
791 {
792   tet_infoline(" UtcDaliTextUpdateBufferFormatCheck");
793   ToolkitTestApplication application;
794
795   Devel::PixelBuffer srcBuffer = Devel::PixelBuffer::New( 10, 10, Pixel::RGBA8888 );
796   Devel::PixelBuffer dstBuffer = Devel::PixelBuffer::New( 10, 10, Pixel::A8 );
797
798   Dali::Toolkit::DevelText::UpdateBuffer(srcBuffer, dstBuffer, 0, 0, true);
799
800   Devel::PixelBuffer compressedSrcBuffer = Devel::PixelBuffer::New( 10, 10, Pixel::COMPRESSED_R11_EAC );
801   Devel::PixelBuffer compressedDstBuffer = Devel::PixelBuffer::New( 10, 10, Pixel::COMPRESSED_R11_EAC );
802   Dali::Toolkit::DevelText::UpdateBuffer(compressedSrcBuffer, compressedDstBuffer, 0, 0, true);
803
804   tet_result(TET_PASS);
805   END_TEST;
806 }
807
808 int UtcDaliTextCircularTextColor(void)
809 {
810   tet_infoline(" UtcDaliTextCircularTextColor");
811
812   ToolkitTestApplication application;
813
814   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 + "'/>";
815   const std::string image2 = "<item 'width'=26 'height'=26/>";
816
817   Dali::Toolkit::DevelText::RendererParameters textParameters;
818   textParameters.text = "hello " + image1 + " <color value='blue'>world</color> " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
819   textParameters.horizontalAlignment = "center";
820   textParameters.verticalAlignment = "center";
821   textParameters.circularAlignment = "center";
822   textParameters.fontFamily = "SamsungUI";
823   textParameters.fontWeight = "";
824   textParameters.fontWidth = "";
825   textParameters.fontSlant = "";
826   textParameters.layout = "circular";
827   textParameters.textColor = Color::BLACK;
828   textParameters.fontSize = 25.f;
829   textParameters.textWidth = 360u;
830   textParameters.textHeight = 360u;
831   textParameters.radius = 180u;
832   textParameters.beginAngle = 15.f;
833   textParameters.incrementAngle = 360.f;
834   textParameters.ellipsisEnabled = true;
835   textParameters.markupEnabled = true;
836
837   CircularTextData data =
838   {
839       "textColor",
840       "",
841       textParameters,
842       embeddedItems,
843       true
844   };
845
846   if( !CircularRenderTest( data ) )
847   {
848     tet_result(TET_FAIL);
849   }
850
851   tet_result(TET_PASS);
852   END_TEST;
853 }
854
855 int UtcDaliTextCircularColorBlend(void)
856 {
857   tet_infoline(" UtcDaliTextCircularColorBlend");
858
859   ToolkitTestApplication application;
860
861   const std::string image1 = "<item 'width'=26 'height'=26 'url'='" + TEST_IMAGE_FILE_NAME1 +  "' 'color-blending'=multiply/>";
862   const std::string image2 = "<item 'width'=26 'height'=26/>";
863
864   Dali::Toolkit::DevelText::RendererParameters textParameters;
865   textParameters.text = "hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
866   textParameters.horizontalAlignment = "center";
867   textParameters.verticalAlignment = "center";
868   textParameters.circularAlignment = "center";
869   textParameters.fontFamily = "SamsungUI";
870   textParameters.fontWeight = "";
871   textParameters.fontWidth = "";
872   textParameters.fontSlant = "";
873   textParameters.layout = "circular";
874   textParameters.textColor = Color::BLACK;
875   textParameters.fontSize = 25.f;
876   textParameters.textWidth = 360u;
877   textParameters.textHeight = 360u;
878   textParameters.radius = 180u;
879   textParameters.beginAngle = 15.f;
880   textParameters.incrementAngle = 360.f;
881   textParameters.ellipsisEnabled = true;
882   textParameters.markupEnabled = true;
883
884   CircularTextData data =
885   {
886       "colorBlend",
887       "",
888       textParameters,
889       embeddedItems,
890       true
891   };
892
893   if( !CircularRenderTest( data ) )
894   {
895     tet_result(TET_FAIL);
896   }
897
898   tet_result(TET_PASS);
899   END_TEST;
900 }