Merge "Remove unnecessary functions from Scripting, support strings in actor properti...
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Actor.cpp
index 44a83f3..6dcde41 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -155,14 +155,26 @@ struct PositionComponentConstraint
   }
 };
 
+struct OrientationComponentConstraint
+{
+  OrientationComponentConstraint(){}
+
+  void operator()( Quaternion& orientation, const PropertyInputContainer& inputs )
+  {
+    const Quaternion& parentOrientation = inputs[0]->GetQuaternion();
+    Vector3 pos, scale;
+    Quaternion rot;
+    orientation = parentOrientation;
+  }
+};
 // OnRelayout
 
-static bool gOnRelayoutCallBackCalled = 0;
+static bool gOnRelayoutCallBackCalled = false;
 static std::vector< std::string > gActorNamesRelayout;
 
 void OnRelayoutCallback( Actor actor )
 {
-  ++gOnRelayoutCallBackCalled;
+  gOnRelayoutCallBackCalled = true;
   gActorNamesRelayout.push_back( actor.GetName() );
 }
 
@@ -406,33 +418,6 @@ int UtcDaliActorAddN(void)
   END_TEST;
 }
 
-int UtcDaliActorInsert(void)
-{
-  tet_infoline("Testing Actor::Insert");
-  TestApplication application;
-
-  Actor parent = Actor::New();
-  Stage::GetCurrent().Add( parent );
-  Actor first = Actor::New();
-  Actor second = Actor::New();
-  Actor third = Actor::New();
-
-  parent.Insert(1, first); // test insert beyond range
-  DALI_TEST_EQUALS( parent.GetChildCount(), 1u, TEST_LOCATION );
-  parent.Insert(0, second);
-  DALI_TEST_EQUALS( parent.GetChildCount(), 2u, TEST_LOCATION );
-  parent.Insert(1, third);
-
-  DALI_TEST_EQUALS( parent.GetChildCount(), 3u, TEST_LOCATION );
-
-  DALI_TEST_CHECK(parent.GetChildAt(0) == second);
-  DALI_TEST_CHECK(parent.GetChildAt(1) == third);
-  DALI_TEST_CHECK(parent.GetChildAt(2) == first);
-
-  END_TEST;
-}
-
-
 int UtcDaliActorRemoveN(void)
 {
   tet_infoline("Testing Actor::Remove");
@@ -454,24 +439,10 @@ int UtcDaliActorRemoveN(void)
 
   // add child back
   parent.Add(child);
-  // try illegal Remove
-  try
-  {
-    parent.Remove( parent );
-    tet_printf("Assertion test failed - no Exception\n" );
-    tet_result(TET_FAIL);
-  }
-  catch(Dali::DaliException& e)
-  {
-    DALI_TEST_PRINT_ASSERT( e );
-    DALI_TEST_ASSERT(e, "this != &child", TEST_LOCATION);
-    DALI_TEST_EQUALS( parent.GetChildCount(), 1u, TEST_LOCATION );
-  }
-  catch(...)
-  {
-    tet_printf("Assertion test failed - wrong Exception\n" );
-    tet_result(TET_FAIL);
-  }
+  DALI_TEST_EQUALS( parent.GetChildCount(), 1u, TEST_LOCATION );
+  // try Remove self, its a no-op
+  parent.Remove( parent );
+  DALI_TEST_EQUALS( parent.GetChildCount(), 1u, TEST_LOCATION );
 
   // try Remove empty
   try
@@ -704,7 +675,7 @@ int UtcDaliActorSetSize01(void)
   TestApplication application;
 
   Actor actor = Actor::New();
-  Vector3 vector(100.0f, 100.0f, 100.0f);
+  Vector3 vector(100.0f, 100.0f, 0.0f);
 
   DALI_TEST_CHECK(vector != actor.GetCurrentSize());
 
@@ -744,7 +715,7 @@ int UtcDaliActorSetSize03(void)
   TestApplication application;
 
   Actor actor = Actor::New();
-  Vector3 vector(100.0f, 100.0f, 100.0f);
+  Vector3 vector(100.0f, 100.0f, 0.0f);
 
   DALI_TEST_CHECK(vector != actor.GetCurrentSize());
 
@@ -1114,7 +1085,7 @@ int UtcDaliActorInheritPosition(void)
   DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION );
 
