[dali_1.2.32] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-styling / utc-Dali-StyleManager.cpp
1  /*
2  * Copyright (c) 2017 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/visuals/text-visual-properties.h>
33 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
34 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
35 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
36
37 using namespace Dali;
38 using namespace Dali::Toolkit;
39
40 namespace
41 {
42 std::string defaultTheme;
43
44 } // anonymous namespace
45
46
47
48
49 void dali_style_manager_startup(void)
50 {
51   test_return_value = TET_UNDEF;
52
53   std::ifstream t("src/dali-toolkit-styling/default-theme.json");
54   defaultTheme = std::string((std::istreambuf_iterator<char>(t)), std::istreambuf_iterator<char>());
55 }
56
57 void dali_style_manager_cleanup(void)
58 {
59   test_return_value = TET_PASS;
60 }
61
62
63 Visual::Base CheckVisual( Impl::DummyControl& dummyImpl, Property::Index visualId, int type, const char* location )
64 {
65     DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(visualId), true, location);
66     Visual::Base visual = dummyImpl.GetVisual(visualId);
67     DALI_TEST_EQUALS( (bool)visual, true, location );
68     Property::Map map;
69     visual.CreatePropertyMap( map );
70     Property::Value* value = map.Find( Visual::Property::TYPE );
71     DALI_TEST_EQUALS( value != NULL, true, location );
72
73     int visualType;
74     value->Get( visualType );
75     DALI_TEST_EQUALS( visualType, type, location );
76     return visual;
77 }
78
79
80 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
81 {
82   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
83   Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
84   unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
85
86   memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel );
87
88   return bitmap;
89 }
90
91 Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
92                                                  unsigned int ninePatchImageWidth,
93                                                  unsigned int ninePatchImageHeight)
94 {
95   TestPlatformAbstraction& platform = application.GetPlatform();
96
97   Pixel::Format pixelFormat = Pixel::RGBA8888;
98
99   tet_infoline("Create Bitmap");
100   platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight));
101   Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat );
102
103   tet_infoline("Getting resource");
104   Integration::ResourcePointer resourcePtr(bitmap);
105   platform.SetSynchronouslyLoadedResource( resourcePtr);
106
107   return resourcePtr;
108 }
109
110 int UtcDaliStyleManagerConstructorP(void)
111 {
112   ToolkitTestApplication application;
113
114   tet_infoline(" UtcDaliStyleManagerConstructorP");
115   StyleManager styleManager;
116   DALI_TEST_CHECK( !styleManager);
117   END_TEST;
118 }
119
120 int UtcDaliStyleManagerCopyConstructorP(void)
121 {
122   TestApplication application;
123
124   StyleManager styleManager = StyleManager::Get();
125   StyleManager copyOfStyleManager( styleManager );
126
127   DALI_TEST_CHECK( copyOfStyleManager );
128   END_TEST;
129 }
130
131 int UtcDaliStyleManagerAssignmentOperatorP(void)
132 {
133   TestApplication application;
134
135   StyleManager styleManager = StyleManager::Get();
136   StyleManager copyOfStyleManager = styleManager;
137
138   DALI_TEST_CHECK( copyOfStyleManager );
139   DALI_TEST_CHECK( copyOfStyleManager == styleManager );
140   END_TEST;
141 }
142
143 int UtcDaliStyleManagerGet(void)
144 {
145   ToolkitTestApplication application;
146
147   tet_infoline(" UtcDaliStyleManagerGet");
148
149   // Register Type
150   TypeInfo type;
151   type = TypeRegistry::Get().GetTypeInfo( "StyleManager" );
152   DALI_TEST_CHECK( type );
153   BaseHandle handle = type.CreateInstance();
154   DALI_TEST_CHECK( handle );
155
156   StyleManager manager;
157
158   manager = StyleManager::Get();
159   DALI_TEST_CHECK(manager);
160
161   StyleManager newManager = StyleManager::Get();
162   DALI_TEST_CHECK(newManager);
163
164   // Check that focus manager is a singleton
165   DALI_TEST_CHECK(manager == newManager);
166   END_TEST;
167 }
168
169
170 namespace
171 {
172 class StyleChangedSignalChecker : public ConnectionTracker
173 {
174 public:
175   StyleChangedSignalChecker()
176   : signalCount(0)
177   {
178   }
179
180   void OnStyleChanged(StyleManager styleManager, StyleChange::Type type)
181   {
182     signalCount++;
183   }
184
185   void Reset()
186   {
187     signalCount =0;
188   }
189
190 public:
191   int signalCount;
192 };
193
194 } // anonymous namespace
195
196 int UtcDaliStyleManagerApplyTheme(void)
197 {
198   ToolkitTestApplication application;
199
200   tet_infoline( "Testing StyleManager ApplyTheme" );
201
202   const char* json1 =
203     "{\n"
204     "  \"constants\":\n"
205     "  {\n"
206     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"Verbose\"\n"
207     "  },\n"
208     "  \"styles\":\n"
209     "  {\n"
210     "    \"testbutton\":\n"
211     "    {\n"
212     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
213     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
214     "    }\n"
215     "  }\n"
216     "}\n";
217
218   const char* json2 =
219     "{\n"
220     "  \"styles\":\n"
221     "  {\n"
222     "    \"testbutton\":\n"
223     "    {\n"
224     "      \"backgroundColor\":[1.0,0.0,0.0,1.0],\n"
225     "      \"foregroundColor\":[0.0,1.0,1.0,1.0]\n"
226     "    }\n"
227     "  }\n"
228     "}\n";
229
230   // Add 2 buttons to test how many times the signal is sent
231   Test::TestButton testButton = Test::TestButton::New();
232   Test::TestButton testButton2 = Test::TestButton::New();
233   Stage::GetCurrent().Add( testButton );
234   Stage::GetCurrent().Add( testButton2 );
235   StyleChangedSignalChecker styleChangedSignalHandler;
236   StyleChangedSignalChecker styleChangedSignalHandler2;
237   StyleManager styleManager = StyleManager::Get();
238
239   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
240
241   // Render and notify
242   application.SendNotification();
243   application.Render();
244
245   tet_infoline("Apply the style");
246
247   std::string themeFile("ThemeOne");
248   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
249   StyleManager::Get().ApplyTheme(themeFile);
250
251   Property::Value bgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
252   Property::Value fgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
253
254   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
255   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
256
257   tet_infoline("Testing that the signal handler is called only once");
258   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
259
260   tet_infoline("Override the background property");
261   testButton.SetProperty( Test::TestButton::Property::BACKGROUND_COLOR, Color::GREEN );
262   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
263   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
264   DALI_TEST_EQUALS( bgColor, Property::Value(Color::GREEN), 0.001, TEST_LOCATION );
265   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
266
267   // Render and notify
268   application.SendNotification();
269   application.Render();
270
271   tet_infoline("Apply the style again");
272
273   styleChangedSignalHandler.signalCount = 0;
274   StyleManager::Get().ApplyTheme(themeFile);
275
276   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
277   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
278
279   tet_infoline("Check that the property is changed");
280   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
281   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
282   tet_infoline("Testing that the signal handler is called only once");
283   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
284
285   tet_infoline( "Load a different stylesheet");
286
287   tet_infoline("Apply the new style");
288   std::string themeFile2("ThemeTwo");
289   Test::StyleMonitor::SetThemeFileOutput(themeFile2, json2);
290
291   styleChangedSignalHandler.signalCount = 0;
292   StyleManager::Get().ApplyTheme(themeFile2);
293
294   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
295   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
296
297   tet_infoline("Check that the properties change, but the signal gets sent only once");
298   DALI_TEST_EQUALS( bgColor, Property::Value(Color::RED), 0.001, TEST_LOCATION );
299   DALI_TEST_EQUALS( fgColor, Property::Value(Color::CYAN), 0.001, TEST_LOCATION );
300   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
301
302   END_TEST;
303 }
304
305
306 int UtcDaliStyleManagerApplyDefaultTheme(void)
307 {
308   tet_infoline( "Testing StyleManager ApplyTheme" );
309
310   const char* defaultTheme =
311     "{\n"
312     "  \"constants\":\n"
313     "  {\n"
314     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"Concise\"\n"
315     "  },\n"
316     "  \"styles\":\n"
317     "  {\n"
318     "    \"testbutton\":\n"
319     "    {\n"
320     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
321     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
322     "    }\n"
323     "  }\n"
324     "}\n";
325   // Bg: Yellow, Fg: Blue
326
327   const char* appTheme =
328     "{\n"
329     "  \"styles\":\n"
330     "  {\n"
331     "    \"testbutton\":\n"
332     "    {\n"
333     "      \"backgroundColor\":[1.0,0.0,1.0,1.0],\n"
334     "      \"foregroundColor\":[0.0,1.0,0.0,1.0]\n"
335     "    }\n"
336     "  }\n"
337     "}\n";
338   // Bg::Magenta, Fg:Green
339
340   std::string filepath(TEST_RESOURCE_DIR "");
341
342   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
343                                           defaultTheme);
344   ToolkitTestApplication application;
345
346   Test::TestButton testButton = Test::TestButton::New();
347   Stage::GetCurrent().Add( testButton );
348   StyleChangedSignalChecker styleChangedSignalHandler;
349   StyleManager styleManager = StyleManager::Get();
350
351   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
352
353   // Render and notify
354   application.SendNotification();
355   application.Render();
356
357   // Get the default:
358   Property::Value defaultBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
359   Property::Value defaultFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
360
361   tet_infoline("Apply the style");
362
363   std::string themeFile("ThemeOne");
364   Test::StyleMonitor::SetThemeFileOutput(themeFile, appTheme);
365   StyleManager::Get().ApplyTheme(themeFile);
366
367   Property::Value bgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
368   Property::Value fgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
369
370   DALI_TEST_EQUALS( bgColor, Property::Value(Color::MAGENTA), 0.001, TEST_LOCATION );
371   DALI_TEST_EQUALS( fgColor, Property::Value(Color::GREEN), 0.001, TEST_LOCATION );
372
373   tet_infoline("Testing that the signal handler is called only once");
374   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
375   tet_infoline("Revert the style");
376
377   styleChangedSignalHandler.signalCount = 0;
378   StyleManager::Get().ApplyDefaultTheme();
379
380   bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
381   fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
382
383   tet_infoline("Check that the property is reverted");
384   DALI_TEST_EQUALS( bgColor, defaultBgColor, 0.001, TEST_LOCATION );
385   DALI_TEST_EQUALS( fgColor, defaultFgColor, 0.001, TEST_LOCATION );
386   DALI_TEST_EQUALS( bgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
387   DALI_TEST_EQUALS( fgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
388   tet_infoline("Testing that the signal handler is called only once");
389   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
390
391   END_TEST;
392 }
393
394
395 int UtcDaliStyleManagerSetStyleConstantP(void)
396 {
397   ToolkitTestApplication application;
398
399   tet_infoline( " UtcDaliStyleManagerSetStyleConstantP" );
400
401   StyleManager manager = StyleManager::Get();
402
403   std::string key( "key" );
404   Property::Value value( 100 );
405
406   manager.SetStyleConstant( key, value );
407
408   Property::Value returnedValue;
409   manager.GetStyleConstant( key, returnedValue );
410
411   DALI_TEST_CHECK( value.Get<int>() == returnedValue.Get<int>() );
412   END_TEST;
413 }
414
415
416 int UtcDaliStyleManagerGetStyleConstantP(void)
417 {
418   ToolkitTestApplication application;
419
420   tet_infoline( " UtcDaliStyleManagerGetStyleConstantP" );
421
422   StyleManager manager = StyleManager::Get();
423
424   std::string key( "key" );
425   Property::Value value( 100 );
426
427   manager.SetStyleConstant( key, value );
428
429   Property::Value returnedValue;
430   manager.GetStyleConstant( key, returnedValue );
431
432   DALI_TEST_CHECK( value.Get<int>() == returnedValue.Get<int>() );
433   END_TEST;
434 }
435
436 int UtcDaliStyleManagerGetStyleConstantN(void)
437 {
438   ToolkitTestApplication application;
439
440   tet_infoline( " UtcDaliStyleManagerGetStyleConstantN" );
441
442   StyleManager manager = StyleManager::Get();
443
444   std::string key2( "key2" );
445   Property::Value returnedValue2;
446   DALI_TEST_CHECK( !manager.GetStyleConstant( key2, returnedValue2 ) );
447
448   END_TEST;
449 }
450
451 int UtcDaliStyleManagerApplyStyle(void)
452 {
453   ToolkitTestApplication application;
454
455   tet_infoline( "UtcDaliStyleManagerApplyStyle - test that a style can be applied to a single button" );
456
457   const char* json1 =
458     "{\n"
459     "  \"constants\":\n"
460     "  {\n"
461     "    \"CONFIG_SCRIPT_LOG_LEVEL\":\"General\"\n"
462     "  },\n"
463     "  \"styles\":\n"
464     "  {\n"
465     "    \"testbutton\":\n"
466     "    {\n"
467     "      \"backgroundColor\":[1.0,1.0,0.0,1.0],\n"
468     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
469     "    }\n"
470     "  }\n"
471     "}\n";
472
473   const char* json2 =
474     "{\n"
475     "  \"styles\":\n"
476     "  {\n"
477     "    \"testbutton\":\n"
478     "    {\n"
479     "      \"backgroundColor\":[1.0,0.0,0.0,1.0],\n"
480     "      \"foregroundColor\":[0.0,1.0,1.0,1.0]\n"
481     "    }\n"
482     "  }\n"
483     "}\n";
484
485   // Add 2 buttons
486   Test::TestButton testButton = Test::TestButton::New();
487   Test::TestButton testButton2 = Test::TestButton::New();
488   Stage::GetCurrent().Add( testButton );
489   Stage::GetCurrent().Add( testButton2 );
490   StyleChangedSignalChecker styleChangedSignalHandler;
491   StyleManager styleManager = StyleManager::Get();
492
493   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
494
495   tet_infoline("Apply the style");
496
497   std::string themeFile("ThemeOne");
498   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
499   styleManager.ApplyTheme(themeFile);
500
501   // Render and notify
502   application.SendNotification();
503   application.Render();
504
505   Property::Value themedBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
506   Property::Value themedFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
507
508   // Apply the style to the test button:
509   std::string themeFile2("ThemeTwo");
510   Test::StyleMonitor::SetThemeFileOutput(themeFile2, json2);
511   styleManager.ApplyStyle( testButton, themeFile2, "testbutton" );
512
513   tet_infoline("Check that the properties change for the first button");
514   Property::Value bgColor = testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
515   Property::Value fgColor = testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
516   DALI_TEST_EQUALS( bgColor, Property::Value(Color::RED), 0.001, TEST_LOCATION );
517   DALI_TEST_EQUALS( fgColor, Property::Value(Color::CYAN), 0.001, TEST_LOCATION );
518
519   DALI_TEST_NOT_EQUALS( bgColor, themedBgColor, 0.001, TEST_LOCATION );
520   DALI_TEST_NOT_EQUALS( fgColor, themedFgColor, 0.001, TEST_LOCATION );
521
522   tet_infoline("Check that the properties remain the same for the second button");
523   bgColor = testButton2.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR);
524   fgColor = testButton2.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR);
525   DALI_TEST_EQUALS( bgColor, themedBgColor, 0.001, TEST_LOCATION );
526   DALI_TEST_EQUALS( fgColor, themedFgColor, 0.001, TEST_LOCATION );
527
528   END_TEST;
529 }
530
531
532 int UtcDaliStyleManagerIncludeStyleP(void)
533 {
534   ToolkitTestApplication application;
535
536   tet_infoline( "UtcDaliStyleManagerIncludeStyle - test that style sheet inclusion works" );
537
538   const char* json1 =
539     "{\n"
540     "  \"includes\":\n"
541     "  [\n"
542     "     \"src/dali-toolkit-styling/theme2.json\"\n"
543     "  ],\n"
544     "  \"styles\":\n"
545     "  {\n"
546     "    \"testbutton\":\n"
547     "    {\n"
548     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
549     "    }\n"
550     "  }\n"
551     "}\n";
552
553   // Add 2 buttons
554   Test::TestButton testButton = Test::TestButton::New();
555   Test::TestButton testButton2 = Test::TestButton::New();
556   Stage::GetCurrent().Add( testButton );
557   Stage::GetCurrent().Add( testButton2 );
558   StyleChangedSignalChecker styleChangedSignalHandler;
559   StyleManager styleManager = StyleManager::Get();
560
561   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
562
563   tet_infoline("Apply the style");
564
565   std::string themeFile("ThemeOne");
566   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
567
568   styleManager.ApplyTheme(themeFile);
569
570   // Render and notify
571   application.SendNotification();
572   application.Render();
573
574   Property::Value themedBgColor( testButton.GetProperty(Test::TestButton::Property::BACKGROUND_COLOR) );
575   Property::Value themedFgColor( testButton.GetProperty(Test::TestButton::Property::FOREGROUND_COLOR) );
576
577   DALI_TEST_EQUALS( themedBgColor, Property::Value(Color::YELLOW), 0.001, TEST_LOCATION );
578   DALI_TEST_EQUALS( themedFgColor, Property::Value(Color::BLUE), 0.001, TEST_LOCATION );
579
580   END_TEST;
581 }
582
583
584 int UtcDaliStyleManagerIncludeStyleN(void)
585 {
586   ToolkitTestApplication application;
587
588   tet_infoline( "UtcDaliStyleManagerIncludeStyle - test that style sheet inclusion works, but included stylesheet is bad json" );
589
590   const char* json1 =
591     "{\n"
592     "  \"includes\":\n"
593     "  [\n"
594     "     \"src/dali-toolkit-styling/theme3.json\"\n"
595     "  ],\n"
596     "  \"styles\":\n"
597     "  {\n"
598     "    \"testbutton\":\n"
599     "    {\n"
600     "      \"foregroundColor\":[0.0,0.0,1.0,1.0]\n"
601     "    }\n"
602     "  }\n"
603     "}\n";
604
605   // Add 2 buttons
606   Test::TestButton testButton = Test::TestButton::New();
607   Test::TestButton testButton2 = Test::TestButton::New();
608   Stage::GetCurrent().Add( testButton );
609   Stage::GetCurrent().Add( testButton2 );
610   StyleChangedSignalChecker styleChangedSignalHandler;
611   StyleManager styleManager = StyleManager::Get();
612
613   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
614
615   tet_infoline("Apply the style");
616
617   std::string themeFile("ThemeOne");
618   Test::StyleMonitor::SetThemeFileOutput(themeFile, json1);
619
620   try
621   {
622     styleManager.ApplyTheme(themeFile);
623   }
624   catch( Dali::DaliException& e )
625   {
626     DALI_TEST_ASSERT( e, "!\"Cannot parse JSON\"", TEST_LOCATION );
627   }
628
629   END_TEST;
630 }
631
632
633 int UtcDaliStyleManagerStyleChangedSignalFontFamily(void)
634 {
635   tet_infoline("Test that the StyleChange signal is fired when the font family is altered" );
636   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
637                                           defaultTheme );
638
639   ToolkitTestApplication application;
640
641   std::string labelStr("Label");
642   Toolkit::TextLabel label = Toolkit::TextLabel::New(labelStr);
643   Stage::GetCurrent().Add( label );
644
645   Toolkit::TextField field = Toolkit::TextField::New();
646   Stage::GetCurrent().Add( field );
647
648   Toolkit::TextEditor editor = Toolkit::TextEditor::New();
649   Stage::GetCurrent().Add( editor );
650
651   StyleChangedSignalChecker styleChangedSignalHandler;
652   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
653   StyleManager styleManager = StyleManager::Get();
654
655   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
656
657   Test::StyleMonitor::SetDefaultFontFamily("Times New Roman");
658
659   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_CHANGE);
660
661   tet_infoline("Test that the StyleChanged signal is received only once");
662
663   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
664
665   // Check that the label's font style has been altered
666   Property::Value family = label.GetProperty(TextLabel::Property::FONT_FAMILY);
667   std::string familyStr;
668   family.Get( familyStr );
669
670   DALI_TEST_EQUALS( familyStr, "Times New Roman", TEST_LOCATION);
671
672   // Check that the field's font style has been altered
673   family = field.GetProperty(TextField::Property::FONT_FAMILY);
674   family.Get( familyStr );
675
676   DALI_TEST_EQUALS( familyStr, "Times New Roman", TEST_LOCATION);
677
678   // Check that the editor's font style has been altered
679   family = editor.GetProperty(TextEditor::Property::FONT_FAMILY);
680   family.Get( familyStr );
681
682   DALI_TEST_EQUALS( familyStr, "Times New Roman", TEST_LOCATION);
683
684   END_TEST;
685 }
686
687 int UtcDaliStyleManagerStyleChangedSignalFontSize(void)
688 {
689   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
690
691   const char* defaultTheme =
692     "{\n"
693     "  \"styles\":\n"
694     "  {\n"
695     "    \"textlabelFontSize0\":\n"
696     "    {\n"
697     "      \"pointSize\":10\n"
698     "    },\n"
699     "    \"textlabelFontSize1\":\n"
700     "    {\n"
701     "      \"pointSize\":10\n"
702     "    },\n"
703     "    \"textlabelFontSize2\":\n"
704     "    {\n"
705     "      \"pointSize\":12\n"
706     "    },\n"
707     "    \"textlabelFontSize3\":\n"
708     "    {\n"
709     "      \"pointSize\":14\n"
710     "    },\n"
711     "    \"textlabelFontSize4\":\n"
712     "    {\n"
713     "      \"pointSize\":16\n"
714     "    }\n"
715     "  }\n"
716     "}\n";
717
718   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
719
720   ToolkitTestApplication application;
721
722   std::string labelStr("Label");
723   Toolkit::TextLabel label = Toolkit::TextLabel::New(labelStr);
724   Stage::GetCurrent().Add( label );
725
726   Toolkit::TextLabel label2 = Toolkit::TextLabel::New(labelStr);
727   Stage::GetCurrent().Add( label2 );
728
729   StyleChangedSignalChecker styleChangedSignalHandler;
730   StyleMonitor styleMonitor = StyleMonitor::Get();
731   StyleManager styleManager = StyleManager::Get();
732
733   label.SetProperty(TextLabel::Property::POINT_SIZE, 10.0f);
734
735   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
736
737   Test::StyleMonitor::SetDefaultFontSize(2);
738   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
739
740   tet_infoline("Test that the StyleChanged signal is received only once");
741   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
742
743   tet_infoline("Test that the label's font size has been altered\n");
744   Property::Value pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
745   float pointSize;
746   pointSizeValue.Get( pointSize );
747
748   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
749
750   styleChangedSignalHandler.signalCount = 0;
751
752   Test::StyleMonitor::SetDefaultFontSize(4);
753   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
754
755   tet_infoline("Test that the StyleChanged signal is received only once");
756   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
757
758   // Check that the label's font style has been altered
759   pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
760   pointSizeValue.Get( pointSize );
761
762   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
763
764
765   END_TEST;
766 }
767
768
769 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextField(void)
770 {
771   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
772
773   const char* defaultTheme =
774     "{\n"
775     "  \"styles\":\n"
776     "  {\n"
777     "    \"textfieldFontSize0\":\n"
778     "    {\n"
779     "      \"pointSize\":8\n"
780     "    },\n"
781     "    \"textfieldFontSize1\":\n"
782     "    {\n"
783     "      \"pointSize\":10\n"
784     "    },\n"
785     "    \"textfieldFontSize2\":\n"
786     "    {\n"
787     "      \"pointSize\":12\n"
788     "    },\n"
789     "    \"textfieldFontSize3\":\n"
790     "    {\n"
791     "      \"pointSize\":14\n"
792     "    },\n"
793     "    \"textfieldFontSize4\":\n"
794     "    {\n"
795     "      \"pointSize\":16\n"
796     "    }\n"
797     "  }\n"
798     "}\n";
799
800   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
801
802   ToolkitTestApplication application;
803
804   std::string fieldStr("Field");
805   Toolkit::TextField field = Toolkit::TextField::New();
806   field.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
807   Stage::GetCurrent().Add( field );
808
809   Toolkit::TextField field2 = Toolkit::TextField::New();
810   Stage::GetCurrent().Add( field2 );
811   field2.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
812
813   StyleChangedSignalChecker styleChangedSignalHandler;
814   StyleMonitor styleMonitor = StyleMonitor::Get();
815   StyleManager styleManager = StyleManager::Get();
816
817   field.SetProperty(TextField::Property::POINT_SIZE, 10.0f);
818
819   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
820
821   Test::StyleMonitor::SetDefaultFontSize(2);
822   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
823
824   tet_infoline("Test that the StyleChanged signal is received only once");
825   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
826
827   tet_infoline("Test that the field's font size has been altered\n");
828   Property::Value pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
829   float pointSize;
830   pointSizeValue.Get( pointSize );
831
832   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
833
834   styleChangedSignalHandler.signalCount = 0;
835
836   Test::StyleMonitor::SetDefaultFontSize(4);
837   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
838
839   tet_infoline("Test that the StyleChanged signal is received only once");
840   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
841
842   // Check that the field's font style has been altered
843   pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
844   pointSizeValue.Get( pointSize );
845
846   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
847
848
849   END_TEST;
850 }
851
852 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextEditor(void)
853 {
854   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
855
856   const char* defaultTheme =
857     "{\n"
858     "  \"styles\":\n"
859     "  {\n"
860     "    \"texteditorFontSize0\":\n"
861     "    {\n"
862     "      \"pointSize\":10\n"
863     "    },\n"
864     "    \"texteditorFontSize1\":\n"
865     "    {\n"
866     "      \"pointSize\":12\n"
867     "    },\n"
868     "    \"texteditorFontSize2\":\n"
869     "    {\n"
870     "      \"pointSize\":14\n"
871     "    },\n"
872     "    \"texteditorFontSize3\":\n"
873     "    {\n"
874     "      \"pointSize\":18\n"
875     "    },\n"
876     "    \"texteditorFontSize4\":\n"
877     "    {\n"
878     "      \"pointSize\":25\n"
879     "    }\n"
880     "  }\n"
881     "}\n";
882
883   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
884
885   ToolkitTestApplication application;
886
887   std::string editorStr("Editor");
888   Toolkit::TextEditor editor = Toolkit::TextEditor::New();
889   editor.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
890   Stage::GetCurrent().Add( editor );
891
892   Toolkit::TextEditor editor2 = Toolkit::TextEditor::New();
893   Stage::GetCurrent().Add( editor2 );
894   editor2.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
895
896   StyleChangedSignalChecker styleChangedSignalHandler;
897   StyleMonitor styleMonitor = StyleMonitor::Get();
898   StyleManager styleManager = StyleManager::Get();
899
900   editor.SetProperty(TextEditor::Property::POINT_SIZE, 10.0f);
901
902   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
903
904   Test::StyleMonitor::SetDefaultFontSize(2);
905   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
906
907   tet_infoline("Test that the StyleChanged signal is received only once");
908   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
909
910   tet_infoline("Test that the editor's font size has been altered\n");
911   Property::Value pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
912   float pointSize;
913   pointSizeValue.Get( pointSize );
914
915   DALI_TEST_EQUALS( pointSize, 14.0f, 0.001, TEST_LOCATION );
916
917   styleChangedSignalHandler.signalCount = 0;
918
919   Test::StyleMonitor::SetDefaultFontSize(4);
920   styleMonitor.StyleChangeSignal().Emit( styleMonitor, StyleChange::DEFAULT_FONT_SIZE_CHANGE);
921
922   tet_infoline("Test that the StyleChanged signal is received only once");
923   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
924
925   // Check that the editor's font style has been altered
926   pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
927   pointSizeValue.Get( pointSize );
928
929   DALI_TEST_EQUALS( pointSize, 25.0f, 0.001, TEST_LOCATION );
930
931
932   END_TEST;
933 }
934
935
936 int UtcDaliStyleManagerSetState01(void)
937 {
938   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
939   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
940                                           defaultTheme );
941
942   ToolkitTestApplication application;
943
944   StyleChangedSignalChecker styleChangedSignalHandler;
945   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
946   StyleManager styleManager = StyleManager::Get();
947
948   DummyControl actor = DummyControl::New(true);
949   actor.SetStyleName("BasicControl");
950   Stage::GetCurrent().Add(actor);
951
952   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
953   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
954
955   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
956   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
957   Visual::Base labelVisual1 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
958   Property::Map labelMap;
959   labelVisual1.CreatePropertyMap( labelMap );
960   labelMap[TextVisual::Property::TEXT] = "New text";
961   VisualFactory factory = VisualFactory::Get();
962   labelVisual1 = factory.CreateVisual(labelMap);
963   dummyImpl.UnregisterVisual(DummyControl::Property::LABEL_VISUAL );
964   dummyImpl.RegisterVisual(DummyControl::Property::LABEL_VISUAL, labelVisual1 );
965
966   actor.SetProperty( DevelControl::Property::STATE, DevelControl::FOCUSED );
967
968   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
969   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
970   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::LABEL_VISUAL), true, TEST_LOCATION);
971
972   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
973   Visual::Base labelVisual2 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
974   DALI_TEST_CHECK( visual1 != visual2 );
975   DALI_TEST_CHECK( labelVisual1 != labelVisual2 );
976   labelMap.Clear();
977   labelVisual2.CreatePropertyMap( labelMap );
978   Property::Value* textValue = labelMap.Find( Toolkit::TextVisual::Property::TEXT, "text");
979   DALI_TEST_CHECK( textValue );
980   Property::Value* pointSizeValue = labelMap.Find( Toolkit::TextVisual::Property::POINT_SIZE, "pointSize");
981   tet_infoline( "Check that the instance data has been copied to the new text visual\n");
982   DALI_TEST_EQUALS( textValue->Get<std::string>(), "New text", TEST_LOCATION );
983   DALI_TEST_EQUALS( pointSizeValue->Get<int>(), 10, TEST_LOCATION );
984
985
986   actor.SetProperty( DevelControl::Property::STATE, DevelControl::DISABLED );
987
988   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
989
990   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
991   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
992   DALI_TEST_CHECK( !focusVisual );
993   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
994
995   DALI_TEST_CHECK( visual1 != visual3 );
996   DALI_TEST_CHECK( visual2 != visual3 );
997
998   Visual::Base labelVisual3 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
999   DALI_TEST_CHECK( labelVisual2 != labelVisual3 );
1000
1001   labelVisual2.CreatePropertyMap( labelMap );
1002   textValue = labelMap.Find(Toolkit::TextVisual::Property::TEXT, "text");
1003   DALI_TEST_CHECK( textValue );
1004   pointSizeValue = labelMap.Find(Toolkit::TextVisual::Property::POINT_SIZE, "pointSize");
1005   tet_infoline( "Check that the instance data has been copied to the new text visual\n");
1006   DALI_TEST_EQUALS( textValue->Get<std::string>(), "New text", TEST_LOCATION );
1007   DALI_TEST_EQUALS( pointSizeValue->Get<int>(), 10, TEST_LOCATION );
1008
1009   END_TEST;
1010 }
1011
1012 int UtcDaliStyleManagerSetState02(void)
1013 {
1014   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
1015   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1016                                           defaultTheme );
1017
1018   ToolkitTestApplication application;
1019
1020   StyleChangedSignalChecker styleChangedSignalHandler;
1021   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1022   StyleManager styleManager = StyleManager::Get();
1023
1024   DummyControl actor = DummyControl::New(true);
1025   actor.SetStyleName("BasicControl");
1026   Stage::GetCurrent().Add(actor);
1027
1028   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1029   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1030
1031   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1032   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1033
1034   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1035   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1036
1037   actor.SetProperty( DevelControl::Property::STATE,
1038                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1039
1040   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1041   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1042
1043   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1044   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
1045
1046   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1047   DALI_TEST_CHECK( visual1 != visual2 );
1048
1049   actor.SetProperty( DevelControl::Property::STATE,
1050                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1051
1052   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1053   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1054
1055   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1056
1057   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1058
1059   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1060   DALI_TEST_CHECK( !testVisual );
1061   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1062   DALI_TEST_CHECK( !testVisual );
1063   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL2);
1064   DALI_TEST_CHECK( !testVisual );
1065   testVisual = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
1066   DALI_TEST_CHECK( testVisual );
1067
1068
1069   DALI_TEST_CHECK( visual1 != visual3 );
1070   DALI_TEST_CHECK( visual2 != visual3 );
1071
1072   actor.SetProperty( DevelControl::Property::STATE,
1073                      Property::Map().Add( "state", "NORMAL" ).Add("withTransitions", false));
1074
1075   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1076   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1077
1078   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1079
1080   visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1081   DALI_TEST_CHECK( visual1 );
1082
1083   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1084   DALI_TEST_CHECK( !focusVisual );
1085   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
1086
1087
1088   END_TEST;
1089 }
1090
1091
1092 int UtcDaliStyleManagerSetState03N(void)
1093 {
1094   tet_infoline("Instantiate dummy control and test state transition without state style" );
1095   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1096                                           defaultTheme );
1097
1098   ToolkitTestApplication application;
1099
1100   StyleChangedSignalChecker styleChangedSignalHandler;
1101   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1102   StyleManager styleManager = StyleManager::Get();
1103
1104   DummyControl actor = DummyControl::New(true);
1105   actor.SetStyleName("NoStyles");
1106   Stage::GetCurrent().Add(actor);
1107
1108   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1109   Property::Map propertyMap;
1110   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1111   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1112   VisualFactory factory = VisualFactory::Get();
1113   Visual::Base visual = factory.CreateVisual( propertyMap );
1114   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1115
1116   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1117   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1118
1119   actor.SetProperty( DevelControl::Property::STATE,
1120                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1121
1122   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1123   DALI_TEST_CHECK( testVisual = visual );
1124
1125   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1126   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1127
1128   actor.SetProperty( DevelControl::Property::STATE,
1129                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1130
1131   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1132   DALI_TEST_CHECK( testVisual = visual );
1133
1134   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1135   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1136
1137   END_TEST;
1138 }
1139
1140
1141 int UtcDaliStyleManagerSetState04N(void)
1142 {
1143   tet_infoline("Instantiate dummy control and test state transition with style without state" );
1144   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1145                                           defaultTheme );
1146
1147   ToolkitTestApplication application;
1148
1149   StyleChangedSignalChecker styleChangedSignalHandler;
1150   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1151   StyleManager styleManager = StyleManager::Get();
1152
1153   DummyControl actor = DummyControl::New(true);
1154   actor.SetStyleName("NoStateStyle");
1155   Stage::GetCurrent().Add(actor);
1156
1157   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1158   Property::Map propertyMap;
1159   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1160   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1161   VisualFactory factory = VisualFactory::Get();
1162   Visual::Base visual = factory.CreateVisual( propertyMap );
1163   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1164
1165   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1166   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1167
1168   actor.SetProperty( DevelControl::Property::STATE,
1169                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1170
1171   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1172   DALI_TEST_CHECK( testVisual = visual );
1173
1174   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1175   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1176
1177   actor.SetProperty( DevelControl::Property::STATE,
1178                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1179
1180   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1181   DALI_TEST_CHECK( testVisual = visual );
1182
1183   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1184   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1185
1186   END_TEST;
1187 }
1188
1189 int UtcDaliStyleManagerSetSubState01(void)
1190 {
1191   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
1192   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1193                                           defaultTheme );
1194
1195   ToolkitTestApplication application;
1196
1197   StyleChangedSignalChecker styleChangedSignalHandler;
1198   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1199   StyleManager styleManager = StyleManager::Get();
1200
1201   DummyControl actor = DummyControl::New(true);
1202   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1203   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1204   actor.SetStyleName("ComplexControl");
1205   Stage::GetCurrent().Add(actor);
1206
1207   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1208
1209   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1210
1211   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1212   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1213   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1214
1215   actor.SetProperty(DevelControl::Property::SUB_STATE, "UNSELECTED");
1216
1217   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1218   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1219   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::COLOR, TEST_LOCATION);
1220
1221   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1222
1223   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1224   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1225   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1226
1227   END_TEST;
1228 }
1229
1230
1231 int UtcDaliStyleManagerSetSubState02(void)
1232 {
1233   tet_infoline("Instantiate complex control and test state/substate change" );
1234   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1235                                           defaultTheme );
1236
1237   ToolkitTestApplication application;
1238
1239   StyleChangedSignalChecker styleChangedSignalHandler;
1240   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1241   StyleManager styleManager = StyleManager::Get();
1242
1243   DummyControl actor = DummyControl::New(true);
1244   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1245   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1246   tet_infoline( "Setting state to NORMAL/SELECTED before re-styling\n");
1247
1248   actor.SetStyleName("ComplexControl");
1249   Stage::GetCurrent().Add(actor);
1250
1251   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1252
1253   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1254
1255   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1256   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1257
1258   actor.SetProperty(DevelControl::Property::SUB_STATE, "UNSELECTED");
1259   tet_infoline( "Changing substate to UNSELECTED - check visual changes\n");
1260
1261   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1262   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::COLOR, TEST_LOCATION);
1263
1264   actor.SetProperty(DevelControl::Property::STATE, "FOCUSED");
1265   tet_infoline( "Changing state to FOCUSED - check visual changes\n");
1266
1267   Visual::Base fgVisual1 = CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1268   Visual::Base focusVisual1 = CheckVisual( dummyImpl, DummyControl::Property::FOCUS_VISUAL, Toolkit::DevelVisual::N_PATCH, TEST_LOCATION);
1269
1270   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1271   tet_infoline( "Changing  substate to SELECTED - Expect no change\n");
1272
1273   Visual::Base fgVisual2 = CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1274   Visual::Base focusVisual2 = CheckVisual( dummyImpl, DummyControl::Property::FOCUS_VISUAL, Toolkit::DevelVisual::N_PATCH, TEST_LOCATION);
1275
1276   DALI_TEST_CHECK( fgVisual1 == fgVisual2 );
1277   DALI_TEST_CHECK( focusVisual1 == focusVisual2 );
1278
1279   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1280   tet_infoline( "Changing state to NORMAL - Expect to change to NORMAL/SELECTED \n");
1281
1282   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1283   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1284
1285   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1286   DALI_TEST_CHECK( ! focusVisual );
1287
1288   actor.SetProperty(DevelControl::Property::STATE, "DISABLED");
1289   tet_infoline( "Changing state to DISABLED - Expect to change to DISABLED/SELECTED \n");
1290
1291   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::COLOR, TEST_LOCATION);
1292   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1293
1294   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1295   DALI_TEST_CHECK( ! testVisual );
1296   testVisual = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
1297   DALI_TEST_CHECK( ! testVisual );
1298
1299   END_TEST;
1300 }