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