Removal of PropertyValueMap, using Property::Map instead
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Control.cpp
1 /*
2  * Copyright (c) 2014 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-toolkit/dali-toolkit.h>
27 #include "dummy-control.h"
28
29 using namespace Dali;
30 using namespace Dali::Toolkit;
31
32 void utc_dali_toolkit_control_startup(void)
33 {
34   test_return_value = TET_UNDEF;
35 }
36
37 void utc_dali_toolkit_control_cleanup(void)
38 {
39   test_return_value = TET_PASS;
40 }
41
42 ///////////////////////////////////////////////////////////////////////////////////////////////////
43
44 namespace
45 {
46
47 bool gObjectCreatedCallBackCalled;
48
49 void TestCallback(BaseHandle handle)
50 {
51   gObjectCreatedCallBackCalled = true;
52 }
53
54 void TestVoidCallback()
55 {
56 }
57
58 } // namespace
59
60 ///////////////////////////////////////////////////////////////////////////////////////////////////
61
62
63 int UtcDaliControlConstructor(void)
64 {
65   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
66
67   DummyControl dummy;
68
69   DALI_TEST_CHECK( !Control::DownCast(dummy) );
70
71   dummy = DummyControl::New();
72
73   DALI_TEST_CHECK( Control::DownCast(dummy) );
74   END_TEST;
75 }
76
77 int UtcDaliControlNew(void)
78 {
79   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
80
81   Control control;
82
83   DALI_TEST_CHECK( !Control::DownCast(control) );
84
85   control = Control::New();
86
87   DALI_TEST_CHECK( Control::DownCast(control) );
88   END_TEST;
89 }
90
91
92 int UtcDaliControlRegister(void)
93 {
94   ToolkitTestApplication application;
95
96   // Ensure the object is registered after creation
97   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
98   DALI_TEST_CHECK( registry );
99
100   gObjectCreatedCallBackCalled = false;
101   registry.ObjectCreatedSignal().Connect( &TestCallback );
102   {
103     Alignment alignment = Alignment::New();
104   }
105   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
106   END_TEST;
107 }
108
109 int UtcDaliControlCopyAndAssignment(void)
110 {
111   ToolkitTestApplication application;
112
113   DummyControl control = DummyControl::New();
114   Control emptyControl;
115
116   Control controlCopy( control );
117   DALI_TEST_CHECK( control == controlCopy );
118
119   Control emptyControlCopy( emptyControl );
120   DALI_TEST_CHECK( emptyControl == emptyControlCopy );
121
122   Control controlEquals;
123   controlEquals = control;
124   DALI_TEST_CHECK( control == controlEquals );
125
126   Control emptyControlEquals;
127   emptyControlEquals = emptyControl;
128   DALI_TEST_CHECK( emptyControl == emptyControlEquals );
129
130   // Self assignment
131   control = control;
132   DALI_TEST_CHECK( control == controlCopy );
133   END_TEST;
134 }
135
136 int UtcDaliControlDownCast(void)
137 {
138   ToolkitTestApplication application;
139
140   DummyControl control;
141
142   DALI_TEST_CHECK( !Control::DownCast( control ) );
143
144   control = DummyControl::New();
145
146   DALI_TEST_CHECK( Control::DownCast( control ) );
147
148   Actor actor;
149
150   DALI_TEST_CHECK( !Control::DownCast( actor ) );
151
152   actor = Actor::New();
153
154   DALI_TEST_CHECK( !Control::DownCast( actor ) );
155   END_TEST;
156 }
157
158 int UtcDaliControlDownCastTemplate(void)
159 {
160   ToolkitTestApplication application;
161
162   DummyControl control;
163
164   DALI_TEST_CHECK( !DummyControl::DownCast( control ));
165
166   control = DummyControl::New();
167
168   DALI_TEST_CHECK( DummyControl::DownCast( control ) );
169
170   Actor actor;
171
172   DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
173
174   actor = Actor::New();
175
176   DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
177   END_TEST;
178 }
179
180 int UtcDaliControlKeyInputFocus(void)
181 {
182   ToolkitTestApplication application;
183   Stage stage = Stage::GetCurrent();
184
185   DummyControl control;
186
187   PushButton pushButton1 = PushButton::New();
188   stage.Add( pushButton1 );
189
190   pushButton1.SetKeyInputFocus();
191   DALI_TEST_CHECK( pushButton1.HasKeyInputFocus() );
192
193   pushButton1.ClearKeyInputFocus();
194   DALI_TEST_CHECK( !pushButton1.HasKeyInputFocus() );
195   END_TEST;
196 }
197
198 int UtcDaliControlGetImplementation(void)
199 {
200   ToolkitTestApplication application;
201
202   DummyControl control;
203
204   // Get Empty
205   {
206     try
207     {
208       Toolkit::Internal::Control& controlImpl = control.GetImplementation();
209       (void)controlImpl; // Avoid unused warning
210       tet_result(TET_FAIL);
211     }
212     catch (DaliException &exception)
213     {
214       tet_result(TET_PASS);
215     }
216   }
217
218   // Get Const Empty
219   {
220     try
221     {
222       const DummyControl constControl(control);
223       const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
224       (void)controlImpl; // Avoid unused warning
225       tet_result(TET_FAIL);
226     }
227     catch (DaliException &exception)
228     {
229       tet_result(TET_PASS);
230     }
231   }
232
233   control = DummyControl::New();
234
235   // Get
236   {
237     try
238     {
239       Toolkit::Internal::Control& controlImpl = control.GetImplementation();
240       (void)controlImpl; // Avoid unused warning
241       tet_result(TET_PASS);
242     }
243     catch (DaliException &exception)
244     {
245       tet_result(TET_FAIL);
246     }
247   }
248
249   // Get Const
250   {
251     try
252     {
253       const DummyControl constControl(control);
254       const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
255       (void)controlImpl; // Avoid unused warning
256       tet_result(TET_PASS);
257     }
258     catch (DaliException &exception)
259     {
260       tet_result(TET_FAIL);
261     }
262   }
263   END_TEST;
264 }
265
266 int UtcDaliControlSignalConnectDisconnect(void)
267 {
268   ToolkitTestApplication application;
269
270   {
271     DummyControl dummy = DummyControlImpl::New();
272
273     Actor actor = Actor::New();
274     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
275     Toolkit::Internal::Control& control = dummy.GetImplementation();
276     DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
277     DALI_TEST_CHECK( dummyImpl );
278
279     actor.SetSizeSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
280     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
281     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
282     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value,  Vector3::ZERO, TEST_LOCATION );
283
284     const Vector3 newSize( 10, 10, 0 );
285     actor.SetSize( newSize );
286     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
287     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value,  newSize, TEST_LOCATION );
288
289     dummyImpl->mCustomSlot1Called = false;
290     actor.SetSizeSignal().Disconnect( dummyImpl, &DummyControlImpl::CustomSlot1 );
291     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
292     const Vector3 ignoredSize( 20, 20, 0 );
293     actor.SetSize( ignoredSize );
294     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
295     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value,  newSize/*not ignoredSize*/, TEST_LOCATION );
296   }
297   END_TEST;
298 }
299
300 int UtcDaliControlSignalAutomaticDisconnect(void)
301 {
302   ToolkitTestApplication application;
303
304   Actor actor = Actor::New();
305
306   {
307     DummyControl dummy = DummyControlImpl::New();
308     Toolkit::Internal::Control& control = dummy.GetImplementation();
309     DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
310     DALI_TEST_CHECK( dummyImpl );
311
312     actor.SetSizeSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
313     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
314     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
315     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value,  Vector3::ZERO, TEST_LOCATION );
316
317     const Vector3 newSize( 10, 10, 0 );
318     actor.SetSize( newSize );
319     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
320     DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value,  newSize, TEST_LOCATION );
321   }
322   // dummyControl automatically disconnects
323
324   DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
325
326   const Vector3 ignoredSize( 20, 20, 0 );
327   actor.SetSize( ignoredSize );
328   END_TEST;
329 }
330
331 int UtcDaliControlTestParameters(void)
332 {
333   ToolkitTestApplication application;
334   DummyControl test = DummyControl::New();
335
336   Vector3 maxSize = test.GetNaturalSize();
337   Vector3 minSize = maxSize / 2.0f;
338
339   Toolkit::Control::SizePolicy widthPolicy( Control::Fixed );
340   Toolkit::Control::SizePolicy heightPolicy( Control::Fixed );
341   test.SetSizePolicy( widthPolicy, heightPolicy );
342   test.GetSizePolicy( widthPolicy, heightPolicy );
343
344   DALI_TEST_CHECK( widthPolicy == Control::Fixed && heightPolicy == Control::Fixed );
345
346   test.SetSize( 0.7f, 0.7f, 0.7f );
347   float width = 640.0f;
348   float height = test.GetHeightForWidth( width );
349   DALI_TEST_CHECK( test.GetWidthForHeight( height ) == width );
350
351   test.SetMinimumSize( minSize );
352   DALI_TEST_CHECK( test.GetMinimumSize() == minSize );
353
354   test.SetMaximumSize( maxSize );
355   DALI_TEST_CHECK( test.GetMaximumSize() == maxSize );
356
357   test.KeyEventSignal();
358
359   // Provide coverage for pointer destructor
360   Control* testControlPtr = new Control;
361   DALI_TEST_CHECK( testControlPtr );
362   delete testControlPtr;
363   END_TEST;
364 }
365
366 int UtcDaliControlBackgroundColor(void)
367 {
368   ToolkitTestApplication application;
369   Control control = Control::New();
370
371   DALI_TEST_CHECK( !control.GetBackgroundActor() );
372   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
373
374   control.SetBackgroundColor( Color::RED );
375   DALI_TEST_CHECK( control.GetBackgroundActor() );
376   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
377
378   END_TEST;
379 }
380
381 int UtcDaliControlBackgroundImage(void)
382 {
383   ToolkitTestApplication application;
384   Control control = Control::New();
385
386   DALI_TEST_CHECK( !control.GetBackgroundActor() );
387   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
388
389   Image image = Image::New("TestImage");
390   control.SetBackground( image );
391   DALI_TEST_CHECK( control.GetBackgroundActor() );
392   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::WHITE, TEST_LOCATION );
393
394   control.SetBackgroundColor( Color::GREEN );
395   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::GREEN, TEST_LOCATION );
396
397   control.ClearBackground();
398   DALI_TEST_CHECK( !control.GetBackgroundActor() );
399   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
400
401   control.SetBackgroundColor( Color::YELLOW );
402   control.SetBackground( image );
403   DALI_TEST_CHECK( control.GetBackgroundActor() );
404   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::YELLOW, TEST_LOCATION );
405
406   END_TEST;
407 }
408
409 int UtcDaliControlBackgroundProperties(void)
410 {
411   ToolkitTestApplication application;
412   Control control = Control::New();
413
414   DALI_TEST_CHECK( !control.GetBackgroundActor() );
415   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
416   DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
417   DALI_TEST_CHECK( control.GetProperty( Control::PROPERTY_BACKGROUND ).Get< Property::Map >().Empty() );
418
419   control.SetProperty( Control::PROPERTY_BACKGROUND_COLOR, Color::RED );
420   DALI_TEST_CHECK( control.GetBackgroundActor() );
421   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
422   DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
423
424   Property::Map imageMap;
425   imageMap[ "filename" ] = "TestImage";
426   Property::Map map;
427   map[ "image" ] = imageMap;
428   control.SetProperty( Control::PROPERTY_BACKGROUND, map );
429   DALI_TEST_CHECK( control.GetBackgroundActor() );
430   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
431   DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
432
433   Property::Value propValue = control.GetProperty( Control::PROPERTY_BACKGROUND );
434   DALI_TEST_CHECK( propValue.HasKey( "image" ) );
435   DALI_TEST_CHECK( propValue.GetValue( "image" ).HasKey( "filename" ) );
436   DALI_TEST_CHECK( propValue.GetValue( "image" ).GetValue( "filename" ).Get< std::string>() == "TestImage" );
437
438   Property::Map emptyMap;
439   control.SetProperty( Control::PROPERTY_BACKGROUND, emptyMap );
440   DALI_TEST_CHECK( !control.GetBackgroundActor() );
441   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
442   DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
443   DALI_TEST_CHECK( control.GetProperty( Control::PROPERTY_BACKGROUND ).Get< Property::Map >().Empty() );
444
445   END_TEST;
446 }
447
448 int UtcDaliControlSizePolicyProperties(void)
449 {
450   ToolkitTestApplication application;
451
452   Control control = Control::New();
453
454   Control::SizePolicy widthPolicy( Control::Fixed );
455   Control::SizePolicy heightPolicy( Control::Fixed );
456
457   control.GetSizePolicy( widthPolicy, heightPolicy );
458   DALI_TEST_EQUALS( "FIXED", control.GetProperty( Control::PROPERTY_WIDTH_POLICY ).Get< std::string >(), TEST_LOCATION );
459   DALI_TEST_EQUALS( "FIXED", control.GetProperty( Control::PROPERTY_HEIGHT_POLICY ).Get< std::string >(), TEST_LOCATION );
460
461   control.SetSizePolicy( Control::Flexible, Control::Range );
462   DALI_TEST_EQUALS( "FLEXIBLE", control.GetProperty( Control::PROPERTY_WIDTH_POLICY ).Get< std::string >(), TEST_LOCATION );
463   DALI_TEST_EQUALS( "RANGE", control.GetProperty( Control::PROPERTY_HEIGHT_POLICY ).Get< std::string >(), TEST_LOCATION );
464
465   control.SetProperty( Control::PROPERTY_WIDTH_POLICY, "MAXIMUM" );
466   control.SetProperty( Control::PROPERTY_HEIGHT_POLICY, "MINIMUM" );
467   control.GetSizePolicy( widthPolicy, heightPolicy );
468   DALI_TEST_EQUALS( Control::Maximum, widthPolicy, TEST_LOCATION );
469   DALI_TEST_EQUALS( Control::Minimum, heightPolicy, TEST_LOCATION );
470
471   END_TEST;
472 }
473
474 int UtcDaliControlSizeProperties(void)
475 {
476   ToolkitTestApplication application;
477
478   Control control = Control::New();
479
480   DALI_TEST_EQUALS( control.GetMinimumSize(), control.GetProperty( Control::PROPERTY_MINIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
481   DALI_TEST_EQUALS( control.GetMaximumSize(), control.GetProperty( Control::PROPERTY_MAXIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
482
483   control.SetMinimumSize( Vector3( 100.0f, 200.0f, 300.0f ) );
484   DALI_TEST_EQUALS( Vector3( 100.0f, 200.0f, 300.0f ), control.GetProperty( Control::PROPERTY_MINIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
485
486
487   control.SetMaximumSize( Vector3( 200.0f, 250.0f, 800.0f ) );
488   DALI_TEST_EQUALS( Vector3( 200.0f, 250.0f, 800.0f ), control.GetProperty( Control::PROPERTY_MAXIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
489
490   control.SetProperty( Control::PROPERTY_MINIMUM_SIZE, Vector3( 1.0f, 2.0f, 3.0f ) );
491   control.SetProperty( Control::PROPERTY_MAXIMUM_SIZE, Vector3( 10.0f, 20.0f, 30.0f ) );
492   DALI_TEST_EQUALS( control.GetMinimumSize(), Vector3( 1.0f, 2.0f, 3.0f ), TEST_LOCATION );
493   DALI_TEST_EQUALS( control.GetMaximumSize(), Vector3( 10.0f, 20.0f, 30.0f ), TEST_LOCATION );
494
495   END_TEST;
496 }
497
498 int UtcDaliControlKeyProperties(void)
499 {
500   ToolkitTestApplication application;
501
502   Control control = Control::New();
503   Stage::GetCurrent().Add( control );
504
505   DALI_TEST_EQUALS( control.HasKeyInputFocus(), control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
506
507   control.SetKeyInputFocus();
508   DALI_TEST_EQUALS( true, control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
509
510   control.ClearKeyInputFocus();
511   DALI_TEST_EQUALS( false, control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
512
513   control.SetProperty( Control::PROPERTY_KEY_INPUT_FOCUS, true );
514   DALI_TEST_EQUALS( true, control.HasKeyInputFocus(), TEST_LOCATION );
515
516   END_TEST;
517 }
518
519 int UtcDaliControlGestureSignals(void)
520 {
521   ToolkitTestApplication application;
522   ConnectionTracker connectionTracker;
523   Control control = Control::New();
524
525   // Each gesture detector gets created when connecting to the gesture signals
526   DALI_TEST_CHECK( !control.GetTapGestureDetector() );
527   control.ConnectSignal( &connectionTracker, Control::SIGNAL_TAPPED, &TestVoidCallback );
528   DALI_TEST_CHECK( control.GetTapGestureDetector() );
529
530   DALI_TEST_CHECK( !control.GetPanGestureDetector() );
531   control.ConnectSignal( &connectionTracker, Control::SIGNAL_PANNED, &TestVoidCallback );
532   DALI_TEST_CHECK( control.GetPanGestureDetector() );
533
534   DALI_TEST_CHECK( !control.GetPinchGestureDetector() );
535   control.ConnectSignal( &connectionTracker, Control::SIGNAL_PINCHED, &TestVoidCallback );
536   DALI_TEST_CHECK( control.GetPinchGestureDetector() );
537
538   DALI_TEST_CHECK( !control.GetLongPressGestureDetector() );
539   control.ConnectSignal( &connectionTracker, Control::SIGNAL_LONG_PRESSED, &TestVoidCallback );
540   DALI_TEST_CHECK( control.GetLongPressGestureDetector() );
541
542   END_TEST;
543 }