ce9cfabf340c379e75ff4466feff1f049dacddd4
[platform/core/uifw/dali-adaptor.git] / automated-tests / src / dali-adaptor-internal / utc-Dali-FontClient.cpp
1 /*
2  * Copyright (c) 2014 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
20 #include <dali-test-suite-utils.h>
21 #include <dali/dali.h>
22 #include <dali/devel-api/text-abstraction/font-client.h>
23 #include <dali/internal/text/text-abstraction/plugin/font-client-utils.h>
24 #include <stdint.h>
25 #include <stdlib.h>
26 #include <unistd.h>
27 #include <iostream>
28
29 using namespace Dali;
30
31 int UtcDaliFontClient(void)
32 {
33   const int ORDERED_VALUES[] = {-1, 50, 63, 75, 87, 100, 113, 125, 150, 200};
34
35   const unsigned int NUM_OF_ORDERED_VALUES = sizeof(ORDERED_VALUES) / sizeof(int);
36
37   TestApplication application;
38   int             result = 0;
39
40   tet_infoline("UtcDaliFontClient No table");
41   result = TextAbstraction::Internal::ValueToIndex(100, NULL, 0u);
42   DALI_TEST_EQUALS(-1, result, TEST_LOCATION);
43
44   tet_infoline("UtcDaliFontClient Non defined values");
45   result = TextAbstraction::Internal::ValueToIndex(-1, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
46   DALI_TEST_EQUALS(0, result, TEST_LOCATION);
47   result = TextAbstraction::Internal::ValueToIndex(-3, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
48   DALI_TEST_EQUALS(0, result, TEST_LOCATION);
49
50   tet_infoline("UtcDaliFontClient Between non defined and first of range.");
51   result = TextAbstraction::Internal::ValueToIndex(0, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
52   DALI_TEST_EQUALS(1, result, TEST_LOCATION);
53   result = TextAbstraction::Internal::ValueToIndex(30, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
54   DALI_TEST_EQUALS(1, result, TEST_LOCATION);
55   result = TextAbstraction::Internal::ValueToIndex(49, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
56   DALI_TEST_EQUALS(1, result, TEST_LOCATION);
57
58   tet_infoline("UtcDaliFontClient Defined in range");
59   for(unsigned int index = 1u; index < NUM_OF_ORDERED_VALUES; ++index)
60   {
61     result = TextAbstraction::Internal::ValueToIndex(ORDERED_VALUES[index], ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
62     DALI_TEST_EQUALS(index, result, TEST_LOCATION);
63   }
64
65   tet_infoline("UtcDaliFontClient Non defined in range");
66   result = TextAbstraction::Internal::ValueToIndex(51, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
67   DALI_TEST_EQUALS(1, result, TEST_LOCATION);
68   result = TextAbstraction::Internal::ValueToIndex(55, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
69   DALI_TEST_EQUALS(1, result, TEST_LOCATION);
70   result = TextAbstraction::Internal::ValueToIndex(62, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
71   DALI_TEST_EQUALS(2, result, TEST_LOCATION);
72   result = TextAbstraction::Internal::ValueToIndex(64, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
73   DALI_TEST_EQUALS(2, result, TEST_LOCATION);
74   result = TextAbstraction::Internal::ValueToIndex(151, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
75   DALI_TEST_EQUALS(8, result, TEST_LOCATION);
76   result = TextAbstraction::Internal::ValueToIndex(175, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
77   DALI_TEST_EQUALS(9, result, TEST_LOCATION);
78   result = TextAbstraction::Internal::ValueToIndex(176, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
79   DALI_TEST_EQUALS(9, result, TEST_LOCATION);
80   result = TextAbstraction::Internal::ValueToIndex(199, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
81   DALI_TEST_EQUALS(9, result, TEST_LOCATION);
82
83   tet_infoline("UtcDaliFontClient above of range");
84   result = TextAbstraction::Internal::ValueToIndex(220, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
85   DALI_TEST_EQUALS(9, result, TEST_LOCATION);
86   result = TextAbstraction::Internal::ValueToIndex(500, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
87   DALI_TEST_EQUALS(9, result, TEST_LOCATION);
88
89   END_TEST;
90 }
91
92 int UtcDaliFontClientAtlasLimitation(void)
93 {
94   TestApplication             application;
95   bool                        result     = 0;
96   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
97
98   tet_infoline("UtcDaliFontClientAtlasLimitation Default");
99   result = fontClient.IsAtlasLimitationEnabled();
100   DALI_TEST_EQUALS(TextAbstraction::FontClient::DEFAULT_ATLAS_LIMITATION_ENABLED, result, TEST_LOCATION);
101
102   tet_infoline("UtcDaliFontClientAtlasLimitation Enabled");
103   fontClient.EnableAtlasLimitation(true);
104   result = fontClient.IsAtlasLimitationEnabled();
105   DALI_TEST_EQUALS(true, result, TEST_LOCATION);
106
107   tet_infoline("UtcDaliFontClientAtlasLimitation Disabled");
108   fontClient.EnableAtlasLimitation(false);
109   result = fontClient.IsAtlasLimitationEnabled();
110   DALI_TEST_EQUALS(false, result, TEST_LOCATION);
111   END_TEST;
112 }
113
114 const std::string DEFAULT_FONT_DIR("/resources/fonts");
115 const uint32_t    MAX_WIDTH_FIT_IN_ATLAS  = TextAbstraction::FontClient::MAX_TEXT_ATLAS_WIDTH - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK;
116 const uint32_t    MAX_HEIGHT_FIT_IN_ATLAS = TextAbstraction::FontClient::MAX_TEXT_ATLAS_HEIGHT - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK;
117
118 int UtcDaliFontClientAtlasLimitationEnabled(void)
119 {
120   TestApplication application;
121
122   char*             pathNamePtr = get_current_dir_name();
123   const std::string pathName(pathNamePtr);
124   free(pathNamePtr);
125
126   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
127   fontClient.EnableAtlasLimitation(true);
128
129   // The font file "DejaVuSans.ttf" is copied from Toolkit to Adaptor to make test-case of specific font-family.
130   // Note the block size depends on font-family.
131   // This is to create FontDescription and pass it to GetFontId with point-size (various cases).
132   TextAbstraction::FontDescription fontDescription;
133   fontDescription.path   = pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf";
134   fontDescription.family = "DejaVuSans";
135   fontDescription.width  = TextAbstraction::FontWidth::NONE;
136   fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
137   fontDescription.slant  = TextAbstraction::FontSlant::NONE;
138
139   // Block's width or height are less than 512
140   tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=200");
141   uint32_t                                     pointSize200 = 200 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
142   TextAbstraction::FontId                      fontId200    = fontClient.GetFontId(fontDescription, pointSize200);
143   TextAbstraction::FontClient::GlyphBufferData glyphBufferData200;
144   glyphBufferData200.width  = 0;
145   glyphBufferData200.height = 0;
146   fontClient.CreateBitmap(fontId200, 68, false, false, glyphBufferData200, 0);
147
148   DALI_TEST_GREATER(MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData200.width, TEST_LOCATION);
149   DALI_TEST_GREATER(MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData200.height, TEST_LOCATION);
150
151   // Block's width or height are  greater than 512 and less than 1024
152   uint32_t pointSize1000 = 1000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
153   tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=1000");
154   TextAbstraction::FontId                      fontId1000 = fontClient.GetFontId(fontDescription, pointSize1000);
155   TextAbstraction::FontClient::GlyphBufferData glyphBufferData1000;
156   glyphBufferData1000.width  = 0;
157   glyphBufferData1000.height = 0;
158   fontClient.CreateBitmap(fontId1000, 68, false, false, glyphBufferData1000, 0);
159
160   DALI_TEST_GREATER(MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData1000.width, TEST_LOCATION);
161   DALI_TEST_GREATER(MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData1000.height, TEST_LOCATION);
162
163   // Block's width or height are greater than 1024 and less than 2048
164   uint32_t pointSize2000 = 2000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
165   tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=2000");
166   TextAbstraction::FontId                      fontId2000 = fontClient.GetFontId(fontDescription, pointSize2000);
167   TextAbstraction::FontClient::GlyphBufferData glyphBufferData2000;
168   glyphBufferData2000.width  = 0;
169   glyphBufferData2000.height = 0;
170   fontClient.CreateBitmap(fontId2000, 68, false, false, glyphBufferData2000, 0);
171
172   DALI_TEST_GREATER(MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData2000.width, TEST_LOCATION);
173   DALI_TEST_GREATER(MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData2000.height, TEST_LOCATION);
174
175   END_TEST;
176 }
177
178 int UtcDaliFontClientAtlasLimitationDisabled(void)
179 {
180   TestApplication application;
181
182   char*             pathNamePtr = get_current_dir_name();
183   const std::string pathName(pathNamePtr);
184   free(pathNamePtr);
185
186   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
187   fontClient.EnableAtlasLimitation(false);
188
189   TextAbstraction::FontDescription fontDescription;
190   fontDescription.path   = pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf";
191   fontDescription.family = "DejaVuSans";
192   fontDescription.width  = TextAbstraction::FontWidth::NONE;
193   fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
194   fontDescription.slant  = TextAbstraction::FontSlant::NONE;
195
196   // Block's width or height are less than 512
197   tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=200");
198   uint32_t                                     pointSize200 = 200 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
199   TextAbstraction::FontId                      fontId200    = fontClient.GetFontId(fontDescription, pointSize200);
200   TextAbstraction::FontClient::GlyphBufferData glyphBufferData200;
201   glyphBufferData200.width  = 0;
202   glyphBufferData200.height = 0;
203   fontClient.CreateBitmap(fontId200, 68, false, false, glyphBufferData200, 0);
204
205   DALI_TEST_GREATER(512u, glyphBufferData200.width, TEST_LOCATION);  //93u
206   DALI_TEST_GREATER(512u, glyphBufferData200.height, TEST_LOCATION); //115u
207
208   // Block's width or height are  greater than 512 and less than 1024
209   tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=1000");
210   uint32_t                                     pointSize1000 = 1000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
211   TextAbstraction::FontId                      fontId1000    = fontClient.GetFontId(fontDescription, pointSize1000);
212   TextAbstraction::FontClient::GlyphBufferData glyphBufferData1000;
213   glyphBufferData1000.width  = 0;
214   glyphBufferData1000.height = 0;
215   fontClient.CreateBitmap(fontId1000, 68, false, false, glyphBufferData1000, 0);
216
217   DALI_TEST_GREATER(512u, glyphBufferData1000.width, TEST_LOCATION);  //462u
218   DALI_TEST_GREATER(glyphBufferData1000.height, 512u, TEST_LOCATION); //574u
219
220   // Block's width or height are greater than 1024 and less than 2048
221   tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=2000");
222   uint32_t                                     pointSize2000 = 2000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
223   TextAbstraction::FontId                      fontId2000    = fontClient.GetFontId(fontDescription, pointSize2000);
224   TextAbstraction::FontClient::GlyphBufferData glyphBufferData2000;
225   glyphBufferData2000.width  = 0;
226   glyphBufferData2000.height = 0;
227   fontClient.CreateBitmap(fontId2000, 68, false, false, glyphBufferData2000, 0);
228
229   DALI_TEST_GREATER(1024u, glyphBufferData2000.width, TEST_LOCATION);  //924u
230   DALI_TEST_GREATER(glyphBufferData2000.height, 1024u, TEST_LOCATION); //1148u
231
232   END_TEST;
233 }
234
235 int UtcDaliFontClientCurrentMaximumBlockSizeFitInAtlas(void)
236 {
237   TestApplication application;
238   tet_infoline(" UtcDaliFontClientCurrentMaximumBlockSizeFitInAtlas ");
239
240   bool                        isChanged;
241   TextAbstraction::FontClient fontClient;
242   fontClient = TextAbstraction::FontClient::Get();
243
244   Size defaultTextAtlasSize              = fontClient.GetDefaultTextAtlasSize();
245   Size maximumTextAtlasSize              = fontClient.GetMaximumTextAtlasSize();
246   Size currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
247
248   tet_infoline("CurrentMaximumBlockSizeFitInAtlas start with default ");
249   DALI_TEST_EQUALS(currentMaximumBlockSizeFitInAtlas, defaultTextAtlasSize, TEST_LOCATION);
250
251   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with current ");
252   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(currentMaximumBlockSizeFitInAtlas);
253   DALI_TEST_CHECK(isChanged);
254
255   Size decreaseOnlyWidth(currentMaximumBlockSizeFitInAtlas.width - 1u, currentMaximumBlockSizeFitInAtlas.height);
256   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with width < current ");
257   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseOnlyWidth);
258   DALI_TEST_CHECK(isChanged);
259
260   Size decreaseOnlyHeigth(currentMaximumBlockSizeFitInAtlas.width, currentMaximumBlockSizeFitInAtlas.height - 1u);
261   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with height < current ");
262   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseOnlyHeigth);
263   DALI_TEST_CHECK(isChanged);
264
265   Size decreaseBoth(currentMaximumBlockSizeFitInAtlas.width - 1u, currentMaximumBlockSizeFitInAtlas.height - 1u);
266   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with size < current ");
267   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseBoth);
268   DALI_TEST_CHECK(isChanged);
269
270   Size increaseOnlyWidth(maximumTextAtlasSize.width + 1u, currentMaximumBlockSizeFitInAtlas.height);
271   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with width > max ");
272   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseOnlyWidth);
273   DALI_TEST_CHECK(!isChanged);
274
275   Size increaseOnlyHeigth(currentMaximumBlockSizeFitInAtlas.width, maximumTextAtlasSize.height + 1u);
276   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with height > max ");
277   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseOnlyHeigth);
278   DALI_TEST_CHECK(!isChanged);
279
280   Size increaseBoth(maximumTextAtlasSize.width + 1u, maximumTextAtlasSize.height + 1u);
281   tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with size > max ");
282   isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseBoth);
283   DALI_TEST_CHECK(!isChanged);
284
285   currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
286   if(currentMaximumBlockSizeFitInAtlas.width < maximumTextAtlasSize.width && currentMaximumBlockSizeFitInAtlas.height < maximumTextAtlasSize.height)
287   {
288     tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with current < size < max ");
289     Size increaseWidth = Size(currentMaximumBlockSizeFitInAtlas.width + 1u, currentMaximumBlockSizeFitInAtlas.height);
290     isChanged          = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseWidth);
291     DALI_TEST_CHECK(isChanged);
292     currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
293
294     Size increaseHeigth = Size(currentMaximumBlockSizeFitInAtlas.width, currentMaximumBlockSizeFitInAtlas.height + 1u);
295     isChanged           = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseHeigth);
296     DALI_TEST_CHECK(isChanged);
297     currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
298
299     Size sizeLessThanMax = Size(currentMaximumBlockSizeFitInAtlas.width + 1u, currentMaximumBlockSizeFitInAtlas.height + 1u);
300     isChanged            = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(sizeLessThanMax);
301
302     if(currentMaximumBlockSizeFitInAtlas.width < maximumTextAtlasSize.width && currentMaximumBlockSizeFitInAtlas.height < maximumTextAtlasSize.height)
303     {
304       DALI_TEST_CHECK(isChanged);
305     }
306     else
307     {
308       DALI_TEST_CHECK(!isChanged);
309     }
310
311     currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
312
313     DALI_TEST_NOT_EQUALS(currentMaximumBlockSizeFitInAtlas, defaultTextAtlasSize, 0.0f, TEST_LOCATION);
314     DALI_TEST_EQUALS(currentMaximumBlockSizeFitInAtlas, sizeLessThanMax, TEST_LOCATION);
315
316     tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with size == max ");
317     isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(maximumTextAtlasSize);
318     DALI_TEST_CHECK(!isChanged);
319   }
320
321   currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
322   DALI_TEST_NOT_EQUALS(currentMaximumBlockSizeFitInAtlas, maximumTextAtlasSize, 0.0f, TEST_LOCATION);
323
324   END_TEST;
325 }
326
327 int UtcDaliFontClientTextAtlasConstants(void)
328 {
329   TestApplication application;
330   tet_infoline(" UtcDaliFontClientTextAtlasConstants ");
331
332   TextAbstraction::FontClient fontClient;
333   fontClient = TextAbstraction::FontClient::Get();
334
335   Size defaultTextAtlasSize = fontClient.GetDefaultTextAtlasSize();
336   Size defaultTextAtlasWidthHeight(TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_WIDTH, TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_HEIGHT);
337   DALI_TEST_EQUALS(defaultTextAtlasSize, TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_SIZE, TEST_LOCATION);
338   DALI_TEST_EQUALS(defaultTextAtlasSize, defaultTextAtlasWidthHeight, TEST_LOCATION);
339
340   Size maximumTextAtlasSize = fontClient.GetMaximumTextAtlasSize();
341   Size maxTextAtlasWidthHeight(TextAbstraction::FontClient::MAX_TEXT_ATLAS_WIDTH, TextAbstraction::FontClient::MAX_TEXT_ATLAS_HEIGHT);
342   DALI_TEST_EQUALS(maximumTextAtlasSize, TextAbstraction::FontClient::MAX_TEXT_ATLAS_SIZE, TEST_LOCATION);
343   DALI_TEST_EQUALS(maximumTextAtlasSize, maxTextAtlasWidthHeight, TEST_LOCATION);
344
345   uint32_t numberOfPointsPerOneUnitOfPointSize = fontClient.GetNumberOfPointsPerOneUnitOfPointSize();
346   DALI_TEST_EQUALS(numberOfPointsPerOneUnitOfPointSize, TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE, TEST_LOCATION);
347
348   END_TEST;
349 }
350
351 using namespace Dali::TextAbstraction;
352
353 int UtcDaliFontClientGetDefaultFonts(void)
354 {
355   TestApplication application;
356   tet_infoline(" UtcDaliFontClientGetDefaultFonts ");
357
358   FontClient fontClient;
359   fontClient = FontClient::Get();
360
361   FontList fontList;
362   fontClient.GetDefaultFonts(fontList);
363
364   std::ostringstream oss;
365   oss << fontList << std::endl;
366
367   tet_printf("FontList: %s", oss.str().c_str());
368   DALI_TEST_CHECK(fontList.size() > 0);
369
370   END_TEST;
371 }
372
373 int UtcDaliFontClientGetSystemFonts(void)
374 {
375   TestApplication application;
376   tet_infoline(" UtcDaliFontClientGetSystemFonts ");
377
378   FontClient fontClient;
379   fontClient = FontClient::Get();
380
381   FontList fontList;
382   fontClient.GetSystemFonts(fontList);
383
384   std::ostringstream oss;
385   oss << fontList << std::endl;
386
387   tet_printf("FontList: %s", oss.str().c_str());
388   DALI_TEST_CHECK(fontList.size() > 0);
389
390   const PointSize26Dot6 pointSize = fontClient.GetPointSize(fontList.size());
391   DALI_TEST_EQUALS(pointSize, FontClient::DEFAULT_POINT_SIZE, TEST_LOCATION);
392
393   END_TEST;
394 }
395
396 std::ostream& operator<<(std::ostream& o, const FontDescription& description)
397 {
398   o << "Font path: " << description.path << " family: "
399     << " width : " << description.width << " weight : " << description.weight << " slant : " << description.slant << std::endl;
400   return o;
401 }
402
403 int UtcDaliFontClientFindFallbackFont(void)
404 {
405   TestApplication application;
406   tet_infoline(" UtcDaliFontClientFindFallbackFont ");
407
408   FontClient fontClient;
409   fontClient = FontClient::Get();
410
411   FontList fontList;
412   fontClient.GetSystemFonts(fontList);
413   DALI_TEST_CHECK(fontList.size() > 0);
414
415   const std::string emptyString;
416   FontDescription   fontDescription;
417   fontDescription.width  = FontWidth::NORMAL;
418   fontDescription.weight = FontWeight::NORMAL;
419   fontDescription.slant  = FontSlant::NORMAL;
420   fontDescription.type   = FontDescription::BITMAP_FONT;
421
422   std::ostringstream oss;
423   oss << fontDescription;
424   tet_printf("Looking for: %s", oss.str().c_str());
425
426   FontId fontId = fontClient.FindFallbackFont('A',
427                                               fontDescription,
428                                               FontClient::DEFAULT_POINT_SIZE,
429                                               true);
430   DALI_TEST_CHECK(fontId != 0);
431
432   fontClient.GetDescription(fontId, fontDescription);
433   oss.clear();
434   oss << fontDescription;
435   tet_printf("Found: %d: %s", fontId, oss.str().c_str());
436
437   bool color = fontClient.IsColorGlyph(fontId, fontClient.GetGlyphIndex(fontId, 'A'));
438   DALI_TEST_CHECK(color || 1);
439   END_TEST;
440 }
441
442 int UtcDaliFontClientGetDefaultPlatformFontDescription(void)
443 {
444   TestApplication application;
445   tet_infoline(" UtcDaliFontClientGetDefaultPlatformFontDescription");
446
447   FontClient fontClient;
448   fontClient = FontClient::Get();
449
450   FontDescription fontDescription;
451   fontClient.GetDefaultPlatformFontDescription(fontDescription);
452
453   std::ostringstream oss;
454   oss << fontDescription;
455   tet_printf("%s", oss.str().c_str());
456
457   DALI_TEST_CHECK(fontDescription.path.empty() == false);
458
459   FontId fontId = fontClient.FindFallbackFont('A',
460                                               fontDescription,
461                                               FontClient::DEFAULT_POINT_SIZE,
462                                               true);
463
464   bool supported = fontClient.IsCharacterSupportedByFont(fontId, 'A');
465   DALI_TEST_EQUALS(supported, true, TEST_LOCATION);
466   END_TEST;
467 }