[ATSPI] Add CalculateScreenExtents function
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-PropertyValue.cpp
index 31274d9..712f60f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 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.
@@ -26,89 +26,6 @@ using namespace Dali;
 namespace
 {
 
-void CheckTypeName(const Property::Type& type)
-{
-  switch(type)
-  {
-    case Property::NONE:
-    {
-      DALI_TEST_CHECK( "NONE" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::BOOLEAN:
-    {
-      DALI_TEST_CHECK( "BOOLEAN" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::FLOAT:
-    {
-      DALI_TEST_CHECK( "FLOAT" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::INTEGER:
-    {
-      DALI_TEST_CHECK( "INTEGER" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::UNSIGNED_INTEGER:
-    {
-      DALI_TEST_CHECK( "UNSIGNED_INTEGER" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::VECTOR2:
-    {
-      DALI_TEST_CHECK( "VECTOR2" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::VECTOR3:
-    {
-      DALI_TEST_CHECK( "VECTOR3" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::VECTOR4:
-    {
-      DALI_TEST_CHECK( "VECTOR4" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::MATRIX3:
-    {
-      DALI_TEST_CHECK( "MATRIX3" == std::string(PropertyTypes::GetName( type  ) ) );
-      break;
-    }
-    case Property::MATRIX:
-    {
-      DALI_TEST_CHECK( "MATRIX" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::RECTANGLE:
-    {
-      DALI_TEST_CHECK( "RECTANGLE" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::ROTATION:
-    {
-      DALI_TEST_CHECK( "ROTATION" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::STRING:
-    {
-      DALI_TEST_CHECK( "STRING" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::ARRAY:
-    {
-      DALI_TEST_CHECK( "ARRAY" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-    case Property::MAP:
-    {
-      DALI_TEST_CHECK( "MAP" == std::string(PropertyTypes::GetName( type ) ) );
-      break;
-    }
-  } // switch(type)
-
-} // CheckTypeName
-
 template <typename T>
 struct CheckCopyCtorP
 {
@@ -210,26 +127,6 @@ int UtcDaliPropertyValueConstructorsIntTypeP(void)
   END_TEST;
 }
 
-int UtcDaliPropertyValueConstructorsUnsignedIntP(void)
-{
-  Property::Value value(1u);
-
-  DALI_TEST_CHECK( value.GetType() == Property::UNSIGNED_INTEGER );
-  DALI_TEST_CHECK( value.Get<unsigned int>() == 1u );
-
-  END_TEST;
-}
-
-int UtcDaliPropertyValueConstructorsUnsignedIntTypeP(void)
-{
-  Property::Value value( Property::UNSIGNED_INTEGER );
-
-  DALI_TEST_CHECK( value.GetType() == Property::UNSIGNED_INTEGER );
-  DALI_TEST_CHECK( value.Get<unsigned int>() == 0u );
-
-  END_TEST;
-}
-
 int UtcDaliPropertyValueConstructorsVector2P(void)
 {
   Vector2 v(1,1);
@@ -372,11 +269,11 @@ int UtcDaliPropertyValueConstructorsAngleAxisP(void)
 
 int UtcDaliPropertyValueConstructorsQuaternionP(void)
 {
-  Quaternion v( Vector4(1.0,1.0,1.0,1.0) );
+  Quaternion v( Radian( Math::PI ), Vector3::ZAXIS );
   Property::Value value(v);
 
   DALI_TEST_CHECK( value.GetType() == Property::ROTATION );
-  DALI_TEST_CHECK( value.Get<Quaternion>() == v );
+  DALI_TEST_EQUALS( v, value.Get<Quaternion>(), 0.001, TEST_LOCATION);
 
   END_TEST;
 }
@@ -480,6 +377,26 @@ int UtcDaliPropertyValueConstructorsMapTypeP(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueConstructorsExtentsTypeP(void)
+{
+  Property::Value value( Property::EXTENTS );
+
+  DALI_TEST_CHECK( value.GetType() == Property::EXTENTS );
+  DALI_TEST_CHECK( value.Get<Extents>() == Extents( 0u, 0u, 0u, 0u ) );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyValueConstructorsExtentsType2P(void)
+{
+  Property::Value value( Property::VECTOR4 );
+
+  DALI_TEST_CHECK( value.GetType() == Property::VECTOR4 );
+  DALI_TEST_CHECK( value.Get<Extents>() == Extents( 0u, 0u, 0u, 0u ) );
+
+  END_TEST;
+}
+
 int UtcDaliPropertyValueCopyConstructorP(void)
 {
   Property::Value value;
@@ -508,12 +425,6 @@ int UtcDaliPropertyValueCopyConstructorIntP(void)
   END_TEST;
 }
 
-int UtcDaliPropertyValueCopyConstructorUnsignedIntP(void)
-{
-  CheckCopyCtorP<unsigned int> check(1u);
-  END_TEST;
-}
-
 int UtcDaliPropertyValueCopyConstructoVector2P(void)
 {
   CheckCopyCtorP<Vector2> check( Vector2(2,1) );
@@ -595,6 +506,61 @@ int UtcDaliPropertyValueCopyConstructorMapP(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueMoveConstructor(void)
+{
+  Property::Value value1( Vector4::ONE );
+  DALI_TEST_EQUALS( Property::VECTOR4, value1.GetType(), TEST_LOCATION );
+
+  Vector4 valueVector;
+  DALI_TEST_EQUALS( true, value1.Get( valueVector ), TEST_LOCATION ); // Able to convert
+  DALI_TEST_EQUALS( valueVector, Vector4::ONE, TEST_LOCATION );
+
+  Property::Value value2( std::move( value1 ) );
+  DALI_TEST_EQUALS( Property::NONE, value1.GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( false, value1.Get( valueVector ), TEST_LOCATION ); // Unable to convert, but no crash either
+  DALI_TEST_EQUALS( Property::VECTOR4, value2.GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value2.Get( valueVector ), TEST_LOCATION ); // Able to convert
+  DALI_TEST_EQUALS( valueVector, Vector4::ONE, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyValueMoveConstructorArray(void)
+{
+  Property::Array array;
+  array.PushBack( 1 );
+  array.PushBack( 2 );
+  array.PushBack( 3 );
+  DALI_TEST_EQUALS( 3u, array.Size(), TEST_LOCATION );
+
+  Property::Value value( std::move( array ) );
+  DALI_TEST_ASSERTION( array.Size(), "Cannot use an object previously used as an r-value" ); // Our local variable should become invalid
+
+  Property::Array* arrayPtr = value.GetArray();
+  DALI_TEST_CHECK( arrayPtr );
+  DALI_TEST_EQUALS( 3u, arrayPtr->Size(), TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyValueMoveConstructorMap(void)
+{
+  Property::Map map;
+  map[ 1 ] = 1;
+  map[ 2 ] = 2;
+  map[ 3 ] = 3;
+  DALI_TEST_EQUALS( 3u, map.Count(), TEST_LOCATION );
+
+  Property::Value value( std::move( map ) );
+  DALI_TEST_ASSERTION( map.Count(), "Cannot use an object previously used as an r-value" ); // Our local variable should become invalid
+
+  Property::Map* mapPtr = value.GetMap();
+  DALI_TEST_CHECK( mapPtr );
+  DALI_TEST_EQUALS( 3u, mapPtr->Count(), TEST_LOCATION );
+
+  END_TEST;
+}
+
 int UtcDaliPropertyValueAssignmentSelfP(void)
 {
   Property::Value value;
@@ -639,17 +605,6 @@ int UtcDaliPropertyValueAssignmentOperatorIntP(void)
   END_TEST;
 }
 
-int UtcDaliPropertyValueAssignmentOperatorUnsignedIntP(void)
-{
-  Property::Value value;
-  value = Property::Value(10U); // type mismatch
-  DALI_TEST_CHECK( 10U == value.Get<unsigned int>() );
-  Property::Value copy( 123U);
-  copy = value; // type match
-  DALI_TEST_CHECK( 10U == copy.Get<unsigned int>() );
-  END_TEST;
-}
-
 int UtcDaliPropertyValueAssignmentOperatorFloatP(void)
 {
   Property::Value value;
@@ -734,11 +689,14 @@ int UtcDaliPropertyValueAssignmentOperatorRectP(void)
 int UtcDaliPropertyValueAssignmentOperatorQuaternionP(void)
 {
   Property::Value value;
-  value = Property::Value( Quaternion(1,1,1,1) ); // mismatch
-  DALI_TEST_CHECK( Quaternion(1,1,1,1) == value.Get<Quaternion>() );
+  Quaternion result( Radian( Math::PI_2 ), Vector3::YAXIS );
+  value = Property::Value( result );
+
+  DALI_TEST_EQUALS( value.Get<Quaternion>(), result, 0.001, TEST_LOCATION );
+
   Property::Value copy( Property::ROTATION );
   copy = value; // match
-  DALI_TEST_CHECK( Quaternion(1,1,1,1) == copy.Get<Quaternion>() );
+  DALI_TEST_EQUALS( copy.Get<Quaternion>(), result, 0.001, TEST_LOCATION );
   END_TEST;
 }
 
@@ -796,6 +754,51 @@ int UtcDaliPropertyValueAssignmentOperatorMapP(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueAssignmentOperatorExtentsP(void)
+{
+  Property::Value value;
+  value = Property::Value( Extents( 4, 3, 2, 1 ) ); // mismatch
+  DALI_TEST_CHECK( Extents( 4, 3, 2, 1 ) == value.Get<Extents>() );
+  Property::Value copy( Property::EXTENTS );
+  copy = value; // match
+  Extents copyExtents;
+  copy.Get(copyExtents);
+  DALI_TEST_CHECK( Extents( 4, 3, 2, 1 ) == copyExtents );
+  END_TEST;
+}
+
+int UtcDaliPropertyValueMoveAssignmentOperator(void)
+{
+  Property::Value value1( Vector4::ONE );
+  DALI_TEST_EQUALS( Property::VECTOR4, value1.GetType(), TEST_LOCATION );
+
+  Vector4 valueVector;
+  DALI_TEST_EQUALS( true, value1.Get( valueVector ), TEST_LOCATION ); // Able to convert
+  DALI_TEST_EQUALS( valueVector, Vector4::ONE, TEST_LOCATION );
+
+  Property::Value value2;
+  value2 = std::move( value1 );
+  DALI_TEST_EQUALS( Property::NONE, value1.GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( false, value1.Get( valueVector ), TEST_LOCATION ); // Unable to convert, but no crash either
+  DALI_TEST_EQUALS( Property::VECTOR4, value2.GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value2.Get( valueVector ), TEST_LOCATION ); // Able to convert
+  DALI_TEST_EQUALS( valueVector, Vector4::ONE, TEST_LOCATION );
+
+  // Change to another value type
+  value2 = std::move( Property::Value( 1.0f ) );
+  DALI_TEST_EQUALS( false, value2.Get( valueVector ), TEST_LOCATION ); // Should not be able to convert to a Vector4 now
+  float valueFloat;
+  DALI_TEST_EQUALS( true, value2.Get( valueFloat ), TEST_LOCATION ); // Should be able to convert to a float now
+  DALI_TEST_EQUALS( valueFloat, 1.0f, TEST_LOCATION );
+
+  // Ensure self assignment doesn't do anything silly
+  value2 = std::move( value2 );
+  DALI_TEST_EQUALS( true, value2.Get( valueFloat ), TEST_LOCATION );
+  DALI_TEST_EQUALS( valueFloat, 1.0f, TEST_LOCATION );
+
+  END_TEST;
+}
+
 int UtcDaliPropertyValueGetTypeP(void)
 {
   Property::Value value;
@@ -882,29 +885,6 @@ int UtcDaliPropertyValueGetIntN(void)
   END_TEST;
 }
 
-int UtcDaliPropertyValueGetUnsignedIntP(void)
-{
-  Property::Value value(123u);
-  unsigned int result( 10u );
-  DALI_TEST_EQUALS( 123u, value.Get<unsigned int>(), TEST_LOCATION );
-  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 123u, result, TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliPropertyValueGetUnsignedIntN(void)
-{
-  Property::Value value;
-  unsigned int result( 10u );
-  DALI_TEST_EQUALS( 0u, value.Get<unsigned int>(), TEST_LOCATION );
-  DALI_TEST_EQUALS( false, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 10u, result, TEST_LOCATION );
-  Property::Value value2("");
-  DALI_TEST_EQUALS( false, value2.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 10u, result, TEST_LOCATION ); // result is not modified
-  END_TEST;
-}
-
 int UtcDaliPropertyValueGetRectP(void)
 {
   Property::Value value( Rect<int>(1,2,3,4) );
@@ -938,6 +918,26 @@ int UtcDaliPropertyValueGetVector2P(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueGetVector2fromVector3P(void)
+{
+  Property::Value value( Vector3(1.f,2.f,3.f) );
+  Vector2 result;
+  DALI_TEST_EQUALS( Vector2(1.0f,2.0f), value.Get< Vector2 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector2(1.0f,2.0f), result, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliPropertyValueGetVector2fromVector4P(void)
+{
+  Property::Value value( Vector4(1.f,2.f,3.f,4.f) );
+  Vector2 result;
+  DALI_TEST_EQUALS( Vector2(1.0f,2.0f), value.Get< Vector2 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector2(1.0f,2.0f), result, TEST_LOCATION );
+  END_TEST;
+}
+
 int UtcDaliPropertyValueGetVector2N(void)
 {
   Property::Value value;
@@ -961,6 +961,26 @@ int UtcDaliPropertyValueGetVector3P(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueGetVector3FromVector2P(void)
+{
+  Property::Value value( Vector2(1.0f,2.0f) );
+  Vector3 result(99.f,88.f,77.f);
+  DALI_TEST_EQUALS( Vector3(1.0f,2.0f,0.f), value.Get< Vector3 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector3(1.0f,2.0f,0.f), result, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliPropertyValueGetVector3FromVector4P(void)
+{
+  Property::Value value( Vector4(4.f,3.f,2.f,1.f) );
+  Vector3 result;
+  DALI_TEST_EQUALS( Vector3(4.f,3.f,2.f), value.Get< Vector3 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector3(4.f,3.f,2.f), result, TEST_LOCATION );
+  END_TEST;
+}
+
 int UtcDaliPropertyValueGetVector3N(void)
 {
   Property::Value value;
@@ -984,6 +1004,26 @@ int UtcDaliPropertyValueGetVector4P(void)
   END_TEST;
 }
 
+int UtcDaliPropertyValueGetVector4FromVector2P(void)
+{
+  Property::Value value( Vector2(-1.f,-3.f) );
+  Vector4 result(99.f,88.f,77.f,66.f);
+  DALI_TEST_EQUALS( Vector4(-1.f,-3.f,0.f,0.f), value.Get< Vector4 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector4(-1.f,-3.f,0.f,0.f), result, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliPropertyValueGetVector4FromVector3P(void)
+{
+  Property::Value value( Vector3(1.f,2.f,-1.f) );
+  Vector4 result(99.f,88.f,77.f,66.f);
+  DALI_TEST_EQUALS( Vector4(1.f,2.f,-1.f,0.f), value.Get< Vector4 >(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Vector4(1.f,2.f,-1.f,0.f), result, TEST_LOCATION );
+  END_TEST;
+}
+
 int UtcDaliPropertyValueGetVector4N(void)
 {
   Property::Value value;
@@ -1064,7 +1104,7 @@ int UtcDaliPropertyValueGetAngleAxisN(void)
   Property::Value value;
   AngleAxis b = value.Get<AngleAxis>();
   AngleAxis result;
-  DALI_TEST_EQUALS( 0.f, b.angle, TEST_LOCATION );
+  DALI_TEST_EQUALS( (Radian)0.f, b.angle, TEST_LOCATION );
   DALI_TEST_EQUALS( Vector3::ZERO, b.axis, TEST_LOCATION );
   DALI_TEST_EQUALS( false, value.Get( result ), TEST_LOCATION );
   DALI_TEST_EQUALS( AngleAxis(), result, TEST_LOCATION );
@@ -1077,25 +1117,33 @@ int UtcDaliPropertyValueGetAngleAxisN(void)
 
 int UtcDaliPropertyValueGetQuaternionP(void)
 {
-  Property::Value value( Quaternion(1.f,2.f,3.f,4.f) );
-  Quaternion result;
-  DALI_TEST_EQUALS( Quaternion(1.f,2.f,3.f,4.f), value.Get< Quaternion >(), TEST_LOCATION );
-  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( Quaternion(1.f,2.f,3.f,4.f), result, TEST_LOCATION );
+  Vector3 axis(1, 1, 0);
+  axis.Normalize();
+
+  Quaternion result( Radian( 1.f ), axis );
+  Property::Value value( result );
+
+  DALI_TEST_EQUALS( result, value.Get< Quaternion >(), TEST_LOCATION );
+  Quaternion test2;
+  DALI_TEST_EQUALS( true, value.Get( test2 ), TEST_LOCATION );
   END_TEST;
 }
 
 int UtcDaliPropertyValueGetQuaternionN(void)
 {
   Property::Value value;
-  Quaternion result(1.f,2.f,3.f,4.f);
+  Vector3 axis(1, 1, 0);
+  axis.Normalize();
+  Quaternion result( Radian( 1.f ), axis );
+  Quaternion test(result);
+
   DALI_TEST_EQUALS( Quaternion(), value.Get< Quaternion >(), TEST_LOCATION );
-  DALI_TEST_EQUALS( false, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( Quaternion(1.f,2.f,3.f,4.f), result, TEST_LOCATION );
+  DALI_TEST_EQUALS( false, value.Get( test ), TEST_LOCATION );
+  DALI_TEST_EQUALS( test, result, TEST_LOCATION );
 
   Property::Value value2("");
-  DALI_TEST_EQUALS( false, value2.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( Quaternion(1.f,2.f,3.f,4.f), result, TEST_LOCATION );
+  DALI_TEST_EQUALS( false, value2.Get( test ), TEST_LOCATION );
+  DALI_TEST_EQUALS( test, result, TEST_LOCATION );
   END_TEST;
 }
 
@@ -1152,11 +1200,11 @@ int UtcDaliPropertyValueGetArrayN(void)
   Property::Array result;
   result.PushBack( Property::Value( 10 ) );
   DALI_TEST_EQUALS( false, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 1, result.Count(), TEST_LOCATION  ); // array is not modified
+  DALI_TEST_EQUALS( 1u, result.Count(), TEST_LOCATION  ); // array is not modified
 
   Property::Value value2("");
   DALI_TEST_EQUALS( false, value2.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 1, result.Count(), TEST_LOCATION  ); // array is not modified
+  DALI_TEST_EQUALS( 1u, result.Count(), TEST_LOCATION  ); // array is not modified
   END_TEST;
 }
 
@@ -1177,15 +1225,40 @@ int UtcDaliPropertyValueGetMapN(void)
 {
   Property::Value value;
   DALI_TEST_CHECK( NULL == value.GetMap() );
-  DALI_TEST_EQUALS( 0, value.Get<Property::Map>().Count(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 0u, value.Get<Property::Map>().Count(), TEST_LOCATION );
   Property::Map result;
   result.Insert("key", "value" );
   DALI_TEST_EQUALS( false, value.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 1, result.Count(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 1u, result.Count(), TEST_LOCATION );
 
   Property::Value value2("");
   DALI_TEST_EQUALS( false, value2.Get( result ), TEST_LOCATION );
-  DALI_TEST_EQUALS( 1, result.Count(), TEST_LOCATION  ); // array is not modified
+  DALI_TEST_EQUALS( 1u, result.Count(), TEST_LOCATION  ); // array is not modified
+  END_TEST;
+}
+
+int UtcDaliPropertyValueGetExtentsP(void)
+{
+  Property::Value value( Extents( 1u, 2u, 3u, 4u ) );
+  Extents result( 4u, 3u, 2u, 1u );
+  DALI_TEST_EQUALS( Extents( 1u, 2u, 3u, 4u ), value.Get<Extents>(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( Extents( 1u, 2u, 3u, 4u ), result, TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliPropertyValueEnum(void)
+{
+  enum class E { zero, e };
+  Property::Value value( E::e );
+  DALI_TEST_EQUALS( static_cast<int>(E::e), static_cast<int>(value.Get<E>()), TEST_LOCATION );
+  DALI_TEST_EQUALS( static_cast<int>(E::e), value.Get<int>(), TEST_LOCATION );
+  E result;
+  DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( static_cast<int>(E::e), static_cast<int>(result), TEST_LOCATION );
+  int result2;
+  DALI_TEST_EQUALS( true, value.Get( result2 ), TEST_LOCATION );
+  DALI_TEST_EQUALS( static_cast<int>(E::e), result2, TEST_LOCATION );
   END_TEST;
 }
 
@@ -1206,7 +1279,7 @@ int UtcDaliPropertyValueOutputStream(void)
     Property::Value empty;
     std::ostringstream stream;
     stream << empty;
-    DALI_TEST_EQUALS( stream.str(), "empty type", TEST_LOCATION );
+    DALI_TEST_EQUALS( stream.str(), "undefined type", TEST_LOCATION );
   }
 
   {
@@ -1231,13 +1304,6 @@ int UtcDaliPropertyValueOutputStream(void)
   }
 
   {
-    value = Property::Value(25U);
-    std::ostringstream stream;
-    stream <<  value;
-    DALI_TEST_CHECK( stream.str() == "25" )
-  }
-
-  {
     value = Property::Value( Vector2(1.f,1.f) );
     std::ostringstream stream;
     stream <<  value;
@@ -1262,14 +1328,14 @@ int UtcDaliPropertyValueOutputStream(void)
     value = Property::Value( Matrix3::IDENTITY );
     std::ostringstream stream;
     stream <<  value;
-    DALI_TEST_CHECK( stream.str() == "[ [1, 0, 0], [0, 1, 0], [0, 0, 1] ]" );
+    DALI_TEST_CHECK( stream.str() == "[ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]" );
   }
 
   {
     value = Property::Value( Matrix::IDENTITY );
     std::ostringstream stream;
     stream <<  value;
-    DALI_TEST_CHECK( stream.str() == "[ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] ]" );
+    DALI_TEST_CHECK( stream.str() == "[ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]" );
   }
 
   {
@@ -1294,20 +1360,59 @@ int UtcDaliPropertyValueOutputStream(void)
     DALI_TEST_CHECK( stream.str() == "Foo" );
   }
 
-  // Maps and arrays currently not supported, we just check a message is output
   {
     Property::Map map;
+    map.Insert("key", "value");
+    map.Insert("duration", 10);
+    map.Insert("color", Vector4(1.0, 0.5, 1.0, 1.0));
+
     value = Property::Value( map );
     std::ostringstream stream;
-    stream <<  value;
-    DALI_TEST_CHECK( !stream.str().empty() );
+    stream << value;
+    tet_printf("Checking Property::Value is %s", stream.str().c_str());
+    DALI_TEST_CHECK( !stream.str().compare("Map(3) = {key:value, duration:10, color:[1, 0.5, 1, 1]}"));
   }
   {
     Property::Array array;
+    array.PushBack(0);
+    array.PushBack(2);
+    array.PushBack(3);
     value = Property::Value( array );
     std::ostringstream stream;
     stream <<  value;
-    DALI_TEST_CHECK( !stream.str().empty() );
+    tet_printf("Checking Property::Value is %s", stream.str().c_str());
+    DALI_TEST_CHECK( !stream.str().compare("Array(3) = [0, 2, 3]") );
+  }
+
+  {
+    Property::Map map;
+    Property::Map map2;
+    Property::Array array;
+
+    map2.Insert("key", "value");
+    map2.Insert("duration", 10);
+    map.Insert("color", Vector4(1.0, 0.5, 1.0, 1.0));
+    map.Insert("timePeriod", map2);
+    array.PushBack(Vector2(1, 0));
+    array.PushBack(Vector2(0, 1));
+    array.PushBack(Vector2(1, 0));
+    array.PushBack(Vector2(0, 0.5));
+    map.Insert("texCoords", array);
+    value = Property::Value( map );
+
+    std::ostringstream stream;
+    stream << value;
+
+    tet_printf("Checking Property::Value is %s", stream.str().c_str());
+
+    DALI_TEST_CHECK( !stream.str().compare("Map(3) = {color:[1, 0.5, 1, 1], timePeriod:Map(2) = {key:value, duration:10}, texCoords:Array(4) = [[1, 0], [0, 1], [1, 0], [0, 0.5]]}"));
+  }
+
+  {
+    value = Property::Value( Extents( 1u, 2u, 3u, 4u ) );
+    std::ostringstream stream;
+    stream <<  value;
+    DALI_TEST_CHECK( stream.str() == "[1, 2, 3, 4]" );
   }
 
   END_TEST;