2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
24 using namespace Toolkit;
26 void dali_flexflexContainer_startup(void)
28 test_return_value = TET_UNDEF;
31 void dali_flexflexContainer_cleanup(void)
33 test_return_value = TET_PASS;
39 const char* const PROPERTY_NAME_CONTENT_DIRECTION = "contentDirection";
40 const char* const PROPERTY_NAME_FLEX_DIRECTION = "flexDirection";
41 const char* const PROPERTY_NAME_FLEX_WRAP = "flexWrap";
42 const char* const PROPERTY_NAME_JUSTIFY_CONTENT = "justifyContent";
43 const char* const PROPERTY_NAME_ALIGN_ITEMS = "alignItems";
44 const char* const PROPERTY_NAME_ALIGN_CONTENT = "alignContent";
45 const char* const CHILD_PROPERTY_NAME_FLEX = "flex";
46 const char* const CHILD_PROPERTY_NAME_ALIGN_SELF = "alignSelf";
47 const char* const CHILD_PROPERTY_NAME_FLEX_MARGIN = "flexMargin";
51 int UtcDaliToolkitFlexContainerConstructorP(void)
53 ToolkitTestApplication application;
54 tet_infoline(" UtcDaliToolkitFlexContainerConstructorP");
55 FlexContainer flexContainer;
56 DALI_TEST_CHECK( !flexContainer );
60 int UtcDaliToolkitFlexContainerNewP(void)
62 ToolkitTestApplication application;
63 tet_infoline(" UtcDaliToolkitFlexContainerNewP");
64 FlexContainer flexContainer = FlexContainer::New();
65 DALI_TEST_CHECK( flexContainer );
69 int UtcDaliToolkitFlexContainerDownCastP(void)
71 ToolkitTestApplication application;
72 tet_infoline(" UtcDaliToolkitFlexContainerDownCastP");
73 FlexContainer flexContainer1 = FlexContainer::New();
74 BaseHandle object( flexContainer1 );
76 FlexContainer flexContainer2 = FlexContainer::DownCast( object );
77 DALI_TEST_CHECK( flexContainer2 );
79 FlexContainer flexContainer3 = DownCast< FlexContainer >( object );
80 DALI_TEST_CHECK( flexContainer3 );
84 int UtcDaliToolkitFlexContainerDownCastN(void)
86 ToolkitTestApplication application;
87 tet_infoline(" UtcDaliToolkitFlexContainerDownCastN");
88 BaseHandle uninitializedObject;
89 FlexContainer flexContainer1 = FlexContainer::DownCast( uninitializedObject );
90 DALI_TEST_CHECK( !flexContainer1 );
92 FlexContainer flexContainer2 = DownCast< FlexContainer >( uninitializedObject );
93 DALI_TEST_CHECK( !flexContainer2 );
97 int UtcDaliToolkitFlexContainerCopyConstructorP(void)
99 ToolkitTestApplication application;
100 tet_infoline(" UtcDaliToolkitFlexContainerCopyConstructorP");
101 FlexContainer flexContainer = FlexContainer::New();
102 flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE );
104 FlexContainer copy( flexContainer );
105 DALI_TEST_CHECK( copy );
106 DALI_TEST_CHECK( copy.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ) == flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ) );
111 int UtcDaliToolkitFlexContainerAssignmentOperatorP(void)
113 ToolkitTestApplication application;
114 tet_infoline(" UtcDaliToolkitFlexContainerAssingmentOperatorP");
115 FlexContainer flexContainer = FlexContainer::New();
116 flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW_REVERSE );
118 FlexContainer copy = flexContainer;
119 DALI_TEST_CHECK( copy );
120 DALI_TEST_CHECK( copy.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ) == flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ) );
124 // Positive test case for a method
125 int UtcDaliToolkitFlexContainerGetPropertyP(void)
127 ToolkitTestApplication application;
128 tet_infoline(" UtcDaliToolkitFlexContainerGetPropertyP");
129 FlexContainer flexContainer = FlexContainer::New();
130 DALI_TEST_CHECK( flexContainer );
132 // Check Property Indices are correct
133 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_CONTENT_DIRECTION ) == FlexContainer::Property::CONTENT_DIRECTION );
134 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_FLEX_DIRECTION ) == FlexContainer::Property::FLEX_DIRECTION );
135 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_FLEX_WRAP ) == FlexContainer::Property::FLEX_WRAP );
136 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_JUSTIFY_CONTENT ) == FlexContainer::Property::JUSTIFY_CONTENT );
137 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_ALIGN_ITEMS ) == FlexContainer::Property::ALIGN_ITEMS );
138 DALI_TEST_CHECK( flexContainer.GetPropertyIndex( PROPERTY_NAME_ALIGN_CONTENT ) == FlexContainer::Property::ALIGN_CONTENT );
143 int UtcDaliToolkitFlexContainerSetPropertyP(void)
145 ToolkitTestApplication application;
146 tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP");
147 FlexContainer flexContainer = FlexContainer::New();
148 DALI_TEST_CHECK( flexContainer );
150 // Add flex container to the stage
151 Stage::GetCurrent().Add( flexContainer );
153 // Create two actors and add them to the container
154 Actor actor1 = Actor::New();
155 Actor actor2 = Actor::New();
156 DALI_TEST_CHECK( actor1 );
157 DALI_TEST_CHECK( actor2 );
159 flexContainer.Add(actor1);
160 flexContainer.Add(actor2);
162 // Check content direction property.
163 flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, FlexContainer::RTL );
164 DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty<int>( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION );
166 // Check flex direction property.
167 flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::COLUMN_REVERSE );
168 DALI_TEST_EQUALS( (FlexContainer::FlexDirection)flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ), FlexContainer::COLUMN_REVERSE, TEST_LOCATION );
170 // Check flex wrap property.
171 flexContainer.SetProperty( FlexContainer::Property::FLEX_WRAP, FlexContainer::WRAP );
172 DALI_TEST_EQUALS( (FlexContainer::WrapType)flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_WRAP ), FlexContainer::WRAP, TEST_LOCATION );
174 // Check justify content property.
175 flexContainer.SetProperty( FlexContainer::Property::JUSTIFY_CONTENT, FlexContainer::JUSTIFY_SPACE_BETWEEN );
176 DALI_TEST_EQUALS( (FlexContainer::Justification)flexContainer.GetProperty<int>( FlexContainer::Property::JUSTIFY_CONTENT ), FlexContainer::JUSTIFY_SPACE_BETWEEN, TEST_LOCATION );
178 // Check align items property.
179 flexContainer.SetProperty( FlexContainer::Property::ALIGN_ITEMS, FlexContainer::ALIGN_FLEX_START );
180 DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty<int>( FlexContainer::Property::ALIGN_ITEMS ), FlexContainer::ALIGN_FLEX_START, TEST_LOCATION );
182 // Check align content property.
183 flexContainer.SetProperty( FlexContainer::Property::ALIGN_CONTENT, FlexContainer::ALIGN_STRETCH );
184 DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty<int>( FlexContainer::Property::ALIGN_CONTENT ), FlexContainer::ALIGN_STRETCH, TEST_LOCATION );
190 int UtcDaliToolkitFlexContainerSetPropertyEnumP(void)
192 ToolkitTestApplication application;
193 tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyEnumP");
194 FlexContainer flexContainer = FlexContainer::New();
195 DALI_TEST_CHECK( flexContainer );
197 // Add flex container to the stage
198 Stage::GetCurrent().Add( flexContainer );
200 // Create two actors and add them to the container
201 Actor actor1 = Actor::New();
202 Actor actor2 = Actor::New();
203 DALI_TEST_CHECK( actor1 );
204 DALI_TEST_CHECK( actor2 );
206 flexContainer.Add(actor1);
207 flexContainer.Add(actor2);
209 // Check content direction property.
210 flexContainer.SetProperty( FlexContainer::Property::CONTENT_DIRECTION, "RTL" );
211 DALI_TEST_EQUALS( (FlexContainer::ContentDirection)flexContainer.GetProperty<int>( FlexContainer::Property::CONTENT_DIRECTION ), FlexContainer::RTL, TEST_LOCATION );
213 // Check flex direction property.
214 flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, "columnReverse" );
215 DALI_TEST_EQUALS( (FlexContainer::FlexDirection)flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_DIRECTION ), FlexContainer::COLUMN_REVERSE, TEST_LOCATION );
217 // Check flex wrap property.
218 flexContainer.SetProperty( FlexContainer::Property::FLEX_WRAP, "wrap" );
219 DALI_TEST_EQUALS( (FlexContainer::WrapType)flexContainer.GetProperty<int>( FlexContainer::Property::FLEX_WRAP ), FlexContainer::WRAP, TEST_LOCATION );
221 // Check justify content property.
222 flexContainer.SetProperty( FlexContainer::Property::JUSTIFY_CONTENT, "spaceBetween" );
223 DALI_TEST_EQUALS( (FlexContainer::Justification)flexContainer.GetProperty<int>( FlexContainer::Property::JUSTIFY_CONTENT ), FlexContainer::JUSTIFY_SPACE_BETWEEN, TEST_LOCATION );
225 // Check align items property.
226 flexContainer.SetProperty( FlexContainer::Property::ALIGN_ITEMS, "flexStart" );
227 DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty<int>( FlexContainer::Property::ALIGN_ITEMS ), FlexContainer::ALIGN_FLEX_START, TEST_LOCATION );
229 // Check align content property.
230 flexContainer.SetProperty( FlexContainer::Property::ALIGN_CONTENT, "stretch" );
231 DALI_TEST_EQUALS( (FlexContainer::Alignment)flexContainer.GetProperty<int>( FlexContainer::Property::ALIGN_CONTENT ), FlexContainer::ALIGN_STRETCH, TEST_LOCATION );
236 int UtcDaliToolkitFlexContainerSetChildPropertyP(void)
238 ToolkitTestApplication application;
239 tet_infoline(" UtcDaliToolkitFlexContainerSetChildPropertyP");
240 FlexContainer flexContainer = FlexContainer::New();
241 DALI_TEST_CHECK( flexContainer );
243 // Add flex container to the stage
244 Stage::GetCurrent().Add( flexContainer );
246 // Create an actor and add it to the container
247 Actor actor = Actor::New();
248 DALI_TEST_CHECK( actor );
250 flexContainer.Add(actor);
252 // Check flex child property.
253 actor.SetProperty( FlexContainer::ChildProperty::FLEX, 2.0f );
254 DALI_TEST_EQUALS( actor.GetProperty<float>( FlexContainer::ChildProperty::FLEX ), 2.0f, TEST_LOCATION );
255 DALI_TEST_CHECK( actor.GetPropertyIndex( CHILD_PROPERTY_NAME_FLEX ) == FlexContainer::ChildProperty::FLEX );
257 // Check align self child property.
258 actor.SetProperty( FlexContainer::ChildProperty::ALIGN_SELF, FlexContainer::ALIGN_FLEX_END );
259 DALI_TEST_EQUALS( (FlexContainer::Alignment)actor.GetProperty<int>( FlexContainer::ChildProperty::ALIGN_SELF ), FlexContainer::ALIGN_FLEX_END, TEST_LOCATION );
260 DALI_TEST_CHECK( actor.GetPropertyIndex( CHILD_PROPERTY_NAME_ALIGN_SELF ) == FlexContainer::ChildProperty::ALIGN_SELF );
262 // Check flex margin child property.
263 actor.SetProperty( FlexContainer::ChildProperty::FLEX_MARGIN, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) );
264 DALI_TEST_EQUALS( actor.GetProperty<Vector4>( FlexContainer::ChildProperty::FLEX_MARGIN ), Vector4( 10.0f, 10.0f, 10.0f, 10.0f ), TEST_LOCATION );
265 DALI_TEST_CHECK( actor.GetPropertyIndex( CHILD_PROPERTY_NAME_FLEX_MARGIN ) == FlexContainer::ChildProperty::FLEX_MARGIN );
267 application.SendNotification();
268 application.Render();
275 //Functor to test whether RelayoutSignal is emitted
276 class RelayoutSignalHandler : public Dali::ConnectionTracker
280 RelayoutSignalHandler( FlexContainer& actor )
281 : mSignalVerified( false ),
286 // callback to be connected to RelayoutSignal
287 void RelayoutCallback( Actor actor )
289 if( mActor == actor )
291 mSignalVerified = true;
297 mSignalVerified = false;
300 bool mSignalVerified;
304 int UtcDaliToolkitFlexContainerRemoveChildP(void)
306 ToolkitTestApplication application;
307 tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP");
308 FlexContainer flexContainer = FlexContainer::New();
309 DALI_TEST_CHECK( flexContainer );
311 // Add flex container to the stage
312 Stage::GetCurrent().Add( flexContainer );
314 RelayoutSignalHandler relayoutSignal(flexContainer);
315 flexContainer.OnRelayoutSignal().Connect(&relayoutSignal, &RelayoutSignalHandler::RelayoutCallback );
317 // Create two actors and add them to the container
318 Actor actor1 = Actor::New();
319 Actor actor2 = Actor::New();
320 DALI_TEST_CHECK( actor1 );
321 DALI_TEST_CHECK( actor2 );
323 flexContainer.Add(actor1);
324 flexContainer.Add(actor2);
326 application.SendNotification();
327 application.Render();
329 DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION );
330 relayoutSignal.Reset();
332 DALI_TEST_CHECK( actor1 );
333 DALI_TEST_CHECK( actor2 );
335 flexContainer.Remove(actor1);
336 application.SendNotification();
337 application.Render();
338 DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION );
339 relayoutSignal.Reset();
341 flexContainer.Remove(actor2);
342 application.SendNotification();
343 application.Render();
344 DALI_TEST_EQUALS( relayoutSignal.mSignalVerified, true, TEST_LOCATION );
345 relayoutSignal.Reset();
353 // Functors to test whether PreFocusChange signal is emitted when the keyboard focus is about to change
354 class PreFocusChangeCallback : public Dali::ConnectionTracker
357 PreFocusChangeCallback(bool& signalReceived, Actor firstFocusActor)
358 : mSignalVerified(signalReceived),
359 mFirstFocusActor(firstFocusActor),
360 mDirection(Control::KeyboardFocus::LEFT)
364 Actor Callback(Actor currentFocusedActor, Actor proposedActorToFocus, Control::KeyboardFocus::Direction direction)
366 tet_infoline("Verifying PreFocusChangeCallback()");
368 mSignalVerified = true;
369 mDirection = direction;
370 if( ! proposedActorToFocus )
372 return mFirstFocusActor;
376 return proposedActorToFocus;
382 mSignalVerified = false;
383 mDirection = Control::KeyboardFocus::LEFT;
386 bool& mSignalVerified;
387 Actor mFirstFocusActor;
388 Control::KeyboardFocus::Direction mDirection;
391 // Functors to test whether focus changed signal is emitted when the keyboard focus is changed
392 class FocusChangedCallback : public Dali::ConnectionTracker
395 FocusChangedCallback(bool& signalReceived)
396 : mSignalVerified(signalReceived),
397 mOriginalFocusedActor(),
398 mCurrentFocusedActor()
402 void Callback(Actor originalFocusedActor, Actor currentFocusedActor)
404 tet_infoline("Verifying FocusChangedCallback()");
406 if(originalFocusedActor == mCurrentFocusedActor)
408 mSignalVerified = true;
411 mOriginalFocusedActor = originalFocusedActor;
412 mCurrentFocusedActor = currentFocusedActor;
417 mSignalVerified = false;
420 bool& mSignalVerified;
421 Actor mOriginalFocusedActor;
422 Actor mCurrentFocusedActor;
425 } // anonymous namespace
428 int UtcDaliToolkitFlexContainerMoveFocus(void)
430 ToolkitTestApplication application;
431 tet_infoline(" UtcDaliToolkitFlexContainerSetPropertyP");
432 FlexContainer flexContainer = FlexContainer::New();
433 DALI_TEST_CHECK( flexContainer );
435 flexContainer.SetProperty( FlexContainer::Property::FLEX_DIRECTION, FlexContainer::ROW );
437 // Add flex container to the stage
438 Stage::GetCurrent().Add( flexContainer );
439 Size stageSize = Stage::GetCurrent().GetSize();
441 RelayoutSignalHandler relayoutSignal(flexContainer);
442 flexContainer.OnRelayoutSignal().Connect(&relayoutSignal, &RelayoutSignalHandler::RelayoutCallback );
443 flexContainer.SetSize( stageSize );
445 // Create two actors and add them to the container
446 Actor actor1 = Actor::New();
447 Actor actor2 = Actor::New();
448 actor1.SetKeyboardFocusable(true);
449 actor2.SetKeyboardFocusable(true);
450 DALI_TEST_CHECK( actor1 );
451 DALI_TEST_CHECK( actor2 );
453 flexContainer.Add(actor1);
454 flexContainer.Add(actor2);
456 application.SendNotification();
457 application.Render();
459 KeyboardFocusManager manager = KeyboardFocusManager::Get();
460 DALI_TEST_CHECK(manager);
462 bool preFocusChangeSignalVerified = false;
463 PreFocusChangeCallback preFocusChangeCallback(preFocusChangeSignalVerified, actor1);
464 manager.PreFocusChangeSignal().Connect( &preFocusChangeCallback, &PreFocusChangeCallback::Callback );
466 bool focusChangedSignalVerified = false;
467 FocusChangedCallback focusChangedCallback(focusChangedSignalVerified);
468 manager.FocusChangedSignal().Connect( &focusChangedCallback, &FocusChangedCallback::Callback );
470 // Move the focus to the right
471 DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::RIGHT), true, TEST_LOCATION);
472 DALI_TEST_CHECK(preFocusChangeCallback.mSignalVerified);
473 DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor1, TEST_LOCATION);
474 preFocusChangeCallback.Reset();
475 DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor1, TEST_LOCATION);
476 focusChangedCallback.Reset();
478 // Move the focus towards right
479 DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::RIGHT), true, TEST_LOCATION);
480 DALI_TEST_EQUALS(preFocusChangeCallback.mSignalVerified, true, TEST_LOCATION);
481 DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor2, TEST_LOCATION);
482 DALI_TEST_EQUALS(focusChangedCallback.mSignalVerified, true, TEST_LOCATION);
483 DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor2, TEST_LOCATION);
485 preFocusChangeCallback.Reset();
486 focusChangedCallback.Reset();
488 // Move the focus towards left
489 DALI_TEST_EQUALS(manager.MoveFocus(Control::KeyboardFocus::LEFT), true, TEST_LOCATION);
490 DALI_TEST_EQUALS(preFocusChangeCallback.mSignalVerified, true, TEST_LOCATION);
491 DALI_TEST_EQUALS(manager.GetCurrentFocusActor(), actor1, TEST_LOCATION);
492 DALI_TEST_EQUALS(focusChangedCallback.mSignalVerified, true, TEST_LOCATION);
493 DALI_TEST_EQUALS(focusChangedCallback.mCurrentFocusedActor, actor1, TEST_LOCATION);