-  // first test default, which is INHERIT_PARENT_POSITION
+  // first test default, which is to inherit position
   DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::INHERIT_PARENT_POSITION, TEST_LOCATION );
   application.SendNotification();
   application.Render(0); // should only really call Update as Render is not required to update scene
@@ -1123,37 +1094,78 @@ int UtcDaliActorInheritPosition(void)
   DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition + childPosition, TEST_LOCATION );
 
-  // Change inheritance mode to use parent
-  child.SetPositionInheritanceMode( Dali::USE_PARENT_POSITION );
-  DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::USE_PARENT_POSITION, TEST_LOCATION );
+
+  //Change child position
+  Vector3 childOffset( -1.0f, 1.0f, 0.0f );
+  child.SetPosition( childOffset );
+
+  // Change inheritance mode to not inherit
+  child.SetPositionInheritanceMode( Dali::DONT_INHERIT_POSITION );
+  DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::DONT_INHERIT_POSITION, TEST_LOCATION );
+  application.SendNotification();
+  application.Render(0); // should only really call Update as Render is not required to update scene
+  DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentPosition(), childOffset, TEST_LOCATION );
+  DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), childOffset, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliActorSetInheritPosition(void)
+{
+  tet_infoline("Testing Actor::SetInheritPosition");
+  TestApplication application;
+
+  Actor parent = Actor::New();
+  Vector3 parentPosition( 1.0f, 2.0f, 3.0f );
+  parent.SetPosition( parentPosition );
+  parent.SetParentOrigin( ParentOrigin::CENTER );
+  parent.SetAnchorPoint( AnchorPoint::CENTER );
+  Stage::GetCurrent().Add( parent );
+
+  Actor child = Actor::New();
+  child.SetParentOrigin( ParentOrigin::CENTER );
+  child.SetAnchorPoint( AnchorPoint::CENTER );
+  Vector3 childPosition( 10.0f, 11.0f, 12.0f );
+  child.SetPosition( childPosition );
+  parent.Add( child );
+
+  // The actors should not have a world position yet
+  DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), Vector3::ZERO, TEST_LOCATION );
+
+  // first test default, which is to inherit position
+  DALI_TEST_EQUALS( child.IsPositionInherited(), true, TEST_LOCATION );
   application.SendNotification();
   application.Render(0); // should only really call Update as Render is not required to update scene
   DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentPosition(), childPosition, TEST_LOCATION );
   DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
-  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition + childPosition, TEST_LOCATION );
 
-  // Change inheritance mode to use parent + offset
-  child.SetPositionInheritanceMode( Dali::USE_PARENT_POSITION_PLUS_LOCAL_POSITION );
+  //Change child position
   Vector3 childOffset( -1.0f, 1.0f, 0.0f );
   child.SetPosition( childOffset );
-  DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::USE_PARENT_POSITION_PLUS_LOCAL_POSITION, TEST_LOCATION );
+
+  // Use local position as world postion
+  child.SetInheritPosition( false );
+  DALI_TEST_EQUALS( child.IsPositionInherited(), false, TEST_LOCATION );
   application.SendNotification();
   application.Render(0); // should only really call Update as Render is not required to update scene
   DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentPosition(), childOffset, TEST_LOCATION );
   DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
-  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition + childOffset, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), childOffset, TEST_LOCATION );
 
-  // Change inheritance mode to not inherit
-  child.SetPositionInheritanceMode( Dali::DONT_INHERIT_POSITION );
-  DALI_TEST_EQUALS( child.GetPositionInheritanceMode(), Dali::DONT_INHERIT_POSITION, TEST_LOCATION );
+  //Change back to inherit position from parent
+  child.SetInheritPosition( true );
+  DALI_TEST_EQUALS( child.IsPositionInherited(), true, TEST_LOCATION );
   application.SendNotification();
   application.Render(0); // should only really call Update as Render is not required to update scene
   DALI_TEST_EQUALS( parent.GetCurrentPosition(), parentPosition, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentPosition(), childOffset, TEST_LOCATION );
   DALI_TEST_EQUALS( parent.GetCurrentWorldPosition(), parentPosition, TEST_LOCATION );
-  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), childOffset, TEST_LOCATION );
+  DALI_TEST_EQUALS( child.GetCurrentWorldPosition(), parentPosition + childOffset, TEST_LOCATION );
   END_TEST;
 }
 
