2 * Copyright (c) 2020 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>
22 #include <dali/devel-api/actors/actor-devel.h>
23 #include <dali-toolkit/devel-api/layouting/flex-node.h>
26 using namespace Toolkit;
28 void dali_flexNodeContainer_startup(void)
30 test_return_value = TET_UNDEF;
33 void dali_flexNodeContainer_cleanup(void)
35 test_return_value = TET_PASS;
41 const Flex::SizeTuple ITEM_SIZE = Flex::SizeTuple{ 10.0f, 10.0f };
42 const Flex::SizeTuple ITEM_SIZE_CALLBACK_TEST = Flex::SizeTuple{ 15.0f, 15.0f };
44 void MeasureChild( Actor child, float width, int measureModeWidth, float height, int measureModeHeight, Flex::SizeTuple *childSize)
46 *childSize = ITEM_SIZE;
47 if (child.GetProperty< std::string >( Dali::Actor::Property::NAME ) == "callbackTest")
49 *childSize = ITEM_SIZE_CALLBACK_TEST;
51 tet_printf(" MeasureChild test callback executed (%f,%f)\n", childSize->width, childSize->height );
56 int UtcDaliToolkitFlexNodeConstructorP(void)
58 ToolkitTestApplication application;
59 tet_infoline(" UtcDaliToolkitFlexNodeNewP");
60 Flex::Node* flexNode = new Flex::Node();
61 DALI_TEST_CHECK( flexNode );
65 int UtcDaliToolkitFlexNodeAddChildWithMarginP(void)
67 ToolkitTestApplication application;
68 tet_infoline(" UtcDaliToolkitFlexNodeAddChildWithMarginP");
69 Flex::Node* flexNode = new Flex::Node();
70 DALI_TEST_CHECK( flexNode );
72 // Position elements as a Row
73 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
75 // Create two actors and add them to the parent flex node
76 Actor actor = Actor::New();
77 DALI_TEST_CHECK( actor );
79 Extents margin( 5,5,5,5);
80 flexNode->AddChild(actor, margin, &MeasureChild, 0);
82 DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
84 flexNode->CalculateLayout(480, 800, false);
86 Vector4 actorFrame = flexNode->GetNodeFrame(0);
88 tet_printf("Actor frame(left:%f,top:%f,right:%f,bottom:%f)\n", actorFrame.x, actorFrame.y, actorFrame.z, actorFrame.w);
90 DALI_TEST_EQUALS( actorFrame, Vector4( 5.0f, 5.0f, ITEM_SIZE.width+5, ITEM_SIZE.height+5 ), TEST_LOCATION );
95 int UtcDaliToolkitFlexNodeAddChildrenRowP(void)
97 ToolkitTestApplication application;
98 tet_infoline(" UtcDaliToolkitFlexNodeAddChildrenRowP");
99 Flex::Node* flexNode = new Flex::Node();
100 DALI_TEST_CHECK( flexNode );
102 // Position elements as a Row
103 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
105 // Create two actors and add them to the parent flex node
106 Actor actor1 = Actor::New();
107 Actor actor2 = Actor::New();
108 DALI_TEST_CHECK( actor1 );
109 DALI_TEST_CHECK( actor2 );
111 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
112 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
114 DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
116 flexNode->CalculateLayout(480, 800, false);
118 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
119 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
121 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
122 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
124 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
125 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width * 2, ITEM_SIZE.height ), TEST_LOCATION );
130 int UtcDaliToolkitFlexNodeAddChildrenColumnP(void)
132 ToolkitTestApplication application;
133 tet_infoline("UtcDaliToolkitFlexNodeAddChildrenColumnP");
134 Flex::Node* flexNode = new Flex::Node();
135 DALI_TEST_CHECK( flexNode );
137 // Position elements in a Column
138 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
140 // Create two actors and add them to the parent flex node
141 Actor actor1 = Actor::New();
142 Actor actor2 = Actor::New();
143 DALI_TEST_CHECK( actor1 );
144 DALI_TEST_CHECK( actor2 );
146 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
147 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
149 flexNode->CalculateLayout(480, 800, false);
151 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
152 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
153 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
155 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
157 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
158 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
160 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
161 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
167 int UtcDaliToolkitFlexNodeAddChildrenColumnJustify(void)
169 ToolkitTestApplication application;
170 tet_infoline("UtcDaliToolkitFlexNodeAddChildrenColumnJustify");
171 Flex::Node* flexNode = new Flex::Node();
172 DALI_TEST_CHECK( flexNode );
174 // Position elements in a Column
175 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
177 tet_infoline("Justify to the Start, align to start, third item should be displayed at the top and the end");
178 flexNode->SetFlexJustification(Flex::Justification::FLEX_START);
179 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_START );
181 // Create three actors and add them to the parent flex node
182 Actor actor1 = Actor::New();
183 Actor actor2 = Actor::New();
184 Actor actor3 = Actor::New();
185 DALI_TEST_CHECK( actor1 );
186 DALI_TEST_CHECK( actor2 );
187 DALI_TEST_CHECK( actor3 );
189 DALI_TEST_EQUALS( (int)flexNode->GetFlexJustification(), (int)Flex::Justification::FLEX_START, TEST_LOCATION );
190 DALI_TEST_EQUALS( (int)flexNode->GetFlexItemsAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
192 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
193 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
194 Flex::Node* actor3node = flexNode->AddChild(actor3, Extents(0,0,0,0), &MeasureChild, 2);
195 actor3node->SetFlexAlignmentSelf( Flex::Alignment::FLEX_END );
197 flexNode->CalculateLayout(480, 800, false);
199 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
200 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
201 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
202 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
204 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
206 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
207 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
208 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
220 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
221 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
222 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, ITEM_SIZE.height *2, root.z, ITEM_SIZE.height *3 ), TEST_LOCATION );
224 tet_infoline(" Justify to the End, items should now be displayed at the bottom, third item should now be displayed at the end");
225 flexNode->SetFlexJustification( Flex::Justification::FLEX_END );
226 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_START );
229 flexNode->CalculateLayout(480, 800, false);
231 root = flexNode->GetNodeFrame(-1); // -1 is the root
232 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
233 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
234 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
236 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
238 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
239 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
240 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
252 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, root.w - (ITEM_SIZE.height*3), ITEM_SIZE.width, root.w - (ITEM_SIZE.height*2) ), TEST_LOCATION );
253 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, root.w - (ITEM_SIZE.height*2), ITEM_SIZE.width, root.w - ITEM_SIZE.height ), TEST_LOCATION );
254 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, root.w - ITEM_SIZE.height, root.z, root.w ), TEST_LOCATION );
256 tet_infoline(" Align to End, items should now be displayed at the bottom and the end");
257 flexNode->SetFlexJustification( Flex::Justification::FLEX_END );
258 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_END );
260 flexNode->CalculateLayout(480, 800, false);
262 root = flexNode->GetNodeFrame(-1); // -1 is the root
263 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
264 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
265 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
267 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
268 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
269 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
281 DALI_TEST_EQUALS( actor1Frame, Vector4( root.z - ITEM_SIZE.width, root.w - (ITEM_SIZE.height*3), root.z, root.w - (ITEM_SIZE.height*2) ), TEST_LOCATION );
282 DALI_TEST_EQUALS( actor2Frame, Vector4( root.z - ITEM_SIZE.width, root.w - (ITEM_SIZE.height*2), root.z, root.w - ITEM_SIZE.height ), TEST_LOCATION );
283 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, root.w - ITEM_SIZE.height, root.z, root.w ), TEST_LOCATION );
288 int UtcDaliToolkitFlexNodeSizingP(void)
290 ToolkitTestApplication application;
291 tet_infoline(" UtcDaliToolkitFlexNodeSizingP");
292 Flex::Node* flexNode = new Flex::Node();
293 DALI_TEST_CHECK( flexNode );
295 // Create two actors and add them to the parent flex node
296 Actor actor1 = Actor::New();
297 Actor actor2 = Actor::New();
298 DALI_TEST_CHECK( actor1 );
299 DALI_TEST_CHECK( actor2 );
301 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
302 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
304 flexNode->CalculateLayout(480, 800, false);
306 DALI_TEST_EQUALS( flexNode->GetFlexWidth(), 480.0f, TEST_LOCATION );
307 DALI_TEST_EQUALS( flexNode->GetFlexHeight(), 800.0f, TEST_LOCATION );
312 int UtcDaliToolkitFlexNodeWrapModeP(void)
314 ToolkitTestApplication application;
315 tet_infoline("UtcDaliToolkitFlexNodeWrapModeP");
316 Flex::Node* flexNode = new Flex::Node();
317 DALI_TEST_CHECK( flexNode );
319 // Position elements in a Column
320 flexNode->SetFlexDirection( Flex::FlexDirection::ROW );
321 flexNode->SetFlexAlignment( Flex::Alignment::FLEX_START );
322 flexNode->SetFlexWrap( Flex::WrapType::NO_WRAP );
324 // Create two actors and add them to the parent flex node
325 Actor actor1 = Actor::New();
326 Actor actor2 = Actor::New();
327 Actor actor3 = Actor::New();
328 Actor actor4 = Actor::New();
330 DALI_TEST_EQUALS( (int)flexNode->GetFlexJustification(), (int)Flex::Justification::FLEX_START, TEST_LOCATION );
331 DALI_TEST_EQUALS( (int)flexNode->GetFlexItemsAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
332 DALI_TEST_EQUALS( (int)flexNode->GetFlexAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
333 DALI_TEST_EQUALS( (int)flexNode->GetFlexWrap(), (int)Flex::WrapType::NO_WRAP, TEST_LOCATION );
335 flexNode->AddChild( actor1, Extents(0,0,0,0), &MeasureChild, 0 );
336 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 1 );
337 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 2 );
338 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 3 );
340 flexNode->CalculateLayout(30, 800, false);
342 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
343 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
344 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
345 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is first child
346 Vector4 actor4Frame = flexNode->GetNodeFrame(3); // 3 is second child
348 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
349 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
350 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
351 tet_printf("Actor 3 frame(left:%f,top:%f,right:cdt%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
352 tet_printf("Actor 4 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor4Frame.x, actor4Frame.y, actor4Frame.z, actor4Frame.w);
364 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
365 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
366 DALI_TEST_EQUALS( actor3Frame, Vector4( ITEM_SIZE.width*2, 0.0f, ITEM_SIZE.width*3, ITEM_SIZE.height ), TEST_LOCATION );
367 DALI_TEST_EQUALS( actor4Frame, Vector4( ITEM_SIZE.width*3, 0.0f, ITEM_SIZE.width*4, ITEM_SIZE.height ), TEST_LOCATION );
369 flexNode->SetFlexWrap( Flex::WrapType::WRAP );
371 flexNode->CalculateLayout( 30, 800, false );
372 root = flexNode->GetNodeFrame(-1); // -1 is the root
374 DALI_TEST_EQUALS( (int)flexNode->GetFlexWrap(), (int)Flex::WrapType::WRAP, TEST_LOCATION );
375 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
377 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
378 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
379 actor3Frame = flexNode->GetNodeFrame(2); // 2 is first child
380 actor4Frame = flexNode->GetNodeFrame(3); // 3 is second child
382 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
383 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
384 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
385 tet_printf("Actor 4 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor4Frame.x, actor4Frame.y, actor4Frame.z, actor4Frame.w);
397 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
398 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
399 DALI_TEST_EQUALS( actor3Frame, Vector4( ITEM_SIZE.width*2, 0.0f, ITEM_SIZE.width*3, ITEM_SIZE.height ), TEST_LOCATION );
400 DALI_TEST_EQUALS( actor4Frame, Vector4( 0.0,ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height*2 ), TEST_LOCATION );
406 int UtcDaliToolkitFlexNodeRemoveChildP(void)
408 ToolkitTestApplication application;
409 tet_infoline(" UtcDaliToolkitFlexNodeRemoveChildP");
410 Flex::Node* flexNode = new Flex::Node();
411 DALI_TEST_CHECK( flexNode );
413 // Create two actors and add them to the parent flex node
414 Actor actor1 = Actor::New();
415 Actor actor2 = Actor::New();
416 actor1.SetProperty( Dali::Actor::Property::NAME,"Actor1");
417 actor2.SetProperty( Dali::Actor::Property::NAME,"Actor2");
419 DALI_TEST_CHECK( actor1 );
420 DALI_TEST_CHECK( actor2 );
422 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
423 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
425 flexNode->CalculateLayout(480, 800, false);
427 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
428 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
430 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
431 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
433 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.width, ITEM_SIZE.width, ITEM_SIZE.height*2 ), TEST_LOCATION );
435 flexNode->RemoveChild(actor1);
437 flexNode->CalculateLayout(480, 800, false);
439 actor2Frame = flexNode->GetNodeFrame(0);
441 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
442 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
444 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
449 int UtcDaliToolkitFlexNodeRemoveAllChildrenP(void)
451 ToolkitTestApplication application;
452 tet_infoline(" UtcDaliToolkitFlexNodeRemoveAllChildrenP");
453 Flex::Node* flexNode = new Flex::Node();
454 DALI_TEST_CHECK( flexNode );
456 // Create two actors and add them to the parent flex node
457 Actor actor1 = Actor::New();
458 Actor actor2 = Actor::New();
459 actor1.SetProperty( Dali::Actor::Property::NAME,"Actor1");
460 actor2.SetProperty( Dali::Actor::Property::NAME,"Actor2");
462 DALI_TEST_CHECK( actor1 );
463 DALI_TEST_CHECK( actor2 );
465 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
466 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
468 flexNode->CalculateLayout(480, 800, false);
470 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
471 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
473 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
474 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
476 flexNode->RemoveChild(actor1);
477 flexNode->RemoveChild(actor2);
479 flexNode->CalculateLayout(480, 800, false);
481 Vector4 actor1FrameRemoved = flexNode->GetNodeFrame(0);
482 Vector4 actor2FrameRemoved = flexNode->GetNodeFrame(1);
484 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1FrameRemoved.x, actor1FrameRemoved.y, actor1FrameRemoved.z, actor1FrameRemoved.w);
485 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2FrameRemoved.x, actor2FrameRemoved.y, actor2FrameRemoved.z, actor2FrameRemoved.w);
487 DALI_TEST_NOT_EQUALS( actor1Frame, actor1FrameRemoved, 0.1, TEST_LOCATION );
488 DALI_TEST_NOT_EQUALS( actor2Frame, actor2FrameRemoved, 0.1, TEST_LOCATION );
493 int UtcDaliToolkitFlexNodePaddingMarginP(void)
495 ToolkitTestApplication application;
496 tet_infoline(" UtcDaliToolkitFlexNodePaddingMarginP");
497 Flex::Node* flexNode = new Flex::Node();
498 DALI_TEST_CHECK( flexNode );
499 flexNode->SetFlexDirection( Flex::FlexDirection::ROW );
501 // Create two actors and add them to the parent flex node
502 Actor actor1 = Actor::New();
503 Actor actor2 = Actor::New();
504 DALI_TEST_CHECK( actor1 );
505 DALI_TEST_CHECK( actor2 );
507 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
508 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
510 Extents padding( 5,5,5,5);
511 Extents margin( 5,5,5,5);
513 flexNode->SetPadding( padding );
514 flexNode->SetMargin( margin );
516 flexNode->CalculateLayout(480, 800, false);
518 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
519 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
529 DALI_TEST_EQUALS( actor1Frame, Vector4( 5.0f, 5.0f, ITEM_SIZE.width +5 , ITEM_SIZE.height + 5 ), TEST_LOCATION );
530 DALI_TEST_EQUALS( actor2Frame, Vector4( 5+ ITEM_SIZE.width, 5.0f, (ITEM_SIZE.width*2) +5, ITEM_SIZE.height +5 ), TEST_LOCATION );
535 int UtcDaliToolkitFlexNodeCallbackTestP(void)
537 ToolkitTestApplication application;
538 tet_infoline("UtcDaliToolkitFlexNodeCallbackTestP");
539 Flex::Node* flexNode = new Flex::Node();
540 DALI_TEST_CHECK( flexNode );
542 // Position elements in a Column
543 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
545 // Create two actors and add them to the parent flex node
546 Actor actor1 = Actor::New();
547 Actor actor2 = Actor::New();
549 actor1.SetProperty( Dali::Actor::Property::NAME,"callbackTest");
551 DALI_TEST_CHECK( actor1 );
552 DALI_TEST_CHECK( actor2 );
554 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
555 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
557 flexNode->CalculateLayout(480, 800, false);
559 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
560 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
561 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
563 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
565 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
566 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
568 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE_CALLBACK_TEST.width, ITEM_SIZE_CALLBACK_TEST.height ), TEST_LOCATION );
569 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE_CALLBACK_TEST.height, ITEM_SIZE.width, ITEM_SIZE_CALLBACK_TEST.height + ITEM_SIZE.height ), TEST_LOCATION );
574 int UtcDaliToolkitFlexNodeFlexPositionType(void)
576 ToolkitTestApplication application;
577 tet_infoline("UtcDaliToolkitFlexNodeFlexPositionType");
578 Flex::Node* flexNode = new Flex::Node();
579 DALI_TEST_CHECK( flexNode );
581 tet_infoline(" FlexPositionType is RELATIVE by default");
583 // Create two actors and add them to the parent flex node
584 Actor actor1 = Actor::New();
585 Actor actor2 = Actor::New();
586 DALI_TEST_CHECK( actor1 );
587 DALI_TEST_CHECK( actor2 );
589 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
590 Flex::Node* actor2node = flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
592 DALI_TEST_EQUALS( (int)actor2node->GetFlexPositionType(), (int)Flex::PositionType::RELATIVE, TEST_LOCATION );
594 flexNode->CalculateLayout(480, 800, false);
596 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
597 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
598 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
600 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
602 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
603 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
615 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
616 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
618 tet_infoline(" ABSOLUTE FlexPositionType, second item should now be ignore any properties");
619 actor2node->SetFlexPositionType( Flex::PositionType::ABSOLUTE );
622 flexNode->CalculateLayout(480, 800, false);
624 root = flexNode->GetNodeFrame(-1); // -1 is the root
625 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
626 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
628 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
630 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
631 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
643 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
644 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
649 int UtcDaliToolkitFlexNodeFlexAspectRatio(void)
651 ToolkitTestApplication application;
652 tet_infoline("UtcDaliToolkitFlexNodeFlexAspectRatio");
653 Flex::Node* flexNode = new Flex::Node();
654 DALI_TEST_CHECK( flexNode );
656 // Create a actor and add them to the parent flex node
657 Actor actor1 = Actor::New();
658 DALI_TEST_CHECK( actor1 );
660 tet_infoline(" 1.0 FlexAspectRatio");
661 Flex::Node* actor1node = flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
662 actor1node->SetFlexAspectRatio(1.0);
664 DALI_TEST_EQUALS( actor1node->GetFlexAspectRatio(), 1.0f, TEST_LOCATION );
666 flexNode->CalculateLayout(480, 800, false);
668 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
669 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
671 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
673 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
685 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
687 tet_infoline(" 2.0 FlexAspectRatio");
688 actor1node->SetFlexAspectRatio(2.0);
690 DALI_TEST_EQUALS( actor1node->GetFlexAspectRatio(), 2.0f, TEST_LOCATION );
693 flexNode->CalculateLayout(480, 800, false);
695 root = flexNode->GetNodeFrame(-1); // -1 is the root
696 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
698 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
700 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
712 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
717 int UtcDaliToolkitFlexNodeFlexBasisShrinkGrow(void)
719 ToolkitTestApplication application;
720 tet_infoline("UtcDaliToolkitFlexNodeFlexBasisShrinkGrow");
721 Flex::Node* flexNode = new Flex::Node();
722 DALI_TEST_CHECK( flexNode );
724 // Position elements as a Row
725 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
727 // Create three actors and add them to the parent flex node
728 Actor actor1 = Actor::New();
729 Actor actor2 = Actor::New();
730 Actor actor3 = Actor::New();
731 DALI_TEST_CHECK( actor1 );
732 DALI_TEST_CHECK( actor2 );
733 DALI_TEST_CHECK( actor3 );
735 Flex::Node* actor1node = flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
736 Flex::Node* actor2node = flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
737 Flex::Node* actor3node = flexNode->AddChild(actor3, Extents(0,0,0,0), &MeasureChild, 2);
741 actor1node->SetFlexGrow(0.0);
742 actor2node->SetFlexGrow(0.0);
743 actor3node->SetFlexGrow(0.0);
744 actor1node->SetFlexShrink(1.0);
745 actor2node->SetFlexShrink(1.0);
746 actor3node->SetFlexShrink(1.0);
747 actor1node->SetFlexBasis(basis);
748 actor2node->SetFlexBasis(basis);
749 actor3node->SetFlexBasis(basis);
751 DALI_TEST_EQUALS( actor1node->GetFlexGrow(), 0.0f, TEST_LOCATION );
752 DALI_TEST_EQUALS( actor1node->GetFlexShrink(), 1.0f, TEST_LOCATION );
753 DALI_TEST_EQUALS( actor1node->GetFlexBasis(), basis, TEST_LOCATION );
755 flexNode->CalculateLayout(600, 200, false);
757 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
758 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
759 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
760 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
762 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
764 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
765 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
766 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
775 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, basis, ITEM_SIZE.height ), TEST_LOCATION );
776 DALI_TEST_EQUALS( actor2Frame, Vector4( basis, 0.0f, basis*2, ITEM_SIZE.height ), TEST_LOCATION );
777 DALI_TEST_EQUALS( actor3Frame, Vector4( basis*2, 0.0f, basis*3, ITEM_SIZE.height ), TEST_LOCATION );
780 actor2node->SetFlexGrow(1.0);
781 actor3node->SetFlexGrow(1.0);
784 flexNode->CalculateLayout(605, 200, false);
786 root = flexNode->GetNodeFrame(-1); // -1 is the root
787 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
788 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
789 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
791 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
793 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
794 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
795 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
804 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, basis, ITEM_SIZE.height ), TEST_LOCATION );
805 DALI_TEST_EQUALS( actor2Frame, Vector4( basis, 0.0f, basis + (root.z-basis)/2, ITEM_SIZE.height ), TEST_LOCATION );
806 DALI_TEST_EQUALS( actor3Frame, Vector4( basis + (root.z-basis)/2, 0.0f, root.z, ITEM_SIZE.height ), TEST_LOCATION );