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