@@ -1769,6 +1781,9 @@ int UtcDaliActorScreenToLocal(void)
   float localX;
   float localY;
 
+  application.SendNotification();
+  application.Render();
+
   DALI_TEST_CHECK( actor.ScreenToLocal(localX, localY, 50.0f, 50.0f) );
 
   DALI_TEST_EQUALS(localX, 40.0f, 0.01f, TEST_LOCATION);
@@ -2224,11 +2239,11 @@ int UtcDaliActorSetDrawMode(void)
 
   DALI_TEST_CHECK( DrawMode::NORMAL == a.GetDrawMode() ); // Ensure overlay is off by default
 
-  a.SetDrawMode( DrawMode::OVERLAY );
+  a.SetDrawMode( DrawMode::OVERLAY_2D );
   app.SendNotification();
   app.Render(1);
 
-  DALI_TEST_CHECK( DrawMode::OVERLAY == a.GetDrawMode() ); // Check Actor is overlay
+  DALI_TEST_CHECK( DrawMode::OVERLAY_2D == a.GetDrawMode() ); // Check Actor is overlay
 
   a.SetDrawMode( DrawMode::STENCIL );
   app.SendNotification();
@@ -2261,9 +2276,9 @@ int UtcDaliActorSetDrawModeOverlayRender(void)
   BufferImage imageA = BufferImage::New(16, 16);
   BufferImage imageB = BufferImage::New(16, 16);
   BufferImage imageC = BufferImage::New(16, 16);
-  ImageActor a = ImageActor::New( imageA );
-  ImageActor b = ImageActor::New( imageB );
-  ImageActor c = ImageActor::New( imageC );
+  Actor a = CreateRenderableActor( imageA );
+  Actor b = CreateRenderableActor( imageB );
+  Actor c = CreateRenderableActor( imageC );
 
   // Render a,b,c as regular non-overlays. so order will be:
   // a (8)
@@ -2292,7 +2307,7 @@ int UtcDaliActorSetDrawModeOverlayRender(void)
   // b (9)
   // c (10)
   // a (8)
-  a.SetDrawMode( DrawMode::OVERLAY );
+  a.SetDrawMode( DrawMode::OVERLAY_2D );
   app.GetGlAbstraction().ClearBoundTextures();
 
   app.SendNotification();
@@ -2337,10 +2352,6 @@ int UtcDaliActorGetCurrentWorldMatrix(void)
   child.SetScale( childScale );
   parent.Add( child );
 
-  // The actors should not have a world matrix yet
-  DALI_TEST_EQUALS( parent.GetCurrentWorldMatrix(), Matrix::IDENTITY, 0.001, TEST_LOCATION );
-  DALI_TEST_EQUALS( child.GetCurrentWorldMatrix(), Matrix::IDENTITY, 0.001, TEST_LOCATION );
-
   app.SendNotification();
   app.Render(0);
   app.Render();
@@ -2349,12 +2360,12 @@ int UtcDaliActorGetCurrentWorldMatrix(void)
   Matrix parentMatrix(false);
   parentMatrix.SetTransformComponents(parentScale, parentRotation, parentPosition);
 
-  Vector3 childWorldPosition = parentPosition + parentRotation * parentScale * childPosition;
-  Quaternion childWorldRotation = parentRotation * childRotation;
-  Vector3 childWorldScale = parentScale * childScale;
+  Matrix childMatrix(false);
+  childMatrix.SetTransformComponents( childScale, childRotation, childPosition );
 
+  //Child matrix should be the composition of child and parent
   Matrix childWorldMatrix(false);
-  childWorldMatrix.SetTransformComponents(childWorldScale, childWorldRotation, childWorldPosition);
+  Matrix::Multiply( childWorldMatrix, childMatrix, parentMatrix);
 
   DALI_TEST_EQUALS( parent.GetCurrentWorldMatrix(), parentMatrix, 0.001, TEST_LOCATION );
   DALI_TEST_EQUALS( child.GetCurrentWorldMatrix(), childWorldMatrix, 0.001, TEST_LOCATION );
@@ -2388,10 +2399,6 @@ int UtcDaliActorConstrainedToWorldMatrix(void)
 
   Stage::GetCurrent().Add( child );
 
