Merge "Added Control::SetSubState handling" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-styling / utc-Dali-StyleManager.cpp
1  /*
2  * Copyright (c) 2016 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 #include <dali/devel-api/adaptor-framework/style-monitor.h>
18
19 #include <iostream>
20 #include <fstream>
21 #include <sstream>
22 #include <stdlib.h>
23 #include <dali-toolkit-test-suite-utils.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <dali/integration-api/events/touch-event-integ.h>
26 #include <dali-toolkit/devel-api/builder/builder.h>
27 #include <test-button.h>
28 #include <test-animation-data.h>
29 #include <toolkit-style-monitor.h>
30 #include <dummy-control.h>
31 #include <dali-toolkit/devel-api/controls/control-devel.h>
32 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
33
34 using namespace Dali;
35 using namespace Dali::Toolkit;
36
37 namespace
38 {
39 std::string defaultTheme;
40
41 } // anonymous namespace
42
43
44
45
46 void dali_style_manager_startup(void)
47 {
48   test_return_value = TET_UNDEF;
49
50   std::ifstream t("src/dali-toolkit-styling/default-theme.json");
51   defaultTheme = std::string((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>());
52 }
53
54 void dali_style_manager_cleanup(void)
55 {
56   test_return_value = TET_PASS;
57 }
58
59 int UtcDaliStyleManagerConstructorP(void)
60 {
61   ToolkitTestApplication application;
62
63   tet_infoline(" UtcDaliStyleManagerConstructorP");
64   StyleManager styleManager;
65   DALI_TEST_CHECK( !styleManager);
66   END_TEST;
67 }
68
69 int UtcDaliStyleManagerCopyConstructorP(void)
70 {
71   TestApplication application;
72
73   StyleManager styleManager = StyleManager::Get();
74   StyleManager copyOfStyleManager( styleManager );
75
76   DALI_TEST_CHECK( copyOfStyleManager );
77   END_TEST;
78 }
79
80 int UtcDaliStyleManagerAssignmentOperatorP(void)
81 {
82   TestApplication application;
83
84   StyleManager styleManager = StyleManager::Get();
85   StyleManager copyOfStyleManager = styleManager;
86
87   DALI_TEST_CHECK( copyOfStyleManager );
88   DALI_TEST_CHECK( copyOfStyleManager == styleManager );
89   END_TEST;
90 }
91
92 int UtcDaliStyleManagerGet(void)
93 {
94   ToolkitTestApplication application;
95
96   tet_infoline(" UtcDaliStyleManagerGet");
97
98   // Register Type
99   TypeInfo type;
100   type = TypeRegistry::Get().GetTypeInfo( "StyleManager" );
101   DALI_TEST_CHECK( type );
102   BaseHandle handle = type.CreateInstance();
103   DALI_TEST_CHECK( handle );
104
105   StyleManager manager;
106
107   manager = StyleManager::Get();
108   DALI_TEST_CHECK(manager);
109
110   StyleManager newManager = StyleManager::Get();
111   DALI_TEST_CHECK(newManager);
112
113   // Check that focus manager is a singleton
114   DALI_TEST_CHECK(manager == newManager);
115   END_TEST;
116 }
117
118
119 namespace
120 {
121 class StyleChangedSignalChecker : public ConnectionTracker
122 {
123 public:
124   StyleChangedSignalChecker()
125   : signalCount(0)
126   {
127   }
128
129   void OnStyleChanged(StyleManager styleManager, StyleChange::Type type)
130   {
131     signalCount++;
132   }
133
134   void Reset()
135   {
136     signalCount =0;
137   }
138
139 public:
140   int signalCount;
141 };
142
143 } // anonymous namespace
144
145 int UtcDaliStyleManagerApplyTheme(void)
146 {
147   ToolkitTestApplication application;
148
149   tet_infoline( "Testing StyleManager ApplyTheme" );
150
151   const char* json1 =
152     "{\n"
153     "  \"constants\":\n"
154     "  {\n"
155     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"Verbose\"\n"
156     "  },\n"
157     "  \"styles\":\n"
158     "  {\n"
159     "    \"testbutton\":\n"
160     "    {\n"
161     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
162     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
163     "    }\n"
164     "  }\n"
165     "}\n";
166
167   const char* json2 =
168     "{\n"
169     "  \"styles\":\n"
170     "  {\n"
171     "    \"testbutton\":\n"
172     "    {\n"
173     "      \"backgroundColor\":[1.0,0.0,0.0,1.0],\n"
174     "      \"foregroundColor\":[0.0,1.0,1.0,1.0]\n"
175     "    }\n"
176     "  }\n"
177     "}\n";
178
179   // Add 2 buttons to test how many times the signal is sent
180   Test::TestButton testButton = Test::TestButton::New();
181   Test::TestButton testButton2 = Test::TestButton::New();
182   Stage::GetCurrent().Add( testButton );
183   Stage::GetCurrent().Add( testButton2 );
184   StyleChangedSignalChecker styleChangedSignalHandler;
185   StyleChangedSignalChecker styleChangedSignalHandler2;
186   StyleManager styleManager = StyleManager::Get();
187
188   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
189
190   // Render and notify
191   application.SendNotification();
192   application.Render();
193
194   tet_infoline("Apply the style");
195
196   std::string themeFile("ThemeOne");
197   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
198   StyleManager::Get().ApplyTheme(themeFile);
199
200   Property::Value bgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
201   Property::Value fgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
202
203   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
204   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
205
206   tet_infoline("Testing that the signal handler is called only once");
207   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
208
209   tet_infoline("Override the background property");
210   testButton.SetProperty( Test::TestButton::Property::BACKGROUND_COLOR, Color::GREEN );
211   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
212   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
213   DALI_TEST_EQUALS( bgColor, Property::Value(Color::GREEN), 0.001, TEST_LOCATION );
214   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
215
216   // Render and notify
217   application.SendNotification();
218   application.Render();
219
220   tet_infoline("Apply the style again");
221
222   styleChangedSignalHandler.signalCount = 0;
223   StyleManager::Get().ApplyTheme(themeFile);
224
225   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
226   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
227
228   tet_infoline("Check that the property is changed");
229   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
230   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
231   tet_infoline("Testing that the signal handler is called only once");
232   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
233
234   tet_infoline( "Load a different stylesheet");
235
236   tet_infoline("Apply the new style");
237   std::string themeFile2("ThemeTwo");
238   Test::StyleMonitor::SetThemeFileOutput(themeFile2, json2);
239
240   styleChangedSignalHandler.signalCount = 0;
241   StyleManager::Get().ApplyTheme(themeFile2);
242
243   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
244   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
245
246   tet_infoline("Check that the properties change, but the signal gets sent only once");
247   DALI_TEST_EQUALS( bgColor, Property::Value(Color::RED), 0.001, TEST_LOCATION );
248   DALI_TEST_EQUALS( fgColor, Property::Value(Color::CYAN), 0.001, TEST_LOCATION );
249   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
250
251   END_TEST;
252 }
253
254
255 int UtcDaliStyleManagerApplyDefaultTheme(void)
256 {
257   tet_infoline( "Testing StyleManager ApplyTheme" );
258
259   const char* defaultTheme =
260     "{\n"
261     "  \"constants\":\n"
262     "  {\n"
263     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"Concise\"\n"
264     "  },\n"
265     "  \"styles\":\n"
266     "  {\n"
267     "    \"testbutton\":\n"
268     "    {\n"
269     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
270     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
271     "    }\n"
272     "  }\n"
273     "}\n";
274   // Bg: Yellow, Fg: Blue
275
276   const char* appTheme =
277     "{\n"
278     "  \"styles\":\n"
279     "  {\n"
280     "    \"testbutton\":\n"
281     "    {\n"
282     "      \"backgroundColor\":[1.0,0.0,1.0,1.0],\n"
283     "      \"foregroundColor\":[0.0,1.0,0.0,1.0]\n"
284     "    }\n"
285     "  }\n"
286     "}\n";
287   // Bg::Magenta, Fg:Green
288
289   std::string filepath(TEST_RESOURCE_DIR "");
290
291   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
292                                           defaultTheme);
293   ToolkitTestApplication application;
294
295   Test::TestButton testButton = Test::TestButton::New();
296   Stage::GetCurrent().Add( testButton );
297   StyleChangedSignalChecker styleChangedSignalHandler;
298   StyleManager styleManager = StyleManager::Get();
299
300   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
301
302   // Render and notify
303   application.SendNotification();
304   application.Render();
305
306   // Get the default:
307   Property::Value defaultBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
308   Property::Value defaultFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
309
310   tet_infoline("Apply the style");
311
312   std::string themeFile("ThemeOne");
313   Test::StyleMonitor::SetThemeFileOutput(themeFile, appTheme);
314   StyleManager::Get().ApplyTheme(themeFile);
315
316   Property::Value bgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
317   Property::Value fgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
318
319   DALI_TEST_EQUALS( bgColor, Property::Value(Color::MAGENTA), 0.001, TEST_LOCATION );
320   DALI_TEST_EQUALS( fgColor, Property::Value(Color::GREEN), 0.001, TEST_LOCATION );
321
322   tet_infoline("Testing that the signal handler is called only once");
323   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
324   tet_infoline("Revert the style");
325
326   styleChangedSignalHandler.signalCount = 0;
327   StyleManager::Get().ApplyDefaultTheme();
328
329   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
330   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
331
332   tet_infoline("Check that the property is reverted");
333   DALI_TEST_EQUALS( bgColor, defaultBgColor, 0.001, TEST_LOCATION );
334   DALI_TEST_EQUALS( fgColor, defaultFgColor, 0.001, TEST_LOCATION );
335   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
336   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
337   tet_infoline("Testing that the signal handler is called only once");
338   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
339
340   END_TEST;
341 }
342
343
344 int UtcDaliStyleManagerSetStyleConstantP(void)
345 {
346   ToolkitTestApplication application;
347
348   tet_infoline( " UtcDaliStyleManagerSetStyleConstantP" );
349
350   StyleManager manager = StyleManager::Get();
351
352   std::string key( "key" );
353   Property::Value value( 100 );
354
355   manager.SetStyleConstant( key, value );
356
357   Property::Value returnedValue;
358   manager.GetStyleConstant( key, returnedValue );
359
360   DALI_TEST_CHECK( value.Get<int>() == returnedValue.Get<int>() );
361   END_TEST;
362 }
363
364
365 int UtcDaliStyleManagerGetStyleConstantP(void)
366 {
367   ToolkitTestApplication application;
368
369   tet_infoline( " UtcDaliStyleManagerGetStyleConstantP" );
370
371   StyleManager manager = StyleManager::Get();
372
373   std::string key( "key" );
374   Property::Value value( 100 );
375
376   manager.SetStyleConstant( key, value );
377
378   Property::Value returnedValue;
379   manager.GetStyleConstant( key, returnedValue );
380
381   DALI_TEST_CHECK( value.Get<int>() == returnedValue.Get<int>() );
382   END_TEST;
383 }
384
385 int UtcDaliStyleManagerGetStyleConstantN(void)
386 {
387   ToolkitTestApplication application;
388
389   tet_infoline( " UtcDaliStyleManagerGetStyleConstantN" );
390
391   StyleManager manager = StyleManager::Get();
392
393   std::string key2( "key2" );
394   Property::Value returnedValue2;
395   DALI_TEST_CHECK( !manager.GetStyleConstant( key2, returnedValue2 ) );
396
397   END_TEST;
398 }
399
400 int UtcDaliStyleManagerApplyStyle(void)
401 {
402   ToolkitTestApplication application;
403
404   tet_infoline( "UtcDaliStyleManagerApplyStyle - test that a style can be applied to a single button" );
405
406   const char* json1 =
407     "{\n"
408     "  \"constants\":\n"
409     "  {\n"
410     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"General\"\n"
411     "  },\n"
412     "  \"styles\":\n"
413     "  {\n"
414     "    \"testbutton\":\n"
415     "    {\n"
416     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
417     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
418     "    }\n"
419     "  }\n"
420     "}\n";
421
422   const char* json2 =
423     "{\n"
424     "  \"styles\":\n"
425     "  {\n"
426     "    \"testbutton\":\n"
427     "    {\n"
428     "      \"backgroundColor\":[1.0,0.0,0.0,1.0],\n"
429     "      \"foregroundColor\":[0.0,1.0,1.0,1.0]\n"
430     "    }\n"
431     "  }\n"
432     "}\n";
433
434   // Add 2 buttons
435   Test::TestButton testButton = Test::TestButton::New();
436   Test::TestButton testButton2 = Test::TestButton::New();
437   Stage::GetCurrent().Add( testButton );
438   Stage::GetCurrent().Add( testButton2 );
439   StyleChangedSignalChecker styleChangedSignalHandler;
440   StyleManager styleManager = StyleManager::Get();
441
442   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
443
444   tet_infoline("Apply the style");
445
446   std::string themeFile("ThemeOne");
447   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
448   styleManager.ApplyTheme(themeFile);
449
450   // Render and notify
451   application.SendNotification();
452   application.Render();
453
454   Property::Value themedBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
455   Property::Value themedFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
456
457   // Apply the style to the test button:
458   std::string themeFile2("ThemeTwo");
459   Test::StyleMonitor::SetThemeFileOutput(themeFile2, json2);
460   styleManager.ApplyStyle( testButton, themeFile2, "testbutton" );
461
462   tet_infoline("Check that the properties change for the first button");
463   Property::Value bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
464   Property::Value fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
465   DALI_TEST_EQUALS( bgColor, Property::Value(Color::RED), 0.001, TEST_LOCATION );
466   DALI_TEST_EQUALS( fgColor, Property::Value(Color::CYAN), 0.001, TEST_LOCATION );
467
468   DALI_TEST_NOT_EQUALS( bgColor, themedBgColor, 0.001, TEST_LOCATION );
469   DALI_TEST_NOT_EQUALS( fgColor, themedFgColor, 0.001, TEST_LOCATION );
470
471   tet_infoline("Check that the properties remain the same for the second button");
472   bgColor = testButton2.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
473   fgColor = testButton2.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
474   DALI_TEST_EQUALS( bgColor, themedBgColor, 0.001, TEST_LOCATION );
475   DALI_TEST_EQUALS( fgColor, themedFgColor, 0.001, TEST_LOCATION );
476
477   END_TEST;
478 }
479
480
481 int UtcDaliStyleManagerIncludeStyleP(void)
482 {
483   ToolkitTestApplication application;
484
485   tet_infoline( "UtcDaliStyleManagerIncludeStyle - test that style sheet inclusion works" );
486
487   const char* json1 =
488     "{\n"
489     "  \"includes\":\n"
490     "  [\n"
491     "     \"src/dali-toolkit-styling/theme2.json\"\n"
492     "  ],\n"
493     "  \"styles\":\n"
494     "  {\n"
495     "    \"testbutton\":\n"
496     "    {\n"
497     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
498     "    }\n"
499     "  }\n"
500     "}\n";
501
502   // Add 2 buttons
503   Test::TestButton testButton = Test::TestButton::New();
504   Test::TestButton testButton2 = Test::TestButton::New();
505   Stage::GetCurrent().Add( testButton );
506   Stage::GetCurrent().Add( testButton2 );
507   StyleChangedSignalChecker styleChangedSignalHandler;
508   StyleManager styleManager = StyleManager::Get();
509
510   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
511
512   tet_infoline("Apply the style");
513
514   std::string themeFile("ThemeOne");
515   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
516
517   styleManager.ApplyTheme(themeFile);
518
519   // Render and notify
520   application.SendNotification();
521   application.Render();
522
523   Property::Value themedBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
524   Property::Value themedFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
525
526   DALI_TEST_EQUALS( themedBgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
527   DALI_TEST_EQUALS( themedFgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
528
529   END_TEST;
530 }
531
532
533 int UtcDaliStyleManagerIncludeStyleN(void)
534 {
535   ToolkitTestApplication application;
536
537   tet_infoline( "UtcDaliStyleManagerIncludeStyle - test that style sheet inclusion works, but included stylesheet is bad json" );
538
539   const char* json1 =
540     "{\n"
541     "  \"includes\":\n"
542     "  [\n"
543     "     \"src/dali-toolkit-styling/theme3.json\"\n"
544     "  ],\n"
545     "  \"styles\":\n"
546     "  {\n"
547     "    \"testbutton\":\n"
548     "    {\n"
549     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
550     "    }\n"
551     "  }\n"
552     "}\n";
553
554   // Add 2 buttons
555   Test::TestButton testButton = Test::TestButton::New();
556   Test::TestButton testButton2 = Test::TestButton::New();
557   Stage::GetCurrent().Add( testButton );
558   Stage::GetCurrent().Add( testButton2 );
559   StyleChangedSignalChecker styleChangedSignalHandler;
560   StyleManager styleManager = StyleManager::Get();
561
562   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
563
564   tet_infoline("Apply the style");
565
566   std::string themeFile("ThemeOne");
567   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
568
569   try
570   {
571     styleManager.ApplyTheme(themeFile);
572   }
573   catch( Dali::DaliException& e )
574   {
575     DALI_TEST_ASSERT( e, "!\"Cannot parse JSON\"", TEST_LOCATION );
576   }
577
578   END_TEST;
579 }
580
581
582 int UtcDaliStyleManagerStyleChangedSignalFontFamily(void)
583 {
584   tet_infoline("Test that the StyleChange signal is fired when the font family is altered" );
585   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
586                                           defaultTheme );
587
588   ToolkitTestApplication application;
589
590   std::string labelStr("Label");
591   Toolkit::TextLabel label = Toolkit::TextLabel::New(labelStr);
592   Stage::GetCurrent().Add( label );
593
594   Toolkit::TextLabel label2 = Toolkit::TextLabel::New(labelStr);
595   Stage::GetCurrent().Add( label2 );
596
597   StyleChangedSignalChecker styleChangedSignalHandler;
598   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
599   StyleManager styleManager = StyleManager::Get();
600
601   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
602
603   Test::StyleMonitor::SetDefaultFontFamily("Times New Roman");
604
605   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_CHANGE);
606
607   tet_infoline("Test that the StyleChanged signal is received only once");
608
609   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
610
611   // Check that the label's font style has been altered
612   Property::Value family = label.GetProperty(TextLabel::Property::FONT_FAMILY);
613   std::string familyStr;
614   family.Get( familyStr );
615
616   DALI_TEST_EQUALS( familyStr, "Times New Roman", TEST_LOCATION);
617
618   END_TEST;
619 }
620
621 int UtcDaliStyleManagerStyleChangedSignalFontSize(void)
622 {
623   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
624
625   const char* defaultTheme =
626     "{\n"
627     "  \"styles\":\n"
628     "  {\n"
629     "    \"textlabelFontSize0\":\n"
630     "    {\n"
631     "      \"pointSize\":10\n"
632     "    },\n"
633     "    \"textlabelFontSize1\":\n"
634     "    {\n"
635     "      \"pointSize\":10\n"
636     "    },\n"
637     "    \"textlabelFontSize2\":\n"
638     "    {\n"
639     "      \"pointSize\":12\n"
640     "    },\n"
641     "    \"textlabelFontSize3\":\n"
642     "    {\n"
643     "      \"pointSize\":14\n"
644     "    },\n"
645     "    \"textlabelFontSize4\":\n"
646     "    {\n"
647     "      \"pointSize\":16\n"
648     "    }\n"
649     "  }\n"
650     "}\n";
651
652   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
653
654   ToolkitTestApplication application;
655
656   std::string labelStr("Label");
657   Toolkit::TextLabel label = Toolkit::TextLabel::New(labelStr);
658   Stage::GetCurrent().Add( label );
659
660   Toolkit::TextLabel label2 = Toolkit::TextLabel::New(labelStr);
661   Stage::GetCurrent().Add( label2 );
662
663   StyleChangedSignalChecker styleChangedSignalHandler;
664   StyleMonitor styleMonitor = StyleMonitor::Get();
665   StyleManager styleManager = StyleManager::Get();
666
667   label.SetProperty(TextLabel::Property::POINT_SIZE, 10.0f);
668
669   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
670
671   Test::StyleMonitor::SetDefaultFontSize(2);
672   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
673
674   tet_infoline("Test that the StyleChanged signal is received only once");
675   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
676
677   tet_infoline("Test that the label's font size has been altered\n");
678   Property::Value pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
679   float pointSize;
680   pointSizeValue.Get( pointSize );
681
682   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
683
684   styleChangedSignalHandler.signalCount = 0;
685
686   Test::StyleMonitor::SetDefaultFontSize(4);
687   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
688
689   tet_infoline("Test that the StyleChanged signal is received only once");
690   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
691
692   // Check that the label's font style has been altered
693   pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
694   pointSizeValue.Get( pointSize );
695
696   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
697
698
699   END_TEST;
700 }
701
702
703 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextField(void)
704 {
705   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
706
707   const char* defaultTheme =
708     "{\n"
709     "  \"styles\":\n"
710     "  {\n"
711     "    \"textfieldFontSize0\":\n"
712     "    {\n"
713     "      \"pointSize\":8\n"
714     "    },\n"
715     "    \"textfieldFontSize1\":\n"
716     "    {\n"
717     "      \"pointSize\":10\n"
718     "    },\n"
719     "    \"textfieldFontSize2\":\n"
720     "    {\n"
721     "      \"pointSize\":12\n"
722     "    },\n"
723     "    \"textfieldFontSize3\":\n"
724     "    {\n"
725     "      \"pointSize\":14\n"
726     "    },\n"
727     "    \"textfieldFontSize4\":\n"
728     "    {\n"
729     "      \"pointSize\":16\n"
730     "    }\n"
731     "  }\n"
732     "}\n";
733
734   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
735
736   ToolkitTestApplication application;
737
738   std::string fieldStr("Field");
739   Toolkit::TextField field = Toolkit::TextField::New();
740   field.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
741   Stage::GetCurrent().Add( field );
742
743   Toolkit::TextField field2 = Toolkit::TextField::New();
744   Stage::GetCurrent().Add( field2 );
745   field2.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
746
747   StyleChangedSignalChecker styleChangedSignalHandler;
748   StyleMonitor styleMonitor = StyleMonitor::Get();
749   StyleManager styleManager = StyleManager::Get();
750
751   field.SetProperty(TextField::Property::POINT_SIZE, 10.0f);
752
753   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
754
755   Test::StyleMonitor::SetDefaultFontSize(2);
756   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
757
758   tet_infoline("Test that the StyleChanged signal is received only once");
759   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
760
761   tet_infoline("Test that the field's font size has been altered\n");
762   Property::Value pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
763   float pointSize;
764   pointSizeValue.Get( pointSize );
765
766   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
767
768   styleChangedSignalHandler.signalCount = 0;
769
770   Test::StyleMonitor::SetDefaultFontSize(4);
771   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
772
773   tet_infoline("Test that the StyleChanged signal is received only once");
774   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
775
776   // Check that the field's font style has been altered
777   pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
778   pointSizeValue.Get( pointSize );
779
780   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
781
782
783   END_TEST;
784 }
785
786 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextEditor(void)
787 {
788   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
789
790   const char* defaultTheme =
791     "{\n"
792     "  \"styles\":\n"
793     "  {\n"
794     "    \"texteditorFontSize0\":\n"
795     "    {\n"
796     "      \"pointSize\":10\n"
797     "    },\n"
798     "    \"texteditorFontSize1\":\n"
799     "    {\n"
800     "      \"pointSize\":12\n"
801     "    },\n"
802     "    \"texteditorFontSize2\":\n"
803     "    {\n"
804     "      \"pointSize\":14\n"
805     "    },\n"
806     "    \"texteditorFontSize3\":\n"
807     "    {\n"
808     "      \"pointSize\":18\n"
809     "    },\n"
810     "    \"texteditorFontSize4\":\n"
811     "    {\n"
812     "      \"pointSize\":25\n"
813     "    }\n"
814     "  }\n"
815     "}\n";
816
817   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
818
819   ToolkitTestApplication application;
820
821   std::string editorStr("Editor");
822   Toolkit::TextEditor editor = Toolkit::TextEditor::New();
823   editor.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
824   Stage::GetCurrent().Add( editor );
825
826   Toolkit::TextEditor editor2 = Toolkit::TextEditor::New();
827   Stage::GetCurrent().Add( editor2 );
828   editor2.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
829
830   StyleChangedSignalChecker styleChangedSignalHandler;
831   StyleMonitor styleMonitor = StyleMonitor::Get();
832   StyleManager styleManager = StyleManager::Get();
833
834   editor.SetProperty(TextEditor::Property::POINT_SIZE, 10.0f);
835
836   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
837
838   Test::StyleMonitor::SetDefaultFontSize(2);
839   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
840
841   tet_infoline("Test that the StyleChanged signal is received only once");
842   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
843
844   tet_infoline("Test that the editor's font size has been altered\n");
845   Property::Value pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
846   float pointSize;
847   pointSizeValue.Get( pointSize );
848
849   DALI_TEST_EQUALS( pointSize, 14.0f, 0.001, TEST_LOCATION );
850
851   styleChangedSignalHandler.signalCount = 0;
852
853   Test::StyleMonitor::SetDefaultFontSize(4);
854   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
855
856   tet_infoline("Test that the StyleChanged signal is received only once");
857   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
858
859   // Check that the editor's font style has been altered
860   pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
861   pointSizeValue.Get( pointSize );
862
863   DALI_TEST_EQUALS( pointSize, 25.0f, 0.001, TEST_LOCATION );
864
865
866   END_TEST;
867 }
868
869
870 int UtcDaliStyleManagerSetState01(void)
871 {
872   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
873   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
874                                           defaultTheme );
875
876   ToolkitTestApplication application;
877
878   StyleChangedSignalChecker styleChangedSignalHandler;
879   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
880   StyleManager styleManager = StyleManager::Get();
881
882   DummyControl actor = DummyControl::New(true);
883   actor.SetStyleName("BasicControl");
884   Stage::GetCurrent().Add(actor);
885
886   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
887
888   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
889   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
890
891   actor.SetProperty( DevelControl::Property::STATE, DevelControl::FOCUSED );
892
893   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
894   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
895
896   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
897   DALI_TEST_CHECK( visual1 != visual2 );
898
899   actor.SetProperty( DevelControl::Property::STATE, DevelControl::DISABLED );
900
901   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
902
903   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
904   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
905   DALI_TEST_CHECK( !focusVisual );
906   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
907
908   DALI_TEST_CHECK( visual1 != visual3 );
909   DALI_TEST_CHECK( visual2 != visual3 );
910
911   END_TEST;
912 }
913
914 int UtcDaliStyleManagerSetState02(void)
915 {
916   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
917   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
918                                           defaultTheme );
919
920   ToolkitTestApplication application;
921
922   StyleChangedSignalChecker styleChangedSignalHandler;
923   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
924   StyleManager styleManager = StyleManager::Get();
925
926   DummyControl actor = DummyControl::New(true);
927   actor.SetStyleName("BasicControl");
928   Stage::GetCurrent().Add(actor);
929
930   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
931
932   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
933   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
934
935   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
936   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
937
938   actor.SetProperty( DevelControl::Property::STATE,
939                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
940
941   state = actor.GetProperty<int>( DevelControl::Property::STATE );
942   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
943
944   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
945   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
946
947   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
948   DALI_TEST_CHECK( visual1 != visual2 );
949
950   actor.SetProperty( DevelControl::Property::STATE,
951                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
952
953   state = actor.GetProperty<int>( DevelControl::Property::STATE );
954   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
955
956   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
957
958   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
959   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
960   DALI_TEST_CHECK( !focusVisual );
961   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
962
963   DALI_TEST_CHECK( visual1 != visual3 );
964   DALI_TEST_CHECK( visual2 != visual3 );
965
966   actor.SetProperty( DevelControl::Property::STATE,
967                      Property::Map().Add( "state", "NORMAL" ).Add("withTransitions", false));
968
969   state = actor.GetProperty<int>( DevelControl::Property::STATE );
970   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
971
972   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
973
974   visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
975   DALI_TEST_CHECK( visual1 );
976
977   focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
978   DALI_TEST_CHECK( !focusVisual );
979   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
980
981
982   END_TEST;
983 }
984
985
986 int UtcDaliStyleManagerSetSubState(void)
987 {
988   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
989   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
990                                           defaultTheme );
991
992   ToolkitTestApplication application;
993
994   StyleChangedSignalChecker styleChangedSignalHandler;
995   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
996   StyleManager styleManager = StyleManager::Get();
997
998   DummyControl actor = DummyControl::New(true);
999   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1000   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1001   actor.SetStyleName("ComplexControl");
1002   Stage::GetCurrent().Add(actor);
1003
1004   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1005
1006   {
1007     DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1008     Visual::Base visual = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1009     DALI_TEST_CHECK( visual );
1010     Property::Map map;
1011     visual.CreatePropertyMap( map );
1012     Property::Value* value = map.Find( Visual::Property::TYPE );
1013     DALI_TEST_CHECK( value );
1014
1015     int visualType;
1016     value->Get( visualType );
1017     DALI_TEST_EQUALS( visualType, (int)Toolkit::Visual::GRADIENT, TEST_LOCATION );
1018   }
1019
1020   actor.SetProperty(DevelControl::Property::SUB_STATE, "UNSELECTED");
1021
1022   {
1023     DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1024     Visual::Base visual = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1025     DALI_TEST_CHECK( visual );
1026     Property::Map map;
1027     visual.CreatePropertyMap( map );
1028     Property::Value* value = map.Find( Visual::Property::TYPE );
1029     DALI_TEST_CHECK( value );
1030
1031     int visualType;
1032     value->Get( visualType );
1033     DALI_TEST_EQUALS( visualType, (int)Toolkit::Visual::COLOR, TEST_LOCATION );
1034   }
1035
1036   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1037
1038   {
1039     Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1040     DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1041     Visual::Base visual = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1042     DALI_TEST_CHECK( visual );
1043     Property::Map map;
1044     visual.CreatePropertyMap( map );
1045     Property::Value* value = map.Find( Visual::Property::TYPE );
1046     DALI_TEST_CHECK( value );
1047
1048     int visualType;
1049     value->Get( visualType );
1050     DALI_TEST_EQUALS( visualType, (int)Toolkit::Visual::GRADIENT, TEST_LOCATION );
1051   }
1052   END_TEST;
1053 }