[Tizen] Implement partial update
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-PropertyArray.cpp
index 84b33d7..7baa2f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 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.
@@ -18,6 +18,7 @@
 #include <iostream>
 
 #include <stdlib.h>
+#include <string>
 #include <dali/public-api/dali-core.h>
 #include <dali-test-suite-utils.h>
 
@@ -48,6 +49,29 @@ int UtcDaliPropertyArrayPushBackP(void)
   END_TEST;
 }
 
+int UtcDaliPropertyArrayAddP(void)
+{
+  Property::Array array;
+
+  DALI_TEST_CHECK( 0 == array.Size() );
+
+  array.Add( 1 );
+
+  DALI_TEST_CHECK( 1 == array.Size() );
+  DALI_TEST_CHECK( array[0].Get<int>() == 1 );
+
+  array.Add( 2 )
+       .Add( 3 )
+       .Add( 4.f );
+
+  DALI_TEST_EQUALS( 4u, array.Size(), TEST_LOCATION );
+  DALI_TEST_EQUALS( array[1].Get<int>(), 2, TEST_LOCATION );
+  DALI_TEST_EQUALS( array[2].Get<int>(), 3, TEST_LOCATION );
+  DALI_TEST_EQUALS( array[3].Get<float>(), 4.f, Math::MACHINE_EPSILON_1, TEST_LOCATION );
+
+  END_TEST;
+}
+
 int UtcDaliPropertyArrayCapacityP(void)
 {
   Property::Array array;
@@ -206,3 +230,158 @@ int UtcDaliPropertyArrayAssignmentOperatorP(void)
 
   END_TEST;
 }
+
+int UtcDaliPropertyArrayResize(void)
+{
+  Property::Array array;
+
+  array.Resize(3);
+  DALI_TEST_CHECK( array.Count() == 3 );
+
+  array.Resize(5);
+  DALI_TEST_CHECK( array.Count() == 5 );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayOstream01(void)
+{
+  std::ostringstream oss;
+
+  Property::Array array;
+  array.PushBack( 0 );
+  array.PushBack( 1 );
+  array.PushBack( 2 );
+
+  oss << array;
+  DALI_TEST_EQUALS( oss.str().compare("Array(3) = [0, 1, 2]"), 0, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayOstream02(void)
+{
+  std::ostringstream oss;
+
+  Property::Array array1;
+  array1.PushBack( 0 );
+  array1.PushBack( 1 );
+  array1.PushBack( 2 );
+
+  Property::Array array2;
+  array2.PushBack(array1);
+  array2.PushBack( 1 );
+  array2.PushBack( 2 );
+
+  oss << array2;
+  DALI_TEST_EQUALS( oss.str().compare("Array(3) = [Array(3) = [0, 1, 2], 1, 2]"), 0, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayCopyConstructor(void)
+{
+  Property::Array array1;
+  array1.PushBack( 0 );
+  array1.PushBack( 1 );
+  array1.PushBack( 2 );
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+
+  Property::Array array2( array1 );
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 3u, array2.Size(), TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayAssignmentOperator(void)
+{
+  Property::Array array1;
+  array1.PushBack( 0 );
+  array1.PushBack( 1 );
+  array1.PushBack( 2 );
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+
+  Property::Array array2;
+  array2.PushBack( 4 );
+  DALI_TEST_EQUALS( 1u, array2.Size(), TEST_LOCATION );
+
+  array2 = array1;
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+  DALI_TEST_EQUALS( 3u, array2.Size(), TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayMoveConstructor(void)
+{
+  Property::Array array1;
+  array1.PushBack( 0 );
+  array1.PushBack( 1 );
+  array1.PushBack( 2 );
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+
+  Property::Array array2( std::move( array1 ) );
+  DALI_TEST_EQUALS( 3u, array2.Size(), TEST_LOCATION );
+
+  // Calling any methods on array1 will debug assert
+  const char * exceptionMessage = "Cannot use an object previously used as an r-value";
+  DALI_TEST_ASSERTION( array1.Count(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.PushBack( Property::Value() ),                exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Count(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Clear(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Reserve( 1 ),                                 exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Resize( 1 ),                                  exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Capacity(),                                   exceptionMessage );
+  DALI_TEST_ASSERTION( array1[ 0 ],                                         exceptionMessage );
+  DALI_TEST_ASSERTION( const_cast< const Property::Array& >( array1 )[ 0 ], exceptionMessage );
+  DALI_TEST_ASSERTION( Property::Array temp; array1 = temp,                 exceptionMessage );
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayMoveAssignmentOperator(void)
+{
+  Property::Array array1;
+  array1.PushBack( 0 );
+  array1.PushBack( 1 );
+  array1.PushBack( 2 );
+  DALI_TEST_EQUALS( 3u, array1.Size(), TEST_LOCATION );
+
+  Property::Array array2;
+  array2.PushBack( 4 );
+  DALI_TEST_EQUALS( 1u, array2.Size(), TEST_LOCATION );
+
+  array2 = std::move( array1 );
+  DALI_TEST_EQUALS( 3u, array2.Size(), TEST_LOCATION );
+
+  // Calling any methods on array1 will debug assert
+  const char * exceptionMessage = "Cannot use an object previously used as an r-value";
+  DALI_TEST_ASSERTION( array1.Count(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.PushBack( Property::Value() ),                exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Count(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Clear(),                                      exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Reserve( 1 ),                                 exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Resize( 1 ),                                  exceptionMessage );
+  DALI_TEST_ASSERTION( array1.Capacity(),                                   exceptionMessage );
+  DALI_TEST_ASSERTION( array1[ 0 ],                                         exceptionMessage );
+  DALI_TEST_ASSERTION( const_cast< const Property::Array& >( array1 )[ 0 ], exceptionMessage );
+  DALI_TEST_ASSERTION( Property::Array temp; array1 = temp,                 exceptionMessage );
+
+  // Self assignemnt
+  array2 = std::move( array2 );
+  DALI_TEST_EQUALS( 3u, array2.Size(), TEST_LOCATION ); // still works, no debug assert
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayInitializerListConstructor(void)
+{
+  Property::Array array{ 1, 2, "hello" };
+  DALI_TEST_EQUALS( 3u, array.Size(), TEST_LOCATION );
+  DALI_TEST_EQUALS( Property::INTEGER, array.GetElementAt( 0 ).GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( Property::INTEGER, array.GetElementAt( 1 ).GetType(), TEST_LOCATION );
+  DALI_TEST_EQUALS( Property::STRING,  array.GetElementAt( 2 ).GetType(), TEST_LOCATION );
+
+  END_TEST;
+}