2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <dali-test-suite-utils.h>
21 #include <dali/dali.h>
22 #include <dali/internal/text/text-abstraction/font-client-helper.h>
23 #include <dali/devel-api/text-abstraction/font-client.h>
30 int UtcDaliFontClient(void)
32 const int ORDERED_VALUES[] = {-1, 50, 63, 75, 87, 100, 113, 125, 150, 200};
34 const unsigned int NUM_OF_ORDERED_VALUES = sizeof(ORDERED_VALUES) / sizeof(int);
36 TestApplication application;
39 tet_infoline("UtcDaliFontClient No table");
40 result = TextAbstraction::Internal::ValueToIndex(100, NULL, 0u);
41 DALI_TEST_EQUALS(-1, result, TEST_LOCATION);
43 tet_infoline("UtcDaliFontClient Non defined values");
44 result = TextAbstraction::Internal::ValueToIndex(-1, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
45 DALI_TEST_EQUALS(0, result, TEST_LOCATION);
46 result = TextAbstraction::Internal::ValueToIndex(-3, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
47 DALI_TEST_EQUALS(0, result, TEST_LOCATION);
49 tet_infoline("UtcDaliFontClient Between non defined and first of range.");
50 result = TextAbstraction::Internal::ValueToIndex(0, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
51 DALI_TEST_EQUALS(1, result, TEST_LOCATION);
52 result = TextAbstraction::Internal::ValueToIndex(30, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
53 DALI_TEST_EQUALS(1, result, TEST_LOCATION);
54 result = TextAbstraction::Internal::ValueToIndex(49, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
55 DALI_TEST_EQUALS(1, result, TEST_LOCATION);
57 tet_infoline("UtcDaliFontClient Defined in range");
58 for(unsigned int index = 1u; index < NUM_OF_ORDERED_VALUES; ++index)
60 result = TextAbstraction::Internal::ValueToIndex(ORDERED_VALUES[index], ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
61 DALI_TEST_EQUALS(index, result, TEST_LOCATION);
64 tet_infoline("UtcDaliFontClient Non defined in range");
65 result = TextAbstraction::Internal::ValueToIndex(51, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
66 DALI_TEST_EQUALS(1, result, TEST_LOCATION);
67 result = TextAbstraction::Internal::ValueToIndex(55, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
68 DALI_TEST_EQUALS(1, result, TEST_LOCATION);
69 result = TextAbstraction::Internal::ValueToIndex(62, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
70 DALI_TEST_EQUALS(2, result, TEST_LOCATION);
71 result = TextAbstraction::Internal::ValueToIndex(64, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
72 DALI_TEST_EQUALS(2, result, TEST_LOCATION);
73 result = TextAbstraction::Internal::ValueToIndex(151, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
74 DALI_TEST_EQUALS(8, result, TEST_LOCATION);
75 result = TextAbstraction::Internal::ValueToIndex(175, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
76 DALI_TEST_EQUALS(9, result, TEST_LOCATION);
77 result = TextAbstraction::Internal::ValueToIndex(176, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
78 DALI_TEST_EQUALS(9, result, TEST_LOCATION);
79 result = TextAbstraction::Internal::ValueToIndex(199, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
80 DALI_TEST_EQUALS(9, result, TEST_LOCATION);
82 tet_infoline("UtcDaliFontClient above of range");
83 result = TextAbstraction::Internal::ValueToIndex(220, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
84 DALI_TEST_EQUALS(9, result, TEST_LOCATION);
85 result = TextAbstraction::Internal::ValueToIndex(500, ORDERED_VALUES, NUM_OF_ORDERED_VALUES - 1u);
86 DALI_TEST_EQUALS(9, result, TEST_LOCATION);
91 int UtcDaliFontClientAtlasLimitation(void)
93 TestApplication application;
95 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
97 tet_infoline("UtcDaliFontClientAtlasLimitation Default");
98 result = fontClient.IsAtlasLimitationEnabled();
99 DALI_TEST_EQUALS(TextAbstraction::FontClient::DEFAULT_ATLAS_LIMITATION_ENABLED, result, TEST_LOCATION);
101 tet_infoline("UtcDaliFontClientAtlasLimitation Enabled");
102 fontClient.EnableAtlasLimitation(true);
103 result = fontClient.IsAtlasLimitationEnabled();
104 DALI_TEST_EQUALS(true, result, TEST_LOCATION);
106 tet_infoline("UtcDaliFontClientAtlasLimitation Disabled");
107 fontClient.EnableAtlasLimitation(false);
108 result = fontClient.IsAtlasLimitationEnabled();
109 DALI_TEST_EQUALS(false, result, TEST_LOCATION);
113 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
114 const uint32_t MAX_WIDTH_FIT_IN_ATLAS = TextAbstraction::FontClient::MAX_TEXT_ATLAS_WIDTH - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK;
115 const uint32_t MAX_HEIGHT_FIT_IN_ATLAS = TextAbstraction::FontClient::MAX_TEXT_ATLAS_HEIGHT - TextAbstraction::FontClient::PADDING_TEXT_ATLAS_BLOCK;
117 int UtcDaliFontClientAtlasLimitationEnabled(void)
120 TestApplication application;
122 char* pathNamePtr = get_current_dir_name();
123 const std::string pathName( pathNamePtr );
126 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
127 fontClient.EnableAtlasLimitation(true);
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;
140 // Block's width or height are less than 512
141 tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=200");
142 uint32_t pointSize200 = 200 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
143 TextAbstraction::FontId fontId200 = fontClient.GetFontId(fontDescription, pointSize200);
144 TextAbstraction::FontClient::GlyphBufferData glyphBufferData200;
145 glyphBufferData200.width = 0;
146 glyphBufferData200.height = 0;
147 fontClient.CreateBitmap(fontId200, 68, false, false, glyphBufferData200, 0);
149 DALI_TEST_GREATER( MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData200.width, TEST_LOCATION );
150 DALI_TEST_GREATER( MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData200.height, TEST_LOCATION );
152 // Block's width or height are greater than 512 and less than 1024
153 uint32_t pointSize1000 = 1000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
154 tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=1000");
155 TextAbstraction::FontId fontId1000 = fontClient.GetFontId(fontDescription, pointSize1000);
156 TextAbstraction::FontClient::GlyphBufferData glyphBufferData1000;
157 glyphBufferData1000.width = 0;
158 glyphBufferData1000.height = 0;
159 fontClient.CreateBitmap(fontId1000, 68, false, false, glyphBufferData1000, 0);
161 DALI_TEST_GREATER( MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData1000.width, TEST_LOCATION );
162 DALI_TEST_GREATER( MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData1000.height, TEST_LOCATION );
164 // Block's width or height are greater than 1024 and less than 2048
165 uint32_t pointSize2000 = 2000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
166 tet_infoline("UtcDaliFontClientAtlasLimitationEnabled PointSize=2000");
167 TextAbstraction::FontId fontId2000 = fontClient.GetFontId(fontDescription, pointSize2000);
168 TextAbstraction::FontClient::GlyphBufferData glyphBufferData2000;
169 glyphBufferData2000.width = 0;
170 glyphBufferData2000.height = 0;
171 fontClient.CreateBitmap(fontId2000, 68, false, false, glyphBufferData2000, 0);
173 DALI_TEST_GREATER( MAX_WIDTH_FIT_IN_ATLAS, glyphBufferData2000.width, TEST_LOCATION );
174 DALI_TEST_GREATER( MAX_HEIGHT_FIT_IN_ATLAS, glyphBufferData2000.height, TEST_LOCATION );
180 int UtcDaliFontClientAtlasLimitationDisabled(void)
183 TestApplication application;
185 char* pathNamePtr = get_current_dir_name();
186 const std::string pathName( pathNamePtr );
189 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
190 fontClient.EnableAtlasLimitation(false);
192 TextAbstraction::FontDescription fontDescription;
193 fontDescription.path = pathName + DEFAULT_FONT_DIR + "/dejavu/DejaVuSans.ttf";
194 fontDescription.family = "DejaVuSans";
195 fontDescription.width = TextAbstraction::FontWidth::NONE;
196 fontDescription.weight = TextAbstraction::FontWeight::NORMAL;
197 fontDescription.slant = TextAbstraction::FontSlant::NONE;
199 // Block's width or height are less than 512
200 tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=200");
201 uint32_t pointSize200 = 200 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
202 TextAbstraction::FontId fontId200 = fontClient.GetFontId(fontDescription, pointSize200);
203 TextAbstraction::FontClient::GlyphBufferData glyphBufferData200;
204 glyphBufferData200.width = 0;
205 glyphBufferData200.height = 0;
206 fontClient.CreateBitmap(fontId200, 68, false, false, glyphBufferData200, 0);
208 DALI_TEST_GREATER(512u, glyphBufferData200.width, TEST_LOCATION ); //93u
209 DALI_TEST_GREATER(512u, glyphBufferData200.height, TEST_LOCATION ); //115u
211 // Block's width or height are greater than 512 and less than 1024
212 tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=1000");
213 uint32_t pointSize1000 = 1000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
214 TextAbstraction::FontId fontId1000 = fontClient.GetFontId(fontDescription, pointSize1000);
215 TextAbstraction::FontClient::GlyphBufferData glyphBufferData1000;
216 glyphBufferData1000.width = 0;
217 glyphBufferData1000.height = 0;
218 fontClient.CreateBitmap(fontId1000, 68, false, false, glyphBufferData1000, 0);
220 DALI_TEST_GREATER( 512u, glyphBufferData1000.width, TEST_LOCATION ); //462u
221 DALI_TEST_GREATER( glyphBufferData1000.height, 512u, TEST_LOCATION ); //574u
223 // Block's width or height are greater than 1024 and less than 2048
224 tet_infoline("UtcDaliFontClientAtlasLimitationDisabled PointSize=2000");
225 uint32_t pointSize2000 = 2000 * TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE;
226 TextAbstraction::FontId fontId2000 = fontClient.GetFontId(fontDescription, pointSize2000);
227 TextAbstraction::FontClient::GlyphBufferData glyphBufferData2000;
228 glyphBufferData2000.width = 0;
229 glyphBufferData2000.height = 0;
230 fontClient.CreateBitmap(fontId2000, 68, false, false, glyphBufferData2000, 0);
232 DALI_TEST_GREATER( 1024u, glyphBufferData2000.width, TEST_LOCATION ); //924u
233 DALI_TEST_GREATER( glyphBufferData2000.height, 1024u, TEST_LOCATION ); //1148u
238 int UtcDaliFontClientCurrentMaximumBlockSizeFitInAtlas(void)
240 TestApplication application;
241 tet_infoline(" UtcDaliFontClientCurrentMaximumBlockSizeFitInAtlas ");
244 TextAbstraction::FontClient fontClient;
245 fontClient = TextAbstraction::FontClient::Get();
247 Size defaultTextAtlasSize = fontClient.GetDefaultTextAtlasSize();
248 Size maximumTextAtlasSize = fontClient.GetMaximumTextAtlasSize();
249 Size currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
251 tet_infoline("CurrentMaximumBlockSizeFitInAtlas start with default ");
252 DALI_TEST_EQUALS( currentMaximumBlockSizeFitInAtlas, defaultTextAtlasSize, TEST_LOCATION );
254 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with current ");
255 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(currentMaximumBlockSizeFitInAtlas);
256 DALI_TEST_CHECK (isChanged);
258 Size decreaseOnlyWidth (currentMaximumBlockSizeFitInAtlas.width - 1u, currentMaximumBlockSizeFitInAtlas.height);
259 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with width < current ");
260 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseOnlyWidth);
261 DALI_TEST_CHECK (isChanged);
263 Size decreaseOnlyHeigth (currentMaximumBlockSizeFitInAtlas.width, currentMaximumBlockSizeFitInAtlas.height - 1u);
264 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with height < current ");
265 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseOnlyHeigth);
266 DALI_TEST_CHECK (isChanged);
268 Size decreaseBoth (currentMaximumBlockSizeFitInAtlas.width - 1u, currentMaximumBlockSizeFitInAtlas.height - 1u);
269 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with size < current ");
270 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(decreaseBoth);
271 DALI_TEST_CHECK (isChanged);
273 Size increaseOnlyWidth (maximumTextAtlasSize.width + 1u, currentMaximumBlockSizeFitInAtlas.height);
274 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with width > max ");
275 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseOnlyWidth);
276 DALI_TEST_CHECK (!isChanged);
278 Size increaseOnlyHeigth (currentMaximumBlockSizeFitInAtlas.width, maximumTextAtlasSize.height + 1u);
279 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with height > max ");
280 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseOnlyHeigth);
281 DALI_TEST_CHECK (!isChanged);
283 Size increaseBoth (maximumTextAtlasSize.width + 1u, maximumTextAtlasSize.height + 1u);
284 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with size > max ");
285 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseBoth);
286 DALI_TEST_CHECK (!isChanged);
288 currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
289 if(currentMaximumBlockSizeFitInAtlas.width < maximumTextAtlasSize.width && currentMaximumBlockSizeFitInAtlas.height < maximumTextAtlasSize.height)
291 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is changed with current < size < max ");
292 Size increaseWidth = Size(currentMaximumBlockSizeFitInAtlas.width + 1u, currentMaximumBlockSizeFitInAtlas.height);
293 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseWidth);
294 DALI_TEST_CHECK (isChanged);
295 currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
297 Size increaseHeigth = Size(currentMaximumBlockSizeFitInAtlas.width, currentMaximumBlockSizeFitInAtlas.height + 1u);
298 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(increaseHeigth);
299 DALI_TEST_CHECK (isChanged);
300 currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
302 Size sizeLessThanMax = Size(currentMaximumBlockSizeFitInAtlas.width + 1u, currentMaximumBlockSizeFitInAtlas.height + 1u);
303 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(sizeLessThanMax);
305 if(currentMaximumBlockSizeFitInAtlas.width < maximumTextAtlasSize.width && currentMaximumBlockSizeFitInAtlas.height < maximumTextAtlasSize.height)
307 DALI_TEST_CHECK (isChanged);
311 DALI_TEST_CHECK (!isChanged);
314 currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
316 DALI_TEST_NOT_EQUALS (currentMaximumBlockSizeFitInAtlas, defaultTextAtlasSize, 0.0f, TEST_LOCATION );
317 DALI_TEST_EQUALS (currentMaximumBlockSizeFitInAtlas, sizeLessThanMax, TEST_LOCATION );
319 tet_infoline("SetCurrentMaximumBlockSizeFitInAtlas is not changed with size == max ");
320 isChanged = fontClient.SetCurrentMaximumBlockSizeFitInAtlas(maximumTextAtlasSize);
321 DALI_TEST_CHECK (!isChanged);
324 currentMaximumBlockSizeFitInAtlas = fontClient.GetCurrentMaximumBlockSizeFitInAtlas();
325 DALI_TEST_NOT_EQUALS (currentMaximumBlockSizeFitInAtlas, maximumTextAtlasSize, 0.0f, TEST_LOCATION );
331 int UtcDaliFontClientTextAtlasConstants(void)
333 TestApplication application;
334 tet_infoline(" UtcDaliFontClientTextAtlasConstants ");
336 TextAbstraction::FontClient fontClient;
337 fontClient = TextAbstraction::FontClient::Get();
339 Size defaultTextAtlasSize = fontClient.GetDefaultTextAtlasSize();
340 Size defaultTextAtlasWidthHeight(TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_WIDTH, TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_HEIGHT);
341 DALI_TEST_EQUALS (defaultTextAtlasSize, TextAbstraction::FontClient::DEFAULT_TEXT_ATLAS_SIZE, TEST_LOCATION );
342 DALI_TEST_EQUALS (defaultTextAtlasSize, defaultTextAtlasWidthHeight, TEST_LOCATION );
345 Size maximumTextAtlasSize = fontClient.GetMaximumTextAtlasSize();
346 Size maxTextAtlasWidthHeight(TextAbstraction::FontClient::MAX_TEXT_ATLAS_WIDTH, TextAbstraction::FontClient::MAX_TEXT_ATLAS_HEIGHT);
347 DALI_TEST_EQUALS (maximumTextAtlasSize, TextAbstraction::FontClient::MAX_TEXT_ATLAS_SIZE, TEST_LOCATION );
348 DALI_TEST_EQUALS (maximumTextAtlasSize, maxTextAtlasWidthHeight, TEST_LOCATION );
351 uint32_t numberOfPointsPerOneUnitOfPointSize = fontClient.GetNumberOfPointsPerOneUnitOfPointSize();
352 DALI_TEST_EQUALS (numberOfPointsPerOneUnitOfPointSize, TextAbstraction::FontClient::NUMBER_OF_POINTS_PER_ONE_UNIT_OF_POINT_SIZE, TEST_LOCATION );