(ImageView) if no padding, then do not set the transform
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ControlWrapper.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
18 #include <iostream>
19 #include <stdlib.h>
20
21 // Need to override adaptor classes for toolkit test harness, so include
22 // test harness headers before dali headers.
23 #include <dali-toolkit-test-suite-utils.h>
24
25 #include <dali.h>
26 #include <dali/public-api/dali-core.h>
27 #include <dali/devel-api/actors/custom-actor-devel.h>
28 #include <dali/devel-api/object/csharp-type-registry.h>
29 #include <dali-toolkit/dali-toolkit.h>
30 #include <dali-toolkit/devel-api/controls/control-devel.h>
31 #include <dali-toolkit/devel-api/controls/control-wrapper.h>
32 #include <dali-toolkit/devel-api/controls/control-wrapper-impl.h>
33 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
34 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
35
36 using namespace Dali;
37 using namespace Dali::Toolkit;
38
39 void utc_dali_toolkit_control_wrapper_startup(void)
40 {
41   test_return_value = TET_UNDEF;
42 }
43
44 void utc_dali_toolkit_control_wrapper_cleanup(void)
45 {
46   test_return_value = TET_PASS;
47 }
48
49 ///////////////////////////////////////////////////////////////////////////////////////////////////
50
51 namespace
52 {
53 bool gOnRelayout = false;
54 } // namespace
55
56 ///////////////////////////////////////////////////////////////////////////////////////////////////
57
58
59 namespace Impl
60 {
61 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
62 {
63   /**
64    * Constructor
65    */
66   TestCustomControl()  : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
67           Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) ,
68           mDaliProperty( Property::INVALID_INDEX ),
69           mSizeSet( Vector3::ZERO ),
70           mTargetSize( Vector3::ZERO ),
71           mNego( false ),
72           mDepth( 0u )
73   {
74   }
75
76   TestCustomControl(bool nego)  : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
77           Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT ) ),
78           mDaliProperty( Property::INVALID_INDEX ),
79           mSizeSet( Vector3::ZERO ),
80           mTargetSize( Vector3::ZERO ),
81           mNego( nego )
82   {
83   }
84   /**
85    * Destructor
86    */
87   virtual ~TestCustomControl()
88   {
89   }
90
91   void Initialize( const char* name = NULL )
92   {
93     mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
94
95     OnInitialize( name );
96   }
97
98   virtual void OnInitialize( const char* name ) {}
99
100   // From Toolkit::Internal::ControlWrapper
101   virtual void OnStageConnection( int depth )
102   {
103     mDepth = depth;
104     Control::OnStageConnection(depth);
105   }
106   virtual void OnStageDisconnection()
107   {
108     Control::OnStageDisconnection();
109   }
110   virtual void OnChildAdd( Actor& child )
111   {
112     Control::OnChildAdd(child);
113   }
114   virtual void OnChildRemove( Actor& child )
115   {
116     Control::OnChildRemove(child);
117   }
118   virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
119   {
120     Control::OnPropertySet(index, propertyValue);
121   }
122   virtual void OnSizeSet( const Vector3& targetSize )
123   {
124     mSizeSet = targetSize;
125     Control::OnSizeSet( targetSize );
126   }
127   virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
128   {
129     mTargetSize = targetSize;
130     Control::OnSizeAnimation( animation, targetSize );
131   }
132   virtual bool OnTouchEvent( const TouchEvent& event )
133   {
134     return true;
135   }
136   virtual bool OnHoverEvent( const HoverEvent& event )
137   {
138     return true;
139   }
140   virtual bool OnWheelEvent( const WheelEvent& event )
141   {
142     return true;
143   }
144   virtual bool OnKeyEvent( const KeyEvent& event )
145   {
146     return true;
147   }
148   virtual void OnKeyInputFocusGained()
149   {
150   }
151   virtual void OnKeyInputFocusLost()
152   {
153   }
154   virtual Vector3 GetNaturalSize()
155   {
156     return Vector3( 0.0f, 0.0f, 0.0f );
157   }
158
159   virtual float GetHeightForWidth( float width )
160   {
161     return 0.0f;
162   }
163
164   virtual float GetWidthForHeight( float height )
165   {
166     return 0.0f;
167   }
168
169   void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
170   {
171     ControlWrapper::RegisterVisual( index, visual );
172
173     VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
174     if( iter == mRegisteredVisualIndices.end() )
175     {
176       mRegisteredVisualIndices.push_back(index);
177     }
178   }
179
180   virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
181   {
182     gOnRelayout = true;
183
184     for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
185     {
186       Visual::Base visual = GetVisual(*iter);
187       Property::Map map; // empty map enforces defaults
188       visual.SetTransformAndSize( map, size );
189     }
190   }
191
192   virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
193   {
194   }
195
196   virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
197   {
198   }
199
200   virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
201   {
202     return 0.0f;
203   }
204
205   virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
206   {
207   }
208
209   virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
210   {
211     return false;
212   }
213
214   void SetDaliProperty(std::string s)
215   {
216     Self().SetProperty(mDaliProperty, s);
217   }
218   void TestRelayoutRequest()
219   {
220     RelayoutRequest();
221   }
222
223   float TestGetHeightForWidthBase( float width )
224   {
225     return GetHeightForWidthBase( width );
226   }
227
228   float TestGetWidthForHeightBase( float height )
229   {
230     return GetWidthForHeightBase( height );
231   }
232
233   float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
234   {
235     return CalculateChildSizeBase( child, dimension );
236   }
237
238   bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
239   {
240     return RelayoutDependentOnChildrenBase( dimension );
241   }
242
243   Property::Index mDaliProperty;
244   Vector3 mSizeSet;
245   Vector3 mTargetSize;
246   bool mNego;
247   unsigned int mDepth;
248
249   typedef std::vector<Property::Index> VisualIndices;
250   VisualIndices mRegisteredVisualIndices;
251 };
252
253
254
255 }
256
257 static std::string customControlTypeName = "MyTestCustomControl";
258 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
259
260
261 int UtcDaliControlWrapperConstructor(void)
262 {
263   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
264
265   Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
266   ControlWrapper controlWrapper;
267
268   DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
269
270   controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
271
272   DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
273
274   Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper );
275
276   DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION);
277
278
279   END_TEST;
280 }
281
282 int UtcDaliControlWrapperDestructor(void)
283 {
284   TestApplication application;
285
286   ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
287
288   ControlWrapper control2( control );
289
290   DALI_TEST_CHECK( control );
291   control.Reset();
292   DALI_TEST_CHECK( !control );
293
294   DALI_TEST_CHECK( control2 );
295   control2.Reset();
296   DALI_TEST_CHECK( !control2 );
297
298   END_TEST;
299 }
300
301 int UtcDaliControlWrapperRelayoutRequest(void)
302 {
303   TestApplication application;
304
305   DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
306
307   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
308   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
309
310   Stage::GetCurrent().Add( controlWrapper );
311
312   application.SendNotification();
313   application.Render();
314
315   DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
316   gOnRelayout = false;
317
318   controlWrapperImpl->TestRelayoutRequest();
319   application.SendNotification();
320   application.Render();
321
322   DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
323
324   END_TEST;
325 }
326
327 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
328 {
329   TestApplication application;
330
331   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
332   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
333
334   float width = 300.0f;
335   float v = 0.0f;
336
337   application.SendNotification();
338   application.Render();
339
340   v = controlWrapperImpl->TestGetHeightForWidthBase( width );
341
342   DALI_TEST_EQUALS( width, v, TEST_LOCATION );
343
344   END_TEST;
345 }
346
347 int UtcDaliControlWrapperGetWidthForHeightBase(void)
348 {
349   TestApplication application;
350
351   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
352   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
353
354   float height = 300.0f;
355   float v = 0.0f;
356
357   application.SendNotification();
358   application.Render();
359
360   v = controlWrapperImpl->TestGetWidthForHeightBase( height );
361
362   DALI_TEST_EQUALS( height, v, TEST_LOCATION );
363
364   END_TEST;
365 }
366
367 int UtcDaliControlWrapperCalculateChildSizeBase(void)
368 {
369   TestApplication application;
370
371   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
372   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
373
374   Actor child = Actor::New();
375   child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
376   child.SetSize(150, 150);
377
378   application.SendNotification();
379   application.Render();
380
381   float v = 9.99f;
382   v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
383   DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
384
385   END_TEST;
386 }
387
388 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
389 {
390   TestApplication application;
391
392   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
393   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
394
395   bool v = false;
396
397   v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
398   application.SendNotification();
399   application.Render();
400
401   DALI_TEST_EQUALS( v, true, TEST_LOCATION );
402
403   controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
404   v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
405   application.SendNotification();
406   application.Render();
407   DALI_TEST_EQUALS( v, false, TEST_LOCATION );
408
409   END_TEST;
410 }
411
412 int UtcDaliControlWrapperRegisterVisualToSelf(void)
413 {
414   ToolkitTestApplication application;
415
416   Test::ObjectDestructionTracker objectDestructionTracker;
417
418   {
419     Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
420     ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
421
422     objectDestructionTracker.Start( controlWrapper );
423
424     Property::Index index = 1;
425
426     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
427     Toolkit::Visual::Base visual;
428
429     Property::Map map;
430     map[Visual::Property::TYPE] = Visual::COLOR;
431     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
432
433     visual = visualFactory.CreateVisual( map );
434     DALI_TEST_CHECK( visual );
435
436     // Register to self
437     controlWrapperImpl->RegisterVisual( index, visual );
438
439     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
440     DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
441   }
442
443   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
444
445   END_TEST;
446 }
447
448 int UtcDaliControlWrapperRegisterVisualWithDepthIndexToSelf(void)
449 {
450   ToolkitTestApplication application;
451
452   Test::ObjectDestructionTracker objectDestructionTracker;
453
454   {
455     Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
456     ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
457
458     objectDestructionTracker.Start( controlWrapper );
459
460     Property::Index index = 1;
461
462     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
463     Toolkit::Visual::Base visual;
464
465     Property::Map map;
466     map[Visual::Property::TYPE] = Visual::COLOR;
467     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
468
469     visual = visualFactory.CreateVisual( map );
470     DALI_TEST_CHECK( visual );
471
472     // Register to self
473     controlWrapperImpl->RegisterVisual( index, visual, 4 );
474
475     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
476     DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
477     DALI_TEST_EQUALS( visual.GetDepthIndex(), 4, TEST_LOCATION );
478   }
479
480   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
481
482   END_TEST;
483 }
484
485 int UtcDaliControlWrapperRegisterDisabledVisual(void)
486 {
487   ToolkitTestApplication application;
488
489   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
490   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
491
492   Property::Index TEST_PROPERTY = 1;
493
494   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
495   Toolkit::Visual::Base visual;
496
497   Property::Map map;
498   map[Visual::Property::TYPE] = Visual::COLOR;
499   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
500
501   visual = visualFactory.CreateVisual( map );
502   DALI_TEST_CHECK(visual);
503
504   // Register index with a color visual
505   controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
506
507   DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
508   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
509
510   Stage::GetCurrent().Add( controlWrapper );
511
512   // Render and notify
513   application.SendNotification();
514   application.Render();
515
516   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
517
518   DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
519
520   controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
521
522   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
523
524   END_TEST;
525 }
526
527 int UtcDaliControlWrapperRegisterDisabledVisualWithDepthIndex(void)
528 {
529   ToolkitTestApplication application;
530
531   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
532   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
533
534   Property::Index TEST_PROPERTY = 1;
535
536   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
537   Toolkit::Visual::Base visual;
538
539   Property::Map map;
540   map[Visual::Property::TYPE] = Visual::COLOR;
541   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
542
543   visual = visualFactory.CreateVisual( map );
544   DALI_TEST_CHECK(visual);
545
546   // Register index with a color visual
547   controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false, 10 );
548
549   DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
550   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
551   DALI_TEST_EQUALS( visual.GetDepthIndex(), 10, TEST_LOCATION );
552
553   Stage::GetCurrent().Add( controlWrapper );
554
555   // Render and notify
556   application.SendNotification();
557   application.Render();
558
559   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
560
561   DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
562
563   controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
564
565   DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
566
567   END_TEST;
568 }
569
570 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
571 {
572   ToolkitTestApplication application;
573
574   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
575   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
576
577   Property::Index index = 1;
578
579   Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
580   Toolkit::Visual::Base visual;
581
582   Property::Map map;
583   map[Visual::Property::TYPE] = Visual::COLOR;
584   map[ColorVisual::Property::MIX_COLOR] = Color::RED;
585
586   visual = visualFactory.CreateVisual( map );
587   DALI_TEST_CHECK(visual);
588
589   // Register index with a color visual
590   controlWrapperImpl->RegisterVisual( index, visual );
591
592   DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
593
594   // Unregister visual
595   controlWrapperImpl->UnregisterVisual( index );
596
597   DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
598
599   END_TEST;
600 }
601
602 int UtcDaliControlWrapperTransitionDataMap1N(void)
603 {
604   TestApplication application;
605
606   Property::Map map;
607   map["target"] = "Actor1";
608   map["property"] = "randomProperty";
609   map["initialValue"] = Color::MAGENTA;
610   map["targetValue"] = Color::RED;
611   map["animator"] = Property::Map()
612     .Add("alphaFunction", "EASE_OUT")
613     .Add("timePeriod", Property::Map()
614          .Add("delay", 0.5f)
615          .Add("duration", 1.0f));
616
617   Dali::Toolkit::TransitionData transition = TransitionData::New( map );
618
619   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
620   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
621
622   //DummyControl actor = DummyControl::New();
623   controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
624   controlWrapper.SetName("Actor1");
625   controlWrapper.SetColor(Color::CYAN);
626   Stage::GetCurrent().Add(controlWrapper);
627
628   Animation anim = controlWrapperImpl->CreateTransition( transition );
629   DALI_TEST_CHECK( ! anim );
630
631   Property::Map returnedMap = transition.GetAnimatorAt(0);
632
633   Property::Value* value = returnedMap.Find("property");
634   DALI_TEST_CHECK( value != NULL);
635   DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
636
637   value = returnedMap.Find("initialValue");
638   DALI_TEST_CHECK( value != NULL);
639   DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
640
641   value = returnedMap.Find("targetValue");
642   DALI_TEST_CHECK( value != NULL);
643   DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
644
645   value = returnedMap.Find("animator");
646   DALI_TEST_CHECK( value != NULL);
647   Property::Map returnedAnimatorMap = value->Get<Property::Map>();
648
649   value = returnedAnimatorMap.Find("alphaFunction");
650   DALI_TEST_CHECK( value != NULL);
651   DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
652
653   value = returnedAnimatorMap.Find("timePeriod");
654   DALI_TEST_CHECK( value != NULL);
655   Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
656
657   value = returnedTimePeriodMap.Find("delay");
658   DALI_TEST_CHECK( value != NULL);
659   DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
660
661   value = returnedTimePeriodMap.Find("duration");
662   DALI_TEST_CHECK( value != NULL);
663   DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
664
665   END_TEST;
666 }
667
668 int UtcDaliControlWrapperApplyThemeStyle(void)
669 {
670   ToolkitTestApplication application;
671
672   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
673   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
674
675   controlWrapperImpl->ApplyThemeStyle();
676
677   DALI_TEST_CHECK( true );
678   END_TEST;
679 }
680
681 int UtcDaliControlWrapperTestControlProperties(void)
682 {
683   ToolkitTestApplication application;
684
685   Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
686   ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
687
688   Stage::GetCurrent().Add( controlWrapper );
689
690   // "background" property
691   Property::Map rendererMap;
692   rendererMap[Visual::Property::TYPE] = Visual::COLOR;
693   rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
694   controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
695   Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
696   Property::Map* resultMap = propertyValue.GetMap();
697   DALI_TEST_CHECK( resultMap->Find( Toolkit::Visual::Property::TYPE ) );
698   DALI_TEST_EQUALS( resultMap->Find( Toolkit::Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
699   DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
700   DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
701
702   // "keyInputFocus" property
703   controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
704   DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
705
706   // "styleName" property
707   controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
708   DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
709
710   END_TEST;
711 }
712
713 int UtcDaliControlWrapperTypeRegistryCreation(void)
714 {
715   ToolkitTestApplication application;
716
717   TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
718   DALI_TEST_CHECK( typeInfo )
719
720   // Check that we can't create a ControlWrapper instance
721   BaseHandle baseHandle = typeInfo.CreateInstance();
722   DALI_TEST_CHECK( !baseHandle )
723
724   END_TEST;
725 }
726
727 void SetProperty(BaseObject* object, const char* const name, Property::Value* value)
728 {
729 }
730 Property::Value* GetProperty(BaseObject* object, const char* const name )
731 {
732   return NULL;
733 }
734
735 int UtcDaliControlWrapperAnimateVisual(void)
736 {
737   tet_infoline("Test that the control wrapper's visuals can be animated by name when registered");
738
739   ToolkitTestApplication application;
740   Test::ObjectDestructionTracker objectDestructionTracker;
741
742   {
743     Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
744     ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
745
746     Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1;
747     std::string visualName("colorVisual");
748     CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty );
749
750     objectDestructionTracker.Start( controlWrapper );
751
752     Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
753     Toolkit::Visual::Base visual;
754
755     Property::Map map;
756     map[Visual::Property::TYPE] = Visual::COLOR;
757     map[ColorVisual::Property::MIX_COLOR] = Color::RED;
758
759     visual = visualFactory.CreateVisual( map );
760     DALI_TEST_CHECK( visual );
761
762     // Register to self
763     controlWrapperImpl->TestRegisterVisual( index, visual );
764
765     Stage::GetCurrent().Add( controlWrapper );
766     controlWrapper.SetSize( 100, 100 );
767     application.SendNotification();
768     application.Render(0); // Trigger animation start
769
770     Property::Map transition;
771     transition["target"] = visualName;
772     transition["property"] = "mixColor";
773     transition["targetValue"] = Color::GREEN;
774     Property::Map animator;
775     animator["alphaFunction"] = "LINEAR";
776     animator["duration"] = 1.0f;
777     animator["delay"] = 0.0f;
778     transition["animator"] = animator;
779
780     TransitionData transitionData = TransitionData::New(transition);
781     Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData );
782     anim.Play();
783
784     application.SendNotification();
785     application.Render(0); // Trigger animation start
786
787     application.Render(1000); // animation end
788     application.Render(  10);
789
790     Property::Map visualMap;
791     visual.CreatePropertyMap( visualMap );
792     Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor");
793     DALI_TEST_CHECK( value != NULL );
794     if( value )
795     {
796       Vector4 testColor = value->Get<Vector4>();
797       DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION );
798     }
799
800     DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
801     DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
802
803     Stage::GetCurrent().Remove( controlWrapper );
804   }
805
806   DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
807
808   END_TEST;
809 }