-  // The actors should not have a world matrix yet
-  DALI_TEST_EQUALS( parent.GetCurrentWorldMatrix(), Matrix::IDENTITY, 0.001, TEST_LOCATION );
-  DALI_TEST_EQUALS( child.GetCurrentWorldMatrix(), Matrix::IDENTITY, 0.001, TEST_LOCATION );
-
   app.SendNotification();
   app.Render(0);
   app.Render();
@@ -2405,6 +2412,40 @@ int UtcDaliActorConstrainedToWorldMatrix(void)
   END_TEST;
 }
 
+int UtcDaliActorConstrainedToOrientation(void)
+{
+  TestApplication app;
+  tet_infoline(" UtcDaliActorConstrainedToOrientation");
+
+  Actor parent = Actor::New();
+  parent.SetParentOrigin(ParentOrigin::CENTER);
+  parent.SetAnchorPoint(AnchorPoint::CENTER);
+  Vector3 parentPosition( 10.0f, 20.0f, 30.0f);
+  Radian rotationAngle(Degree(85.0f));
+  Quaternion parentRotation(rotationAngle, Vector3::ZAXIS);
+  Vector3 parentScale( 1.0f, 2.0f, 3.0f );
+  parent.SetPosition( parentPosition );
+  parent.SetOrientation( parentRotation );
+  parent.SetScale( parentScale );
+  Stage::GetCurrent().Add( parent );
+
+  Actor child = Actor::New();
+  child.SetParentOrigin(ParentOrigin::CENTER);
+  Constraint posConstraint = Constraint::New<Quaternion>( child, Actor::Property::ORIENTATION, OrientationComponentConstraint() );
+  posConstraint.AddSource( Source( parent, Actor::Property::ORIENTATION ) );
+  posConstraint.Apply();
+
+  Stage::GetCurrent().Add( child );
+
+  app.SendNotification();
+  app.Render(0);
+  app.Render();
+  app.SendNotification();
+
+  DALI_TEST_EQUALS( child.GetCurrentOrientation(), parent.GetCurrentOrientation(), 0.001, TEST_LOCATION );
+  END_TEST;
+}
+
 int UtcDaliActorUnparent(void)
 {
   TestApplication app;
@@ -2482,20 +2523,12 @@ int UtcDaliActorSetGetOverlay(void)
   tet_infoline(" UtcDaliActorSetGetOverlay");
 
   Actor parent = Actor::New();
-  parent.SetDrawMode(DrawMode::OVERLAY );
-  DALI_TEST_CHECK( parent.GetDrawMode() == DrawMode::OVERLAY );
+  parent.SetDrawMode(DrawMode::OVERLAY_2D );
+  DALI_TEST_CHECK( parent.GetDrawMode() == DrawMode::OVERLAY_2D );
   END_TEST;
 }
 
 
