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