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