-// Current Dynamics functions are crashing, so testing these sections are futile
-
-int UtcDaliActorDynamics(void)
-{
-  DALI_TEST_CHECK( true );
-  END_TEST;
-}
-
 int UtcDaliActorCreateDestroy(void)
 {
   Actor* actor = new Actor;
@@ -2515,58 +2548,58 @@ struct PropertyStringIndex
 
 const PropertyStringIndex PROPERTY_TABLE[] =
 {
-  { "parent-origin",            Actor::Property::PARENT_ORIGIN,            Property::VECTOR3     },
-  { "parent-origin-x",          Actor::Property::PARENT_ORIGIN_X,          Property::FLOAT       },
-  { "parent-origin-y",          Actor::Property::PARENT_ORIGIN_Y,          Property::FLOAT       },
-  { "parent-origin-z",          Actor::Property::PARENT_ORIGIN_Z,          Property::FLOAT       },
-  { "anchor-point",             Actor::Property::ANCHOR_POINT,             Property::VECTOR3     },
-  { "anchor-point-x",           Actor::Property::ANCHOR_POINT_X,           Property::FLOAT       },
-  { "anchor-point-y",           Actor::Property::ANCHOR_POINT_Y,           Property::FLOAT       },
-  { "anchor-point-z",           Actor::Property::ANCHOR_POINT_Z,           Property::FLOAT       },
+  { "parentOrigin",             Actor::Property::PARENT_ORIGIN,            Property::VECTOR3     },
+  { "parentOriginX",            Actor::Property::PARENT_ORIGIN_X,          Property::FLOAT       },
+  { "parentOriginY",            Actor::Property::PARENT_ORIGIN_Y,          Property::FLOAT       },
+  { "parentOriginZ",            Actor::Property::PARENT_ORIGIN_Z,          Property::FLOAT       },
+  { "anchorPoint",              Actor::Property::ANCHOR_POINT,             Property::VECTOR3     },
+  { "anchorPointX",             Actor::Property::ANCHOR_POINT_X,           Property::FLOAT       },
+  { "anchorPointY",             Actor::Property::ANCHOR_POINT_Y,           Property::FLOAT       },
+  { "anchorPointZ",             Actor::Property::ANCHOR_POINT_Z,           Property::FLOAT       },
   { "size",                     Actor::Property::SIZE,                     Property::VECTOR3     },
-  { "size-width",               Actor::Property::SIZE_WIDTH,               Property::FLOAT       },
-  { "size-height",              Actor::Property::SIZE_HEIGHT,              Property::FLOAT       },
-  { "size-depth",               Actor::Property::SIZE_DEPTH,               Property::FLOAT       },
+  { "sizeWidth",                Actor::Property::SIZE_WIDTH,               Property::FLOAT       },
+  { "sizeHeight",               Actor::Property::SIZE_HEIGHT,              Property::FLOAT       },
+  { "sizeDepth",                Actor::Property::SIZE_DEPTH,               Property::FLOAT       },
   { "position",                 Actor::Property::POSITION,                 Property::VECTOR3     },
-  { "position-x",               Actor::Property::POSITION_X,               Property::FLOAT       },
-  { "position-y",               Actor::Property::POSITION_Y,               Property::FLOAT       },
-  { "position-z",               Actor::Property::POSITION_Z,               Property::FLOAT       },
-  { "world-position",           Actor::Property::WORLD_POSITION,           Property::VECTOR3     },
-  { "world-position-x",         Actor::Property::WORLD_POSITION_X,         Property::FLOAT       },
-  { "world-position-y",         Actor::Property::WORLD_POSITION_Y,         Property::FLOAT       },
-  { "world-position-z",         Actor::Property::WORLD_POSITION_Z,         Property::FLOAT       },
+  { "positionX",                Actor::Property::POSITION_X,               Property::FLOAT       },
+  { "positionY",                Actor::Property::POSITION_Y,               Property::FLOAT       },
+  { "positionZ",                Actor::Property::POSITION_Z,               Property::FLOAT       },
+  { "worldPosition",            Actor::Property::WORLD_POSITION,           Property::VECTOR3     },
+  { "worldPositionX",           Actor::Property::WORLD_POSITION_X,         Property::FLOAT       },
+  { "worldPositionY",           Actor::Property::WORLD_POSITION_Y,         Property::FLOAT       },
+  { "worldPositionZ",           Actor::Property::WORLD_POSITION_Z,         Property::FLOAT       },
   { "orientation",              Actor::Property::ORIENTATION,              Property::ROTATION    },
-  { "world-orientation",        Actor::Property::WORLD_ORIENTATION,        Property::ROTATION    },
+  { "worldOrientation",         Actor::Property::WORLD_ORIENTATION,        Property::ROTATION    },
   { "scale",                    Actor::Property::SCALE,                    Property::VECTOR3     },
-  { "scale-x",                  Actor::Property::SCALE_X,                  Property::FLOAT       },
-  { "scale-y",                  Actor::Property::SCALE_Y,                  Property::FLOAT       },
-  { "scale-z",                  Actor::Property::SCALE_Z,                  Property::FLOAT       },
-  { "world-scale",              Actor::Property::WORLD_SCALE,              Property::VECTOR3     },
+  { "scaleX",                   Actor::Property::SCALE_X,                  Property::FLOAT       },
+  { "scaleY",                   Actor::Property::SCALE_Y,                  Property::FLOAT       },
+  { "scaleZ",                   Actor::Property::SCALE_Z,                  Property::FLOAT       },
+  { "worldScale",               Actor::Property::WORLD_SCALE,              Property::VECTOR3     },
   { "visible",                  Actor::Property::VISIBLE,                  Property::BOOLEAN     },
   { "color",                    Actor::Property::COLOR,                    Property::VECTOR4     },
-  { "color-red",                Actor::Property::COLOR_RED,                Property::FLOAT       },
-  { "color-green",              Actor::Property::COLOR_GREEN,              Property::FLOAT       },
-  { "color-blue",               Actor::Property::COLOR_BLUE,               Property::FLOAT       },
-  { "color-alpha",              Actor::Property::COLOR_ALPHA,              Property::FLOAT       },
-  { "world-color",              Actor::Property::WORLD_COLOR,              Property::VECTOR4     },
-  { "world-matrix",             Actor::Property::WORLD_MATRIX,             Property::MATRIX      },
+  { "colorRed",                 Actor::Property::COLOR_RED,                Property::FLOAT       },
+  { "colorGreen",               Actor::Property::COLOR_GREEN,              Property::FLOAT       },
+  { "colorBlue",                Actor::Property::COLOR_BLUE,               Property::FLOAT       },
+  { "colorAlpha",               Actor::Property::COLOR_ALPHA,              Property::FLOAT       },
+  { "worldColor",               Actor::Property::WORLD_COLOR,              Property::VECTOR4     },
+  { "worldMatrix",              Actor::Property::WORLD_MATRIX,             Property::MATRIX      },
   { "name",                     Actor::Property::NAME,                     Property::STRING      },
   { "sensitive",                Actor::Property::SENSITIVE,                Property::BOOLEAN     },
-  { "leave-required",           Actor::Property::LEAVE_REQUIRED,           Property::BOOLEAN     },
-  { "inherit-orientation",      Actor::Property::INHERIT_ORIENTATION,      Property::BOOLEAN     },
-  { "inherit-scale",            Actor::Property::INHERIT_SCALE,            Property::BOOLEAN     },
-  { "color-mode",               Actor::Property::COLOR_MODE,               Property::STRING      },
-  { "position-inheritance",     Actor::Property::POSITION_INHERITANCE,     Property::STRING      },
-  { "draw-mode",                Actor::Property::DRAW_MODE,                Property::STRING      },
-  { "size-mode-factor",         Actor::Property::SIZE_MODE_FACTOR,         Property::VECTOR3     },
-  { "width-resize-policy",      Actor::Property::WIDTH_RESIZE_POLICY,      Property::STRING      },
-  { "height-resize-policy",     Actor::Property::HEIGHT_RESIZE_POLICY,     Property::STRING      },
-  { "size-scale-policy",        Actor::Property::SIZE_SCALE_POLICY,        Property::STRING      },
-  { "width-for-height",         Actor::Property::WIDTH_FOR_HEIGHT,         Property::BOOLEAN     },
-  { "height-for-width",         Actor::Property::HEIGHT_FOR_WIDTH,         Property::BOOLEAN     },
+  { "leaveRequired",            Actor::Property::LEAVE_REQUIRED,           Property::BOOLEAN     },
+  { "inheritOrientation",       Actor::Property::INHERIT_ORIENTATION,      Property::BOOLEAN     },
+  { "inheritScale",             Actor::Property::INHERIT_SCALE,            Property::BOOLEAN     },
+  { "colorMode",                Actor::Property::COLOR_MODE,               Property::STRING      },
+  { "positionInheritance",      Actor::Property::POSITION_INHERITANCE,     Property::STRING      },
+  { "drawMode",                 Actor::Property::DRAW_MODE,                Property::STRING      },
+  { "sizeModeFactor",           Actor::Property::SIZE_MODE_FACTOR,         Property::VECTOR3     },
+  { "widthResizePolicy",        Actor::Property::WIDTH_RESIZE_POLICY,      Property::STRING      },
+  { "heightResizePolicy",       Actor::Property::HEIGHT_RESIZE_POLICY,     Property::STRING      },
+  { "sizeScalePolicy",          Actor::Property::SIZE_SCALE_POLICY,        Property::STRING      },
+  { "widthForHeight",           Actor::Property::WIDTH_FOR_HEIGHT,         Property::BOOLEAN     },
+  { "heightForWidth",           Actor::Property::HEIGHT_FOR_WIDTH,         Property::BOOLEAN     },
   { "padding",                  Actor::Property::PADDING,                  Property::VECTOR4     },
-  { "minimum-size",             Actor::Property::MINIMUM_SIZE,             Property::VECTOR2     },
-  { "maximum-size",             Actor::Property::MAXIMUM_SIZE,             Property::VECTOR2     },
+  { "minimumSize",              Actor::Property::MINIMUM_SIZE,             Property::VECTOR2     },
+  { "maximumSize",              Actor::Property::MAXIMUM_SIZE,             Property::VECTOR2     },
 };
 const unsigned int PROPERTY_TABLE_COUNT = sizeof( PROPERTY_TABLE ) / sizeof( PROPERTY_TABLE[0] );
 } // unnamed namespace
