Merge "C# Bindings for Transition Policy properties" 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/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::TextLabel label2 = Toolkit::TextLabel::New(labelStr);
646   Stage::GetCurrent().Add( label2 );
647
648   StyleChangedSignalChecker styleChangedSignalHandler;
649   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
650   StyleManager styleManager = StyleManager::Get();
651
652   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
653
654   Test::StyleMonitor::SetDefaultFontFamily("Times New Roman");
655
656   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_CHANGE);
657
658   tet_infoline("Test that the StyleChanged signal is received only once");
659
660   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
661
662   // Check that the label's font style has been altered
663   Property::Value family = label.GetProperty(TextLabel::Property::FONT_FAMILY);
664   std::string familyStr;
665   family.Get( familyStr );
666
667   DALI_TEST_EQUALS( familyStr, "Times New Roman", TEST_LOCATION);
668
669   END_TEST;
670 }
671
672 int UtcDaliStyleManagerStyleChangedSignalFontSize(void)
673 {
674   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
675
676   const char* defaultTheme =
677     "{\n"
678     "  \"styles\":\n"
679     "  {\n"
680     "    \"textlabelFontSize0\":\n"
681     "    {\n"
682     "      \"pointSize\":10\n"
683     "    },\n"
684     "    \"textlabelFontSize1\":\n"
685     "    {\n"
686     "      \"pointSize\":10\n"
687     "    },\n"
688     "    \"textlabelFontSize2\":\n"
689     "    {\n"
690     "      \"pointSize\":12\n"
691     "    },\n"
692     "    \"textlabelFontSize3\":\n"
693     "    {\n"
694     "      \"pointSize\":14\n"
695     "    },\n"
696     "    \"textlabelFontSize4\":\n"
697     "    {\n"
698     "      \"pointSize\":16\n"
699     "    }\n"
700     "  }\n"
701     "}\n";
702
703   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
704
705   ToolkitTestApplication application;
706
707   std::string labelStr("Label");
708   Toolkit::TextLabel label = Toolkit::TextLabel::New(labelStr);
709   Stage::GetCurrent().Add( label );
710
711   Toolkit::TextLabel label2 = Toolkit::TextLabel::New(labelStr);
712   Stage::GetCurrent().Add( label2 );
713
714   StyleChangedSignalChecker styleChangedSignalHandler;
715   StyleMonitor styleMonitor = StyleMonitor::Get();
716   StyleManager styleManager = StyleManager::Get();
717
718   label.SetProperty(TextLabel::Property::POINT_SIZE, 10.0f);
719
720   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
721
722   Test::StyleMonitor::SetDefaultFontSize(2);
723   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
724
725   tet_infoline("Test that the StyleChanged signal is received only once");
726   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
727
728   tet_infoline("Test that the label's font size has been altered\n");
729   Property::Value pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
730   float pointSize;
731   pointSizeValue.Get( pointSize );
732
733   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
734
735   styleChangedSignalHandler.signalCount = 0;
736
737   Test::StyleMonitor::SetDefaultFontSize(4);
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   // Check that the label's font style has been altered
744   pointSizeValue = label.GetProperty(TextLabel::Property::POINT_SIZE);
745   pointSizeValue.Get( pointSize );
746
747   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
748
749
750   END_TEST;
751 }
752
753
754 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextField(void)
755 {
756   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
757
758   const char* defaultTheme =
759     "{\n"
760     "  \"styles\":\n"
761     "  {\n"
762     "    \"textfieldFontSize0\":\n"
763     "    {\n"
764     "      \"pointSize\":8\n"
765     "    },\n"
766     "    \"textfieldFontSize1\":\n"
767     "    {\n"
768     "      \"pointSize\":10\n"
769     "    },\n"
770     "    \"textfieldFontSize2\":\n"
771     "    {\n"
772     "      \"pointSize\":12\n"
773     "    },\n"
774     "    \"textfieldFontSize3\":\n"
775     "    {\n"
776     "      \"pointSize\":14\n"
777     "    },\n"
778     "    \"textfieldFontSize4\":\n"
779     "    {\n"
780     "      \"pointSize\":16\n"
781     "    }\n"
782     "  }\n"
783     "}\n";
784
785   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
786
787   ToolkitTestApplication application;
788
789   std::string fieldStr("Field");
790   Toolkit::TextField field = Toolkit::TextField::New();
791   field.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
792   Stage::GetCurrent().Add( field );
793
794   Toolkit::TextField field2 = Toolkit::TextField::New();
795   Stage::GetCurrent().Add( field2 );
796   field2.SetProperty( Toolkit::TextField::Property::TEXT, fieldStr );
797
798   StyleChangedSignalChecker styleChangedSignalHandler;
799   StyleMonitor styleMonitor = StyleMonitor::Get();
800   StyleManager styleManager = StyleManager::Get();
801
802   field.SetProperty(TextField::Property::POINT_SIZE, 10.0f);
803
804   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
805
806   Test::StyleMonitor::SetDefaultFontSize(2);
807   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
808
809   tet_infoline("Test that the StyleChanged signal is received only once");
810   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
811
812   tet_infoline("Test that the field's font size has been altered\n");
813   Property::Value pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
814   float pointSize;
815   pointSizeValue.Get( pointSize );
816
817   DALI_TEST_EQUALS( pointSize, 12.0f, 0.001, TEST_LOCATION );
818
819   styleChangedSignalHandler.signalCount = 0;
820
821   Test::StyleMonitor::SetDefaultFontSize(4);
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   // Check that the field's font style has been altered
828   pointSizeValue = field.GetProperty(TextField::Property::POINT_SIZE);
829   pointSizeValue.Get( pointSize );
830
831   DALI_TEST_EQUALS( pointSize, 16.0f, 0.001, TEST_LOCATION );
832
833
834   END_TEST;
835 }
836
837 int UtcDaliStyleManagerStyleChangedSignalFontSizeTextEditor(void)
838 {
839   tet_infoline("Test that the StyleChange signal is fired when the font size is altered" );
840
841   const char* defaultTheme =
842     "{\n"
843     "  \"styles\":\n"
844     "  {\n"
845     "    \"texteditorFontSize0\":\n"
846     "    {\n"
847     "      \"pointSize\":10\n"
848     "    },\n"
849     "    \"texteditorFontSize1\":\n"
850     "    {\n"
851     "      \"pointSize\":12\n"
852     "    },\n"
853     "    \"texteditorFontSize2\":\n"
854     "    {\n"
855     "      \"pointSize\":14\n"
856     "    },\n"
857     "    \"texteditorFontSize3\":\n"
858     "    {\n"
859     "      \"pointSize\":18\n"
860     "    },\n"
861     "    \"texteditorFontSize4\":\n"
862     "    {\n"
863     "      \"pointSize\":25\n"
864     "    }\n"
865     "  }\n"
866     "}\n";
867
868   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json", defaultTheme );
869
870   ToolkitTestApplication application;
871
872   std::string editorStr("Editor");
873   Toolkit::TextEditor editor = Toolkit::TextEditor::New();
874   editor.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
875   Stage::GetCurrent().Add( editor );
876
877   Toolkit::TextEditor editor2 = Toolkit::TextEditor::New();
878   Stage::GetCurrent().Add( editor2 );
879   editor2.SetProperty( Toolkit::TextEditor::Property::TEXT, editorStr );
880
881   StyleChangedSignalChecker styleChangedSignalHandler;
882   StyleMonitor styleMonitor = StyleMonitor::Get();
883   StyleManager styleManager = StyleManager::Get();
884
885   editor.SetProperty(TextEditor::Property::POINT_SIZE, 10.0f);
886
887   styleManager.StyleChangedSignal().Connect(&styleChangedSignalHandler, &StyleChangedSignalChecker::OnStyleChanged);
888
889   Test::StyleMonitor::SetDefaultFontSize(2);
890   styleMonitor.StyleChangeSignal().Emit( styleMonitor,  StyleChange::DEFAULT_FONT_SIZE_CHANGE);
891
892   tet_infoline("Test that the StyleChanged signal is received only once");
893   DALI_TEST_EQUALS( styleChangedSignalHandler.signalCount, 1, TEST_LOCATION );
894
895   tet_infoline("Test that the editor's font size has been altered\n");
896   Property::Value pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
897   float pointSize;
898   pointSizeValue.Get( pointSize );
899
900   DALI_TEST_EQUALS( pointSize, 14.0f, 0.001, TEST_LOCATION );
901
902   styleChangedSignalHandler.signalCount = 0;
903
904   Test::StyleMonitor::SetDefaultFontSize(4);
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   // Check that the editor's font style has been altered
911   pointSizeValue = editor.GetProperty(TextEditor::Property::POINT_SIZE);
912   pointSizeValue.Get( pointSize );
913
914   DALI_TEST_EQUALS( pointSize, 25.0f, 0.001, TEST_LOCATION );
915
916
917   END_TEST;
918 }
919
920
921 int UtcDaliStyleManagerSetState01(void)
922 {
923   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
924   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
925                                           defaultTheme );
926
927   ToolkitTestApplication application;
928
929   StyleChangedSignalChecker styleChangedSignalHandler;
930   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
931   StyleManager styleManager = StyleManager::Get();
932
933   DummyControl actor = DummyControl::New(true);
934   actor.SetStyleName("BasicControl");
935   Stage::GetCurrent().Add(actor);
936
937   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
938   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
939
940   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
941   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
942   Visual::Base labelVisual1 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
943   Property::Map labelMap;
944   labelVisual1.CreatePropertyMap( labelMap );
945   labelMap[TextVisual::Property::TEXT] = "New text";
946   VisualFactory factory = VisualFactory::Get();
947   labelVisual1 = factory.CreateVisual(labelMap);
948   dummyImpl.UnregisterVisual(DummyControl::Property::LABEL_VISUAL );
949   dummyImpl.RegisterVisual(DummyControl::Property::LABEL_VISUAL, labelVisual1 );
950
951   actor.SetProperty( DevelControl::Property::STATE, DevelControl::FOCUSED );
952
953   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
954   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
955   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::LABEL_VISUAL), true, TEST_LOCATION);
956
957   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
958   Visual::Base labelVisual2 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
959   DALI_TEST_CHECK( visual1 != visual2 );
960   DALI_TEST_CHECK( labelVisual1 != labelVisual2 );
961   labelMap.Clear();
962   labelVisual2.CreatePropertyMap( labelMap );
963   Property::Value* textValue = labelMap.Find( Toolkit::TextVisual::Property::TEXT, "text");
964   DALI_TEST_CHECK( textValue );
965   Property::Value* pointSizeValue = labelMap.Find( Toolkit::TextVisual::Property::POINT_SIZE, "pointSize");
966   tet_infoline( "Check that the instance data has been copied to the new text visual\n");
967   DALI_TEST_EQUALS( textValue->Get<std::string>(), "New text", TEST_LOCATION );
968   DALI_TEST_EQUALS( pointSizeValue->Get<int>(), 10, TEST_LOCATION );
969
970
971   actor.SetProperty( DevelControl::Property::STATE, DevelControl::DISABLED );
972
973   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
974
975   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
976   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
977   DALI_TEST_CHECK( !focusVisual );
978   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
979
980   DALI_TEST_CHECK( visual1 != visual3 );
981   DALI_TEST_CHECK( visual2 != visual3 );
982
983   Visual::Base labelVisual3 = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
984   DALI_TEST_CHECK( labelVisual2 != labelVisual3 );
985
986   labelVisual2.CreatePropertyMap( labelMap );
987   textValue = labelMap.Find(Toolkit::TextVisual::Property::TEXT, "text");
988   DALI_TEST_CHECK( textValue );
989   pointSizeValue = labelMap.Find(Toolkit::TextVisual::Property::POINT_SIZE, "pointSize");
990   tet_infoline( "Check that the instance data has been copied to the new text visual\n");
991   DALI_TEST_EQUALS( textValue->Get<std::string>(), "New text", TEST_LOCATION );
992   DALI_TEST_EQUALS( pointSizeValue->Get<int>(), 10, TEST_LOCATION );
993
994   END_TEST;
995 }
996
997 int UtcDaliStyleManagerSetState02(void)
998 {
999   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
1000   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1001                                           defaultTheme );
1002
1003   ToolkitTestApplication application;
1004
1005   StyleChangedSignalChecker styleChangedSignalHandler;
1006   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1007   StyleManager styleManager = StyleManager::Get();
1008
1009   DummyControl actor = DummyControl::New(true);
1010   actor.SetStyleName("BasicControl");
1011   Stage::GetCurrent().Add(actor);
1012
1013   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1014   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1015
1016   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1017   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1018
1019   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1020   Visual::Base visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1021
1022   actor.SetProperty( DevelControl::Property::STATE,
1023                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1024
1025   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1026   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1027
1028   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1029   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), true, TEST_LOCATION);
1030
1031   Visual::Base visual2 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1032   DALI_TEST_CHECK( visual1 != visual2 );
1033
1034   actor.SetProperty( DevelControl::Property::STATE,
1035                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1036
1037   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1038   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1039
1040   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1041
1042   Visual::Base visual3 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1043
1044   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1045   DALI_TEST_CHECK( !testVisual );
1046   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1047   DALI_TEST_CHECK( !testVisual );
1048   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL2);
1049   DALI_TEST_CHECK( !testVisual );
1050   testVisual = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
1051   DALI_TEST_CHECK( testVisual );
1052
1053
1054   DALI_TEST_CHECK( visual1 != visual3 );
1055   DALI_TEST_CHECK( visual2 != visual3 );
1056
1057   actor.SetProperty( DevelControl::Property::STATE,
1058                      Property::Map().Add( "state", "NORMAL" ).Add("withTransitions", false));
1059
1060   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1061   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1062
1063   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOREGROUND_VISUAL), true, TEST_LOCATION);
1064
1065   visual1 = dummyImpl.GetVisual(DummyControl::Property::FOREGROUND_VISUAL);
1066   DALI_TEST_CHECK( visual1 );
1067
1068   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1069   DALI_TEST_CHECK( !focusVisual );
1070   DALI_TEST_EQUALS(dummyImpl.IsVisualEnabled(DummyControl::Property::FOCUS_VISUAL), false, TEST_LOCATION);
1071
1072
1073   END_TEST;
1074 }
1075
1076
1077 int UtcDaliStyleManagerSetState03N(void)
1078 {
1079   tet_infoline("Instantiate dummy control and test state transition without state style" );
1080   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1081                                           defaultTheme );
1082
1083   ToolkitTestApplication application;
1084
1085   StyleChangedSignalChecker styleChangedSignalHandler;
1086   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1087   StyleManager styleManager = StyleManager::Get();
1088
1089   DummyControl actor = DummyControl::New(true);
1090   actor.SetStyleName("NoStyles");
1091   Stage::GetCurrent().Add(actor);
1092
1093   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1094   Property::Map propertyMap;
1095   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1096   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1097   VisualFactory factory = VisualFactory::Get();
1098   Visual::Base visual = factory.CreateVisual( propertyMap );
1099   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1100
1101   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1102   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1103
1104   actor.SetProperty( DevelControl::Property::STATE,
1105                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1106
1107   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1108   DALI_TEST_CHECK( testVisual = visual );
1109
1110   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1111   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1112
1113   actor.SetProperty( DevelControl::Property::STATE,
1114                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1115
1116   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1117   DALI_TEST_CHECK( testVisual = visual );
1118
1119   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1120   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1121
1122   END_TEST;
1123 }
1124
1125
1126 int UtcDaliStyleManagerSetState04N(void)
1127 {
1128   tet_infoline("Instantiate dummy control and test state transition with style without state" );
1129   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1130                                           defaultTheme );
1131
1132   ToolkitTestApplication application;
1133
1134   StyleChangedSignalChecker styleChangedSignalHandler;
1135   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1136   StyleManager styleManager = StyleManager::Get();
1137
1138   DummyControl actor = DummyControl::New(true);
1139   actor.SetStyleName("NoStateStyle");
1140   Stage::GetCurrent().Add(actor);
1141
1142   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1143   Property::Map propertyMap;
1144   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1145   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1146   VisualFactory factory = VisualFactory::Get();
1147   Visual::Base visual = factory.CreateVisual( propertyMap );
1148   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1149
1150   int state = actor.GetProperty<int>( DevelControl::Property::STATE );
1151   DALI_TEST_EQUALS( state, (int) DevelControl::NORMAL, TEST_LOCATION );
1152
1153   actor.SetProperty( DevelControl::Property::STATE,
1154                      Property::Map().Add( "state", "FOCUSED" ).Add("withTransitions", false));
1155
1156   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1157   DALI_TEST_CHECK( testVisual = visual );
1158
1159   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1160   DALI_TEST_EQUALS( state, (int) DevelControl::FOCUSED, TEST_LOCATION );
1161
1162   actor.SetProperty( DevelControl::Property::STATE,
1163                      Property::Map().Add( "state", "DISABLED" ).Add("withTransitions", false));
1164
1165   testVisual = dummyImpl.GetVisual(DummyControl::Property::TEST_VISUAL);
1166   DALI_TEST_CHECK( testVisual = visual );
1167
1168   state = actor.GetProperty<int>( DevelControl::Property::STATE );
1169   DALI_TEST_EQUALS( state, (int) DevelControl::DISABLED, TEST_LOCATION );
1170
1171   END_TEST;
1172 }
1173
1174 int UtcDaliStyleManagerSetSubState01(void)
1175 {
1176   tet_infoline("Instantiate dummy control and test state/visual/transition capture" );
1177   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1178                                           defaultTheme );
1179
1180   ToolkitTestApplication application;
1181
1182   StyleChangedSignalChecker styleChangedSignalHandler;
1183   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1184   StyleManager styleManager = StyleManager::Get();
1185
1186   DummyControl actor = DummyControl::New(true);
1187   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1188   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1189   actor.SetStyleName("ComplexControl");
1190   Stage::GetCurrent().Add(actor);
1191
1192   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1193
1194   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1195
1196   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1197   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1198   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1199
1200   actor.SetProperty(DevelControl::Property::SUB_STATE, "UNSELECTED");
1201
1202   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1203   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1204   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::COLOR, TEST_LOCATION);
1205
1206   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1207
1208   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1209   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1210   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1211
1212   END_TEST;
1213 }
1214
1215
1216 int UtcDaliStyleManagerSetSubState02(void)
1217 {
1218   tet_infoline("Instantiate complex control and test state/substate change" );
1219   Test::StyleMonitor::SetThemeFileOutput( DALI_STYLE_DIR "dali-toolkit-default-theme.json",
1220                                           defaultTheme );
1221
1222   ToolkitTestApplication application;
1223
1224   StyleChangedSignalChecker styleChangedSignalHandler;
1225   Dali::StyleMonitor styleMonitor = Dali::StyleMonitor::Get();
1226   StyleManager styleManager = StyleManager::Get();
1227
1228   DummyControl actor = DummyControl::New(true);
1229   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1230   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1231   tet_infoline( "Setting state to NORMAL/SELECTED before re-styling\n");
1232
1233   actor.SetStyleName("ComplexControl");
1234   Stage::GetCurrent().Add(actor);
1235
1236   Integration::ResourcePointer ninePatch = CustomizeNinePatch( application, 30, 30 );
1237
1238   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1239
1240   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1241   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1242
1243   actor.SetProperty(DevelControl::Property::SUB_STATE, "UNSELECTED");
1244   tet_infoline( "Changing substate to UNSELECTED - check visual changes\n");
1245
1246   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1247   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::COLOR, TEST_LOCATION);
1248
1249   actor.SetProperty(DevelControl::Property::STATE, "FOCUSED");
1250   tet_infoline( "Changing state to FOCUSED - check visual changes\n");
1251
1252   Visual::Base fgVisual1 = CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1253   Visual::Base focusVisual1 = CheckVisual( dummyImpl, DummyControl::Property::FOCUS_VISUAL, Toolkit::DevelVisual::N_PATCH, TEST_LOCATION);
1254
1255   actor.SetProperty(DevelControl::Property::SUB_STATE, "SELECTED");
1256   tet_infoline( "Changing  substate to SELECTED - Expect no change\n");
1257
1258   Visual::Base fgVisual2 = CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1259   Visual::Base focusVisual2 = CheckVisual( dummyImpl, DummyControl::Property::FOCUS_VISUAL, Toolkit::DevelVisual::N_PATCH, TEST_LOCATION);
1260
1261   DALI_TEST_CHECK( fgVisual1 == fgVisual2 );
1262   DALI_TEST_CHECK( focusVisual1 == focusVisual2 );
1263
1264   actor.SetProperty(DevelControl::Property::STATE, "NORMAL");
1265   tet_infoline( "Changing state to NORMAL - Expect to change to NORMAL/SELECTED \n");
1266
1267   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1268   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL2, Toolkit::Visual::GRADIENT, TEST_LOCATION);
1269
1270   Visual::Base focusVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1271   DALI_TEST_CHECK( ! focusVisual );
1272
1273   actor.SetProperty(DevelControl::Property::STATE, "DISABLED");
1274   tet_infoline( "Changing state to DISABLED - Expect to change to DISABLED/SELECTED \n");
1275
1276   CheckVisual( dummyImpl, DummyControl::Property::FOREGROUND_VISUAL, Toolkit::Visual::COLOR, TEST_LOCATION);
1277   CheckVisual( dummyImpl, DummyControl::Property::TEST_VISUAL, Toolkit::Visual::IMAGE, TEST_LOCATION);
1278
1279   Visual::Base testVisual = dummyImpl.GetVisual(DummyControl::Property::FOCUS_VISUAL);
1280   DALI_TEST_CHECK( ! testVisual );
1281   testVisual = dummyImpl.GetVisual(DummyControl::Property::LABEL_VISUAL);
1282   DALI_TEST_CHECK( ! testVisual );
1283
1284   END_TEST;
1285 }