License conversion from Flora to Apache 2.0
[platform/core/uifw/dali-toolkit.git] / automated-tests / TET / dali-test-suite / control / 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
20 #include <stdlib.h>
21 #include <tet_api.h>
22
23 #include <dali/public-api/dali-core.h>
24 #include <dali-toolkit/dali-toolkit.h>
25
26 #include <dali-toolkit-test-suite-utils.h>
27
28 #include "dummy-control.h"
29
30 using namespace Dali;
31 using namespace Dali::Toolkit;
32
33 static void Startup();
34 static void Cleanup();
35
36 extern "C" {
37   void (*tet_startup)() = Startup;
38   void (*tet_cleanup)() = Cleanup;
39 }
40
41 enum {
42   POSITIVE_TC_IDX = 0x01,
43   NEGATIVE_TC_IDX,
44 };
45
46 #define MAX_NUMBER_OF_TESTS 10000
47 extern "C" {
48   struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
49 }
50
51 // Add test functionality for all APIs in the class (Positive and Negative)
52 TEST_FUNCTION( UtcDaliControlConstructor, POSITIVE_TC_IDX );
53 TEST_FUNCTION( UtcDaliControlNew, POSITIVE_TC_IDX );
54 TEST_FUNCTION( UtcDaliControlRegister, POSITIVE_TC_IDX );
55 TEST_FUNCTION( UtcDaliControlCopyAndAssignment, POSITIVE_TC_IDX );
56 TEST_FUNCTION( UtcDaliControlDownCast, POSITIVE_TC_IDX );
57 TEST_FUNCTION( UtcDaliControlDownCastTemplate, POSITIVE_TC_IDX );
58 TEST_FUNCTION( UtcDaliControlKeyInputFocus, POSITIVE_TC_IDX );
59 TEST_FUNCTION( UtcDaliControlGetImplementation, POSITIVE_TC_IDX );
60 TEST_FUNCTION( UtcDaliControlSignalConnectDisconnect, POSITIVE_TC_IDX );
61 TEST_FUNCTION( UtcDaliControlSignalAutomaticDisconnect, POSITIVE_TC_IDX );
62 TEST_FUNCTION( UtcDaliControlTestParameters, POSITIVE_TC_IDX );
63
64 // Called only once before first test is run.
65 static void Startup()
66 {
67 }
68
69 // Called only once after last test is run
70 static void Cleanup()
71 {
72 }
73
74 static void UtcDaliControlConstructor()
75 {
76   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
77
78   DummyControl dummy;
79
80   DALI_TEST_CHECK( !Control::DownCast(dummy) );
81
82   dummy = DummyControl::New();
83
84   DALI_TEST_CHECK( Control::DownCast(dummy) );
85 }
86
87 static void UtcDaliControlNew()
88 {
89   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
90
91   Control control;
92
93   DALI_TEST_CHECK( !Control::DownCast(control) );
94
95   control = Control::New();
96
97   DALI_TEST_CHECK( Control::DownCast(control) );
98 }
99
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101
102 static bool gObjectCreatedCallBackCalled;
103
104 static void TestCallback(BaseHandle handle)
105 {
106   gObjectCreatedCallBackCalled = true;
107 }
108
109 static void UtcDaliControlRegister()
110 {
111   ToolkitTestApplication application;
112
113   // Ensure the object is registered after creation
114   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
115   DALI_TEST_CHECK( registry );
116
117   gObjectCreatedCallBackCalled = false;
118   registry.ObjectCreatedSignal().Connect( &TestCallback );
119   {
120     Alignment alignment = Alignment::New();
121   }
122   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
123 }
124
125 ///////////////////////////////////////////////////////////////////////////////////////////////////
126
127 static void UtcDaliControlCopyAndAssignment()
128 {
129   ToolkitTestApplication application;
130
131   DummyControl control = DummyControl::New();
132   Control emptyControl;
133
134   Control controlCopy( control );
135   DALI_TEST_CHECK( control == controlCopy );
136
137   Control emptyControlCopy( emptyControl );
138   DALI_TEST_CHECK( emptyControl == emptyControlCopy );
139
140   Control controlEquals;
141   controlEquals = control;
142   DALI_TEST_CHECK( control == controlEquals );
143
144   Control emptyControlEquals;
145   emptyControlEquals = emptyControl;
146   DALI_TEST_CHECK( emptyControl == emptyControlEquals );
147
148   // Self assignment
149   control = control;
150   DALI_TEST_CHECK( control == controlCopy );
151 }
152
153 static void UtcDaliControlDownCast()
154 {
155   ToolkitTestApplication application;
156
157   DummyControl control;
158
159   DALI_TEST_CHECK( !Control::DownCast( control ) );
160
161   control = DummyControl::New();
162
163   DALI_TEST_CHECK( Control::DownCast( control ) );
164
165   Actor actor;
166
167   DALI_TEST_CHECK( !Control::DownCast( actor ) );
168
169   actor = Actor::New();
170
171   DALI_TEST_CHECK( !Control::DownCast( actor ) );
172 }
173
174 static void UtcDaliControlDownCastTemplate()
175 {
176   ToolkitTestApplication application;
177
178   DummyControl control;
179
180   DALI_TEST_CHECK( !DummyControl::DownCast( control ));
181
182   control = DummyControl::New();
183
184   DALI_TEST_CHECK( DummyControl::DownCast( control ) );
185
186   Actor actor;
187
188   DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
189
190   actor = Actor::New();
191
192   DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
193 }
194
195 static void UtcDaliControlKeyInputFocus()
196 {
197   ToolkitTestApplication application;
198   Stage stage = Stage::GetCurrent();
199
200   DummyControl control;
201
202   PushButton pushButton1 = PushButton::New();
203   stage.Add( pushButton1 );
204
205   pushButton1.SetKeyInputFocus();
206   DALI_TEST_CHECK( pushButton1.HasKeyInputFocus() );
207
208   pushButton1.ClearKeyInputFocus();
209   DALI_TEST_CHECK( !pushButton1.HasKeyInputFocus() );
210 }
211
212 static void UtcDaliControlGetImplementation()
213 {
214   ToolkitTestApplication application;
215
216   DummyControl control;
217
218   // Get Empty
219   {
220     try
221     {
222       ControlImpl& controlImpl = control.GetImplementation();
223       (void)controlImpl; // Avoid unused warning
224       tet_result(TET_FAIL);
225     }
226     catch (DaliException &exception)
227     {
228       tet_result(TET_PASS);
229     }
230   }
231
232   // Get Const Empty
233   {
234     try
235     {
236       const DummyControl constControl(control);
237       const ControlImpl& controlImpl = constControl.GetImplementation();
238       (void)controlImpl; // Avoid unused warning
239       tet_result(TET_FAIL);
240     }
241     catch (DaliException &exception)
242     {
243       tet_result(TET_PASS);
244     }
245   }
246
247   control = DummyControl::New();
248
249   // Get
250   {
251     try
252     {
253       ControlImpl& controlImpl = control.GetImplementation();
254       (void)controlImpl; // Avoid unused warning
255       tet_result(TET_PASS);
256     }
257     catch (DaliException &exception)
258     {
259       tet_result(TET_FAIL);
260     }
261   }
262
263   // Get Const
264   {
265     try
266     {
267       const DummyControl constControl(control);
268       const ControlImpl& controlImpl = constControl.GetImplementation();
269       (void)controlImpl; // Avoid unused warning
270       tet_result(TET_PASS);
271     }
272     catch (DaliException &exception)
273     {
274       tet_result(TET_FAIL);
275     }
276   }
277 }
278
279 static void UtcDaliControlSignalConnectDisconnect()
280 {
281   ToolkitTestApplication application;
282
283   {
284     DummyControl dummy = DummyControlImpl::New();
285
286     Actor actor = Actor::New();
287     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
288     actor.SetSizeSignal().Connect( &dummy, &DummyControl::CustomSlot1 );
289     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
290     DALI_TEST_EQUALS( dummy.mCustomSlot1Called, false, TEST_LOCATION );
291     DALI_TEST_EQUALS( dummy.mCustomSlot1Value,  Vector3::ZERO, TEST_LOCATION );
292
293     const Vector3 newSize( 10, 10, 0 );
294     actor.SetSize( newSize );
295     DALI_TEST_EQUALS( dummy.mCustomSlot1Called, true, TEST_LOCATION );
296     DALI_TEST_EQUALS( dummy.mCustomSlot1Value,  newSize, TEST_LOCATION );
297
298     dummy.mCustomSlot1Called = false;
299     actor.SetSizeSignal().Disconnect( &dummy, &DummyControl::CustomSlot1 );
300     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
301     const Vector3 ignoredSize( 20, 20, 0 );
302     actor.SetSize( ignoredSize );
303     DALI_TEST_EQUALS( dummy.mCustomSlot1Called, false, TEST_LOCATION );
304     DALI_TEST_EQUALS( dummy.mCustomSlot1Value,  newSize/*not ignoredSize*/, TEST_LOCATION );
305   }
306 }
307
308 static void UtcDaliControlSignalAutomaticDisconnect()
309 {
310   ToolkitTestApplication application;
311
312   Actor actor = Actor::New();
313
314   {
315     DummyControl dummy = DummyControlImpl::New();
316
317     actor.SetSizeSignal().Connect( &dummy, &DummyControl::CustomSlot1 );
318     DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
319     DALI_TEST_EQUALS( dummy.mCustomSlot1Called, false, TEST_LOCATION );
320     DALI_TEST_EQUALS( dummy.mCustomSlot1Value,  Vector3::ZERO, TEST_LOCATION );
321
322     const Vector3 newSize( 10, 10, 0 );
323     actor.SetSize( newSize );
324     DALI_TEST_EQUALS( dummy.mCustomSlot1Called, true, TEST_LOCATION );
325     DALI_TEST_EQUALS( dummy.mCustomSlot1Value,  newSize, TEST_LOCATION );
326   }
327   // dummyControl automatically disconnects
328
329   DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
330
331   const Vector3 ignoredSize( 20, 20, 0 );
332   actor.SetSize( ignoredSize );
333 }
334
335 static void UtcDaliControlTestParameters()
336 {
337   ToolkitTestApplication application;
338   DummyControl test = DummyControl::New();
339
340   Vector3 maxSize = test.GetNaturalSize();
341   Vector3 minSize = maxSize / 2.0f;
342
343   Toolkit::Control::SizePolicy widthPolicy( Control::Fixed );
344   Toolkit::Control::SizePolicy heightPolicy( Control::Fixed );
345   test.SetSizePolicy( widthPolicy, heightPolicy );
346   test.GetSizePolicy( widthPolicy, heightPolicy );
347
348   DALI_TEST_CHECK( widthPolicy == Control::Fixed && heightPolicy == Control::Fixed );
349
350   test.SetSize( 0.7f, 0.7f, 0.7f );
351   float width = 640.0f;
352   float height = test.GetHeightForWidth( width );
353   DALI_TEST_CHECK( test.GetWidthForHeight( height ) == width );
354
355   test.SetMinimumSize( minSize );
356   DALI_TEST_CHECK( test.GetMinimumSize() == minSize );
357
358   test.SetMaximumSize( maxSize );
359   DALI_TEST_CHECK( test.GetMaximumSize() == maxSize );
360
361   test.KeyEventSignal();
362   DummyControl test2 = DummyControl::New();
363   dynamic_cast< ConnectionTrackerInterface& >( test2 ).GetConnectionCount();
364
365   // Provide coverage for pointer destructor
366   Control* testControlPtr = new Control;
367   DALI_TEST_CHECK( testControlPtr );
368   delete testControlPtr;
369 }