@@ -2856,7 +2889,7 @@ int UtcDaliActorOnRelayoutSignal(void)
   TestApplication application;
 
   // Clean test data
-  gOnRelayoutCallBackCalled = 0;
+  gOnRelayoutCallBackCalled = false;
   gActorNamesRelayout.clear();
 
   Actor actor = Actor::New();
@@ -2864,7 +2897,7 @@ int UtcDaliActorOnRelayoutSignal(void)
   actor.OnRelayoutSignal().Connect( OnRelayoutCallback );
 
   // Sanity check
-  DALI_TEST_CHECK( gOnRelayoutCallBackCalled == 0 );
+  DALI_TEST_CHECK( ! gOnRelayoutCallBackCalled );
 
   // Add actor to stage
   Stage::GetCurrent().Add( actor );
@@ -2877,8 +2910,234 @@ int UtcDaliActorOnRelayoutSignal(void)
   application.Render();
 
   // OnRelayout emitted
-  DALI_TEST_EQUALS(  gOnRelayoutCallBackCalled, 1, TEST_LOCATION );
+  DALI_TEST_EQUALS(  gOnRelayoutCallBackCalled, true, TEST_LOCATION );
   DALI_TEST_EQUALS( "actor", gActorNamesRelayout[ 0 ], TEST_LOCATION );
 
   END_TEST;
 }
