Revert "[Tizen] Appendix log for ttrace + Print keycode and timestamp"
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-CameraActor.cpp
index 0ec0ccb..28159af 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
@@ -161,6 +161,41 @@ int UtcDaliCameraActorAssignmentOperatorN(void)
   END_TEST;
 }
 
+int UtcDaliCameraActorMoveConstructor(void)
+{
+  TestApplication application;
+
+  CameraActor actor = CameraActor::New();
+  DALI_TEST_CHECK(actor);
+
+  int id = actor.GetProperty<int>(Actor::Property::ID);
+
+  CameraActor moved = std::move(actor);
+  DALI_TEST_CHECK(moved);
+  DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
+  DALI_TEST_CHECK(!actor);
+
+  END_TEST;
+}
+
+int UtcDaliCameraActorMoveAssignment(void)
+{
+  TestApplication application;
+
+  CameraActor actor = CameraActor::New();
+  DALI_TEST_CHECK(actor);
+
+  int id = actor.GetProperty<int>(Actor::Property::ID);
+
+  CameraActor moved;
+  moved = std::move(actor);
+  DALI_TEST_CHECK(moved);
+  DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
+  DALI_TEST_CHECK(!actor);
+
+  END_TEST;
+}
+
 int UtcDaliCameraActorNewP(void)
 {
   TestApplication application;
@@ -176,6 +211,21 @@ int UtcDaliCameraActorNewP(void)
   END_TEST;
 }
 
