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