+
+int UtcDaliActorGetHierachyDepth(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::Actor::GetHierarchyDepth()");
+
+
+  /* Build tree of actors:
+   *
+   *                      Depth
+   *
+   *       A (parent)       1
+   *      / \
+   *     B   C              2`
+   *    / \   \
+   *   D   E   F            3
+   *
+   * GetHierarchyDepth should return 1 for A, 2 for B and C, and 3 for D, E and F.
+   */
+  Stage stage( Stage::GetCurrent() );
+
+  Actor actorA = Actor::New();
+  Actor actorB = Actor::New();
+  Actor actorC = Actor::New();
+  Actor actorD = Actor::New();
+  Actor actorE = Actor::New();
+  Actor actorF = Actor::New();
+
+  //Test that root actor has depth equal 0
+  DALI_TEST_EQUALS( 0, stage.GetRootLayer().GetHierarchyDepth(), TEST_LOCATION );
+
+  //Test actors return depth -1 when not connected to the tree
+  DALI_TEST_EQUALS( -1, actorA.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorB.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorC.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorD.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorE.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorF.GetHierarchyDepth(), TEST_LOCATION );
+
+  //Create the hierarchy
+  stage.Add( actorA );
+  actorA.Add( actorB );
+  actorA.Add( actorC );
+  actorB.Add( actorD );
+  actorB.Add( actorE );
+  actorC.Add( actorF );
+
+  //Test actors return correct depth
+  DALI_TEST_EQUALS( 1, actorA.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 2, actorB.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 2, actorC.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 3, actorD.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 3, actorE.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 3, actorF.GetHierarchyDepth(), TEST_LOCATION );
+
+  //Removing actorB from the hierarchy. actorB, actorD and actorE should now have depth equal -1
+  actorA.Remove( actorB );
+
+  DALI_TEST_EQUALS( -1, actorB.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorD.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorE.GetHierarchyDepth(), TEST_LOCATION );
+
+  //Removing actorA from the stage. All actors should have depth equal -1
+  stage.Remove( actorA );
+
+  DALI_TEST_EQUALS( -1, actorA.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorB.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorC.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorD.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorE.GetHierarchyDepth(), TEST_LOCATION );
+  DALI_TEST_EQUALS( -1, actorF.GetHierarchyDepth(), TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliActorAnchorPointPropertyAsString(void)
+{
+  TestApplication application;
+
+  Actor actor = Actor::New();
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "TOP_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::TOP_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "TOP_CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::TOP_CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "TOP_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::TOP_RIGHT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "CENTER_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::CENTER_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "CENTER_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::CENTER_RIGHT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "BOTTOM_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::BOTTOM_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "BOTTOM_CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::BOTTOM_CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "BOTTOM_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION );
+
+  // Invalid should not change anything
+  actor.SetProperty( Actor::Property::ANCHOR_POINT, "INVALID_ARG" );
+  DALI_TEST_EQUALS( actor.GetCurrentAnchorPoint(), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliActorParentOriginPropertyAsString(void)
+{
+  TestApplication application;
+
+  Actor actor = Actor::New();
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "TOP_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::TOP_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "TOP_CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::TOP_CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "TOP_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::TOP_RIGHT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "CENTER_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::CENTER_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "CENTER_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::CENTER_RIGHT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "BOTTOM_LEFT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::BOTTOM_LEFT, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "BOTTOM_CENTER" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::BOTTOM_CENTER, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "BOTTOM_RIGHT" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION );
+
+  // Invalid should not change anything
+  actor.SetProperty( Actor::Property::PARENT_ORIGIN, "INVALID_ARG" );
+  DALI_TEST_EQUALS( actor.GetCurrentParentOrigin(), ParentOrigin::BOTTOM_RIGHT, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliActorColorModePropertyAsString(void)
+{
+  TestApplication application;
+
+  Actor actor = Actor::New();
+
+  actor.SetProperty( Actor::Property::COLOR_MODE, "USE_OWN_COLOR" );
+  DALI_TEST_EQUALS( actor.GetColorMode(), USE_OWN_COLOR, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::COLOR_MODE, "USE_PARENT_COLOR" );
+  DALI_TEST_EQUALS( actor.GetColorMode(), USE_PARENT_COLOR, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::COLOR_MODE, "USE_OWN_MULTIPLY_PARENT_COLOR" );
+  DALI_TEST_EQUALS( actor.GetColorMode(), USE_OWN_MULTIPLY_PARENT_COLOR, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::COLOR_MODE, "USE_OWN_MULTIPLY_PARENT_ALPHA" );
+  DALI_TEST_EQUALS( actor.GetColorMode(), USE_OWN_MULTIPLY_PARENT_ALPHA, TEST_LOCATION );
+
+  // Invalid should not change anything
+  actor.SetProperty( Actor::Property::COLOR_MODE, "INVALID_ARG" );
+  DALI_TEST_EQUALS( actor.GetColorMode(), USE_OWN_MULTIPLY_PARENT_ALPHA, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliActorPositionInheritancePropertyAsString(void)
+{
+  TestApplication application;
+
+  Actor actor = Actor::New();
+
+  actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "INHERIT_PARENT_POSITION" );
+  DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), INHERIT_PARENT_POSITION, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "USE_PARENT_POSITION" );
+  DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "USE_PARENT_POSITION_PLUS_LOCAL_POSITION" );
+  DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), USE_PARENT_POSITION_PLUS_LOCAL_POSITION, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "DONT_INHERIT_POSITION" );
+  DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), DONT_INHERIT_POSITION, TEST_LOCATION );
+
+  // Invalid should not change anything
+  actor.SetProperty( Actor::Property::POSITION_INHERITANCE, "INVALID_ARG" );
+  DALI_TEST_EQUALS( actor.GetPositionInheritanceMode(), DONT_INHERIT_POSITION, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliActorDrawModePropertyAsString(void)
+{
+  TestApplication application;
+
+  Actor actor = Actor::New();
+
+  actor.SetProperty( Actor::Property::DRAW_MODE, "NORMAL" );
+  DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::NORMAL, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::DRAW_MODE, "OVERLAY_2D" );
+  DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::OVERLAY_2D, TEST_LOCATION );
+
+  actor.SetProperty( Actor::Property::DRAW_MODE, "STENCIL" );
+  DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::STENCIL, TEST_LOCATION );
+
+  // Invalid should not change anything
+  actor.SetProperty( Actor::Property::DRAW_MODE, "INVALID_ARG" );
+  DALI_TEST_EQUALS( actor.GetDrawMode(), DrawMode::STENCIL, TEST_LOCATION );
+
+  END_TEST;
+}