+int UtcDaliCameraActorNew3DCameraP(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::CameraActor::New3DCamera (P)");
+
+  CameraActor actor = CameraActor::New3DCamera();
+
+  DALI_TEST_CHECK(actor);
+
+  actor.Reset();
+
+  DALI_TEST_CHECK(!actor);
+  END_TEST;
+}
+
 int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
 {
   TestApplication application;
@@ -186,10 +236,11 @@ int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
 
   // All the properties should still be the default values
   // Defaults taken from scene-graph-camera.cpp
-  DALI_TEST_EQUALS(800.0f / 480.0f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(480.0f / 800.0f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(45.0f * (Math::PI / 180.0f), actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(3.0f * 800.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(0.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
   DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
 
@@ -200,6 +251,7 @@ int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
   DALI_TEST_EQUALS(0.489957f, actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(4895.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
   DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
 
@@ -211,6 +263,7 @@ int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
   DALI_TEST_EQUALS(0.489957f, actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(4895.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
   DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
 
@@ -275,8 +328,10 @@ int UtcDaliCameraActorSetGetTypeP(void)
   actor.SetType(Dali::Camera::LOOK_AT_TARGET);
   DALI_TEST_EQUALS(actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION);
 
-  DALI_TEST_EQUALS("LOOK_AT_TARGET", actor.GetProperty<std::string>(CameraActor::Property::TYPE), TEST_LOCATION);
-  DALI_TEST_EQUALS("LOOK_AT_TARGET", actor.GetCurrentProperty<std::string>(CameraActor::Property::TYPE), TEST_LOCATION);
+  Dali::Camera::Type cameraType        = actor.GetProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
+  Dali::Camera::Type currentCameraType = actor.GetCurrentProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
+  DALI_TEST_EQUALS(Camera::LOOK_AT_TARGET, cameraType, TEST_LOCATION);
+  DALI_TEST_EQUALS(Camera::LOOK_AT_TARGET, currentCameraType, TEST_LOCATION);
   END_TEST;
 }
 
@@ -815,6 +870,46 @@ int UtcDaliCameraActorGetInvertYAxisN(void)
   END_TEST;
 }
 
+int UtcDaliCameraActorSetGetOthographicSizeP(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::CameraActor Set Orthographic Size (P)");
+
+  CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
+  actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
+
+  // Get default orthographic size by inputed size
+  DALI_TEST_EQUALS(actor.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), static_cast<float>(TestApplication::DEFAULT_SURFACE_HEIGHT) * 0.5f, TEST_LOCATION);
+
+  float value = 0.0f;
+
+  // Set an initial value to confirm a further set changes it.
+  float size = 300.0f;
+  actor.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
+
+  value = 0.0f;
+  DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
+  DALI_TEST_EQUALS(value, size, TEST_LOCATION);
+
+  size = 1600.0f;
+  actor.SetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
+
+  value = 0.0f;
+  DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
+  DALI_TEST_EQUALS(value, size, TEST_LOCATION);
+
+  actor.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
+
+  size = 600.0f;
+  actor.SetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
+
+  value = 0.0f;
+  DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
+  DALI_TEST_EQUALS(value, size, TEST_LOCATION);
+
+  END_TEST;
+}
+
 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
 {
   TestApplication application;
@@ -896,51 +991,57 @@ int UtcDaliCameraActorSetOrthographicProjectionP1(void)
   application.GetScene().Add(actor);
 
   actor.SetOrthographicProjection(Size(1080.0f, 1920.0f));
+
   application.SendNotification();
   application.Render(0);
   application.Render();
   application.SendNotification();
 
   float defaultAspectRatio;
-  float defaultFieldOfView;
   float defaultNearPlaneDistance;
   float defaultFarPlaneDistance;
   actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(defaultAspectRatio);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(defaultFieldOfView);
   actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
   actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
   Vector3 defaultPos = actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
 
-  actor.SetOrthographicProjection(Size(1080.0f, 1920.0f));
+  auto TestOrthographicPlaneDistance = [&](float width, float height, float expectOrthographicSize) {
+    actor.SetOrthographicProjection(Size(width, height));
 
-  application.SendNotification();
-  application.Render(0);
-  application.Render();
-  application.SendNotification();
+    DALI_TEST_EQUALS(expectOrthographicSize, actor.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), TEST_LOCATION);
 
-  float value;
-  actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
-  DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
-  DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
+    application.SendNotification();
+    application.Render(0);
+    application.Render();
+    application.SendNotification();
 
-  actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+    float value;
+    actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
+    DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
 
-  Vector3 pos = actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
-  DALI_TEST_EQUALS(defaultPos.z, pos.z, 0.001f, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(-540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+    actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
+    DALI_TEST_EQUALS(-960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
 
-  DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
+    Vector3 pos = actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
+    DALI_TEST_EQUALS(defaultPos.z, pos.z, 0.001f, TEST_LOCATION);
+
+    DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
+  };
+
+  TestOrthographicPlaneDistance(1080.0f, 1920.0f, 960.0f);
+  // Change projection direction
+  actor.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
+  TestOrthographicPlaneDistance(1080.0f, 1920.0f, 540.0f);
   END_TEST;
 }
 
@@ -965,102 +1066,6 @@ int UtcDaliCameraActorSetOrthographicProjectionN(void)
   END_TEST;
 }
 
-int UtcDaliCameraActorSetOrthographicProjectionP2(void)
-{
-  TestApplication application;
-  tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection (P,2)");
-
-  CameraActor actor = CameraActor::New();
-  DALI_TEST_CHECK(actor);
-
-  float defaultAspectRatio;
-  float defaultFieldOfView;
-  float defaultNearPlaneDistance;
-  float defaultFarPlaneDistance;
-  actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(defaultAspectRatio);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(defaultFieldOfView);
-  actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
-  actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
-
-  // Check setting with specific near and far plane distances.
-  actor.SetOrthographicProjection(-100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f);
-
-  float value;
-  actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
-  DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
-  DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-
-  actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-
-  DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
-
-  END_TEST;
-}
-
-int UtcDaliCameraActorSetOrthographicProjectionP3(void)
-{
-  TestApplication application;
-  tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection (P,3)");
-
-  CameraActor actor = CameraActor::New();
-  DALI_TEST_CHECK(actor);
-
-  float defaultAspectRatio;
-  float defaultFieldOfView;
-  float defaultNearPlaneDistance;
-  float defaultFarPlaneDistance;
-  actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(defaultAspectRatio);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(defaultFieldOfView);
-  actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
-  actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
-
-  actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
-
-  actor.SetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f);
-  actor.SetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f);
-  actor.SetProperty(CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f);
-  actor.SetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f);
-  actor.SetNearClippingPlane(400.0f);
-  actor.SetFarClippingPlane(4000.0f);
-
-  float value;
-  actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
-  DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
-  DALI_TEST_EQUALS(defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(4000.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-
-  actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-100.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(200.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(-300.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
-  DALI_TEST_EQUALS(500.0f, value, FLOAT_EPSILON, TEST_LOCATION);
-
-  DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
-  std::string stringValue;
-  actor.GetProperty(CameraActor::Property::PROJECTION_MODE).Get(stringValue);
-  DALI_TEST_EQUALS(stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION);
-  END_TEST;
-}
-
 int UtcDaliCameraActorSetProjectionModeP(void)
 {
   TestApplication application;
@@ -1085,7 +1090,7 @@ int UtcDaliCameraActorSetProjectionModeP(void)
   DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION);
 
   // Check setting the property.
-  Property::Value setValue = "PERSPECTIVE_PROJECTION";
+  Property::Value setValue = Dali::Camera::PERSPECTIVE_PROJECTION;
   actor.SetProperty(CameraActor::Property::PROJECTION_MODE, setValue);
   DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
   END_TEST;
@@ -1127,9 +1132,8 @@ int UtcDaliCameraActorGetProjectionModeP(void)
   DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
 
   // Check getting the property.
-  std::string stringValue;
-  actor.GetProperty(CameraActor::Property::PROJECTION_MODE).Get(stringValue);
-  DALI_TEST_EQUALS(stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION);
+  Dali::Camera::ProjectionMode projectionMode = actor.GetProperty<Dali::Camera::ProjectionMode>(CameraActor::Property::PROJECTION_MODE);
+  DALI_TEST_EQUALS(projectionMode, Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
   END_TEST;
 }
 
@@ -1188,8 +1192,9 @@ int UtcDaliCameraActorSetCameraOffScene(void)
   DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
   actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
-  actor.GetProperty(CameraActor::Property::PROJECTION_MODE).Get(sValue);
-  DALI_TEST_EQUALS("PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION);
+
+  Dali::Camera::ProjectionMode projectionMode = actor.GetProperty<Dali::Camera::ProjectionMode>(CameraActor::Property::PROJECTION_MODE);
+  DALI_TEST_EQUALS(Dali::Camera::PERSPECTIVE_PROJECTION, projectionMode, TEST_LOCATION);
   bool bValue;
   actor.GetProperty(CameraActor::Property::INVERT_Y_AXIS).Get(bValue);
   DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
@@ -1227,9 +1232,8 @@ int UtcDaliCameraActorSetCameraOnScene(void)
   DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
   DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
 
-  std::string sValue;
-  actor.GetProperty(CameraActor::Property::TYPE).Get(sValue);
-  DALI_TEST_EQUALS(sValue, "LOOK_AT_TARGET", TEST_LOCATION);
+  Dali::Camera::Type cameraType = actor.GetProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
+  DALI_TEST_EQUALS(cameraType, Camera::LOOK_AT_TARGET, TEST_LOCATION);
 
   float value;
   actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
@@ -1258,7 +1262,7 @@ int UtcDaliCameraActorGetCamera(void)
 
   DALI_TEST_EQUALS(actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION);
 
-  actor.SetProperty(CameraActor::Property::TYPE, "FREE_LOOK");
+  actor.SetProperty(CameraActor::Property::TYPE, Camera::FREE_LOOK);
   actor.SetProperty(CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO);
   actor.SetProperty(CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW);
   actor.SetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE);
@@ -1305,15 +1309,29 @@ int UtcDaliCameraActorDefaultProperties(void)
   indices.push_back(CameraActor::Property::PROJECTION_MATRIX);
   indices.push_back(CameraActor::Property::VIEW_MATRIX);
   indices.push_back(CameraActor::Property::INVERT_Y_AXIS);
+  indices.push_back(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE);
+  indices.push_back(DevelCameraActor::Property::PROJECTION_DIRECTION);
 
   DALI_TEST_CHECK(actor.GetPropertyCount() == (Actor::New().GetPropertyCount() + indices.size()));
 
   for(std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter)
   {
     DALI_TEST_EQUALS(*iter, actor.GetPropertyIndex(actor.GetPropertyName(*iter)), TEST_LOCATION);
-    DALI_TEST_CHECK(!actor.IsPropertyAnimatable(*iter));
 
-    if((*iter == CameraActor::Property::PROJECTION_MATRIX) ||
+    if(*iter == CameraActor::Property::FIELD_OF_VIEW || *iter == CameraActor::Property::ASPECT_RATIO || *iter == DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)
+    {
+      DALI_TEST_CHECK(actor.IsPropertyAnimatable(*iter));
+    }
+    else
+    {
+      DALI_TEST_CHECK(!actor.IsPropertyAnimatable(*iter));
+    }
+
+    if((*iter == CameraActor::Property::LEFT_PLANE_DISTANCE) ||
+       (*iter == CameraActor::Property::RIGHT_PLANE_DISTANCE) ||
+       (*iter == CameraActor::Property::TOP_PLANE_DISTANCE) ||
+       (*iter == CameraActor::Property::BOTTOM_PLANE_DISTANCE) ||
+       (*iter == CameraActor::Property::PROJECTION_MATRIX) ||
        (*iter == CameraActor::Property::VIEW_MATRIX))
     {
       DALI_TEST_CHECK(!actor.IsPropertyWritable(*iter));
@@ -1432,20 +1450,22 @@ int UtcDaliCameraActorDefaultPropertiesInherited(void)
       {"keyboardFocusable", Property::BOOLEAN, true, false, false, Dali::Actor::Property::KEYBOARD_FOCUSABLE},
       {"siblingOrder", Property::INTEGER, true, false, false, Dali::DevelActor::Property::SIBLING_ORDER},
       // camera own
-      {"type", Property::STRING, true, false, true, Dali::CameraActor::Property::TYPE},
-      {"projectionMode", Property::STRING, true, false, true, Dali::CameraActor::Property::PROJECTION_MODE},
-      {"fieldOfView", Property::FLOAT, true, false, true, Dali::CameraActor::Property::FIELD_OF_VIEW},
-      {"aspectRatio", Property::FLOAT, true, false, true, Dali::CameraActor::Property::ASPECT_RATIO},
+      {"type", Property::INTEGER, true, false, true, Dali::CameraActor::Property::TYPE},
+      {"projectionMode", Property::INTEGER, true, false, true, Dali::CameraActor::Property::PROJECTION_MODE},
+      {"fieldOfView", Property::FLOAT, true, true, true, Dali::CameraActor::Property::FIELD_OF_VIEW},
+      {"aspectRatio", Property::FLOAT, true, true, true, Dali::CameraActor::Property::ASPECT_RATIO},
       {"nearPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::NEAR_PLANE_DISTANCE},
       {"farPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::FAR_PLANE_DISTANCE},
-      {"leftPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::LEFT_PLANE_DISTANCE},
-      {"rightPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::RIGHT_PLANE_DISTANCE},
-      {"topPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::TOP_PLANE_DISTANCE},
-      {"bottomPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::BOTTOM_PLANE_DISTANCE},
+      {"leftPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::LEFT_PLANE_DISTANCE},
+      {"rightPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::RIGHT_PLANE_DISTANCE},
+      {"topPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::TOP_PLANE_DISTANCE},
+      {"bottomPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::BOTTOM_PLANE_DISTANCE},
       {"targetPosition", Property::VECTOR3, true, false, true, Dali::CameraActor::Property::TARGET_POSITION},
       {"projectionMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::PROJECTION_MATRIX},
       {"viewMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::VIEW_MATRIX},
-      {"invertYAxis", Property::BOOLEAN, true, false, true, Dali::CameraActor::Property::INVERT_Y_AXIS}};
+      {"invertYAxis", Property::BOOLEAN, true, false, true, Dali::CameraActor::Property::INVERT_Y_AXIS},
+      {"orthographicSize", Property::FLOAT, true, true, true, Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE},
+      {"projectionDirection", Property::INTEGER, true, false, true, Dali::DevelCameraActor::Property::PROJECTION_DIRECTION}};
 
   for(uint32_t index = 0; index < (sizeof(CAMERA_DEFAULT_PROPERTY) / sizeof(PropertyDetails)); ++index)
   {
@@ -1536,7 +1556,7 @@ int UtcDaliCameraActorReadProjectionMatrix(void)
   END_TEST;
 }
 
-int UtcDaliCameraActorAnimatedProperties(void)
+int UtcDaliCameraActorAnimatedProperties01(void)
 {
   TestApplication application;
   tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
@@ -1558,6 +1578,529 @@ int UtcDaliCameraActorAnimatedProperties(void)
   END_TEST;
 }
 
+int UtcDaliCameraActorAnimatedProperties02(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
+
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+  Actor       actor  = Actor::New();
+  actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
+  application.GetScene().Add(actor);
+
+  camera.SetFieldOfView(0.1f);
+  camera.SetAspectRatio(0.5f);
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 200.0f);
+
+  Constraint constraintX = Constraint::New<float>(actor, Actor::Property::POSITION_X, EqualToConstraint());
+  constraintX.AddSource(Source(camera, CameraActor::Property::FIELD_OF_VIEW));
+  constraintX.Apply();
+
+  Constraint constraintY = Constraint::New<float>(actor, Actor::Property::POSITION_Y, EqualToConstraint());
+  constraintY.AddSource(Source(camera, CameraActor::Property::ASPECT_RATIO));
+  constraintY.Apply();
+
+  Constraint constraintZ = Constraint::New<float>(actor, Actor::Property::POSITION_Z, EqualToConstraint());
+  constraintZ.AddSource(Source(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
+  constraintZ.Apply();
+
+  application.SendNotification();
+  application.Render();
+
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_X), 0.1f, TEST_LOCATION);
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Y), 0.5f, TEST_LOCATION);
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Z), 200.0f, TEST_LOCATION);
+
+  camera.SetFieldOfView(0.5f);
+  camera.SetAspectRatio(0.2f);
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 100.0f);
+
+  application.SendNotification();
+  application.Render();
+
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_X), 0.5f, TEST_LOCATION);
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Y), 0.2f, TEST_LOCATION);
+  DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Z), 100.0f, TEST_LOCATION);
+  END_TEST;
+}
+
+int UtcDaliCameraActorAnimatedProperties03(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
+
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+
+  // Add dummy actor
+  Actor actor = Actor::New();
+  actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
+  application.GetScene().Add(actor);
+
+  Radian sourceFoV    = Radian(0.6f);
+  float  sourceAspect = 0.7f;
+
+  Radian targetFoV    = Radian(0.1f);
+  float  targetAspect = 1.3f;
+
+  Matrix expectedProjectionMatrix1;
+  Matrix expectedProjectionMatrix2;
+  Matrix expectedProjectionMatrix3;
+
+  // Reduce near-far value for projection matrix epsilon
+  camera.SetNearClippingPlane(1.0f);
+  camera.SetFarClippingPlane(3.0f);
+
+  // Build expect projection matrix
+  camera.SetFieldOfView(sourceFoV.radian);
+  camera.SetAspectRatio(sourceAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
+
+  camera.SetFieldOfView(sourceFoV.radian * 0.6f + targetFoV.radian * 0.4f);
+  camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
+
+  camera.SetFieldOfView(targetFoV.radian);
+  camera.SetAspectRatio(targetAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
+
+  auto TestAnimationProgress = [&]() {
+    Matrix projectionMatrix;
+
+    application.SendNotification();
+    application.Render(0);
+
+    // progress 0.0
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), sourceFoV.radian, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), sourceAspect, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(400);
+
+    // progress 0.4
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), sourceFoV.radian * 0.6f + targetFoV.radian * 0.4f, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), sourceAspect * 0.6f + targetAspect * 0.4f, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(600);
+
+    // progress 1.0
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), targetAspect, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
+
+    // Ensure Animate finished.
+    application.SendNotification();
+    application.Render(16);
+  };
+
+  // AnimateTo
+  {
+    tet_printf("AnimateTo\n");
+    camera.SetProperty(CameraActor::Property::FIELD_OF_VIEW, sourceFoV.radian);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateTo(Property(camera, CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian);
+    animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
+    animation.AnimateTo(Property(camera, Actor::Property::POSITION_X), 0.0f); ///< For line coverage.
+    animation.Play();
+
+    TestAnimationProgress();
+  }
+
+  // AnimateBetween
+  {
+    tet_printf("AnimateBetween\n");
+    Animation animation = Animation::New(1.0f);
+
+    KeyFrames keyFrames1 = KeyFrames::New();
+    keyFrames1.Add(0.0f, sourceFoV.radian);
+    keyFrames1.Add(1.0f, targetFoV.radian);
+
+    KeyFrames keyFrames2 = KeyFrames::New();
+    keyFrames2.Add(0.0f, sourceAspect);
+    keyFrames2.Add(1.0f, targetAspect);
+
+    animation.AnimateBetween(Property(camera, CameraActor::Property::FIELD_OF_VIEW), keyFrames1);
+    animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
+
+    animation.Play();
+
+    TestAnimationProgress();
+  }
+
+  // AnimateBy
+  {
+    tet_printf("AnimateBy\n");
+    camera.SetProperty(CameraActor::Property::FIELD_OF_VIEW, sourceFoV.radian);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateBy(Property(camera, CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian - sourceFoV.radian);
+    animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
+    animation.Play();
+
+    TestAnimationProgress();
+  }
+
+  END_TEST;
+}
+
+int UtcDaliCameraActorAnimatedProperties04(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
+
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+
+  // Make camera as orthographic mode
+  camera.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
+
+  // Add dummy actor
+  Actor actor = Actor::New();
+  actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
+  application.GetScene().Add(actor);
+
+  float sourceOrthographic = 2.0f;
+  float sourceAspect       = 0.7f;
+
+  float targetOrthographic = 4.0f;
+  float targetAspect       = 1.3f;
+
+  Matrix expectedProjectionMatrix1;
+  Matrix expectedProjectionMatrix2;
+  Matrix expectedProjectionMatrix3;
+
+  // Reduce near-far value for projection matrix epsilon
+  camera.SetNearClippingPlane(1.0f);
+  camera.SetFarClippingPlane(3.0f);
+
+  // Build expect projection matrix
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+  camera.SetAspectRatio(sourceAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
+
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic * 0.6f + targetOrthographic * 0.4f);
+  camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
+
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, targetOrthographic);
+  camera.SetAspectRatio(targetAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
+
+  auto TestAnimationProgress = [&]() {
+    Matrix projectionMatrix;
+
+    application.SendNotification();
+    application.Render(0);
+
+    float expectOrthographic;
+    float expectAspect;
+    float expectLeft;
+    float expectRight;
+    float expectTop;
+    float expectBottom;
+
+    auto UpdateExpectPlaneDistance = [&]() {
+      bool isVertical = camera.GetProperty<int>(DevelCameraActor::Property::PROJECTION_DIRECTION) == static_cast<int>(DevelCameraActor::ProjectionDirection::VERTICAL);
+      expectLeft      = -(isVertical ? expectOrthographic * expectAspect : expectOrthographic);
+      expectRight     = (isVertical ? expectOrthographic * expectAspect : expectOrthographic);
+      expectTop       = (isVertical ? expectOrthographic : expectOrthographic / expectAspect);
+      expectBottom    = -(isVertical ? expectOrthographic : expectOrthographic / expectAspect);
+    };
+
+    // progress 0.0
+    expectOrthographic = sourceOrthographic;
+    expectAspect       = sourceAspect;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(400);
+
+    // progress 0.4
+    expectOrthographic = sourceOrthographic * 0.6f + targetOrthographic * 0.4f;
+    expectAspect       = sourceAspect * 0.6f + targetAspect * 0.4f;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(600);
+
+    // progress 1.0
+    expectOrthographic = targetOrthographic;
+    expectAspect       = targetAspect;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
+
+    // Ensure Animate finished.
+    application.SendNotification();
+    application.Render(16);
+  };
+
+  // AnimateTo
+  {
+    tet_printf("AnimateTo - vertical\n");
+    camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateTo(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic);
+    animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  // AnimateBetween
+  {
+    tet_printf("AnimateBetween - vertical\n");
+    Animation animation = Animation::New(1.0f);
+
+    KeyFrames keyFrames1 = KeyFrames::New();
+    keyFrames1.Add(0.0f, sourceOrthographic);
+    keyFrames1.Add(1.0f, targetOrthographic);
+
+    KeyFrames keyFrames2 = KeyFrames::New();
+    keyFrames2.Add(0.0f, sourceAspect);
+    keyFrames2.Add(1.0f, targetAspect);
+
+    animation.AnimateBetween(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), keyFrames1);
+    animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
+
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  // AnimateBy
+  {
+    tet_printf("AnimateBy - vertical\n");
+    camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateBy(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic - sourceOrthographic);
+    animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  END_TEST;
+}
+
+int UtcDaliCameraActorAnimatedProperties05(void)
+{
+  TestApplication application;
+  tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
+
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+
+  // Make camera as orthographic mode and horizontal
+  camera.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
+  camera.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
+
+  // Add dummy actor
+  Actor actor = Actor::New();
+  actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
+  actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
+  application.GetScene().Add(actor);
+
+  float sourceOrthographic = 2.0f;
+  float sourceAspect       = 0.7f;
+
+  float targetOrthographic = 4.0f;
+  float targetAspect       = 1.3f;
+
+  Matrix expectedProjectionMatrix1;
+  Matrix expectedProjectionMatrix2;
+  Matrix expectedProjectionMatrix3;
+
+  // Reduce near-far value for projection matrix epsilon
+  camera.SetNearClippingPlane(1.0f);
+  camera.SetFarClippingPlane(3.0f);
+
+  // Build expect projection matrix
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+  camera.SetAspectRatio(sourceAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
+
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic * 0.6f + targetOrthographic * 0.4f);
+  camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
+
+  camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, targetOrthographic);
+  camera.SetAspectRatio(targetAspect);
+  application.SendNotification();
+  application.Render();
+  camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
+
+  auto TestAnimationProgress = [&]() {
+    Matrix projectionMatrix;
+
+    application.SendNotification();
+    application.Render(0);
+
+    float expectOrthographic;
+    float expectAspect;
+    float expectLeft;
+    float expectRight;
+    float expectTop;
+    float expectBottom;
+
+    auto UpdateExpectPlaneDistance = [&]() {
+      bool isVertical = camera.GetProperty<int>(DevelCameraActor::Property::PROJECTION_DIRECTION) == static_cast<int>(DevelCameraActor::ProjectionDirection::VERTICAL);
+      expectLeft      = -(isVertical ? expectOrthographic * expectAspect : expectOrthographic);
+      expectRight     = (isVertical ? expectOrthographic * expectAspect : expectOrthographic);
+      expectTop       = (isVertical ? expectOrthographic : expectOrthographic / expectAspect);
+      expectBottom    = -(isVertical ? expectOrthographic : expectOrthographic / expectAspect);
+    };
+
+    // progress 0.0
+    expectOrthographic = sourceOrthographic;
+    expectAspect       = sourceAspect;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(400);
+
+    // progress 0.4
+    expectOrthographic = sourceOrthographic * 0.6f + targetOrthographic * 0.4f;
+    expectAspect       = sourceAspect * 0.6f + targetAspect * 0.4f;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
+
+    application.SendNotification();
+    application.Render(600);
+
+    // progress 1.0
+    expectOrthographic = targetOrthographic;
+    expectAspect       = targetAspect;
+    UpdateExpectPlaneDistance();
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
+    DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
+
+    camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
+    DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
+
+    // Ensure Animate finished.
+    application.SendNotification();
+    application.Render(16);
+  };
+
+  // AnimateTo
+  {
+    tet_printf("AnimateTo - horizontal\n");
+    camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateTo(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic);
+    animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  // AnimateBetween
+  {
+    tet_printf("AnimateBetween - horizontal\n");
+    Animation animation = Animation::New(1.0f);
+
+    KeyFrames keyFrames1 = KeyFrames::New();
+    keyFrames1.Add(0.0f, sourceOrthographic);
+    keyFrames1.Add(1.0f, targetOrthographic);
+
+    KeyFrames keyFrames2 = KeyFrames::New();
+    keyFrames2.Add(0.0f, sourceAspect);
+    keyFrames2.Add(1.0f, targetAspect);
+
+    animation.AnimateBetween(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), keyFrames1);
+    animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
+
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  // AnimateBy
+  {
+    tet_printf("AnimateBy - horizontal\n");
+    camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
+    camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
+    Animation animation = Animation::New(1.0f);
+    animation.AnimateBy(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic - sourceOrthographic);
+    animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
+    animation.Play();
+    TestAnimationProgress();
+  }
+
+  END_TEST;
+}
+
 int UtcDaliCameraActorPropertyIndices(void)
 {
   TestApplication application;
@@ -1796,6 +2339,156 @@ int UtcDaliCameraActorReflectionByPlane(void)
   matrixAfter.GetTransformComponents(position, rotation, scale);
   DALI_TEST_EQUALS(reflected, rotation, 0.01f, TEST_LOCATION);
 
+  // Test Orthographic camera
+  freeLookCameraActor.SetProjectionMode(Dali::Camera::ProjectionMode::ORTHOGRAPHIC_PROJECTION);
+
+  // Make sure the recalculation will take place
+  freeLookCameraActor.SetProperty(Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4(0.0f, 1.0f, 0.0f, 0.0f));
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  // Nothing should change despite of different camera type
+  matrixAfter.GetTransformComponents(position, rotation, scale);
+  DALI_TEST_EQUALS(reflected, rotation, 0.01f, TEST_LOCATION);
+
+  // Test Orthographic camera + Look at target
+  freeLookCameraActor.SetType(Camera::LOOK_AT_TARGET);
+  freeLookCameraActor.SetTargetPosition(targetPosition);
+
+  // Make sure the recalculation will take place
+  freeLookCameraActor.SetProperty(Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4(0.0f, 1.0f, 0.0f, 0.0f));
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  // Nothing should change despite of different camera type
+  matrixAfter.GetTransformComponents(position, rotation, scale);
+  DALI_TEST_EQUALS(reflected, rotation, 0.01f, TEST_LOCATION);
+
+  END_TEST;
+}
+
+int UtcDaliCameraActorProjectionDirection(void)
+{
+  TestApplication application;
+
+  Integration::Scene stage     = application.GetScene();
+  Vector2            stageSize = stage.GetSize();
+
+  CameraActor defaultCameraActor = stage.GetRenderTaskList().GetTask(0).GetCameraActor();
+  CameraActor expectCameraActor1 = CameraActor::New(stageSize);
+  CameraActor expectCameraActor2 = CameraActor::New(stageSize);
+  CameraActor expectCameraActor3 = CameraActor::New(stageSize);
+
+  float fieldOfView = defaultCameraActor.GetFieldOfView();
+  float aspectRatio = defaultCameraActor.GetAspectRatio();
+
+  // Calculate expect camera 1's fov.
+  float anotherFieldOfView = 2.0f * std::atan(std::tan(fieldOfView * 0.5f) / aspectRatio);
+  expectCameraActor1.SetFieldOfView(anotherFieldOfView);
+
+  // Calculate expect camera 2's fov and aspect ratio.
+  float anotherFieldOfView2 = 2.0f * std::atan(std::tan(fieldOfView * 0.5f) * aspectRatio);
+  float anotherAspectRatio  = 1.0f / aspectRatio;
+  expectCameraActor2.SetFieldOfView(anotherFieldOfView2);
+  expectCameraActor2.SetAspectRatio(anotherAspectRatio);
+
+  // Calculate expect camera 3's aspect raio
+  expectCameraActor3.SetAspectRatio(anotherAspectRatio);
+
+  stage.Add(expectCameraActor1);
+  stage.Add(expectCameraActor2);
+  stage.Add(expectCameraActor3);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  // Test default projection direction is VERTICAL
+  DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::VERTICAL), TEST_LOCATION);
+
+  Matrix matrixBefore, matrixAfter;
+  Matrix matrixExpect1, matrixExpect2, matrixExpect3;
+
+  defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixBefore);
+  expectCameraActor1.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect1);
+  expectCameraActor2.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect2);
+  expectCameraActor3.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect3);
+
+  tet_printf("Check ProjectionDirection::HORIZONTAL\n");
+
+  defaultCameraActor.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
+  DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL), TEST_LOCATION);
+  // NOTE : ProjectionDirection doesn't change camera actor's FieldOfView and AspectRatio value.)
+  DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
+  DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), aspectRatio, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
+
+  // Check camera's ProjectionMatrix same as expect camera 1's ProjectionMatrix.
+  DALI_TEST_EQUALS(matrixAfter, matrixExpect1, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
+  tet_printf("Check ProjectionDirection::HORIZONTAL + Change aspect ratio\n");
+
+  defaultCameraActor.SetAspectRatio(anotherAspectRatio);
+  DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), anotherAspectRatio, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
+
+  // Check camera's ProjectionMatrix same as expect camera 2's ProjectionMatrix.
+  DALI_TEST_EQUALS(matrixAfter, matrixExpect2, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
+  tet_printf("Check ProjectionDirection::HORIZONTAL + Change aspect ratio + Change fov\n");
+
+  defaultCameraActor.SetFieldOfView(anotherFieldOfView);
+  DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), anotherFieldOfView, TEST_LOCATION);
+  DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), anotherAspectRatio, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
+
+  // Check camera's ProjectionMatrix same as expect camera 3's ProjectionMatrix.
+  DALI_TEST_EQUALS(matrixAfter, matrixExpect3, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
+  tet_printf("Check ProjectionDirection::VERTICAL, the original camera\n");
+
+  defaultCameraActor.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
+  defaultCameraActor.SetFieldOfView(fieldOfView);
+  defaultCameraActor.SetAspectRatio(aspectRatio);
+  DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::VERTICAL), TEST_LOCATION);
+  DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
+  DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), aspectRatio, TEST_LOCATION);
+
+  application.SendNotification();
+  application.Render();
+  application.SendNotification();
+  application.Render();
+
+  defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
+
+  // Check vertical camera's ProjectionMatrix same as original ProjectionMatrix.
+  DALI_TEST_EQUALS(matrixAfter, matrixBefore, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
+
   END_TEST;
 }
 
