Add to request Relayout when connected to Stage
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Layouting.cpp
index 28ada5a..46ba80b 100644 (file)
@@ -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<Vector3>( Actor::Property::POSITION ), Vector3( 0.0f, 350.0f, 0.0f ), 0.0001f, TEST_LOCATION );
   DALI_TEST_EQUALS( imageView.GetProperty<Vector3>( 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 );
 
@@ -2788,19 +3029,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 +3069,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 +3118,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 +3126,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<Vector3>( Actor::Property::SIZE ), Vector3( 600.0f, 100.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+  DALI_TEST_EQUALS( control.GetProperty<Vector3>( 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 +3175,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 +3191,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 +3251,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 +3299,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 +3412,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<Vector3>( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetProperty<Vector3>( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+
+  DALI_TEST_EQUALS( container.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Not re-laid out
+  DALI_TEST_EQUALS( child.GetProperty<Vector3>( 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<Vector3>( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetProperty<Vector3>( Actor::Property::POSITION ), Vector3( 0.0f, 0.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+
+  DALI_TEST_EQUALS( container.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 480.0f, 800.0f, 0.0f ), 0.0001f, TEST_LOCATION ); // Stage Size
+  DALI_TEST_EQUALS( child.GetProperty<Vector3>( Actor::Property::SIZE ), Vector3( 480.0f, 180.0f, 0.0f ), 0.0001f, TEST_LOCATION );
+
+  END_TEST;
+}