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