@@ -2015,28 +2708,6 @@ int UtcDaliCameraActorSetPerspectiveProjectionNegative(void)
   END_TEST;
 }
 
-int UtcDaliCameraActorSetOrthographicProjectionNegative01(void)
-{
-  TestApplication   application;
-  Dali::CameraActor instance;
-  try
-  {
-    float arg1(0.0f);
-    float arg2(0.0f);
-    float arg3(0.0f);
-    float arg4(0.0f);
-    float arg5(0.0f);
-    float arg6(0.0f);
-    instance.SetOrthographicProjection(arg1, arg2, arg3, arg4, arg5, arg6);
-    DALI_TEST_CHECK(false); // Should not get here
-  }
-  catch(...)
-  {
-    DALI_TEST_CHECK(true); // We expect an assert
-  }
-  END_TEST;
-}
-
 int UtcDaliCameraActorSetOrthographicProjectionNegative02(void)
 {
   TestApplication   application;
@@ -2134,7 +2805,7 @@ int UtcDaliCameraActorNewDefaultOrthogonalProjection01(void)
   // Check that the properties match to that screen size
   float value;
   actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
-  DALI_TEST_EQUALS(800.0f / 480.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(480.0f / 800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
 
   actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
   DALI_TEST_EQUALS(800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
@@ -2174,7 +2845,7 @@ int UtcDaliCameraActorNewDefaultOrthogonalProjection02(void)
   // Check that the properties match to that screen size
   float value;
   actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
-  DALI_TEST_EQUALS(800.0f / 480.0f, value, FLOAT_EPSILON, TEST_LOCATION);
+  DALI_TEST_EQUALS(480.0f / 800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
 
   actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
   DALI_TEST_EQUALS(800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
@@ -2233,3 +2904,75 @@ int UtcDaliCameraActorCulling01(void)
 
   END_TEST;
 }
+
+int UtcDaliCameraActorSetProperty(void)
+{
+  TestApplication application;
+
+  tet_infoline("Test the CameraActor reset properties when On Scene, if user set property explicitly.");
+
+  CameraActor camera = CameraActor::New();
+  camera.SetFieldOfView(1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetFieldOfView(), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetAspectRatio(1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetAspectRatio(), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetNearClippingPlane(1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetNearClippingPlane(), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetFarClippingPlane(1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetFarClippingPlane(), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetProperty(Dali::Actor::Property::POSITION, Vector3(100.0f, 100.0f, 100.0f));
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(Vector3(100.0f, 100.0f, 100.0f), camera.GetProperty<Vector3>(Dali::Actor::Property::POSITION), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetProperty(Dali::Actor::Property::POSITION_X, 1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_X), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetProperty(Dali::Actor::Property::POSITION_Y, 1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_Y), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetProperty(Dali::Actor::Property::POSITION_Z, 1.0f);
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_Z), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  camera = CameraActor::New();
+  camera.SetProperty(Dali::Actor::Property::ORIENTATION, Quaternion(Radian(Degree(90.0f)), Vector3::XAXIS));
+  application.GetScene().Add(camera);
+  DALI_TEST_EQUALS(Quaternion(Radian(Degree(90.0f)), Vector3::XAXIS), camera.GetProperty<Quaternion>(Dali::Actor::Property::ORIENTATION), TEST_LOCATION);
+  camera.Unparent();
+  camera.Reset();
+
+  END_TEST;
+}