X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-Layouting.cpp;h=23cc93ae0ca34daff9557752d63964bbfe8b9290;hb=c5406d4b38f8b7fc3595cc5f6c9e13919fe30ea1;hp=28ada5a33a693a2d7cf11c42454da771ebc7e653;hpb=636f1454804a1566e47c968e7810c7080fc7b180;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp index 28ada5a..23cc93a 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Layouting.cpp @@ -70,6 +70,246 @@ void utc_dali_toolkit_layouting_cleanup(void) test_return_value = TET_PASS; } +int UtcDaliLayouting_LayoutLength_Types(void) +{ + tet_infoline("UtcDaliLayouting_LayoutLength Types"); + + // testing that operators return correct type + // operator+ + { + auto value = LayoutLength( 10 ) + LayoutLength(); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) + 20; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 22 + LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) + 2.1f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 2.2f + LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + // operator- + { + auto value = LayoutLength() - LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) - 99; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 20 - LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) - 9.9f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 2.0f - LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + + // operator* + { + auto value = LayoutLength() * LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) * 2; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 10 * LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = LayoutLength( 10 ) * 2.1f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 1.0f * LayoutLength( 10 ); + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + // operator/ + { + auto value = LayoutLength( 10 ) / 2.0f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + + // combinations + { + auto value = ( LayoutLength( 10 ) * 2.0f ) / 1.5f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + { + auto value = 20 + ( LayoutLength( 10 ) * 2.0f ) / 1.5f; + DALI_TEST_EQUALS( typeid(value).name(), typeid(LayoutLength).name(), TEST_LOCATION ); + } + + END_TEST; +} + +int UtcDaliLayouting_LayoutLength_Values(void) +{ + tet_infoline("UtcDaliLayouting_LayoutLength Values"); + + // operator+ + { + LayoutLength value = LayoutLength( 10 ) + LayoutLength(); + DALI_TEST_EQUALS( value.AsInteger(), 10.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength( 10 ) + 20; + DALI_TEST_EQUALS( value.AsInteger(), 30.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 22 - LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), 12.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength( 10 ) + 2.1f; + DALI_TEST_EQUALS( value.AsDecimal(), 12.1f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 12.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 2.3f - LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsDecimal(), -7.7f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsInteger(), -8.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), -7.0f, 0.0001f, TEST_LOCATION ); + } + // operator- + { + LayoutLength value = LayoutLength() - LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), -10.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength( 10 ) - 99; + DALI_TEST_EQUALS( value.AsInteger(), -89.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 20 - LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), 10.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 10.f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength( 10 ) - 9.9f; + DALI_TEST_EQUALS( value.AsInteger(), 0.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsDecimal(), 0.1f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 0.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 10.9f - LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), 1.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsDecimal(), 0.9f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 0.0f, 0.0001f, TEST_LOCATION ); + } + // operator* + { + LayoutLength value = LayoutLength() * LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), 0.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength(1) * 10; + DALI_TEST_EQUALS( value.AsInteger(), 10.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 11 * LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsInteger(), 110.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = LayoutLength( 10 ) * 2.12f; + DALI_TEST_EQUALS( value.AsDecimal(), 21.2f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsInteger(), 21.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 21.0f, 0.0001f, TEST_LOCATION ); + } + { + LayoutLength value = 2.189f * LayoutLength( 10 ); + DALI_TEST_EQUALS( value.AsDecimal(), 21.89f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsInteger(), 22.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsTruncated(), 21.0f, 0.0001f, TEST_LOCATION ); + } + // operator/ + { + LayoutLength value = LayoutLength( 11 ) / 2.0f; + DALI_TEST_EQUALS( value.AsDecimal(), 5.5f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsInteger(), 6.0f, 0.0001f, TEST_LOCATION ); + } + + // combinations + { + LayoutLength value; + value = 20 + ( LayoutLength( 10 ) * 2.0f ) / 1.5f; + DALI_TEST_EQUALS( value.AsInteger(), 33.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsDecimal(), 33.3333f, 0.0001f, TEST_LOCATION ); + } + { + uint16_t padding( 1 ); + LayoutLength right(35), left(10), mTotalLength(2); + LayoutLength value; + value = padding + ( right - left - mTotalLength ) / 2.0f; + // = 1 + ( 35 - 10 - 2 ) / 2 + DALI_TEST_EQUALS( value.AsInteger(), 13.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsDecimal(), 12.5f, 0.0001f, TEST_LOCATION ); + } + { + uint16_t padding = 1, top = 2, bottom = 3; + LayoutLength childSpace( 44 ), childHeight( 23 ); + LayoutLength value; + value = padding + ( ( childSpace - childHeight ) / 2.0f ) + top - bottom; + // = 1 + ( ( 44 - 23 ) / 2 ) + 2 - 3 + DALI_TEST_EQUALS( value.AsInteger(), 11.0f, 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( value.AsDecimal(), 10.5f, 0.0001f, TEST_LOCATION ); + } + + END_TEST; +} + +int UtcDaliLayouting_LayoutLength_Operators(void) +{ + tet_infoline("UtcDaliLayouting_LayoutLength operators"); + + { + LayoutLength value = 10; + DALI_TEST_EQUALS( (int)value.AsInteger(), 10, TEST_LOCATION ); + value += 1; + DALI_TEST_EQUALS( (int)value.AsInteger(), 11, TEST_LOCATION ); + value -= 12; + DALI_TEST_EQUALS( (int)value.AsInteger(), -1, TEST_LOCATION ); + LayoutLength value2 = value; + DALI_TEST_EQUALS( value == value2, true, TEST_LOCATION ); + value2 = 123; + DALI_TEST_EQUALS( value != value2, true, TEST_LOCATION ); + DALI_TEST_EQUALS( value < value2, true, TEST_LOCATION ); + DALI_TEST_EQUALS( value <= value2, true, TEST_LOCATION ); + value = 456; + DALI_TEST_EQUALS( value > value2, true, TEST_LOCATION ); + DALI_TEST_EQUALS( value >= value2, true, TEST_LOCATION ); + } + + { + LayoutLength value( 123 ); + std::stringstream ss; + ss << value; + DALI_TEST_EQUALS( ss.str(), "123", TEST_LOCATION ); + } + { + LayoutLength value( 0.123f ); + std::stringstream ss; + ss << value; + DALI_TEST_EQUALS( ss.str(), "0.123", TEST_LOCATION ); + } + END_TEST; +} + int UtcDaliLayouting_HboxLayout01(void) { ToolkitTestApplication application; @@ -1423,6 +1663,7 @@ int UtcDaliLayouting_HboxLayout_ImageView(void) DALI_TEST_EQUALS( imageView.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 350.0f, 0.0f ), 0.0001f, TEST_LOCATION ); DALI_TEST_EQUALS( imageView.GetProperty( Actor::Property::SIZE ), Vector3( 100.0f, 100.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + tet_infoline("UtcDaliLayouting_HboxLayout - Change image (new size)"); url = CreateImageURL( Vector4( 0, 255, 0, 255), ImageDimensions( 200, 200 ) ); imageView.SetImage( url ); @@ -2451,60 +2692,6 @@ int UtcDaliLayouting_HboxLayout_TargetSize(void) END_TEST; } -int UtcDaliLayouting_RemoveLayout01(void) -{ - ToolkitTestApplication application; - tet_infoline(" UtcDaliLayouting_RemoveLayout"); - - Stage stage = Stage::GetCurrent(); - - auto rootControl = Control::New(); - auto absoluteLayout = AbsoluteLayout::New(); - DevelControl::SetLayout( rootControl, absoluteLayout ); - rootControl.SetName( "AbsoluteLayout" ); - stage.Add( rootControl ); - - auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); - hboxLayout.SetOrientation( LinearLayout::Orientation::HORIZONTAL ); - DevelControl::SetLayout( hbox, hboxLayout ); - hbox.SetName( "HBox" ); - - std::vector< Control > controls; - controls.push_back( CreateLeafControl( 40, 40 ) ); - controls.push_back( CreateLeafControl( 60, 40 ) ); - - for( auto&& iter : controls ) - { - hbox.Add( iter ); - } - hbox.SetParentOrigin( ParentOrigin::CENTER ); - hbox.SetAnchorPoint( AnchorPoint::CENTER ); - rootControl.Add( hbox ); - - tet_infoline("Layout as normal"); - application.SendNotification(); - application.Render(); - - tet_infoline("Set an empty layout on hbox container"); - LinearLayout emptyLayout; - DevelControl::SetLayout( hbox, emptyLayout ); - - tet_infoline("Run another layout"); - application.SendNotification(); - application.Render(); - - tet_infoline("Check leaf controls haven't moved"); - - DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); - DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::POSITION ), Vector3( 40.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); - - DALI_TEST_EQUALS( controls[0].GetProperty( Actor::Property::SIZE ), Vector3( 40.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); - DALI_TEST_EQUALS( controls[1].GetProperty( Actor::Property::SIZE ), Vector3( 60.0f, 40.0f, 0.0f ), 0.0001f, TEST_LOCATION ); - - END_TEST; -} - int UtcDaliLayouting_LayoutChildren01(void) { ToolkitTestApplication application; @@ -2524,41 +2711,6 @@ int UtcDaliLayouting_LayoutChildren01(void) DALI_TEST_EQUALS( absoluteLayout.GetChildCount(), 1, TEST_LOCATION ); - tet_infoline("Test removal by setting empty layout to child container" ); - DevelControl::SetLayout( hbox, LayoutItem{} ); - - DALI_TEST_EQUALS( absoluteLayout.GetChildCount(), 0, TEST_LOCATION ); - - auto& hboxImpl = GetImplementation( hboxLayout ); - Handle empty; - DALI_TEST_EQUALS( hboxLayout.GetOwner(), empty, TEST_LOCATION ); - DALI_TEST_EQUALS( (void*)hboxImpl.GetParent(), (void*)nullptr, TEST_LOCATION ); - - // For coverage - hboxImpl.SetLayoutRequested(); - - END_TEST; -} - -int UtcDaliLayouting_LayoutChildren02(void) -{ - ToolkitTestApplication application; - tet_infoline(" UtcDaliLayouting_LayoutChildren02"); - - Stage stage = Stage::GetCurrent(); - - auto rootControl = Control::New(); - auto absoluteLayout = AbsoluteLayout::New(); - DevelControl::SetLayout( rootControl, absoluteLayout ); - stage.Add( rootControl ); - - auto hbox = Control::New(); - auto hboxLayout = LinearLayout::New(); - DevelControl::SetLayout( hbox, hboxLayout ); - rootControl.Add( hbox ); - - DALI_TEST_EQUALS( absoluteLayout.GetChildCount(), 1, TEST_LOCATION ); - tet_infoline("Test removal by removing child actor from parent container" ); hbox.Unparent(); @@ -2574,7 +2726,7 @@ int UtcDaliLayouting_LayoutChildren02(void) END_TEST; } -int UtcDaliLayouting_LayoutChildren03(void) +int UtcDaliLayouting_LayoutChildren02(void) { ToolkitTestApplication application; tet_infoline(" UtcDaliLayouting_LayoutChildren02"); @@ -2611,7 +2763,7 @@ int UtcDaliLayouting_LayoutChildren03(void) } -int UtcDaliLayouting_LayoutChildren04(void) +int UtcDaliLayouting_LayoutChildren03(void) { ToolkitTestApplication application; tet_infoline(" UtcDaliLayouting_LayoutChildren03"); @@ -2744,34 +2896,51 @@ int UtcDaliLayouting_SetLayoutOrder02(void) tet_infoline("SetLayout"); auto vboxLayout = LinearLayout::New(); - DevelControl::SetLayout( controls[0], vboxLayout ); + DevelControl::SetLayout( controls[0], vboxLayout ); // 1 2 0(vbox) TestLayoutItemOrder( controls, hboxLayout ); tet_infoline("Raise"); - controls[0].Raise(); // 1 2 0 + controls[0].Raise(); // 1 2 0(vbox) TestLayoutItemOrder( controls, hboxLayout ); tet_infoline("Lower"); - controls[2].Lower(); // 2 1 0 + controls[2].Lower(); // 2 1 0(vbox) TestLayoutItemOrder( controls, hboxLayout ); tet_infoline("SetLayout again"); auto vboxLayout1 = LinearLayout::New(); - DevelControl::SetLayout( controls[2], vboxLayout1 ); + DevelControl::SetLayout( controls[2], vboxLayout1 ); // 2 1(vbox1) 0(vbox) + + TestLayoutItemOrder( controls, hboxLayout ); + + tet_infoline("SetLayout with empty handle"); + + DevelControl::SetLayout( controls[0], LayoutItem{} ); // 2 1(vbox1) 0 + + TestLayoutItemOrder( controls, hboxLayout ); + + tet_infoline("SetLayout to another control"); + + DevelControl::SetLayout( controls[2], vboxLayout1 ); // 2(vbox1) 1 0 TestLayoutItemOrder( controls, hboxLayout ); - DevelControl::SetLayout( controls[2], vboxLayout ); + tet_infoline("SetLayout to change layout"); + + DevelControl::SetLayout( controls[2], vboxLayout1 ); // 2(vbox) 1 0 + + TestLayoutItemOrder( controls, hboxLayout ); END_TEST; } + int UtcDaliLayouting_LayoutGroup01(void) { ToolkitTestApplication application; @@ -2788,19 +2957,21 @@ int UtcDaliLayouting_LayoutGroup01(void) DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, 600 ); hbox.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + DevelControl::SetLayoutingRequired( hbox, true ); hbox.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // LinearLayout will eventually do this internally. - tet_infoline("Add a control without SetLayout being called"); + tet_infoline("Add a control without SetLayout being called but with layout required set true"); auto control = Control::New(); control.SetName("Control1"); + DevelControl::SetLayoutingRequired( control, true ); hbox.Add( control ); control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); - tet_infoline("Add a Textlabel to the control"); auto textLabel = TextLabel::New("Test text"); textLabel.SetName("TextLabel"); + control.Add( textLabel ); // Ensure layouting happens @@ -2826,17 +2997,18 @@ int UtcDaliLayouting_LayoutGroup02(void) // Create a parent layout auto hbox = Control::New(); auto hboxLayout = LinearLayout::New(); + DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); rootControl.Add( hbox ); - DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, 600 ); hbox.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); hbox.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // LinearLayout will eventually do this internally. - tet_infoline("Add a control without SetLayout being called"); + tet_infoline("Add a control without SetLayout being called but with layout required set true"); auto control = Control::New(); control.SetName("Control1"); + DevelControl::SetLayoutingRequired( control, true ); hbox.Add( control ); control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); @@ -2874,7 +3046,7 @@ int UtcDaliLayouting_LayoutGroup02(void) int UtcDaliLayouting_LayoutGroup03(void) { ToolkitTestApplication application; - tet_infoline("UtcDaliLayouting_LayoutGroup03 - Test control witha LayoutGroup as a leaf"); + tet_infoline("UtcDaliLayouting_LayoutGroup03 - Test control with a LayoutGroup as a leaf"); Control rootControl; SetupRootLayoutControl( rootControl ); @@ -2882,9 +3054,47 @@ int UtcDaliLayouting_LayoutGroup03(void) // Create a parent layout auto hbox = Control::New(); auto hboxLayout = LinearLayout::New(); + DevelControl::SetLayout( hbox, hboxLayout ); hbox.SetName( "HBox"); rootControl.Add( hbox ); + hbox.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, 600 ); + hbox.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // LinearLayout will eventually do this internally. + + tet_infoline("Add a control without SetLayout being called"); + + auto control = Control::New(); + control.SetName("Control1"); + hbox.Add( control ); + control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); + control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, 100 ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + tet_infoline("Test control is width of it's parent and exact given height"); + DALI_TEST_EQUALS( control.GetProperty( Actor::Property::SIZE ), Vector3( 600.0f, 100.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliLayouting_LayoutGroup04(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliLayouting_LayoutGroup04 - Test control with a LayoutGroup as a leaf and with SetLayotRequired = true"); + + Control rootControl; + SetupRootLayoutControl( rootControl ); + + // Create a parent layout + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + rootControl.Add( hbox ); hbox.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, 600 ); hbox.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); hbox.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // LinearLayout will eventually do this internally. @@ -2893,6 +3103,7 @@ int UtcDaliLayouting_LayoutGroup03(void) auto control = Control::New(); control.SetName("Control1"); + DevelControl::SetLayoutingRequired( control, true ); hbox.Add( control ); control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, 100 ); @@ -2908,6 +3119,44 @@ int UtcDaliLayouting_LayoutGroup03(void) END_TEST; } +int UtcDaliLayouting_IsLayoutingRequired(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliLayouting_IsLayoutingRequired - Test setting the SetLayoutRequired and then check if flag was set"); + + Control rootControl; + SetupRootLayoutControl( rootControl ); + + // Create a parent layout + auto hbox = Control::New(); + auto hboxLayout = LinearLayout::New(); + DevelControl::SetLayout( hbox, hboxLayout ); + hbox.SetName( "HBox"); + rootControl.Add( hbox ); + hbox.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, 600 ); + hbox.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); + hbox.SetAnchorPoint( AnchorPoint::TOP_LEFT ); // LinearLayout will eventually do this internally. + + tet_infoline("Add a control without SetLayout being called"); + + auto control = Control::New(); + control.SetName("Control1"); + DALI_TEST_EQUALS( DevelControl::IsLayoutingRequired( control ), false, TEST_LOCATION ); + DevelControl::SetLayoutingRequired( control, true ); + hbox.Add( control ); + control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::MATCH_PARENT ); + control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, 100 ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + tet_infoline("Test control is width of it's parent and exact given height"); + DALI_TEST_EQUALS( DevelControl::IsLayoutingRequired( control ), true, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliLayouting_LayoutGroupWithPadding01(void) { ToolkitTestApplication application; @@ -2930,6 +3179,7 @@ int UtcDaliLayouting_LayoutGroupWithPadding01(void) auto control = Control::New(); control.SetName("Control1"); + DevelControl::SetLayoutingRequired( control, true ); hbox.Add( control ); control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); @@ -2977,6 +3227,7 @@ int UtcDaliLayouting_LayoutGroupWithChildMargin01(void) auto control = Control::New(); control.SetName("Control1"); + DevelControl::SetLayoutingRequired( control, true ); hbox.Add( control ); control.SetProperty( LayoutItem::ChildProperty::WIDTH_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); control.SetProperty( LayoutItem::ChildProperty::HEIGHT_SPECIFICATION, ChildLayoutData::WRAP_CONTENT ); @@ -3089,3 +3340,53 @@ int UtcDaliLayouting_SetLayout(void) END_TEST; } + +int UtcDaliLayouting_StageAdd(void) +{ + ToolkitTestApplication application; + tet_infoline(" UtcDaliLayouting_StageAdd"); + + Stage stage = Stage::GetCurrent(); + + AbsoluteLayout absoluteLayout = AbsoluteLayout::New(); + Control container = Control::New(); + container.SetName( "Container" ); + DevelControl::SetLayout( container, absoluteLayout ); + container.SetAnchorPoint( Dali::AnchorPoint::CENTER ); + container.SetParentOrigin( Dali::ParentOrigin::CENTER ); + + Control child = Control::New(); + child.SetAnchorPoint( Dali::AnchorPoint::TOP_LEFT ); + child.SetPosition( 0.0f, 0.0f ); + child.SetSize( 480.0f, 180.0f ); + child.SetName( "Child Control" ); + container.Add( child ); + + // Ensure layouting happens + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( container.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( container.GetProperty( Actor::Property::SIZE ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Not re-laid out + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::SIZE ), Vector3( 480.0f, 180.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + application.SendNotification(); + application.Render(); + + // Add container to stage here + // Should call RequestLayout() to measure and layout + stage.Add( container ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( container.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + DALI_TEST_EQUALS( container.GetProperty( Actor::Property::SIZE ), Vector3( 480.0f, 800.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Stage Size + DALI_TEST_EQUALS( child.GetProperty( Actor::Property::SIZE ), Vector3( 480.0f, 180.0f, 0.0f ), 0.0001f, TEST_LOCATION ); + + END_TEST; +}