Refactored more code into Actor::Relayouter
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-PropertyArray.cpp
index 84b33d7..2858170 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
  *
  */
 
-#include <iostream>
-
-#include <stdlib.h>
-#include <dali/public-api/dali-core.h>
 #include <dali-test-suite-utils.h>
+#include <dali/public-api/dali-core.h>
+#include <stdlib.h>
+
+#include <iostream>
+#include <string>
 
 using namespace Dali;
 
@@ -37,13 +38,36 @@ int UtcDaliPropertyArrayPushBackP(void)
 {
   Property::Array array;
 
-  DALI_TEST_CHECK( 0 == array.Size() );
+  DALI_TEST_CHECK(0 == array.Size());
+
+  array.PushBack(1);
+
+  DALI_TEST_CHECK(1 == array.Size());
+
+  DALI_TEST_CHECK(array[0].Get<int>() == 1);
+
+  END_TEST;
+}
+
+int UtcDaliPropertyArrayAddP(void)
+{
+  Property::Array array;
+
+  DALI_TEST_CHECK(0 == array.Size());
 
-  array.PushBack( 1 );
+  array.Add(1);
 
-  DALI_TEST_CHECK( 1 == array.Size() );
+  DALI_TEST_CHECK(1 == array.Size());
+  DALI_TEST_CHECK(array[0].Get<int>() == 1);
 
-  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;
 }
@@ -51,46 +75,46 @@ int UtcDaliPropertyArrayPushBackP(void)
 int UtcDaliPropertyArrayCapacityP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( 3 == array.Capacity() );
+  DALI_TEST_CHECK(3 == array.Capacity());
   END_TEST;
 }
 
 int UtcDaliPropertyArrayReserveP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( 3 == array.Capacity() );
-  DALI_TEST_CHECK( 0 == array.Size() );
+  DALI_TEST_CHECK(3 == array.Capacity());
+  DALI_TEST_CHECK(0 == array.Size());
 
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
   END_TEST;
 }
 
 int UtcDaliPropertyArraySizeP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( 0 == array.Capacity() );
-  DALI_TEST_CHECK( 0 == array.Size() );
+  DALI_TEST_CHECK(0 == array.Capacity());
+  DALI_TEST_CHECK(0 == array.Size());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( 3 == array.Capacity() );
-  DALI_TEST_CHECK( 0 == array.Size() );
+  DALI_TEST_CHECK(3 == array.Capacity());
+  DALI_TEST_CHECK(0 == array.Size());
 
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
 
-  DALI_TEST_CHECK( 3 == array.Size() );
+  DALI_TEST_CHECK(3 == array.Size());
 
   END_TEST;
 }
@@ -98,19 +122,19 @@ int UtcDaliPropertyArraySizeP(void)
 int UtcDaliPropertyArrayCountP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( 0 == array.Capacity() );
-  DALI_TEST_CHECK( 0 == array.Count() );
+  DALI_TEST_CHECK(0 == array.Capacity());
+  DALI_TEST_CHECK(0 == array.Count());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( 3 == array.Capacity() );
-  DALI_TEST_CHECK( 0 == array.Count() );
+  DALI_TEST_CHECK(3 == array.Capacity());
+  DALI_TEST_CHECK(0 == array.Count());
 
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
 
-  DALI_TEST_CHECK( 3 == array.Count() );
+  DALI_TEST_CHECK(3 == array.Count());
 
   END_TEST;
 }
@@ -118,17 +142,17 @@ int UtcDaliPropertyArrayCountP(void)
 int UtcDaliPropertyArrayEmptyP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
 
-  DALI_TEST_CHECK( !array.Empty() );
+  DALI_TEST_CHECK(!array.Empty());
 
   END_TEST;
 }
@@ -136,21 +160,21 @@ int UtcDaliPropertyArrayEmptyP(void)
 int UtcDaliPropertyArrayClearP(void)
 {
   Property::Array array;
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
   array.Reserve(3);
 
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
 
-  DALI_TEST_CHECK( !array.Empty() );
+  DALI_TEST_CHECK(!array.Empty());
 
   array.Clear();
 
-  DALI_TEST_CHECK( array.Empty() );
+  DALI_TEST_CHECK(array.Empty());
 
   END_TEST;
 }
@@ -160,13 +184,13 @@ int UtcDaliPropertyArrayIndexOperatorP(void)
   Property::Array array;
 
   array.Reserve(3);
-  array.PushBack( 1 );
-  array.PushBack( "world" );
-  array.PushBack( 3 );
+  array.PushBack(1);
+  array.PushBack("world");
+  array.PushBack(3);
 
-  DALI_TEST_CHECK( array[0].Get<int>() == 1 );
-  DALI_TEST_CHECK( array[1].Get<std::string>() == "world" );
-  DALI_TEST_CHECK( array[2].Get<int>() == 3 );
+  DALI_TEST_CHECK(array[0].Get<int>() == 1);
+  DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
+  DALI_TEST_CHECK(array[2].Get<int>() == 3);
 
   END_TEST;
 }
@@ -176,15 +200,15 @@ int UtcDaliPropertyArrayConstIndexOperatorP(void)
   Property::Array anArray;
 
   anArray.Reserve(3);
-  anArray.PushBack( 1 );
-  anArray.PushBack( "world" );
-  anArray.PushBack( 3 );
+  anArray.PushBack(1);
+  anArray.PushBack("world");
+  anArray.PushBack(3);
 
   const Property::Array array(anArray);
 
-  DALI_TEST_CHECK( array[0].Get<int>() == 1 );
-  DALI_TEST_CHECK( array[1].Get<std::string>() == "world" );
-  DALI_TEST_CHECK( array[2].Get<int>() == 3 );
+  DALI_TEST_CHECK(array[0].Get<int>() == 1);
+  DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
+  DALI_TEST_CHECK(array[2].Get<int>() == 3);
 
   END_TEST;
 }
@@ -194,15 +218,170 @@ int UtcDaliPropertyArrayAssignmentOperatorP(void)
   Property::Array anArray;
 
   anArray.Reserve(3);
-  anArray.PushBack( 1 );
-  anArray.PushBack( "world" );
-  anArray.PushBack( 3 );
+  anArray.PushBack(1);
+  anArray.PushBack("world");
+  anArray.PushBack(3);
 
   Property::Array array = anArray;
 
-  DALI_TEST_CHECK( array[0].Get<int>() == 1 );
-  DALI_TEST_CHECK( array[1].Get<std::string>() == "world" );
-  DALI_TEST_CHECK( array[2].Get<int>() == 3 );
+  DALI_TEST_CHECK(array[0].Get<int>() == 1);
+  DALI_TEST_CHECK(array[1].Get<std::string>() == "world");
+  DALI_TEST_CHECK(array[2].Get<int>() == 3);
+
+  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;
 }