License conversion from Flora to Apache 2.0
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-TextStyle.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 <stdlib.h>
21 #include <dali/dali.h>
22 #include <dali-test-suite-utils.h>
23
24 using namespace Dali;
25
26 void utc_dali_text_style_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void utc_dali_text_style_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36 namespace
37 {
38
39 static const std::string FONT_FAMILY="Arial";
40 static const std::string FONT_STYLE="Bold";
41 static const PointSize FONT_POINT=PointSize(12.f);
42 static const TextStyle::Weight FONT_TEXT_STYLE_WEIGHT = TextStyle::EXTRALIGHT;
43
44 static const Vector4 FONT_TEXT_COLOR = Color::RED;
45 static const Degree FONT_ITALICS_ANGLE(10.f);
46 static const bool FONT_ITALICS = true;
47 static const bool FONT_UNDERLINE = true;
48 static const bool FONT_SHADOW = true;
49 static const bool FONT_GLOW = true;
50 static const bool FONT_OUTLINE = true;
51 static const float FONT_UNDERLINE_THICKNESS = 5.0f;
52 static const float FONT_UNDERLINE_POSITION = 60.0f;
53 static const Vector4 FONT_SHADOW_COLOR = Color::BLUE;
54 static const Vector2 FONT_SHADOW_OFFSET(2.f, 2.f );
55 static const float FONT_SHADOW_SIZE = 55.f;
56 static const Vector4 FONT_TEXT_GLOW_COLOR = Color::BLACK;
57 static const float FONT_GLOW_INTENSITY = 10.0f;
58 static const float FONT_SMOOTH_EDGE = 5.0f;
59 static const Vector4 FONT_OUTLINE_COLOR = Color::MAGENTA;
60 static const Vector2 FONT_OUTLINE_THICKNESS(15.f, 14.f );
61
62 } // anon namespace
63
64 int UtcDaliTextStyleDefaultConstructor(void)
65 {
66   tet_infoline(" UtcDaliTextStyleDefaultConstructor ");
67
68   TestApplication application;
69
70   TextStyle defaultStyle;
71
72   DALI_TEST_CHECK( defaultStyle.GetFontName().empty() );
73   DALI_TEST_CHECK( PointSize( 0.f ) == defaultStyle.GetFontPointSize() );
74   DALI_TEST_CHECK( TextStyle::REGULAR == defaultStyle.GetWeight() );
75   DALI_TEST_CHECK( Color::WHITE == defaultStyle.GetTextColor() );
76   DALI_TEST_CHECK( !defaultStyle.GetItalics() );
77
78   DALI_TEST_CHECK( !defaultStyle.GetUnderline() );
79   DALI_TEST_CHECK( fabs( TextStyle::DEFAULT_UNDERLINE_THICKNESS - defaultStyle.GetUnderlineThickness() ) < GetRangedEpsilon( TextStyle::DEFAULT_UNDERLINE_THICKNESS, defaultStyle.GetUnderlineThickness() ) );
80   DALI_TEST_CHECK( fabs( TextStyle::DEFAULT_UNDERLINE_POSITION - defaultStyle.GetUnderlinePosition() ) < GetRangedEpsilon( TextStyle::DEFAULT_UNDERLINE_POSITION, defaultStyle.GetUnderlinePosition() ) );
81
82   DALI_TEST_CHECK( TextStyle::DEFAULT_ITALICS_ANGLE == defaultStyle.GetItalicsAngle() );
83   DALI_TEST_CHECK( TextStyle::DEFAULT_SHADOW_COLOR == defaultStyle.GetShadowColor() );
84   DALI_TEST_CHECK( TextStyle::DEFAULT_GLOW_COLOR == defaultStyle.GetGlowColor() );
85   DALI_TEST_CHECK( TextStyle::DEFAULT_OUTLINE_COLOR == defaultStyle.GetOutlineColor() );
86
87   DALI_TEST_CHECK( TextStyle::DEFAULT_SHADOW_OFFSET == defaultStyle.GetShadowOffset() );
88   DALI_TEST_CHECK( TextStyle::DEFAULT_OUTLINE_THICKNESS == defaultStyle.GetOutlineThickness() );
89   DALI_TEST_CHECK( fabs( TextStyle::DEFAULT_GLOW_INTENSITY - defaultStyle.GetGlowIntensity() ) < GetRangedEpsilon( TextStyle::DEFAULT_GLOW_INTENSITY, defaultStyle.GetGlowIntensity() ) );
90   DALI_TEST_CHECK( fabs( TextStyle::DEFAULT_SMOOTH_EDGE_DISTANCE_FIELD - defaultStyle.GetSmoothEdge() ) < GetRangedEpsilon( TextStyle::DEFAULT_SMOOTH_EDGE_DISTANCE_FIELD, defaultStyle.GetSmoothEdge() ) );
91   END_TEST;
92 }
93
94 int UtcDaliTextStyleCopyConstructor(void)
95 {
96   tet_infoline(" UtcDaliTextStyleCopyConstructor ");
97
98   TestApplication application;
99
100   const std::string fontName( "Arial" );
101   const std::string fontStyle( "Book" );
102
103   TextStyle style;
104   style.SetFontName( fontName );
105   style.SetFontStyle( fontStyle );
106   style.SetFontPointSize( PointSize( 16.f ) );
107   style.SetWeight( TextStyle::EXTRABLACK );
108   style.SetTextColor( Color::BLUE );
109   style.SetItalics( true );
110   style.SetUnderline( true );
111   style.SetItalicsAngle( Degree( 15.f ) );
112   style.SetUnderlineThickness( 3.5f );
113   style.SetUnderlinePosition( 12.f );
114   style.SetShadow( true, Color::RED, Vector2( 0.5f, 0.5f ), TextStyle::DEFAULT_SHADOW_SIZE );
115   style.SetGlow( true, Color::GREEN, 0.75f );
116   style.SetSmoothEdge( 0.8f );
117   style.SetOutline( true, Color::BLUE, Vector2( 0.9f, 0.9f ) );
118
119   TextStyle style1( style );
120   TextStyle style2 = style;
121
122   DALI_TEST_CHECK( fontName == style1.GetFontName() );
123   DALI_TEST_CHECK( fontStyle == style.GetFontStyle() );
124   DALI_TEST_CHECK( PointSize( 16.f ) == style1.GetFontPointSize() );
125   DALI_TEST_CHECK( TextStyle::EXTRABLACK == style1.GetWeight() );
126   DALI_TEST_CHECK( Vector4( 0.f, 0.f, 1.f, 1.f ) == style1.GetTextColor() );
127   DALI_TEST_CHECK( style1.GetItalics() );
128   DALI_TEST_CHECK( style1.GetUnderline() );
129
130   DALI_TEST_CHECK( Degree( 15.f ) == style1.GetItalicsAngle() );
131   DALI_TEST_CHECK( Color::RED == style1.GetShadowColor() );
132   DALI_TEST_CHECK( Color::GREEN == style1.GetGlowColor() );
133   DALI_TEST_CHECK( Color::BLUE == style1.GetOutlineColor() );
134
135   DALI_TEST_CHECK( Vector2( 0.5f, 0.5f ) == style1.GetShadowOffset() );
136   DALI_TEST_CHECK( Vector2( 0.9f, 0.9f ) == style1.GetOutlineThickness() );
137   DALI_TEST_CHECK( fabs( 0.75f - style1.GetGlowIntensity() ) < GetRangedEpsilon( 0.75f, style1.GetGlowIntensity() ) );
138   DALI_TEST_CHECK( fabs( 0.8f - style1.GetSmoothEdge() ) < GetRangedEpsilon( 0.8f, style1.GetSmoothEdge() ) );
139
140   DALI_TEST_CHECK( fontName == style2.GetFontName() );
141   DALI_TEST_CHECK( PointSize( 16.f ) == style2.GetFontPointSize() );
142   DALI_TEST_CHECK( TextStyle::EXTRABLACK == style2.GetWeight() );
143   DALI_TEST_CHECK( Vector4( 0.f, 0.f, 1.f, 1.f ) == style2.GetTextColor() );
144   DALI_TEST_CHECK( style2.GetItalics() );
145
146   DALI_TEST_CHECK( style2.GetUnderline() );
147   DALI_TEST_CHECK( fabs( 3.5f - style2.GetUnderlineThickness() ) < GetRangedEpsilon( 3.5f, style2.GetUnderlineThickness() ) );
148   DALI_TEST_CHECK( fabs( 12.f - style2.GetUnderlinePosition() ) < GetRangedEpsilon( 12.f, style2.GetUnderlinePosition() ) );
149
150   DALI_TEST_CHECK( Color::RED == style2.GetShadowColor() );
151   DALI_TEST_CHECK( Color::GREEN == style2.GetGlowColor() );
152   DALI_TEST_CHECK( Color::BLUE == style2.GetOutlineColor() );
153
154   DALI_TEST_CHECK( Vector2( 0.5f, 0.5f ) == style2.GetShadowOffset() );
155   DALI_TEST_CHECK( Vector2( 0.9f, 0.9f ) == style2.GetOutlineThickness() );
156   DALI_TEST_CHECK( fabs( 0.75f - style2.GetGlowIntensity() ) < GetRangedEpsilon( 0.75f, style2.GetGlowIntensity() ) );
157   DALI_TEST_CHECK( fabs( 0.8f - style2.GetSmoothEdge() ) < GetRangedEpsilon( 0.8f, style2.GetSmoothEdge() ) );
158   END_TEST;
159 }
160
161 int UtcDaliTextStyleComparisonOperator(void)
162 {
163   tet_infoline(" UtcDaliTextStyleComparisonOperator ");
164
165   TestApplication application;
166
167   TextStyle style1;
168   TextStyle style2;
169
170   const std::string fontName( "Arial" );
171
172   style1.SetFontName( fontName );
173   DALI_TEST_CHECK( style1 != style2 );
174
175   style2.SetFontName( fontName );
176   DALI_TEST_CHECK( style1 == style2 );
177   END_TEST;
178 }
179
180 int UtcDaliTextStyleCopy(void)
181 {
182   tet_infoline(" UtcDaliTextStyleCopy ");
183
184   TestApplication application;
185
186   TextStyle style;
187
188   // Set a style different than default.
189   TextStyle style2;
190   style2.SetFontName( "Arial" );
191   style2.SetFontStyle( "Bold" );
192   style2.SetFontPointSize( PointSize( 24.f ) );
193   style2.SetWeight( TextStyle::BOLD );
194   style2.SetTextColor( Color::RED );
195   style2.SetItalics( true );
196   style2.SetUnderline( true );
197   style2.SetItalicsAngle( Degree( 15.f ) );
198   style2.SetUnderlineThickness( 3.5f );
199   style2.SetUnderlinePosition( 12.f );
200   style2.SetShadow( true, Color::GREEN, Vector2( 0.5f, 0.5f ), 0.5f );
201   style2.SetGlow( true, Color::BLUE, 0.5f );
202   style2.SetSmoothEdge( 0.5f );
203   style2.SetOutline( true, Color::WHITE, Vector2( 0.05f, 0.5f ) );
204
205   // Test mask.
206
207   // All values are copied.
208   style.Copy( style2 );
209
210   DALI_TEST_CHECK( style == style2 );
211
212   // Test FONT
213   style = TextStyle();
214
215   style.Copy( style2, TextStyle::FONT );
216
217   DALI_TEST_CHECK( style.GetFontName() != "" );
218
219   // Test STYLE
220   style = TextStyle();
221
222   style.Copy( style2, TextStyle::STYLE );
223
224   DALI_TEST_CHECK( style.GetFontStyle() != "" );
225
226   // Test SIZE
227   style = TextStyle();
228
229   style.Copy( style2, TextStyle::SIZE );
230
231   DALI_TEST_CHECK( style.GetFontPointSize() > 0.f );
232
233   // Test WEIGHT
234   style = TextStyle();
235
236   style.Copy( style2, TextStyle::WEIGHT );
237
238   DALI_TEST_CHECK( style.GetWeight() != TextStyle::REGULAR );
239   DALI_TEST_CHECK( fabsf( style.GetSmoothEdge() - TextStyle::DEFAULT_SMOOTH_EDGE_DISTANCE_FIELD ) > Math::MACHINE_EPSILON_1000 );
240
241   // Test COLOR
242   style = TextStyle();
243
244   style.Copy( style2, TextStyle::COLOR );
245
246   DALI_TEST_CHECK( style.GetTextColor() != TextStyle::DEFAULT_TEXT_COLOR );
247
248   // Test ITALICS
249   style = TextStyle();
250
251   style.Copy( style2, TextStyle::ITALICS );
252
253   DALI_TEST_CHECK( style.GetItalics() );
254   DALI_TEST_CHECK( Degree( 15.f ) == style.GetItalicsAngle() );
255
256   // Test UNDERLINE
257   style = TextStyle();
258
259   style.Copy( style2, TextStyle::UNDERLINE );
260
261   DALI_TEST_CHECK( style.GetUnderline() );
262   DALI_TEST_CHECK( fabs( 3.5f - style.GetUnderlineThickness() ) < GetRangedEpsilon( 3.5f, style.GetUnderlineThickness() ) );
263   DALI_TEST_CHECK( fabs( 12.f - style.GetUnderlinePosition() ) < GetRangedEpsilon( 12.f, style.GetUnderlinePosition() ) );
264
265   // Test SHADOW
266   style = TextStyle();
267
268   style.Copy( style2, TextStyle::SHADOW );
269
270   DALI_TEST_CHECK( style.GetShadow() );
271   DALI_TEST_CHECK( style.GetShadowColor() != TextStyle::DEFAULT_SHADOW_COLOR );
272   DALI_TEST_CHECK( style.GetShadowOffset() != TextStyle::DEFAULT_SHADOW_OFFSET );
273   DALI_TEST_CHECK( fabsf( style.GetShadowSize() - TextStyle::DEFAULT_SHADOW_SIZE ) > Math::MACHINE_EPSILON_1000 );
274
275   // Test GLOW
276   style = TextStyle();
277
278   style.Copy( style2, TextStyle::GLOW );
279
280   DALI_TEST_CHECK( style.GetGlow() );
281   DALI_TEST_CHECK( style.GetGlowColor() != TextStyle::DEFAULT_GLOW_COLOR );
282   DALI_TEST_CHECK( fabsf( style.GetGlowIntensity() - TextStyle::DEFAULT_GLOW_INTENSITY ) > Math::MACHINE_EPSILON_1000 );
283
284   // Test OUTLINE
285   style = TextStyle();
286
287   style.Copy( style2, TextStyle::OUTLINE );
288
289   DALI_TEST_CHECK( style.GetOutline() );
290   DALI_TEST_CHECK( style.GetOutlineColor() != TextStyle::DEFAULT_OUTLINE_COLOR );
291   DALI_TEST_CHECK( style.GetOutlineThickness() != TextStyle::DEFAULT_OUTLINE_THICKNESS );
292   END_TEST;
293 }
294
295 int UtcDaliTextStyleSetGetFontName(void)
296 {
297   tet_infoline(" UtcDaliTextStyleSetGetFontName ");
298
299   TestApplication application;
300
301   TextStyle style;
302
303   const std::string fontName( "Arial" );
304   style.SetFontName( fontName );
305
306   DALI_TEST_CHECK( fontName == style.GetFontName() );
307   END_TEST;
308 }
309
310 int UtcDaliTextStyleSetGetFontStyle(void)
311 {
312   tet_infoline(" UtcDaliTextStyleSetGetFontStyle ");
313
314   TestApplication application;
315
316   TextStyle style;
317
318   const std::string fontStyle( "Book" );
319   style.SetFontStyle( fontStyle );
320
321   DALI_TEST_CHECK( fontStyle == style.GetFontStyle() );
322   END_TEST;
323 }
324
325 int UtcDaliTextStyleSetGetFontPointSize(void)
326 {
327   tet_infoline(" UtcDaliTextStyleSetGetFontPointSize ");
328
329   TestApplication application;
330
331   TextStyle style;
332
333   style.SetFontPointSize( PointSize( 16.f ) );
334
335   DALI_TEST_CHECK( PointSize( 16.f ) == style.GetFontPointSize() );
336   END_TEST;
337 }
338
339 int UtcDaliTextStyleSetGetWeight(void)
340 {
341   tet_infoline(" UtcDaliTextStyleSetGetWeight ");
342
343   TestApplication application;
344
345   TextStyle style;
346
347   style.SetWeight( TextStyle::EXTRABLACK );
348
349   DALI_TEST_CHECK( TextStyle::EXTRABLACK == style.GetWeight() );
350   END_TEST;
351 }
352
353 int UtcDaliTextStyleSetGetTextColor(void)
354 {
355   tet_infoline(" UtcDaliTextStyleSetGetTextColor ");
356
357   TestApplication application;
358
359   TextStyle style;
360
361   style.SetTextColor( Color::GREEN );
362
363   DALI_TEST_CHECK( Vector4( 0.f, 1.f, 0.f, 1.f ) == style.GetTextColor() );
364   END_TEST;
365 }
366
367 int UtcDaliTextStyleSetGetItalics(void)
368 {
369   tet_infoline(" UtcDaliTextStyleSetGetItalics ");
370
371   TestApplication application;
372
373   TextStyle style;
374
375   style.SetItalics( true );
376
377   DALI_TEST_CHECK( style.GetItalics() );
378
379   style.SetItalics( false );
380
381   DALI_TEST_CHECK( !style.GetItalics() );
382   END_TEST;
383 }
384
385 int UtcDaliTextStyleSetGetItalicsAngle(void)
386 {
387   tet_infoline(" UtcDaliTextStyleSetGetItalicsAngle ");
388
389   TestApplication application;
390
391   TextStyle style;
392
393   DALI_TEST_CHECK( TextStyle::DEFAULT_ITALICS_ANGLE == style.GetItalicsAngle() );
394
395   style.SetItalicsAngle( Degree( 15.f ) );
396
397   DALI_TEST_CHECK( Degree( 15.f ) == style.GetItalicsAngle() );
398   END_TEST;
399 }
400
401 int UtcDaliTextStyleSetGetUnderline(void)
402 {
403   tet_infoline(" UtcDaliTextStyleSetGetUnderline ");
404
405   TestApplication application;
406
407   TextStyle style;
408
409   style.SetUnderline( true );
410
411   DALI_TEST_CHECK( style.GetUnderline() );
412
413   style.SetUnderline( false );
414
415   DALI_TEST_CHECK( !style.GetUnderline() );
416
417   style.SetUnderlineThickness( 3.5f );
418   style.SetUnderlinePosition( 12.f );
419
420   DALI_TEST_CHECK( fabs( 3.5f - style.GetUnderlineThickness() ) < GetRangedEpsilon( 3.5f, style.GetUnderlineThickness() ) );
421   DALI_TEST_CHECK( fabs( 12.f - style.GetUnderlinePosition() ) < GetRangedEpsilon( 12.f, style.GetUnderlinePosition() ) );
422   END_TEST;
423 }
424
425 int UtcDaliTextStyleSetGetShadow(void)
426 {
427   tet_infoline(" UtcDaliTextStyleSetGetShadow ");
428
429   TestApplication application;
430
431   TextStyle style;
432
433   DALI_TEST_CHECK( !style.GetShadow() );
434
435   style.SetShadow( true );
436
437   DALI_TEST_CHECK( style.GetShadow() );
438
439   style.SetShadow( true, Color::RED, Vector2( 0.5f, 0.5f ) );
440
441   DALI_TEST_EQUALS( style.GetShadowColor(), Color::RED, TEST_LOCATION );
442   DALI_TEST_CHECK( Vector2( 0.5f, 0.5f ) == style.GetShadowOffset() );
443
444   style.SetShadow( false );
445
446   DALI_TEST_CHECK( !style.GetShadow() );
447   END_TEST;
448 }
449
450 int UtcDaliTextStyleSetGetGlow(void)
451 {
452   tet_infoline(" UtcDaliTextStyleSetGetGlow ");
453
454   TestApplication application;
455
456   TextStyle style;
457
458   DALI_TEST_CHECK( !style.GetGlow() );
459
460   style.SetGlow( true );
461
462   DALI_TEST_CHECK( style.GetGlow() );
463
464   style.SetGlow( true, Color::RED, 0.75f );
465
466   DALI_TEST_EQUALS( style.GetGlowColor(), Color::RED, TEST_LOCATION );
467   DALI_TEST_CHECK( fabs( 0.75f - style.GetGlowIntensity() ) < GetRangedEpsilon( 0.75f, style.GetGlowIntensity() ) );
468
469   style.SetGlow( false );
470
471   DALI_TEST_CHECK( !style.GetGlow() );
472   END_TEST;
473 }
474
475 int UtcDaliTextStyleSetGetOutline(void)
476 {
477   tet_infoline(" UtcDaliTextStyleSetGetGlow ");
478
479   TestApplication application;
480
481   TextStyle style;
482
483   DALI_TEST_CHECK( !style.GetOutline() );
484
485   style.SetOutline( true );
486
487   DALI_TEST_CHECK( style.GetOutline() );
488
489   style.SetOutline( true, Color::RED, Vector2( 0.9f, 0.9f ) );
490
491   DALI_TEST_EQUALS( style.GetOutlineColor(), Color::RED, TEST_LOCATION );
492   DALI_TEST_CHECK( Vector2( 0.9f, 0.9f ) == style.GetOutlineThickness() );
493
494   style.SetOutline( false );
495
496   DALI_TEST_CHECK( !style.GetOutline() );
497   END_TEST;
498 }
499
500 int UtcDaliTextStyleSetGetSmoothEdge(void)
501 {
502   tet_infoline(" UtcDaliTextStyleSetGetGlow ");
503
504   TestApplication application;
505
506   TextStyle style;
507
508   style.SetSmoothEdge( 0.5f );
509
510   DALI_TEST_CHECK( fabs( 0.5f - style.GetSmoothEdge() ) < GetRangedEpsilon( 0.5f, style.GetSmoothEdge() ) );
511   END_TEST;
512 }