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 Flex::SizeTuple MeasureChild( Actor child, float width, int measureModeWidth, float height, int measureModeHeight)
46 Flex::SizeTuple 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 );
57 int UtcDaliToolkitFlexNodeConstructorP(void)
59 ToolkitTestApplication application;
60 tet_infoline(" UtcDaliToolkitFlexNodeNewP");
61 Flex::Node* flexNode = new Flex::Node();
62 DALI_TEST_CHECK( flexNode );
66 int UtcDaliToolkitFlexNodeAddChildWithMarginP(void)
68 ToolkitTestApplication application;
69 tet_infoline(" UtcDaliToolkitFlexNodeAddChildWithMarginP");
70 Flex::Node* flexNode = new Flex::Node();
71 DALI_TEST_CHECK( flexNode );
73 // Position elements as a Row
74 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
76 // Create two actors and add them to the parent flex node
77 Actor actor = Actor::New();
78 DALI_TEST_CHECK( actor );
80 Extents margin( 5,5,5,5);
81 flexNode->AddChild(actor, margin, &MeasureChild, 0);
83 DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
85 flexNode->CalculateLayout(480, 800, false);
87 Vector4 actorFrame = flexNode->GetNodeFrame(0);
89 tet_printf("Actor frame(left:%f,top:%f,right:%f,bottom:%f)\n", actorFrame.x, actorFrame.y, actorFrame.z, actorFrame.w);
91 DALI_TEST_EQUALS( actorFrame, Vector4( 5.0f, 5.0f, ITEM_SIZE.width+5, ITEM_SIZE.height+5 ), TEST_LOCATION );
96 int UtcDaliToolkitFlexNodeAddChildrenRowP(void)
98 ToolkitTestApplication application;
99 tet_infoline(" UtcDaliToolkitFlexNodeAddChildrenRowP");
100 Flex::Node* flexNode = new Flex::Node();
101 DALI_TEST_CHECK( flexNode );
103 // Position elements as a Row
104 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
106 // Create two actors and add them to the parent flex node
107 Actor actor1 = Actor::New();
108 Actor actor2 = Actor::New();
109 DALI_TEST_CHECK( actor1 );
110 DALI_TEST_CHECK( actor2 );
112 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
113 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
115 DALI_TEST_EQUALS( (int)flexNode->GetFlexDirection(), (int)Flex::FlexDirection::ROW, TEST_LOCATION );
117 flexNode->CalculateLayout(480, 800, false);
119 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
120 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
122 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
123 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
125 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
126 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width * 2, ITEM_SIZE.height ), TEST_LOCATION );
131 int UtcDaliToolkitFlexNodeAddChildrenColumnP(void)
133 ToolkitTestApplication application;
134 tet_infoline("UtcDaliToolkitFlexNodeAddChildrenColumnP");
135 Flex::Node* flexNode = new Flex::Node();
136 DALI_TEST_CHECK( flexNode );
138 // Position elements in a Column
139 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
141 // Create two actors and add them to the parent flex node
142 Actor actor1 = Actor::New();
143 Actor actor2 = Actor::New();
144 DALI_TEST_CHECK( actor1 );
145 DALI_TEST_CHECK( actor2 );
147 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
148 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
150 flexNode->CalculateLayout(480, 800, false);
152 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
153 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
154 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
156 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
158 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
159 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
161 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
162 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
168 int UtcDaliToolkitFlexNodeAddChildrenColumnJustify(void)
170 ToolkitTestApplication application;
171 tet_infoline("UtcDaliToolkitFlexNodeAddChildrenColumnJustify");
172 Flex::Node* flexNode = new Flex::Node();
173 DALI_TEST_CHECK( flexNode );
175 // Position elements in a Column
176 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
178 tet_infoline("Justify to the Start, align to start, third item should be displayed at the top and the end");
179 flexNode->SetFlexJustification(Flex::Justification::FLEX_START);
180 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_START );
182 // Create three actors and add them to the parent flex node
183 Actor actor1 = Actor::New();
184 Actor actor2 = Actor::New();
185 Actor actor3 = Actor::New();
186 DALI_TEST_CHECK( actor1 );
187 DALI_TEST_CHECK( actor2 );
188 DALI_TEST_CHECK( actor3 );
190 DALI_TEST_EQUALS( (int)flexNode->GetFlexJustification(), (int)Flex::Justification::FLEX_START, TEST_LOCATION );
191 DALI_TEST_EQUALS( (int)flexNode->GetFlexItemsAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
193 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
194 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
195 Flex::Node* actor3node = flexNode->AddChild(actor3, Extents(0,0,0,0), &MeasureChild, 2);
196 actor3node->SetFlexAlignmentSelf( Flex::Alignment::FLEX_END );
198 flexNode->CalculateLayout(480, 800, false);
200 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
201 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
202 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
203 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
205 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
207 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
208 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
209 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
221 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
222 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
223 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, ITEM_SIZE.height *2, root.z, ITEM_SIZE.height *3 ), TEST_LOCATION );
225 tet_infoline(" Justify to the End, items should now be displayed at the bottom, third item should now be displayed at the end");
226 flexNode->SetFlexJustification( Flex::Justification::FLEX_END );
227 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_START );
230 flexNode->CalculateLayout(480, 800, false);
232 root = flexNode->GetNodeFrame(-1); // -1 is the root
233 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
234 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
235 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
237 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
239 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
240 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
241 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
253 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, root.w - (ITEM_SIZE.height*3), ITEM_SIZE.width, root.w - (ITEM_SIZE.height*2) ), TEST_LOCATION );
254 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, root.w - (ITEM_SIZE.height*2), ITEM_SIZE.width, root.w - ITEM_SIZE.height ), TEST_LOCATION );
255 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, root.w - ITEM_SIZE.height, root.z, root.w ), TEST_LOCATION );
257 tet_infoline(" Align to End, items should now be displayed at the bottom and the end");
258 flexNode->SetFlexJustification( Flex::Justification::FLEX_END );
259 flexNode->SetFlexItemsAlignment( Flex::Alignment::FLEX_END );
261 flexNode->CalculateLayout(480, 800, false);
263 root = flexNode->GetNodeFrame(-1); // -1 is the root
264 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
265 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
266 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
268 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
269 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
270 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
282 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 );
283 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 );
284 DALI_TEST_EQUALS( actor3Frame, Vector4( root.z - ITEM_SIZE.width, root.w - ITEM_SIZE.height, root.z, root.w ), TEST_LOCATION );
289 int UtcDaliToolkitFlexNodeSizingP(void)
291 ToolkitTestApplication application;
292 tet_infoline(" UtcDaliToolkitFlexNodeSizingP");
293 Flex::Node* flexNode = new Flex::Node();
294 DALI_TEST_CHECK( flexNode );
296 // Create two actors and add them to the parent flex node
297 Actor actor1 = Actor::New();
298 Actor actor2 = Actor::New();
299 DALI_TEST_CHECK( actor1 );
300 DALI_TEST_CHECK( actor2 );
302 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
303 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
305 flexNode->CalculateLayout(480, 800, false);
307 DALI_TEST_EQUALS( flexNode->GetFlexWidth(), 480.0f, TEST_LOCATION );
308 DALI_TEST_EQUALS( flexNode->GetFlexHeight(), 800.0f, TEST_LOCATION );
313 int UtcDaliToolkitFlexNodeWrapModeP(void)
315 ToolkitTestApplication application;
316 tet_infoline("UtcDaliToolkitFlexNodeWrapModeP");
317 Flex::Node* flexNode = new Flex::Node();
318 DALI_TEST_CHECK( flexNode );
320 // Position elements in a Column
321 flexNode->SetFlexDirection( Flex::FlexDirection::ROW );
322 flexNode->SetFlexAlignment( Flex::Alignment::FLEX_START );
323 flexNode->SetFlexWrap( Flex::WrapType::NO_WRAP );
325 // Create two actors and add them to the parent flex node
326 Actor actor1 = Actor::New();
327 Actor actor2 = Actor::New();
328 Actor actor3 = Actor::New();
329 Actor actor4 = Actor::New();
331 DALI_TEST_EQUALS( (int)flexNode->GetFlexJustification(), (int)Flex::Justification::FLEX_START, TEST_LOCATION );
332 DALI_TEST_EQUALS( (int)flexNode->GetFlexItemsAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
333 DALI_TEST_EQUALS( (int)flexNode->GetFlexAlignment(), (int)Flex::Alignment::FLEX_START, TEST_LOCATION );
334 DALI_TEST_EQUALS( (int)flexNode->GetFlexWrap(), (int)Flex::WrapType::NO_WRAP, TEST_LOCATION );
336 flexNode->AddChild( actor1, Extents(0,0,0,0), &MeasureChild, 0 );
337 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 1 );
338 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 2 );
339 flexNode->AddChild( actor2, Extents(0,0,0,0), &MeasureChild, 3 );
341 flexNode->CalculateLayout(30, 800, false);
343 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
344 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
345 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
346 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is first child
347 Vector4 actor4Frame = flexNode->GetNodeFrame(3); // 3 is second child
349 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
350 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
351 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
352 tet_printf("Actor 3 frame(left:%f,top:%f,right:cdt%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
353 tet_printf("Actor 4 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor4Frame.x, actor4Frame.y, actor4Frame.z, actor4Frame.w);
365 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
366 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
367 DALI_TEST_EQUALS( actor3Frame, Vector4( ITEM_SIZE.width*2, 0.0f, ITEM_SIZE.width*3, ITEM_SIZE.height ), TEST_LOCATION );
368 DALI_TEST_EQUALS( actor4Frame, Vector4( ITEM_SIZE.width*3, 0.0f, ITEM_SIZE.width*4, ITEM_SIZE.height ), TEST_LOCATION );
370 flexNode->SetFlexWrap( Flex::WrapType::WRAP );
372 flexNode->CalculateLayout( 30, 800, false );
373 root = flexNode->GetNodeFrame(-1); // -1 is the root
375 DALI_TEST_EQUALS( (int)flexNode->GetFlexWrap(), (int)Flex::WrapType::WRAP, TEST_LOCATION );
376 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
378 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
379 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
380 actor3Frame = flexNode->GetNodeFrame(2); // 2 is first child
381 actor4Frame = flexNode->GetNodeFrame(3); // 3 is second child
383 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
384 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
385 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
386 tet_printf("Actor 4 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor4Frame.x, actor4Frame.y, actor4Frame.z, actor4Frame.w);
398 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
399 DALI_TEST_EQUALS( actor2Frame, Vector4( ITEM_SIZE.width, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
400 DALI_TEST_EQUALS( actor3Frame, Vector4( ITEM_SIZE.width*2, 0.0f, ITEM_SIZE.width*3, ITEM_SIZE.height ), TEST_LOCATION );
401 DALI_TEST_EQUALS( actor4Frame, Vector4( 0.0,ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height*2 ), TEST_LOCATION );
407 int UtcDaliToolkitFlexNodeRemoveChildP(void)
409 ToolkitTestApplication application;
410 tet_infoline(" UtcDaliToolkitFlexNodeRemoveChildP");
411 Flex::Node* flexNode = new Flex::Node();
412 DALI_TEST_CHECK( flexNode );
414 // Create two actors and add them to the parent flex node
415 Actor actor1 = Actor::New();
416 Actor actor2 = Actor::New();
417 actor1.SetProperty( Dali::Actor::Property::NAME,"Actor1");
418 actor2.SetProperty( Dali::Actor::Property::NAME,"Actor2");
420 DALI_TEST_CHECK( actor1 );
421 DALI_TEST_CHECK( actor2 );
423 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
424 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
426 flexNode->CalculateLayout(480, 800, false);
428 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
429 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
431 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
432 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
434 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.width, ITEM_SIZE.width, ITEM_SIZE.height*2 ), TEST_LOCATION );
436 flexNode->RemoveChild(actor1);
438 flexNode->CalculateLayout(480, 800, false);
440 actor2Frame = flexNode->GetNodeFrame(0);
442 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
443 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
445 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
450 int UtcDaliToolkitFlexNodeRemoveAllChildrenP(void)
452 ToolkitTestApplication application;
453 tet_infoline(" UtcDaliToolkitFlexNodeRemoveAllChildrenP");
454 Flex::Node* flexNode = new Flex::Node();
455 DALI_TEST_CHECK( flexNode );
457 // Create two actors and add them to the parent flex node
458 Actor actor1 = Actor::New();
459 Actor actor2 = Actor::New();
460 actor1.SetProperty( Dali::Actor::Property::NAME,"Actor1");
461 actor2.SetProperty( Dali::Actor::Property::NAME,"Actor2");
463 DALI_TEST_CHECK( actor1 );
464 DALI_TEST_CHECK( actor2 );
466 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
467 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
469 flexNode->CalculateLayout(480, 800, false);
471 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
472 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
474 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
475 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
477 flexNode->RemoveChild(actor1);
478 flexNode->RemoveChild(actor2);
480 flexNode->CalculateLayout(480, 800, false);
482 Vector4 actor1FrameRemoved = flexNode->GetNodeFrame(0);
483 Vector4 actor2FrameRemoved = flexNode->GetNodeFrame(1);
485 tet_printf("Actor 1 frame(%f,%f,%f,%f)\n", actor1FrameRemoved.x, actor1FrameRemoved.y, actor1FrameRemoved.z, actor1FrameRemoved.w);
486 tet_printf("Actor 2 frame(%f,%f,%f,%f)\n", actor2FrameRemoved.x, actor2FrameRemoved.y, actor2FrameRemoved.z, actor2FrameRemoved.w);
488 DALI_TEST_NOT_EQUALS( actor1Frame, actor1FrameRemoved, 0.1, TEST_LOCATION );
489 DALI_TEST_NOT_EQUALS( actor2Frame, actor2FrameRemoved, 0.1, TEST_LOCATION );
494 int UtcDaliToolkitFlexNodePaddingMarginP(void)
496 ToolkitTestApplication application;
497 tet_infoline(" UtcDaliToolkitFlexNodePaddingMarginP");
498 Flex::Node* flexNode = new Flex::Node();
499 DALI_TEST_CHECK( flexNode );
500 flexNode->SetFlexDirection( Flex::FlexDirection::ROW );
502 // Create two actors and add them to the parent flex node
503 Actor actor1 = Actor::New();
504 Actor actor2 = Actor::New();
505 DALI_TEST_CHECK( actor1 );
506 DALI_TEST_CHECK( actor2 );
508 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
509 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
511 Extents padding( 5,5,5,5);
512 Extents margin( 5,5,5,5);
514 flexNode->SetPadding( padding );
515 flexNode->SetMargin( margin );
517 flexNode->CalculateLayout(480, 800, false);
519 Vector4 actor1Frame = flexNode->GetNodeFrame(0);
520 Vector4 actor2Frame = flexNode->GetNodeFrame(1);
530 DALI_TEST_EQUALS( actor1Frame, Vector4( 5.0f, 5.0f, ITEM_SIZE.width +5 , ITEM_SIZE.height + 5 ), TEST_LOCATION );
531 DALI_TEST_EQUALS( actor2Frame, Vector4( 5+ ITEM_SIZE.width, 5.0f, (ITEM_SIZE.width*2) +5, ITEM_SIZE.height +5 ), TEST_LOCATION );
536 int UtcDaliToolkitFlexNodeCallbackTestP(void)
538 ToolkitTestApplication application;
539 tet_infoline("UtcDaliToolkitFlexNodeCallbackTestP");
540 Flex::Node* flexNode = new Flex::Node();
541 DALI_TEST_CHECK( flexNode );
543 // Position elements in a Column
544 flexNode->SetFlexDirection(Flex::FlexDirection::COLUMN);
546 // Create two actors and add them to the parent flex node
547 Actor actor1 = Actor::New();
548 Actor actor2 = Actor::New();
550 actor1.SetProperty( Dali::Actor::Property::NAME,"callbackTest");
552 DALI_TEST_CHECK( actor1 );
553 DALI_TEST_CHECK( actor2 );
555 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
556 flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
558 flexNode->CalculateLayout(480, 800, false);
560 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
561 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
562 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
564 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
566 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
567 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
569 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE_CALLBACK_TEST.width, ITEM_SIZE_CALLBACK_TEST.height ), TEST_LOCATION );
570 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 );
575 int UtcDaliToolkitFlexNodeFlexPositionType(void)
577 ToolkitTestApplication application;
578 tet_infoline("UtcDaliToolkitFlexNodeFlexPositionType");
579 Flex::Node* flexNode = new Flex::Node();
580 DALI_TEST_CHECK( flexNode );
582 tet_infoline(" FlexPositionType is RELATIVE by default");
584 // Create two actors and add them to the parent flex node
585 Actor actor1 = Actor::New();
586 Actor actor2 = Actor::New();
587 DALI_TEST_CHECK( actor1 );
588 DALI_TEST_CHECK( actor2 );
590 flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
591 Flex::Node* actor2node = flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
593 DALI_TEST_EQUALS( (int)actor2node->GetFlexPositionType(), (int)Flex::PositionType::RELATIVE, TEST_LOCATION );
595 flexNode->CalculateLayout(480, 800, false);
597 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
598 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
599 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
601 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
603 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
604 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
616 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
617 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, ITEM_SIZE.height, ITEM_SIZE.width, ITEM_SIZE.height *2 ), TEST_LOCATION );
619 tet_infoline(" ABSOLUTE FlexPositionType, second item should now be ignore any properties");
620 actor2node->SetFlexPositionType( Flex::PositionType::ABSOLUTE );
623 flexNode->CalculateLayout(480, 800, false);
625 root = flexNode->GetNodeFrame(-1); // -1 is the root
626 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
627 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
629 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
631 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
632 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
644 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
645 DALI_TEST_EQUALS( actor2Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
650 int UtcDaliToolkitFlexNodeFlexAspectRatio(void)
652 ToolkitTestApplication application;
653 tet_infoline("UtcDaliToolkitFlexNodeFlexAspectRatio");
654 Flex::Node* flexNode = new Flex::Node();
655 DALI_TEST_CHECK( flexNode );
657 // Create a actor and add them to the parent flex node
658 Actor actor1 = Actor::New();
659 DALI_TEST_CHECK( actor1 );
661 tet_infoline(" 1.0 FlexAspectRatio");
662 Flex::Node* actor1node = flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
663 actor1node->SetFlexAspectRatio(1.0);
665 DALI_TEST_EQUALS( actor1node->GetFlexAspectRatio(), 1.0f, TEST_LOCATION );
667 flexNode->CalculateLayout(480, 800, false);
669 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
670 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
672 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
674 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
686 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width, ITEM_SIZE.height ), TEST_LOCATION );
688 tet_infoline(" 2.0 FlexAspectRatio");
689 actor1node->SetFlexAspectRatio(2.0);
691 DALI_TEST_EQUALS( actor1node->GetFlexAspectRatio(), 2.0f, TEST_LOCATION );
694 flexNode->CalculateLayout(480, 800, false);
696 root = flexNode->GetNodeFrame(-1); // -1 is the root
697 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
699 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
701 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
713 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, ITEM_SIZE.width*2, ITEM_SIZE.height ), TEST_LOCATION );
718 int UtcDaliToolkitFlexNodeFlexBasisShrinkGrow(void)
720 ToolkitTestApplication application;
721 tet_infoline("UtcDaliToolkitFlexNodeFlexBasisShrinkGrow");
722 Flex::Node* flexNode = new Flex::Node();
723 DALI_TEST_CHECK( flexNode );
725 // Position elements as a Row
726 flexNode->SetFlexDirection(Flex::FlexDirection::ROW);
728 // Create three actors and add them to the parent flex node
729 Actor actor1 = Actor::New();
730 Actor actor2 = Actor::New();
731 Actor actor3 = Actor::New();
732 DALI_TEST_CHECK( actor1 );
733 DALI_TEST_CHECK( actor2 );
734 DALI_TEST_CHECK( actor3 );
736 Flex::Node* actor1node = flexNode->AddChild(actor1, Extents(0,0,0,0), &MeasureChild, 0);
737 Flex::Node* actor2node = flexNode->AddChild(actor2, Extents(0,0,0,0), &MeasureChild, 1);
738 Flex::Node* actor3node = flexNode->AddChild(actor3, Extents(0,0,0,0), &MeasureChild, 2);
742 actor1node->SetFlexGrow(0.0);
743 actor2node->SetFlexGrow(0.0);
744 actor3node->SetFlexGrow(0.0);
745 actor1node->SetFlexShrink(1.0);
746 actor2node->SetFlexShrink(1.0);
747 actor3node->SetFlexShrink(1.0);
748 actor1node->SetFlexBasis(basis);
749 actor2node->SetFlexBasis(basis);
750 actor3node->SetFlexBasis(basis);
752 DALI_TEST_EQUALS( actor1node->GetFlexGrow(), 0.0f, TEST_LOCATION );
753 DALI_TEST_EQUALS( actor1node->GetFlexShrink(), 1.0f, TEST_LOCATION );
754 DALI_TEST_EQUALS( actor1node->GetFlexBasis(), basis, TEST_LOCATION );
756 flexNode->CalculateLayout(600, 200, false);
758 Vector4 root = flexNode->GetNodeFrame(-1); // -1 is the root
759 Vector4 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
760 Vector4 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
761 Vector4 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
763 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
765 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
766 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
767 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
776 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, basis, ITEM_SIZE.height ), TEST_LOCATION );
777 DALI_TEST_EQUALS( actor2Frame, Vector4( basis, 0.0f, basis*2, ITEM_SIZE.height ), TEST_LOCATION );
778 DALI_TEST_EQUALS( actor3Frame, Vector4( basis*2, 0.0f, basis*3, ITEM_SIZE.height ), TEST_LOCATION );
781 actor2node->SetFlexGrow(1.0);
782 actor3node->SetFlexGrow(1.0);
785 flexNode->CalculateLayout(605, 200, false);
787 root = flexNode->GetNodeFrame(-1); // -1 is the root
788 actor1Frame = flexNode->GetNodeFrame(0); // 0 is first child
789 actor2Frame = flexNode->GetNodeFrame(1); // 1 is second child
790 actor3Frame = flexNode->GetNodeFrame(2); // 2 is third child
792 tet_printf("Root frame(left:%f,top:%f,right:%f,bottom:%f)\n", root.x, root.y, root.z, root.w);
794 tet_printf("Actor 1 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor1Frame.x, actor1Frame.y, actor1Frame.z, actor1Frame.w);
795 tet_printf("Actor 2 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor2Frame.x, actor2Frame.y, actor2Frame.z, actor2Frame.w);
796 tet_printf("Actor 3 frame(left:%f,top:%f,right:%f,bottom:%f)\n", actor3Frame.x, actor3Frame.y, actor3Frame.z, actor3Frame.w);
805 DALI_TEST_EQUALS( actor1Frame, Vector4( 0.0f, 0.0f, basis, ITEM_SIZE.height ), TEST_LOCATION );
806 DALI_TEST_EQUALS( actor2Frame, Vector4( basis, 0.0f, basis + (root.z-basis)/2, ITEM_SIZE.height ), TEST_LOCATION );
807 DALI_TEST_EQUALS( actor3Frame, Vector4( basis + (root.z-basis)/2, 0.0f, root.z, ITEM_SIZE.height ), TEST_LOCATION );